Peta normal yang ideal untuk Persatuan (dan program lainnya)

... dan cara mencari tahu apa yang salah dengan pipa pembuatan konten Anda.


Katakanlah Anda memiliki model poli tinggi luar biasa yang telah dikerjakan oleh artis, dan Anda ingin memasukkannya ke dalam permainan. Artis menunjukkan screenshot model di programnya dan mereka terlihat luar biasa. Bahkan setelah memanggang peta normal untuk versi rendah-poli, masih terlihat hebat.


Lihat kehebatan model tradisional ini untuk menguji peta normal!

Kemudian artis menempatkannya dalam permainan, dan dia terlihat ... sedikit salah.


Bukankah seharusnya wajah-wajah ini rata?

Permukaannya, yang seharusnya rata, masih sedikit membulat, beberapa bahkan tertekan, dan lebih buruk lagi, garis-garis aneh menyertainya. Situasi yang familier? Beberapa dari Anda mungkin menemukan itu, berpikir: "Yah, mungkin, itu tidak akan berhasil dengan lebih baik", dan melanjutkan. Mungkin sedikit kotoran diterapkan untuk menutupi kasus yang paling parah.

Tetapi sebenarnya ada sesuatu yang salah dengan pipa pembuatan konten Anda. Ini tidak selalu jelas, tetapi masalahnya dapat diselesaikan! *

* Jika Anda berasumsi bahwa dalam beberapa kasus Anda dapat membuat perubahan pada pipa konten.

Kata pengantar


Artikel ini adalah tentang cara mengekspor peta normal yang ideal dari aplikasi lain untuk digunakan di Unity 5.3 dan lebih tinggi. Itu tidak berbicara tentang cara mendapatkan peta normal berkualitas tinggi, ada banyak tutorial lain untuk ini, jadi saya tidak akan menyentuh topik ini.



Dasar ruang tangen


Masalahnya adalah bagaimana peta normal dari ruang singgung bekerja. Secara khusus, bagaimana ruang tangen (atau basis garis singgung) bekerja. Saya tidak akan terlalu jauh ke dalam aspek teknis dari apa yang mereka lakukan. Saya, seperti penulis lain, sudah membicarakan hal ini , tetapi singkatnya, ruang singgung menentukan apa yang harus diwakili oleh orientasi arah pada peta normal. Arah mana pada peta normal sebenarnya "maju", "naik" atau "kanan". Secara kasar, orientasi ini adalah orientasi koordinat UV dari tekstur dan normals dari simpul.

Lebih penting untuk memahami bahwa program yang digunakan untuk memanggang peta normal dari highpoly mesh ke lowpoly mesh harus menghitung ruang singgungnyapersis sama dengan program di mana peta normal akan digunakan . Karena program yang berbeda dapat menggunakan ruang singgung dengan cara yang berbeda, peta yang dipanggang normal untuk sebuah jaring tidak harus sama untuk semua aplikasi. Bahkan untuk aplikasi yang menggunakan ruang singgung yang sama!

Ketahuilah Musuhmu


Kudeta karena kesalahan nyata


Kesalahan paling umum adalah masalah "OpenGL vs Direct3D". Mereka juga disebut peta normal Y + dan Y-. Saya memasukkannya di sini hanya untuk kelengkapan. Kemungkinan besar, sebagian besar orang yang mengalami masalah ini sudah mengetahuinya, atau setidaknya belajar bagaimana menyelesaikannya. Karena peta normal dihasilkan dalam satu orientasi, mereka pada dasarnya tidak berguna untuk digunakan dalam aplikasi yang dirancang untuk menggunakan yang lain.


Peta normal dalam orientasi Direct3D di mesin Unity, yang mengharapkan orientasi OpenGL.Ini

dapat dipahami oleh fakta bahwa pencahayaan tampaknya terbalik atau jatuh dari sisi lain, tetapi hanya dalam beberapa arah pencahayaan. Beberapa sudut atau wajah mungkin terlihat sangat normal hingga Anda memindahkan sumber cahaya.

