Bagaimana cara oklusi ambien ruang layar diterapkan?

11

Saya tidak mengerti penjelasan dari wikipedia.

Untuk setiap piksel pada layar, pixel shader mengambil sampel nilai kedalaman di sekitar piksel saat ini dan mencoba menghitung jumlah oklusi dari masing-masing titik sampel.

Bagaimana nilai kedalaman piksel di sekitarnya memberi tahu Anda sesuatu tentang oklusi? Oklusi , seperti yang saya mengerti, terjadi ketika sebuah objek A berdiri di depan objek B lainnya, sehingga Anda tidak dapat melihat objek B. Tapi mengapa sekarang Anda melihat piksel kedalaman piksel sekitarnya ? Maksud saya, Anda dapat melihat piksel tersebut, sehingga tidak ada oklusi. Mungkin saya mengerti oklusi salah.

Dan apa yang saya juga tidak mengerti adalah istilah kernel dalam beberapa tutorial lainnya. Apa itu kernel dan mengapa Anda menggunakannya untuk ssao?

Bisakah seseorang membuat penjelasan rinci tentang algoritma, sehubungan dengan pertanyaan saya?

Joey
sumber
pikirkan seperti ini: lipatan yang dalam akan memiliki bayangan di dalamnya.
Alan Wolfe
1
Hal utama yang perlu dipahami di sini adalah bahwa kami mencoba menghitung oklusi dari cahaya sekitar, bukan oklusi dari pandangan.
trichoplax

Jawaban:

5

Motivasi di balik ambient occlusion (AO) secara umum adalah untuk memperkirakan cara celah dan sudut sering dibayangi, karena cahaya tidak langsung memantul ke dalamnya. Contoh dari foto kantor saya — perhatikan penggelapan di sepanjang tepian tempat dinding dan langit-langit bertemu. Ruangan hanya diterangi oleh cahaya yang masuk melalui jendela dan memantul.

foto yang menunjukkan efek seperti AO di sudut ruangan

Untuk secara akurat mensimulasikan fenomena ini, perender luring menggunakan teknik seperti penelusuran jalur dan pemetaan foton. Untuk keperluan waktu nyata, kami menghitungnya secara offline, atau kami memperkirakannya entah bagaimana.

Penyaringan ambient layar-ruang (SSAO) didasarkan pada pengamatan bahwa Anda dapat mendeteksi sudut dan celah dengan melihat buffer kedalaman (dan mungkin juga vektor normal) dari gambar yang diberikan, dan sehingga Anda dapat menghitung perkiraan AO sebagai post-post lulus. Buffer kedalaman adalah representasi geometri kasar dalam adegan, jadi dengan mengambil sampel nilai buffer kedalaman di lingkungan piksel target, Anda bisa mendapatkan gambaran tentang bentuk geometri sekitarnya, dan membuat tebakan seberapa gelapnya AO itu. seharusnya.

diagram tentang bagaimana buffer kedalaman merepresentasikan geometri, dari Bavoil dan Sainz (2008)

Diagram ini, dari Bavoil dan Sainz (2008) , menunjukkan bagaimana nilai buffer kedalaman, diinterpretasikan sebagai jenis ketinggian, mewakili versi diskrit beberapa geometri. Dalam menghitung SSAO untuk piksel tengah, Anda akan melihat nilai kedalaman piksel di sekitarnya dan memasukkannya ke dalam beberapa rumus, yang dirancang untuk menghasilkan nilai yang lebih gelap ketika geometri lebih cekung (seperti itu dalam diagram), dan yang lebih ringan nilai ketika geometri itu datar atau cembung.

Rumus bahwa nilai kedalaman masuk disebut "kernel" oleh analogi dengan kernel filter yang digunakan untuk mengaburkan, deteksi tepi dan sejenisnya. Namun, SSAO lebih rumit dari sekedar konvolusi linear dari nilai kedalaman. Iblis ada dalam perinciannya. Distribusi sampel, dan formula yang memprosesnya untuk menghasilkan nilai oklusi, telah menjadi subjek dari banyak penelitian selama dekade terakhir, mencoba untuk meningkatkan realisme dan mengurangi artefak dengan tetap mempertahankan kinerja yang baik.

Nathan Reed
sumber
5

Seperti yang disebutkan oleh Alan dan trichoplax dalam komentar, efek yang disimulasikan oleh ambient oklusi bukanlah oklusi permukaan dari kamera tetapi oklusi permukaan dari lingkungannya.

Pikirkan seperti ini: katakanlah Anda bahkan memiliki penerangan yang datang dari segala arah, sehingga total cahaya yang masuk pada titik mana pun merangkum nilai 1. Jika Anda menempatkan bidang datar di lingkungan itu dan melihat pada satu sisi, sisi itu akan menerima 50% dari penerangan itu, atau 0,5, karena setengahnya lagi diblokir oleh pesawat itu sendiri. Dengan kata lain, titik mana pun di permukaan pesawat hanya dapat "melihat" cahaya yang datang dari setengah lingkungan, jadi setengahnya diterangi dengan terang. Jika Anda melipat pesawat itu ke sudut pandang Anda (lipatan "lembah"), maka Anda mengurangi penerangan yang masuk ke sisi pesawat lebih jauh, ke beberapa nilai di bawah 0,5, karena, sekali lagi, setiap titik di pesawat "melihat" sedikit sedikit cahaya yang datang dari lingkungan.

Oklusi ambien layar-ruang bekerja kurang lebih dengan mencari “lipatan” ini — daerah di mana kedalaman berubah tajam, seperti yang didefinisikan dengan membandingkan kedalaman piksel tetangga — dan menggelapkannya untuk mensimulasikan penurunan pencahayaan dari lingkungan titik.

Noah Witherspoon
sumber