Volume Propagasi Ringan: Penyaringan anisotropik data volume

9

Saya telah mengimplementasikan algoritma Cascaded Light Propagation Volumes (belum ada bayangan tidak langsung) untuk iluminasi global difus waktu-nyata yang diperinci di sini dan di sini . Ini berfungsi dengan baik tetapi saya masih mencoba untuk memperbaiki satu artefak pada khususnya.

Ringkasan singkat

Anda dapat melewati ini jika Anda sudah tahu bagaimana algoritma bekerja.

Algoritma ini bekerja dengan menyimpan informasi pencahayaan dalam bentuk harmonik bola dalam kisi 3D, di mana pada awalnya data di setiap sel kisi berasal dari render peta bayangan yang diperluas ( peta bayangan reflektif)) itu juga termasuk warna dan informasi normal, selain kedalaman. Idenya adalah bahwa pada dasarnya semua piksel yang dilihat oleh sumber cahaya adalah penyebab pantulan pertama penerangan tidak langsung, sehingga Anda menyimpan informasi yang diperlukan di samping buffer kedalaman biasa yang Anda gunakan untuk pemetaan bayangan, dan sampel semua data untuk menginisialisasi kisi 3D . Informasi dalam kisi 3D kemudian diperbanyak secara iteratif dengan (untuk setiap iterasi) menyebarkan informasi dalam satu sel ke semua 6 tetangga langsungnya (di atas, di bawah, kiri, kanan, atas, atas, bawah). Untuk menerangi pemandangan menggunakan informasi di grid, Anda menerapkan layar penuh melewati adegan Anda, dan untuk setiap piksel raster Anda memiliki posisi ruang dunia permukaan raster yang tersedia (misalnya dari G-Buffer dalam naungan ditangguhkan), sehingga Anda tahu sel mana dari grid yang dimiliki piksel tertentu pada layar.

Ini berfungsi dengan baik untuk sebagian besar, di sini adalah dua gambar tanpa simulasi GI dan hanya istilah ambient hardcoded, dan di sebelahnya gambar dengan algoritma LPV. Perhatikan pantulan berwarna pada permukaan, detail kedalaman yang lebih baik, dll.

masukkan deskripsi gambar di sini

Masalah

Ketika mencari sel selama tahap pencahayaan, interpolasi trilinear (menggunakan filter tekstur perangkat keras) digunakan untuk menginterpolasi data dengan lancar antara pusat sel, sel tetangga, dan koordinat tekstur aktual yang terlihat. Intinya, interpolasi ini meniru penyebaran informasi pencahayaan di pusat sel ke piksel konkret di sekitar pusat tempat informasi itu dilihat. Ini diperlukan karena jika tidak, pencahayaan akan terlihat sangat kasar dan jelek. Namun, karena interpolasi trilinear tidak memperhitungkan arah rambat cahaya informasi pencahayaan yang dikodekan dalam sel (ingat, itu dalam harmonik bola), cahaya dapat disebarkan secara keliru ke piksel yang tampak. Misalnya, jika pancaran yang dikodekan dalam sel hanya merambat ke (1,0,0) ("

Hal ini menyebabkan pendarahan cahaya salah melalui dinding ketika ukuran sel di grid besar dibandingkan dengan permukaan di tempat kejadian (ini diperlukan karena Anda membutuhkan sel besar untuk menyebarkan cahaya jauh ke tempat kejadian dengan iterasi propagasi sesedikit mungkin). Seperti inilah tampilannya:

masukkan deskripsi gambar di sini

Seperti yang Anda lihat (dari bayangan di kanan atas), pemandangan diterangi oleh sumber cahaya arah di suatu tempat di atas pemandangan ke kiri atas. Dan karena hanya ada satu sel yang memisahkan bagian luar atrium dan bagian dalam, cahaya berdarah melalui dan dinding ke kiri diterangi dengan tidak benar.

Pertanyaan aktual

Penulis menyarankan bentuk penyaringan anisotropik manual untuk memperbaikinya. Dia memberikan gradien cahaya (saya mengasumsikan koefisien SH sampel dari sel saat ini) menuju arah permukaan normal n sebagai:

masukkan deskripsi gambar di sini

Dan menyatakan

Jadi, dengan membandingkan turunan terarah radiance dengan arah pancaran yang sebenarnya, dapat dihitung apakah distribusi cahaya mulai lebih jauh dari interpolasi trilinearnya untuk titik ini.

Pertanyaan saya):