Dan dengan masalah ini, semuanya cukup jelas. Sebagian besar aplikasi pembuatan peta normal memiliki tombol atau menu besar yang bagus untuk beralih antara opsi orientasi OpenGL / Direct3D atau Y. Cari tahu mana yang digunakan aplikasi target dan buat peta di dalamnya. Unity menggunakan OpenGL dan Y +. Unreal menggunakan Direct3D dan Y-. Ini dapat dipahami dengan jelas dengan melihat tekstur peta normal itu sendiri. Jika tampaknya dalam saluran hijau mereka menyala "dari atas", maka ini adalah orientasi OpenGL. Jika dari bawah, maka ini adalah Direct3D.

Keanehan dengan sRGB


Kesalahan umum lainnya adalah menggunakan tekstur yang ditandai sebagai tekstur sRGB. Ini mengubah cara sampel tekstur GPU, memaksanya untuk mengkonversi nilai warna dari ruang sRGB, dari mana orang biasanya memilih nilai warna, ke ruang warna linier. Untuk peta normal, ini tidak perlu. Jika Anda menetapkan jenis ke "Peta normal" untuk tekstur di Unity, mesin akan secara otomatis menonaktifkan opsi ini, tetapi Anda juga dapat menonaktifkan opsi "sRGB (Tekstur Warna)" secara manual, dan tekstur akan berfungsi sebagai peta normal. Setidaknya di Unity 2017.1 dan yang lebih baru.


Peta normal dengan tipe tekstur default dan sRGB diaktifkan.

Masalah ini dapat dikenali oleh fakta bahwa peta normal sangat bias dalam satu arah. Dalam model ini, hampir setiap wajah tampak seolah diarahkan ke sumber cahaya. Jelas, ini tidak selalu menjadi masalah. Dalam peta normal yang lebih rinci, semua bagian akan merespons pencahayaan dengan hampir benar, tetapi sedikit bergeser ke beberapa sudut. Kadang-kadang terlihat seolah-olah seluruh permukaan mesh terdistorsi.

Terlalu berbeda dengan normal


Masalah umum lainnya adalah penggunaan jerat roti normal yang berbeda dalam aset gim. Seperti halnya garis singgung, agar semuanya berfungsi, mereka harus sama persis . Kesalahan ini sering terjadi jika seniman mengekspor jerat dengan simpul verteks yang salah. Dalam hal ini, aplikasi apa pun yang membuka mesh harus menghitung sendiri. Tidak ada satu cara yang tepat untuk menyelesaikannya, semuanya tergantung pada mesh, jadi pastikan Anda (atau seniman) mengekspor model dengan normals akhir!


Peta normal dipanggang pada jala halus, ditampilkan sebagai jala dengan tepi tajam


Peta normal dipanggang pada jala dengan tepi yang tajam, ditampilkan sebagai jala yang dihaluskan

Ini adalah masalah lain yang mudah dikenali. Jika model harus terlihat seperti memiliki tepi yang tajam, tetapi bayangan menekuk dari tepi ini, maka ini berarti bahwa Anda memanggang peta normal dengan normals yang halus, tetapi mereka diberikan pada mesh dengan tepi yang tajam. Jika bayangan membungkuk ke arah tepi, ini berarti bahwa peta dipanggang dengan tepi yang tajam dan ditampilkan pada tepi yang halus. Bahkan, dalam satu model kedua kasus dapat hadir, karena dimungkinkan untuk menunjukkan kelancaran atau ketajaman tepi individu, dan bahkan tingkat kehalusan. Tetapi pada kenyataannya, mereka dijamin salah jika Anda mengizinkan aplikasi lain untuk menebak bagaimana seharusnya. Model yang disajikan di atas adalah kasus yang ekstrem, dan seringkali semuanya tidak begitu jelas, karena sebagian besar model mungkin terlihat sangat normal. Namun dalam kasus umum,jika Anda memiliki beberapa tepi yang terlihat sangat aneh, maka ini mungkin disebabkan oleh ketidakcocokan dalam vertex normals.

MikkTSpace vs Autodesk


