Selama beberapa tahun, saya mencoba memahami peta normal dan masalah yang biasanya muncul ketika bekerja dengannya.
Sebagian besar penjelasan yang saya temukan terlalu teknis, tidak lengkap, atau terlalu rumit untuk saya pahami, jadi saya memutuskan untuk mencoba menjelaskan informasi yang saya kumpulkan. Saya mengerti bahwa penjelasan ini mungkin tidak lengkap atau tidak sepenuhnya akurat, tetapi saya akan tetap mencoba.
Model 3D buatan manusia pertama terlihat seperti ini:
Ini bagus, tetapi model seperti itu memiliki batasan yang jelas: terlihat terlalu poligonal.
Solusi yang paling jelas: tambahkan lebih banyak poligon, buat permukaan lebih seragam dan halus, hingga poligon muncul sebagai satu permukaan halus. Tetapi ternyata untuk membuat permukaan seperti bola halus, Anda membutuhkan sejumlah besar poligon (terutama hari ini).
Diperlukan solusi yang berbeda, sehingga normals diciptakan. (Itu tidak terjadi seperti itu, tetapi lebih mudah untuk dijelaskan dan dipahami.)
Mari ikuti garis dari pusat poligon tegak lurus ke permukaannya. Kami akan memberikan baris ini nama yang sangat tidak biasa: normal. Tujuan dari normal adalah untuk mengontrol di mana titik-titik permukaan, sehingga ketika cahaya memantul dari permukaan ini, ia dapat menggunakan normal untuk menghitung refleksi yang dihasilkan. Ketika cahaya mengenai poligon, kita membandingkan sudut sinar cahaya dengan normal poligon. Balok dipantulkan pada sudut yang sama relatif terhadap arah normal:

Dengan kata lain, pantulan cahaya akan simetris sehubungan dengan normal poligon. Begitulah cara kerja sebagian besar refleksi di dunia nyata. Secara default, sinar cahaya dipantulkan dari semua poligon yang sepenuhnya tegak lurus ke permukaannya (sebagaimana seharusnya dalam kehidupan nyata), karena normalnya poligon tegak lurus terhadap permukaan poligon secara default. Jika ada celah pada normalnya, maka kita akan melihatnya sebagai permukaan yang terpisah, karena cahayanya akan dipantulkan dalam satu atau arah lainnya.
Jika kedua wajah terhubung, maka kita dapat meminta komputer untuk memperlancar transisi antara normal satu poligon ke yang lain, sehingga normals secara bertahap disejajarkan sesuai dengan normal terdekat dari poligon. Jadi, ketika cahaya mengenai pusat satu poligon, cahaya akan dipantulkan langsung, sesuai dengan arah normal. Tetapi di antara poligon, arah normal ini dihaluskan, mengubah pantulan cahaya.
Kami akan menganggap transisi sebagai satu permukaan tunggal, karena cahaya akan dipantulkan antara satu dan yang lain poligon dengan cara yang halus, dan tidak akan ada celah di antara mereka. Faktanya, cahaya memantulkan poligon ini dengan lancar, seolah-olah kita memiliki banyak poligon.
Inilah yang kami kontrol dengan mengatur kelompok penghalus (Max 3ds, Blender) atau menentukan tepi sebagai keras atau halus (Modo, Maya): kami memberi tahu program mana transisi antara wajah yang harus mulus dan yang harus keras.
Berikut ini adalah perbandingan satu bidang 288 poligon dengan transisi keras dan halus:
Secara potensial, kita dapat menentukan sesuatu seperti parallelepiped sehingga semua simpulnya memiliki rata-rata normal. Editor 3D akan berusaha untuk menghaluskan permukaannya sehingga terlihat seperti permukaan halus tunggal. Untuk editor 3D, ini cukup logis, tetapi terlihat sangat aneh, karena kami memiliki objek yang jelas harus memiliki beberapa permukaan yang terpisah (masing-masing permukaan kotak), namun, program mencoba menunjukkannya sebagai satu permukaan halus.
Itulah sebabnya editor 3D biasanya memiliki parameter untuk sudut pemulusan: jika kita memiliki dua poligon yang terhubung pada sudut yang melebihi sudut pemulusan, maka transisinya akan mulus, dan menghubungkan poligon pada sudut kurang dari sudut pemulusan akan menjadi kaku. Karena ini, sudut curam antara permukaan akan ditampilkan sebagai permukaan yang berbeda, seperti yang terjadi di dunia nyata.
Jadi, kami menggunakan normals untuk mengontrol transisi antara wajah model, tetapi Anda bisa melangkah lebih jauh.
Karena kita mengubah cara cahaya dipantulkan dari suatu objek, kita juga dapat membuat objek yang sangat sederhana memantulkan cahaya sebagai kompleks. Ini disebut peta normal. Kami menggunakan tekstur untuk mengubah arah cahaya yang dipantulkan dari objek 3D, membuatnya terlihat lebih sulit daripada sebenarnya.
Contoh dari dunia nyata adalah hologram yang sebelumnya diberikan sebagai hadiah saat membeli keripik kentang (setidaknya di sini, di Spanyol). Mereka benar-benar datar, tetapi memantulkan cahaya seperti yang dilakukan objek 3D, membuatnya lebih sulit daripada sebenarnya. Dalam dunia grafis 3D, ini bekerja lebih baik, tetapi masih memiliki keterbatasan (karena permukaannya tetap datar).
Meskipun kami menggunakan normal poligon untuk menerapkan semacam sihir hitam, pada kenyataannya, kami tidak mengontrol perataan permukaan model menggunakan normal poligon. Kami menggunakan vertex normals untuk mengontrol smoothing normals. Intinya, idenya sama, tetapi sedikit lebih rumit.
Setiap dhuwur dapat dikaitkan dengan satu atau lebih normals. Jika memiliki satu normal, maka kita dapat menyebutnya normal rata-rata dari titik, dan jika beberapa - maka normal dibagi dari titik tersebut.
Mari kita ambil dua poligon yang terhubung oleh sebuah ujung. Jika transisi antara dua wajah mulus (jika kita tentukan itu mulus di Maya / Modo, atau keduanya memiliki grup smoothing yang sama dalam Max / Blender), maka setiap simpul memiliki satu normal, yang merupakan rata-rata normal dari poligon (itulah sebabnya disebut rata-rata normal dari vertex tersebut) ) Catatan penting: hingga baru-baru ini, setiap editor 3D menggunakan caranya sendiri untuk menghitung rata-rata simpul normal, yaitu, peta normal yang dikomputasi dalam satu program di program lain dapat terlihat sangat berbeda. Saya akan memberi tahu Anda lebih banyak tentang ini di bagian kedua tutorial.
Jika transisi sulit (tepi keras atau kelompok smoothing berbeda), maka setiap simpul memiliki beberapa normals: satu untuk setiap simpul yang terhubung selaras sesuai dengan normalnya. Dalam hal ini, celah terbentuk antara normals, yang terlihat seperti dua permukaan yang berbeda. Inilah yang dinamakan split vertex normal.
Seperti yang Anda duga, kontrol normal vertex sangat penting jika kita ingin mengontrol peta normal. Untungnya, kami tidak harus mengubah normals secara langsung atau bahkan melihatnya, tetapi memahami cara kerjanya akan membantu Anda memahami mengapa kami melakukan pekerjaan ini dan untuk lebih memahami masalah yang mungkin kami temui.
Saat memanggang peta normal, kami pada dasarnya memberitahu program untuk mengubah arah yang diikuti oleh normals dari model lowpoly, sehingga mereka sesuai dengan arah dalam model highpoly; oleh karena itu, model lowpoly akan memantulkan cahaya dengan cara yang sama seperti highpoly. Semua informasi ini disimpan dalam tekstur yang disebut peta normal. Mari kita lihat sebuah contoh.
Katakanlah kita memiliki model low-poly (lowpoly). Permukaan datar empat titik dengan pengaturan UV yang akan digunakan oleh program memanggang untuk membuat peta normal.
Dan dia perlu mendapatkan informasi tentang normals dari model highpoly ini, normals yang lebih rumit.
Ingatlah bahwa kami hanya mentransfer informasi tentang normals, mis. UV, material, topologi, transformasi, dll. tidak relevan Aturan terbukti: jika model highpoly terlihat bagus, maka normalnya juga bagus dan harus cocok untuk dipanggang.
Program memanggang mengambil model lowpoly dan memancarkan sinar mengikuti petunjuk dari lowpoly normals (itulah sebabnya kita perlu mengontrol normalspoly rendah). Sinar ini memiliki panjang yang terbatas sehingga tidak mendapatkan informasi normal dari tepi yang jauh (biasanya jarak ini disebut jarak panggang atau jarak kandang). Ketika sinar ini bertabrakan dengan highpoly, program memanggang menghitung bagaimana memantulkan sinar ini sehingga mereka mengikuti arah normal-highpoly dan menyimpan informasi ini di peta normal.
Berikut adalah hasil memanggang untuk contoh kita:
Kami memiliki tekstur yang digunakan mesin untuk mengubah normals lowpoly sehingga cahaya memantulkan model lowpoly ini seperti halnya dari versi highpoly. Jangan lupa bahwa ini hanya tekstur yang tidak mempengaruhi siluet model lowpoly (tidak mungkin untuk mengubah cara cahaya tercermin dari model jika cahaya tidak jatuh pada model ini).
Meskipun jelas bahwa seseorang dapat "menghitung" tampilan highpoly oleh penampilan peta normal, jelas bahwa peta normal bukan tekstur biasa, karena mereka menyimpan informasi bukan tentang warna, tetapi tentang normal. Ini juga berarti bahwa peta normal tidak dapat dianggap sebagai tekstur biasa; selain itu, seperti yang akan kita lihat, mereka memiliki parameter kompresi dan koreksi gamma khusus.
Anda dapat melihat peta normal sebagai satu set tiga tekstur dalam nuansa abu-abu, disimpan dalam satu gambar:
Gambar pertama memberitahu mesin bagaimana model ini harus mencerminkan insiden cahaya di sebelah kanan; disimpan di saluran merah dari tekstur peta normal.
Gambar kedua memberitahu mesin bagaimana model harus mencerminkan insiden cahaya dari bawah *; disimpan di saluran hijau dari tekstur peta normal.
* Dalam beberapa program, cahaya tidak jatuh dari bawah, tetapi dari atas, yaitu, mungkin ada peta normal "sisi kiri" dan "sisi kanan". Seperti yang akan kita lihat nanti, ini dapat menyebabkan beberapa masalah.
Gambar ketiga memberi tahu mesin bagaimana model harus mencerminkan insiden cahaya dari depan; disimpan di saluran biru dari tekstur peta normal. Karena sebagian besar objek tampak putih ketika diterangi dari depan, peta normal biasanya tampak kebiru-biruan.
Ketika kami menggabungkan ketiga gambar menjadi satu, kami mendapatkan peta yang normal. Ingat bahwa penjelasan ini tidak sepenuhnya benar, tetapi saya berharap ini akan memungkinkan Anda untuk memahami informasi yang tersimpan di dalam peta normal dan lebih memahami apa yang dilakukannya.
Untuk meringkas:
Normal adalah vektor yang digunakan untuk menentukan bagaimana cahaya dipantulkan dari suatu permukaan. Mereka dapat digunakan untuk mengontrol transisi antara wajah (rata-rata normal dari simpul yang terhubung untuk membuat transisi yang mulus atau memisahkan mereka untuk membuat transisi yang kaku), tetapi Anda juga dapat mengubah arahnya sehingga model lowpoly memantulkan cahaya dengan cara yang sama seperti model yang lebih kompleks.
Informasi ini disimpan dalam tiga saluran gambar terpisah, dan editor 3D membacanya untuk memahami ke arah mana permukaan model akan terlihat.
Dalam artikel berikutnya dalam seri ini, kita akan berbicara tentang cara memanggang bagian-bagian ini dari model highpoly menjadi lowpoly.