Bagaimana saya bisa membuat shader yang akan mereproduksi efek pencahayaan ini di medan?

8

Lihat cahaya yang jatuh dari collonade ke batu paving reflektif

Perhatikan bagaimana refleksi terkuat di mana sudut antara matahari, tanah dan pandangan paling tajam

Perhatikan cara di mana sumber cahaya utama di setiap gambar memantul dari tanah, sebagai fungsi jarak antara sumber cahaya dan penampil (?).

Apakah ini peta specular (terbentur)? Efeknya terlihat di seluruh World of Warcraft; Saya secara khusus mengingatnya di salju di Dun Morogh, dan di tepi danau Darrowmere. Melihat langsung ke matahari diperlukan. Efeknya juga umumnya pada permukaan air di RL dan di CG. Secara khusus, saya ingin membangun efek di mana pantulan lebih intens pada permukaan tanah lebih dekat ke sumber cahaya, dan jatuh ketika mendekati penonton.

Insinyur
sumber
2
phong di permukaan benjolan yang dipetakan
ratchet freak

Jawaban:

14

Saya membayangkan jika saya akan membangun shader seperti itu, ada beberapa fenomena tertentu yang akan saya mulai.

Pertama, sinar matahari adalah directional, artinya ia tidak memiliki posisi atau redaman.

Kedua komponen difus hanya dihitung dengan mengambil produk titik antara arah matahari dan normals permukaan, menambahkan pemetaan normal dapat menambah detail.

Bagian yang sulit adalah memodelkan komponen specular directional matahari. Jadi untuk mencapai efek serupa saya akan memecahnya menjadi masalah yang lebih kecil:

  • Yang pertama adalah microfacets dari permukaan yang dapat disimulasikan menggunakan variasi bump atau pemetaan normal, ini dapat diterapkan pada komponen difus dan specular.
  • Bagian kedua adalah distribusi pencahayaan specular yang tidak merata. Ini dapat dilakukan dengan menggunakan semacam peta specular.
  • Sekarang bagian yang paling sulit adalah peta specular terarah yang dapat dicapai dengan menggunakan model pencahayaan Anisotropik Ward , yang memberi Anda dua parameter untuk mengontrol anisotropi dari refleksi specular, yaitu Ax, Aydalam persamaan Ward berikut.

Persamaan Ward

Dimana:

  • Istilah specular adalah nol jika titik ( N , L ) <0 atau titik ( N , R ) <0.
  • Vektor R adalah refleksi cermin dari vektor cahaya dari permukaan.
  • L adalah arah dari titik permukaan ke cahaya.
  • H adalah arah setengah sudut.
  • N adalah permukaan normal.
  • X dan Y adalah dua vektor ortogonal dalam bidang normal yang menentukan arah anisotropik, vektor garis singgung dan bitangen dapat digunakan sebagai X,Yvektor, terutama bahwa ruang singgung sangat umum dalam grafik komputer yang dapat dihitung dalam mesin apa pun (biasanya dihitung berdasarkan pada tekstur coords).

masukkan deskripsi gambar di sini

Perhatikan dalam gambar, bagaimana pencahayaan specular terarah tidak seperti cahaya specular Phong yang umum. Berikut adalah artikel tentang model Ward dan cara mencapai efek yang berbeda. EDIT Informasi lebih lanjut tentang kesesuaian BRDF dalam hal mengurangi intensitas cahaya lebih dekat ke penonton, dapat ditemukan di sini .

Ward Anisotropic Specular

Akhirnya satu lagi (opsional) dua poin yang saya kira bisa menambah gambar akhir,

  • Pertama saya yakin menggunakan oklusi ambien akan membantu mendapatkan hasil yang lebih dapat dipercaya.
  • Yang kedua adalah bahwa menerapkan semacam refleksi Fresnel dapat menambah efek yang bagus pada gambar, terutama dalam adegan air dan es.