Masalah yang kurang terlihat adalah ketika memanggang 3ds Max atau peta normal Maya, mereka akan selalu salah dalam mesin Unity. Mereka akan salah di Unreal, dan di hampir semua program lain, kecuali untuk yang di mana mereka dipanggang. 3ds Maks peta normal tidak berfungsi di Maya, dan sebaliknya! Masing-masing aplikasi ini menghitung ruang singgung dengan caranya sendiri yang unik, yang tidak sesuai dengan aplikasi lain. Ketika digunakan secara independen, mereka terlihat sempurna , dan jika Anda menghasilkan peta normal untuk digunakan dalam program ini, maka cobalah memanggang peta normal di dalamnya. Hampir tidak ada program lain yang mampu memanggang peta normal yang benar untuk aplikasi ini, sehingga Anda tampaknya tidak punya pilihan.

Satu-satunya solusi dalam hal ini adalah tidak memanggang peta normal dengan aplikasi ini jika Anda ingin menggunakannya di tempat lain. Jika Anda memerlukan program gratis, gunakan xNormal . Ini adalah alat standar industri. Jika Anda menggunakan Substance di suatu tempat di dalam pipa pembuatan konten, gunakan itu.


3ds Max membuat peta normal yang digunakan oleh Unity Cara

termudah untuk memperhatikan masalah ini adalah dengan melihat bahwa permukaan datar memiliki penyok kecil atau lengkungan. Dalam beberapa kasus, ini bisa sangat tidak mencolok, terutama pada benda-benda organik. Karena itu, masalah seperti ini sering kali tidak diperhatikan.

Banyak aplikasi non-Autodesk telah beralih ke metode perhitungan ruang singgung yang disebut MikkTSpace.. Baik xNormal dan Substance, serta Blender, Unity, Unreal, Godot, Marmoset, Houdini, Modo dan beberapa lainnya, secara default menggunakan MikkTSpace atau setidaknya entah bagaimana mendukungnya, yang sangat meningkatkan kompatibilitasnya. Bahkan, selama sepuluh tahun terakhir, ini sebenarnya telah menjadi standar industri dalam semua kasus ketika peta normal ruang singgung digunakan. Agaknya, pada titik tertentu, 3ds Max akan menambahkan dukungan mereka, tetapi tidak jelas apakah pengembang berencana untuk mengizinkan memetakan peta normal menggunakan MikkTSpace atau hanya menyediakan dukungan untuk melihat / rendering dengan bantuan mereka.

Jaring Ekspor dan Pelukis Zat


Masalah lain dengan 3ds Max dan Maya adalah ketika mengekspor jerat dari mereka ada opsi ekspor dengan "garis singgung dan binormal". Mereka tidak akan berada dalam garis singgung sebenarnya dari MikkTSpace, tetapi akan didasarkan pada mereka. Beberapa aplikasi memaksa perhitungan ulang standar MikkTSpace yang benar (misalnya, xNormal, Unity, dan Unreal), tetapi aplikasi lain menggunakan jerat tangen (jika ada) "sebagaimana adanya" dan menghitung MikkTSpace hanya jika mesh tidak memiliki garis singgung. Sebagai contoh, Pelukis Substance menggunakan jerat tangen jika mereka hadir sebagaimana adanya, yaitu, Painter membuat peta normal sangat mirip dengan Max 3ds yang dipanggang! Mirip, tetapi tidak persis sama, jadi jika Anda mengimpornya kembali ke 3ds Max, mereka tidak akan sebagus dipanggang di Max.

MikkTSpace vs MikkTSpace?


Masalah selanjutnya adalah ada lebih dari satu versi MikkTSpace! Ya, itu tidak akan menjadi standar jika entah bagaimana itu tidak menimbulkan kebingungan. MikkTSpace menentukan bagaimana data harus disimpan dalam mesh untuk setiap titik, dan bagaimana data digunakan untuk rendering. Semua aplikasi yang diaktifkan MikkTSpace menghitung data mesh yang sama untuk simpul. Tetapi ada dua cara berbeda untuk menggunakan data ini dalam rendering. MikkTSpace mendefinisikan cara menghitung vektor tangen dan menandatangani untuk setiap titik berdasarkan orientasi UV. Tetapi ketika menggunakan ruang tangen, garis singgung ke dua titik (bitangent) dihitung ulang baik untuk setiap titik atau untuk setiap piksel. Parameter ini juga harus sama untuk memanggang dan melihat.