Dalam persamaan, fungsi c (x) tampaknya menjadi koefisien SH pada titik (x). Jadi gradien pancaran tampaknya dihitung seperti derivasi numerik normal sebagai perbedaan bobot koefisien SH pada titik x - (n / 2) dan x + (n / 2). Namun, apa c (x) dalam konteks saya? Saat ini saya mengasumsikan bahwa c (x) mengacu pada koefisien interpolasi trilinearly di lokasi permukaan (x), tetapi saya tidak yakin sama sekali, karena saya tidak tahu bagaimana yang seharusnya memberi Anda lebih banyak informasi tentang arah distribusi koefisien SH.

Dan bagaimana gradien itu kemudian digunakan untuk mengubah bagaimana pencahayaan sampel dari sel diterapkan pada permukaan, tepatnya? Penulis hanya menulis "membandingkan turunan directional pancaran dengan arah pancaran yang sebenarnya", tetapi ini cukup samar.

Dia menyebutkan menggunakan "skema diferensiasi pusat" dan referensi slide ini untuk perbedaan pusat koefisien SH, dan juga referensi makalah ini yang menunjukkan derivasi dari gradien, tetapi saat ini saya tidak bisa menarik kesimpulan yang berguna dari mereka.

TravisG
sumber

Jawaban:

4

Perbedaan utama telah diperkenalkan oleh kertas AMD ketika mereka melakukan beberapa demo dengan kristal terbang di sebuah terowongan, dari memori.

The cFungsi doesnt harus sesuatu yang tepat, hanya sebuah ide dari, misalnya, cahaya, jadi hanya mengevaluasi SH menggunakan normal Anda saat ini.

Lalu apa yang Anda lakukan dengan itu, adalah Anda menurunkan nada, menggunakan faktor empiris, pancaran menggunakan diferensial ini. Tapi Anda hanya downtone jika diferensial menyiratkan aliran cahaya hilang dari normal Anda saat ini.

Pada dasarnya idenya adalah untuk mendeteksi secara empiris fakta bahwa jika Anda pergi ke arah yang berlawanan dengan normal dinding Anda, aliran cahaya berkurang perlahan-lahan, karena ia menyebar di udara (di sisi lain). Tetapi jika Anda menyelidiki sedikit di depan normal Anda, Anda akan melihat setetes fluks tiba-tiba, itu berarti sel yang Anda sampel sekarang sebenarnya adalah kebocoran.

Saya telah menemukan bahwa itu bekerja di 70% dari kasus, tetapi jika diterapkan secara sembarangan, itu dapat menciptakan efek lubang hitam yang sangat aneh, atau perubahan rona (merah muda, hijau ...) pada area yang sangat gelap yang mengandung kebocoran cahaya di luarnya. Ini karena Anda memiliki 3 LPV untuk setiap warna, perbedaan utama cenderung memberikan hasil yang berbeda. Jika Anda mampu, coba gunakan cahaya abu-abu untuk mengevaluasi peredam perbedaan pusat, dan gunakan faktor reduksi umum untuk semua saluran warna nanti.

Tanpa retasan ini, biasanya Anda seharusnya tidak mendapatkan banyak cahaya sama sekali, karena normal yang Anda gunakan untuk mengevaluasi SH berlawanan dengan arah fluks. Namun seperti yang Anda perhatikan, 2-band SH yang digunakan dalam LPV sebenarnya tidak cukup, dan memiliki komponen DC yang kuat yang memberikan kebocoran kuat ini. Inilah sebabnya mengapa LPV tidak praktis untuk geometri yang tidak dikontrol secara ketat oleh seniman yang sadar LPV, yang akan memberikan setiap dinding ketebalan minimal untuk mengurangi kebocoran.

Juga beberapa perusahaan (seperti persegi enix) menggunakan dinding pemblokir yang dirancang secara manual untuk membunuh kebocoran, seperti volume geometri seharusnya memberi Anda. (volume geometri membantu mengurangi kebocoran, tetapi retroprojection RSM untuk menguapkan adegan terlalu parsial dalam kebanyakan kasus dan membuat aliasing pada tingkat sel LPV yang memberikan kebocoran tampilan yang lebih buruk karena intensitas bervariasi dengan aneh).

Anda hanya dapat menyedotnya dan mencoba untuk mengurangi masalah dengan memberikan LPV kata akhir yang kurang kuat pada lampu tidak langsung akhir, gunakan istilah konstan dengan bobot (0,5?) Dan LPV dapat berkontribusi pada 0,5 sisanya dari tidak langsung cahaya. Coba juga untuk mengimplementasikan volume geometri, itu akan mengurangi masalah. Dan akhirnya perbedaan utama.

v.oddou
sumber
sebagai peningkatan lebih dari 50% dari ambient konstan, teknik yang disebut "ambient BRDF" (oleh tri-Ace) dapat digunakan.
v.oddou