concept3d
sumber
1
+1 Jawaban yang baik concept3d, dan saya sedikit menyesal Anda telah berusaha keras untuk menuliskannya - @JoshPetrie memodifikasi judul pertanyaan saya dari "APA (apakah ini shader)" menjadi "BAGAIMANA (bagaimana saya membuatnya) ". Jadi usaha Anda mungkin agak sia-sia, namun tampaknya telah melakukan hal-hal baik untuk perwakilan Anda, dan itu adalah sumber yang bagus.
Insinyur
@NickWiggill tidak masalah, itu akan tetap di sini sebagai sumber daya yang baik :)
concept3d
@JoshPetrie walaupun edit entah bagaimana membatalkan jawaban saya, pertanyaan dalam bentuk saat ini sedikit lebih masuk akal.
concept3d
1
Aku akan menerima milikmu sebagai gantinya. Alasannya adalah karena Anda menyebutkan BRDF dan itu persis seperti konsep yang saya pikirkan, dan setelah membacanya, saya dapat melihat bahwa inilah yang saya butuhkan. Saya telah mengedit jawaban Anda dengan lebih detail di BRDF.
Insinyur
1
@NickWiggill Terima kasih telah menambahkan lebih detail. Info lebih lanjut tidak pernah buruk :)
concept3d
3

Refleksi itu sendiri hanyalah refleksi specular yang Anda dapatkan sebagai output dari fungsi model iluminasi spesifik Anda.

Ada banyak model iluminasi yang berbeda dari berbagai tingkat kompleksitas yang akan menghasilkan bentuk refleksi yang mirip dengan ini, tetapi tampilan yang mirip dengan ini sudah dapat dicapai dengan model pencahayaan blinn-phong tulang telanjang sederhana , yang (sekarang) mungkin yang paling model pencahayaan dasar yang digunakan oleh mesin grafis, dan kemungkinan besar juga digunakan oleh World of Warcraft.

Ini tidak akan benar secara fisik dan sepenuhnya sama dengan gambar Anda, tetapi akan terlihat sangat mirip . Contoh Concept3D tentang model Ward lebih benar secara fisik dan berfungsi untuk jenis permukaan yang lebih kompleks (yaitu, bahan yang gundukan mikroskopis pada permukaannya tidak terdistribusi secara seragam, tetapi memiliki distribusi probabilitas yang berbeda), tetapi saya tidak tahu contoh konkretnya. penyaji waktu nyata yang menggunakannya, karena perolehan yang buruk dalam hal kualitas / kinerja.

Dalam praktiknya, jenis pantulan pada permukaan tersebut dilengkapi dengan specular / gloss tambahan dan tekstur normal, yang memodifikasi kekasaran / kekasaran suatu permukaan, dan masing-masing arah normal permukaan, yang keduanya merupakan input untuk persamaan pencahayaan. model pencahayaan yang khas. Hal ini dilakukan karena di dunia nyata, sifat fisik permukaan yang paling sering (kecuali mungkin sesuatu seperti plastik, atau cermin) tidak tetap sama di seluruh permukaan, tetapi dapat sangat bervariasi dari piksel ke piksel.

TravisG
sumber
Benar, terima kasih Travis. Apakah Anda melihat ada masalah apa pun dengan saya menggunakan blinn + phong bersama dengan semacam tekstur topeng untuk membuat piksel hanya jika diperlukan di medan, sehingga menciptakan bintik-bintik yang mendasari refleksi specular?
Insinyur
Jika piksel-piksel itu tidak menyala sama sekali setelah dibuang karena tekstur topeng, itu mungkin akan terlihat salah / aneh. Cara yang biasa memang merupakan kombinasi dari peta benjolan dan peta specular untuk permukaan yang mengubah beberapa input dari persamaan pencahayaan.
TravisG
0

Pemetaan benjolan specular (pemetaan normal) atau pemetaan paralaks.

Celestis
sumber
7
Membalas ini dengan bukti atau referensi akan membuatnya menjadi jawaban yang jauh lebih baik.
MichaelHouse