xNormal dan Substance memiliki opsi untuk memanggang peta normal menggunakan kedua metode. Opsi-opsi ini disebut "compute tangent space per fragment" di Substance dan "compute binormal dalam pixel shader" di xNormal. Anda tidak perlu menggunakannya jika Anda memanggang untuk metode render Unity bawaan. Namun, mungkin layak melakukan ini untuk SRP, tergantung pada jenis yang Anda pilih!


XNormal "pixel shader binormals" dengan built-in forward renderer Unity

Visual, ini terlihat seperti menggunakan ruang singgung yang sama sekali berbeda, tetapi biasanya jauh lebih jelas. Beberapa wajah mungkin terlihat seperti normal sedikit terdistorsi, dan tidak akan memiliki penyok besar. Solusinya di sini sangat sederhana - jangan pilih opsi ini jika Anda membuat metode render bawaan Unity. Centang kotak jika Anda memanggang mesin Unreal atau Unity untuk HDRP.

Banyak sumber mengatakan bahwa Blender dan Persatuan itu identik, tetapi pada kenyataannya ini tidak pernah benar! Blender, seperti Unity, menggunakan orientasi MikkTSpace dan OpenGL, tetapi, seperti Unreal, menggunakan binormals untuk setiap binomals fragmen.

Berita baiknya adalah bahwa sekarang shader LWRP, URP dan Shader Graph menggunakan binormals untuk setiap vertex, dan shader HDRP bawaan untuk setiap piksel. Dalam pembaruan Shader Graph (7.2.0) di masa mendatang, transisi ke komputasi piksel-demi-piksel akan dilakukan, dan setelah beberapa waktu, shader URP bawaan juga akan beralih ke itu. Dan metode rendering standar dapat diubah menggunakan shader Anda sendiri, jika Anda memilih rute seperti itu.

Triangulasi, triangulasi, triangulasi!


Masalah terakhir adalah berbagai cara triangulasi. Jika Anda mengekspor jerat tanpa triangulasi awal, maka tidak ada jaminan bahwa aplikasi lain akan melakukan triangulasi model dengan cara yang sama. Ini juga membahayakan peta normal! Oleh karena itu, triangulasi jerat, baik menggunakan opsi ekspor, atau melalui pengubah triangulasi.


Substance Painter , Unity , 3ds Max (quads)

Ini tampak sangat mirip dengan ruang singgung yang sepenuhnya salah, seolah-olah peta normal dipanggang dalam 3ds Max. Tetapi dalam kasus umum, mereka sedikit lebih tajam, hampir bengkok, dan tidak terlihat seperti cekungan halus. Dalam mesh ini, bentuk-X terlihat di permukaan luar. Masalah ini bisa menjadi sulit dan menjengkelkan ketika beberapa orang bekerja dengan model dalam pipa produksi konten dalam aplikasi yang berbeda, karena seringkali berguna untuk tidak melakukan pelacakan segitiga dan menyimpan poligon yang indah. Dalam hal ini, Anda harus berdamai dengan ketidaknyamanan, atau membuat alat terakhir dalam pipa sebelum mengekspor model ke permainan juga digunakan untuk menghasilkan mesh yang digunakan untuk memanggang normals. Seperti ruang singgung dengan normals dari simpul (yang merupakan bagian dari ruang singgung),triangulasi juga harus sama persis.

Daftar untuk membuat peta normal sempurna untuk Unity


Jadi, berikut adalah tips untuk membuat peta normal ruang singgung untuk jerat lowpoly dari model highpoly asli untuk digunakan di Unity:

  • Tidak perlu memanggang peta normal menggunakan 3ds Max, Maya atau aplikasi lain yang tidak memiliki opsi singgung MikkTSpace .
  • Ekspor jerat sebagai segitiga , dengan normal , dan tanpa garis singgung.
  • Pilih OpenGL atau X + Y + Z + sebagai orientasi peta normal saat memanggang (serta saat membuat proyek untuk Pelukis Substance).
  • Anda tidak perlu mengaktifkan opsi garis singgung ke dua titik " per piksel " / " per fragmen " saat memanggang untuk metode render bawaan (proaktif atau ditangguhkan) atau LWRP.
  • Termasuk pilihan untuk garis singgung ke dua “per pixel” / “per fragmen” poinsaat memanggang untuk HDRP, dan segera untuk URP.
  • Biarkan opsi impor model default untuk Unity, dengan normals diatur ke "Impor" dan garis singgung ke "Calculate Mikktspace".

