Dalam permainan, materi seringkali hanya memengaruhi tampilan visual objek. Tampilan visual dipengaruhi oleh shader. Jadi terkait dengan terminologi, apakah ada perbedaan antara bahan dan shader? Haruskah Anda menulis satu shader untuk satu bahan?
shaders
terminology
materials
danijar
sumber
sumber
Jawaban:
Materi adalah kombinasi atribut yang menggambarkan bagaimana permukaan material yang diberikan akan terlihat.
Beberapa mesin menggunakan shader yang berbeda untuk material yang berbeda, dalam hal ini definisi material dapat terlihat seperti ini:
Mesin lain menggunakan satu shader untuk semua objek (atau lebih tepatnya mesin memutuskan shader apa yang akan digunakan tergantung pada parameter, kemampuan GPU dan faktor-faktor lain seperti jarak), dalam hal ini bahan akan terlihat lebih seperti ini:
sumber
Sebuah bahan menspesifikasikan bagaimana suatu objek merespon cahaya.
Ada beberapa parameter umum:
Sekarang katakan Anda memiliki segitiga yang dirender dengan material
M
.M
memiliki Kd = (1,0,0) (respons difus merah), Ks = (1,1,1) (respons specular putih), Ns = 25 (sorotan specular akan cukup tajam dan tidak kabur) dan tidak ada map_Kd ( tidak ada tekstur).Tugas shader adalah menggunakan matematika untuk mengambil posisi puncak segitiga , posisi cahaya, nilai warna material, dan mencari tahu warna apa yang harus ditampilkan segitiga. Vertex shader melakukan "perhitungan bayangan" ini satu kali pada setiap titik dan menginterpolasi warna melintasi segitiga.
Operasi umum dalam shader untuk menghitung respons difus pada titik adalah:
sumber
Materi adalah apa yang Anda terapkan pada geometri untuk memberinya warna dan pola. Tekstur adalah komponen dari suatu bahan.
Shader adalah program kecil yang memungkinkan materi ini dirender saat runtime. Hal yang menyenangkan tentang shader adalah Anda dapat melakukan semuanya mulai dari sekadar merender bahan, hingga menambahkan efek dinamis seperti sorotan specular dan refleksi hingga ke hal-hal yang sangat pintar seperti merender lubang palsu melalui dinding tempat peluru terkena.
jadi dalam menjawab pertanyaan Anda - ya ada perbedaan, ada sedikit tumpang tindih juga - Anda bisa membuat bahan merah atau menulis shader untuk membuat hal-hal menjadi merah, tetapi keduanya juga memungkinkan Anda untuk banyak hal yang Anda tidak bisa dengan yang lain.
dan tidak, Anda tidak perlu satu shader per bahan. meskipun suatu material membutuhkan shader untuk dirender, Anda bisa memiliki satu untuk semua materi Anda jika Anda mau. mereka melakukan hal-hal tertentu jadi jika Anda ingin semuanya mengkilap misalnya, Anda bisa menulisnya.
Sebuah contoh yang bagus tentang shader ada di roda gigi perang. ada satu set bahan untuk adegan itu, tetapi ketika Anda menekan tombol untuk beralih ke tampilan taktis, shader yang membuat materi ini berubah sehingga hal-hal terlihat diuraikan dan umumnya berbeda. Hal yang sama terjadi pada batman: 'mode detektif' Arkarkham.
sumber
Meski terlambat, ada "cheat" yang bisa membantu Anda memahami lebih baik.
Materi adalah segala sesuatu yang melekat pada shader tertentu untuk panggilan draw itu.
Misalnya, dalam jawaban di atas, Anda memiliki bahan ini: [Bahan] Shader = NormalMappedSpecular.glsl Texture1 = Rock.png Texture2 = RockNormal.png Texture3 = RockSpecular.png
yang menerjemahkan bahwa Anda akan merender dengan shader yang melakukan peta normal dan perhitungan specular, dan itu akan menggunakan 3 tekstur di dalam shader itu.
Kemudian, Anda dapat menggunakan kembali shader yang sama, dengan 3 tekstur berbeda lainnya (seperti mobil, carNormal, dan carSpecular), Anda akan melakukan draw draw yang berbeda dengan material yang berbeda, hanya karena Anda mengubah parameter shader.
Secara keseluruhan, materi adalah segala sesuatu yang secara unik membuat panggilan draw menggunakan shader yang sama dengan parameter yang sama (tekstur, seragam, atribut).
Saya harap ini membantu memvisualisasikannya dengan lebih baik
sumber