Burada ve burada detaylandırılan gerçek zamanlı yaygın küresel aydınlatma için Basamaklı Işık Yayılım Hacimleri algoritmasını (henüz dolaylı gölgeleme yok) uyguladım . İyi çalışıyor ama yine de özellikle bir eser düzeltmeye çalışıyorum.
Kısa özet
Algoritmanın nasıl çalıştığını zaten biliyorsanız bunu atlayabilirsiniz.
Algoritma, aydınlatma bilgilerini bir 3B ızgarada küresel harmonikler şeklinde depolayarak çalışır, burada ızgaranın her hücresindeki verilerin başlangıçta genişletilmiş bir gölge haritası ( yansıtıcı gölge haritası) oluşturması) derinliğin yanı sıra renk ve normal bilgileri de içerir. Fikir, esasen bir ışık kaynağı tarafından görülen tüm piksellerin dolaylı aydınlatmanın ilk sıçramasının nedeni olmasıdır, bu nedenle gerekli bilgileri gölge eşleme için kullandığınız normal derinlik tamponunun yanında saklar ve 3D ızgarayı başlatmak için tüm verileri örneklersiniz . 3D ızgaradaki bilgiler daha sonra (her yineleme için) bir hücredeki bilgileri 6 doğrudan komşusunun tümüne (yukarıda, aşağıda, sol, sağ, üst, alt) çoğaltarak tekrarlanır. Izgaradaki bilgileri kullanarak sahneyi aydınlatmak için, sahnenize tam ekran geçişi uygularsınız ve her bir rasterleştirilmiş piksel için rasterleştirilmiş yüzeyin dünya alanı konumuna sahip olursunuz (örneğin, ertelenmiş gölgeleme içindeki G-Tamponlarından). ekrandaki belirli bir pikselin ızgara hücresine ait olduğunu bilir.
Bu çoğunlukla iyi çalışıyor, burada simüle edilmiş GI'siz iki görüntü ve sadece sabit kodlu bir ortam terimi ve yanında LPV algoritması olan bir görüntü var. Yüzeylerde renkli yansımalara, daha iyi derinlik detaylarına vb. Dikkat edin.
Sorun
Aydınlatma aşaması sırasında hücrelere bakarken, hücrenin merkezi, komşu hücreleri ve gerçek aranan doku koordinatı arasındaki verileri sorunsuz bir şekilde enterpolasyon yapmak için üç boyutlu enterpolasyon (donanım doku filtreleri kullanılarak) kullanılır. Esasen, bu enterpolasyon, bir hücrenin ortasındaki aydınlatma bilgilerinin, bilginin bakıldığı merkezin etrafındaki beton piksellere yayılmasını taklit eder. Bu gereklidir, çünkü aksi takdirde aydınlatma çok kaba ve çirkin görünecektir. Bununla birlikte, üç boyutlu enterpolasyon, bir hücrede kodlanan aydınlatma bilgilerinin ışığın yayılma yönünü hesaba katmadığından (hatırlayın, küresel harmoniklerde olduğunu unutmayın), ışık yanlış bakılan piksele yayılabilir. Örneğin, hücrede kodlanan parlaklık yalnızca (1,0,0) ("
Bu, ızgaradaki hücre boyutları sahnedeki yüzeylere kıyasla büyük olduğunda duvarların yanlış bir şekilde kanamaya neden olur (bu, ışığı mümkün olduğunca az yayılma yinelemesiyle sahneye yaymak için büyük hücrelere ihtiyacınız olduğu için). Öyle görünüyor:
Gördüğünüz gibi (sağ üstteki gölge anahatlarından), sahne, sahnenin üstündeki sol üst taraftaki yönlü bir ışık kaynağıyla aydınlatılır. Ve atriyumun dışını ve içini ayıran sadece bir hücre olduğundan, ışık kanar ve soldaki duvar yanlış aydınlatılır.
Gerçek soru
Yazar bunu düzeltmek için bir tür manuel anizotropik filtreleme önermektedir. Şu anda normal n yüzeyinin yönüne doğru (şu anki hücreden örneklenen SH katsayılarını varsayıyorum) bir radyasyon gradyanı veriyor:
Ve devletler
Böylece, ışıma yönlü türevini gerçek ışıma yönü ile karşılaştırarak, ışıma dağılımının bu nokta için üçgensel enterpolasyonundan daha ileri başlayıp başlamadığı hesaplanabilir.
Sorularım):
Denklemde, c (x) fonksiyonu, (x) noktasındaki SH katsayıları gibi görünmektedir. Dolayısıyla, parlaklık derecesi, x - (n / 2) ve x + (n / 2) noktalarındaki SH katsayılarının ağırlıklı farkı olarak normal bir sayısal türev gibi hesaplanmış gibi görünmektedir. Ancak, bağlamımda c (x) nedir? Şu anda c (x) 'in yüzey konumunda (x) trilinear olarak enterpolasyon katsayılarına atıfta bulunduğunu varsayıyorum, ama emin değilim, çünkü bunun size yönlü hakkında daha fazla bilgi vermesi gerekiyor. SH katsayılarının dağılımı.
Peki bu degrade daha sonra hücreden örneklenen aydınlatmanın yüzeylere nasıl uygulanacağını değiştirmek için nasıl kullanılır? Yazar sadece "ışıma yönlü türevini gerçek ışıma yönü ile karşılaştırma" yazıyor, ama bu oldukça belirsiz.
Bir "merkezi fark şeması" 'ndan bahseder ve SH slayt katsayılarının merkezi farkları için bu slaytlara atıfta bulunur ve degradenin türevlerini gösteren bu makaleye referansta bulunur , ancak şu anda onlardan herhangi bir yararlı sonuç çıkaramıyorum.