Itu saja! Setiap kali Anda mendapatkan peta normal yang dipanggang dengan sempurna!


Hore! Peta normal yang sempurna!


... dengan refleksi? Ahem ..

Nah, yang terakhir, kita abaikan saja. Sebagai "sempurna" mungkin dengan format tekstur terkompresi dengan 8 bit per saluran. Peta normal dithering mungkin terlihat sedikit lebih baik daripada garis, tetapi, sayangnya, tidak banyak alat yang menyediakan opsi ini. Jika tidak, Anda dapat menggunakan peta normal 16-bit. Tapi ini topik untuk artikel lain.

Pelajari lebih lanjut tentang MikkTSpace.


Situs semi-resmi mikktspace.com menjelaskan manfaat utama MikkTSpace dengan baik. Secara khusus, ruang ini bekerja dengan baik untuk penghitungan ulang dan untuk mentransfer data singgung antara program dengan pemrosesan jala yang berbeda, sambil mempertahankan integritas hasil. Teks situs adalah salinan dari halaman wiki Blender yang sudah tidak ada yang ditulis oleh Morten S. Mikkelsen sendiri. Sayangnya, itu hanya menyebutkan versi dengan garis singgung ke dua titik untuk setiap piksel, tetapi bukan versi untuk setiap titik, standar yang digunakan oleh Unity dan xNormal. Karena Blender menggunakan turunan dari garis singgung per-piksel, logis bahwa hanya mereka yang disebutkan.

Berikut adalah komentar tentang dua opsi ini dari file mikktspace.h asli :

, /.

bitangent = fSign * cross(vN, tangent);



(/ ) , .

, , , «» , : vT, vB vN.

( )

vNout = normalize( vNt.x * vT + vNt.y * vB + vNt.z * vN );

vNt — . «» , , .



, , , .

Jadi, dalam contoh asli, garis singgung ke dua titik dibuat kembali di vertex shader dan diteruskan ke pixel shader sebagai nilai interpolasi lainnya. Ini adalah bagaimana Unity shader normal saat ini menangani peta normal. Contoh melakukan tugas ini dalam pixel shader lebih merupakan contoh dadakan daripada contoh “utama”. Selain itu, sejak implementasi untuk Unity 5.3 (dan xNormal?) Dibuat oleh Morten S. Mikkelsen sendiri, dan keduanya menggunakan garis singgung untuk setiap titik, ini adalah bukti lain dari teori kami. Tapi kemudian Blender menggunakan garis singgung piksel demi piksel, dan Morten juga terlibat. Mungkin, pada kenyataannya, itu hanya sebuah opsi yang menyebabkan perubahan kecil pada shader Unity yang telah jadi, dan sementara untuk grafik waktu nyata, tidak ada metode yang dianggap jauh lebih baik daripada yang lain.

Keuntungan implementasi pixel-by-pixel adalah penghapusan dua nilai yang diinterpolasi dengan biaya sedikit biaya tambahan untuk ALU (pixel shader math). Ini berarti bahwa alih-alih ketiga nilai Vector3 (garis singgung, garis singgung ke dua titik dan normal), kita hanya perlu Vector4 dan Vector3 (garis singgung dengan tanda dan normal). Pada GPU modern, ini sedikit lebih cepat. Dan itu jelas lebih cepat dalam kinerja CPU, karena tidak dapat digunakan untuk penyaji waktu nyata. Dari sudut pandang ini, adalah logis bahwa sebagian besar industri memutuskan untuk membuat ulang garis singgung menjadi dua titik dalam piksel, dan bukan di atas.

Lucu ketika saya menulis artikel ini, Morten mempromosikan transisi dalam Unity SRP ke pixel dengan garis singgung pixel ke dua titik! Ini hanya nasib buruk bahwa metode render bawaan Unity memiliki warisan pilihan yang tidak nyaman.



Ruang singgung dalam aplikasi yang berbeda


Meskipun artikel ini berfokus terutama pada Unity, karena hari ini mesin ini telah menjadi arus utama, saya ingin studi saya lebih rinci. Oleh karena itu, saya membuat daftar berbagai aplikasi dengan informasi tentang penggunaan ruang singgung.

Persatuan (5.3+)


Orientasi: OpenGL Y +
ruang singgung: MikkTSpace
Perhitungan garis singgung ke dua titik untuk MikkTSpace: untuk simpul atau untuk piksel *

Catatan:secara default, mesin secara paksa mendefinisikan ulang garis singgung mesh setelah impor untuk menggunakan MikkTSpace. Untuk pengguna tingkat lanjut, ia memiliki opsi untuk menggunakan tangent mesh, tetapi ini tidak menjamin kompatibilitas dengan peta normal yang dipanggang di alat lain, terutama saat menggunakan shader bawaan. Mereka dapat diganti dengan shader sepenuhnya sendiri. Dan untuk shader bawaannya, HDRP menggunakan garis singgung piksel demi piksel ke dua titik. Pada saat penulisan, direncanakan bahwa shader Grafik URP dan Shader juga akan beralih ke garis singgung piksel demi piksel menjadi dua titik. Sebelum ke Unity 5.3, mesin menggunakan garis singgung Lengyel , yang masih dapat digunakan dengan memilih opsi Tangents Legacy pada importir mesh, tetapi shader bawaan tidak lagi mendukung ruang singgung ini.

Tambahan: sebelum URP 7.2.0 pemrosesan peta normal di Shader Graph benar-benar rusak! Baik MikkTSpace atau bahkan ruang singgung Lengyel digunakan dengan benar, dan tidak mungkin untuk memperbaikinya di dalam Grafik Shader. Jika memungkinkan, tingkatkan ke 7.2.0.

Mesin tidak nyata 4


Orientasi: Direct3D Y-
Ruang singgung: MikkTSpace
Penghitungan garis singgung ke dua titik untuk MikkTSpace: piksel demi piksel
Catatan: secara default, mesin mendefinisikan ulang garis singgung dari jala ketika mengimpor menggunakan MikkTSpace. Untuk pengguna tingkat lanjut, ini memiliki opsi untuk menggunakan tangent mesh, tetapi ini tidak menjamin kompatibilitas dengan peta normal yang dipanggang di alat lain.

Godot


Orientasi: OpenGL Y +
ruang singgung: MikkTSpace
Penghitungan garis singgung ke dua titik untuk MikkTSpace: untuk setiap simpul
Catatan: jika tidak ada data singgung, itu dapat menghitung jerat tangen di MikkTSpace setelah impor. Dokumentasi mesin menyarankan mengekspor mesh singgung tangen, tetapi karena sebagian besar alat tidak mengekspor mesh singgung yang benar, saya akan mengabaikan tip ini. Bahkan jika Anda menggunakan mesh singgung asli, tidak ada jaminan bahwa peta normal akan terlihat benar.

Playcanvas


Orientasi: OpenGL Y +
ruang tangen : Lengyel / Schüler *
Penghitungan tangen ke dua titik: untuk setiap titik / berdasarkan turunan
Catatan: menyediakan beberapa metode untuk memproses ruang tangen. Kode tangen yang dihasilkan tidak menggunakan MikkTSpace. Ini memiliki opsi untuk menggunakan garis singgung ke dua titik untuk setiap titik yang baik menormalkan vektor ruang singgung dalam shader pixel "fastTbn" tanpa menormalkan ruang singgung dalam shader fragmen (yang kita butuhkan, karena ini sesuai dengan implementasi MikkTSpace dengan perhitungan untuk setiap titik), atau mereka menggunakan TBN berbasis turunan, yang dipinjam dari Christian Schuler ; itu benar-benar mengabaikan garis singgung mesh dan menghitung ruang singgung dalam pixel shader. Sekarang, secara default, peta normal berbasis turunan digunakan, yang, sejauh yang saya tahu, tidak ada alat untuk membuat peta normal yang tepat. Ada kemungkinan bahwa Anda dapat mengimpor jerat dengan normal dan data singgung yang ada dari MikkTSpace, dan kemudian menggunakan opsi materi "fastTbn" untuk mencocokkan metode render bawaan Unity, tapi saya percaya ini harus dilakukan dalam kode, bukan melalui antarmuka editor.

Filamen


Orientasi: OpenGL Y +
Ruang tangen : MikkTSpace
Penghitungan garis singgung ke dua titik untuk MikkTSpace: untuk setiap titik
Catatan: tergantung pada kinerja di masa depan, mesin dapat beralih ke garis singgung piksel demi piksel ke dua titik.

3ds maks


Orientasi: Direct3D Y- *
Ruang singgung:
opsi ekspor Mesh asli : ekspor file FBX dengan Triangulasi diaktifkan tetapi Tangen dan Binormal dimatikan. Normals harus selalu diekspor. Split per-vertex Normals dapat dibiarkan dinonaktifkan.
Catatan: Secara default, 3ds Max mengasumsikan bahwa orientasi Direct3D digunakan dalam peta normal, tetapi memiliki opsi untuk membalikkan orientasi X dan Y saat menggunakan tekstur peta normal pada material. Memanggang selalu menggunakan orientasi Direct3D. Dukungan MikkTSpace akan muncul di versi mendatang.

Maya


Orientasi: OpenGL Y +
Ruang tangen:
opsi ekspor Mesh asli : ekspor file FBX dengan Triangulasi dihidupkan, tetapi Tangen dan Binormal dimatikan. Biasanya selalu diekspor. Split per-vertex Normals dapat dibiarkan dinonaktifkan.
Catatan: beberapa orang mengatakan kepada saya bahwa Maya sebagian sudah mendukung MikkTSpace, tetapi saya tidak tahu sampai sejauh mana.

Blender (2.57+)


Orientasi: OpenGL Y +
Ruang tangen : MikkTSpace
Perhitungan garis singgung ke dua titik untuk MikkTSpace: untuk setiap piksel
Opsi ekspor jala : ekspor file FBX dengan nilai smoothing "Normals Only". Anda dapat mengekspor dengan atau tanpa Tangent Space jika aplikasi target juga menggunakan MikkTSpace, seperti Unity atau Unreal.
Catatan: Blender tidak memiliki opsi triangulasi saat mengekspor ke FBX, jadi gunakan pengubah triangulasi terlebih dahulu. Peta normal yang dipanggang di Blender tidak akan 100% kompatibel dengan Unity, tetapi jika Anda membalikkan saluran hijau di aplikasi pihak ketiga atau dalam materi yang disesuaikan, maka mereka berfungsi dengan sempurna di Unreal.

xNormal (3.17.5+)


Orientasi: custom
Tangent space: MikkTSpace *
Perhitungan garis singgung ke dua titik untuk MikkTSpace: custom (untuk setiap dhuwur atau piksel)
Pilihan untuk memanggang peta normal:memiliki opsi untuk membalik ketiga sumbu peta normal selama ekspor. Persatuan membutuhkan X + Y + Z +. Ada juga opsi untuk menggunakan garis singgung ke dua titik untuk setiap dhuwur atau piksel (mis. Fragmen). Secara default, xNormal menggunakan garis singgung ke dua titik untuk setiap titik, tetapi ini dapat diubah dalam menu Plugins Manager (ikon steker daya di sudut kiri bawah) dengan mengklik "Kalkulator basis tangen", "Mikk - TSpace" dan mengklik Konfigurasi. Jendela pop-up akan muncul dengan satu-satunya opsi "Hitung binormal di pixel shader". Itu harus dimatikan untuk Unity dan dihidupkan untuk Unreal.
Catatan:walaupun xNormal hanya mendukung MikkTSpace, sistem pluginnya secara teoritis mendukung ruang singgung apa pun. Sejauh ini, satu-satunya plugin ruang singgung yang saya tahu dirancang untuk memanggang ruang singgung 4 Unity dan sudah tidak berguna. Artinya, jika didekati secara realistis, aplikasi hanya mendukung MikkTSpace.

Pelukis zat


Orientasi: dapat disesuaikan (OpenGL atau Direct3D)
Ruang singgung: MikkTSpace
Penghitungan garis singgung ke dua titik untuk MikkTSpace: dapat disesuaikan (untuk simpul atau piksel)
Opsi memanggang untuk peta normal: memiliki opsi memanggang dalam orientasi OpenGL atau Direct3D. Dan opsi untuk menggunakan garis singgung ke dua titik untuk setiap titik atau piksel (fragmen), yang dikonfigurasi oleh parameter "Hitung ruang tangen per fragmen". Saat mengekspor untuk metode rendering Persatuan bawaan, Anda perlu memilih OpenGL dan menonaktifkan Compute tangent space per fragmen dalam proyek dan opsi ekspor, dan ketika mengekspor ke Unreal atau Unity HDRP, lakukan yang sebaliknya.
Catatan:Pelukis Substance secara default menggunakan data tangen yang digunakan mesh impor. Kecuali Anda mengekspor dari Blender, Anda tidak membutuhkannya! Tetapi tidak ada opsi untuk menonaktifkan fitur ini. Sebelum mengimpor ke Substance Painter, ekspor jerat tanpa garis singgung. Sebelumnya dalam dokumentasi Substansi, secara keliru diklaim bahwa perhitungan garis singgung ke dua titik
di Blender sesuai dengan Persatuan, tetapi sekarang kesalahan telah diperbaiki!

Tas Alat Marmoset 3


Orientasi: custom
Ruang
tangen : kustom Perhitungan garis singgung ke dua titik untuk MikkTSpace: piksel demi piksel
Catatan: sepertinya program memiliki opsi untuk melihat atau membuat peta normal di hampir semua konfigurasi yang ada. Termasuk pengaturan siap pakai untuk ruang singgung 3ds Max dan Maya! Namun, opsi ruang singgung "Mikk / xNormal" menggunakan garis singgung piksel demi piksel ke dua titik, dan ini tidak dapat diubah. Yaitu, Marmoset Toolbag 3 tidak dapat dengan benar melihat atau memanggang peta normal untuk metode render Persatuan bawaan. Mungkin dalam versi yang akan datang situasinya akan berubah, karena pengembang menyadari masalahnya.

3DCoat


Orientasi: kustom
ruang Tangent: kustom
Perhitungan garis singgung dua poin untuk MikkTSpace :?
Catatan: Ini memiliki banyak pilihan untuk melihat dan memanggang peta normal. Ini benar-benar mampu mencocokkan Blender dan UE4, karena itu mendukung garis singgung piksel demi piksel ke dua titik, tetapi saya tidak tahu apakah garis singgung titik ke dua titik digunakan dalam preset Unity.

Houdini (16.0.514+)


Orientasi: disesuaikan
ruang Tangent: disesuaikan *
Perhitungan garis singgung dua poin untuk MikkTSpace: pixel dengan pixel
Catatan: mendukung secara sendiri garis singgung atau MikkTSpace, baik untuk melihat dan untuk memanggang, tetapi hanya dalam versi pixel-by-pixel. Tampaknya secara default tidak menggunakan MikkTSpace untuk rendering, tetapi dimulai dengan Houdini 17.5. Jerat dapat dimodifikasi dengan node bawaan untuk menggunakan tangen MikkTSpace.

Modo (10+?)


Orientasi: custom
Tangent space: custom
Penghitungan garis singgung dua titik untuk MikkTSpace: custom (vertex atau pixel-by-pixel) *
Catatan: sepertinya mendukung render dan memanggang di ruang singgung yang berbeda, serta opsi garis singgung pixel-by-pixel ke dua titik untuk ekspor. Saya belum menguji ini.

Knald


Orientasi:
ruang tangen yang dapat disesuaikan : MikkTSpace
Menghitung garis singgung ke dua titik untuk MikkTSpace: per-pixel
Catatan: Penggunaan default MikkTSpace dan tangen menimpa jerat yang diimpor, tetapi ada opsi untuk menggunakan mesh tangensial yang ada jika perlu. Orientasi peta normal dapat dibalik dengan parameter yang berlaku untuk seluruh proyek.



Akhirnya


Aspek penting adalah bahwa jika model rendah-poli di mana Anda memanggang hanya sebuah bidang (misalnya, untuk tekstur ubin), maka semua yang ditulis tidak penting dan Anda dapat memanggang menggunakan alat apa pun ... jika Anda hanya menyimpan semuanya dalam orientasi yang benar atau kemudian balikkan saluran tekstur yang sesuai.

Selain itu, sebagian besar masalah yang tercantum dalam artikel hanya terlihat pada model solid. Bentuk organik dapat menyembunyikan perbedaan paling halus, misalnya, perbedaan antara garis singgung dan piksel demi piksel hingga dua titik.

Source: https://habr.com/ru/post/undefined/


All Articles