1
我使用Cook-Torrance鏡面BRDF +迪士尼漫反射BRDF光模型,如果單獨應用,它們可以很好地工作。不幸的是,如果我嘗試將它們合併一些奇怪的情況: 漫反射光照看起來是這樣的: 鏡面光照(對地形的邊緣通知文物): GLSL PBS實現,奇怪的着色器行爲
得到的光照被計算如下:
float result = Fr + Fd;
其中Fd是漫射BRDF分量,Fr是鏡面BRDF分量。
爲什麼它會在產生的光照貼圖上產生這樣的僞像?
我想,得到的光強度超過該範圍[0; 1],以檢查我修改代碼,如下所示:
return result <= 1.0 ? result : 1.0;
,你可以看到,所有的文物現在都有1.0的強度(他們明顯超過[0; 1]範圍),但爲什麼如果鏡面反射地圖包含零,這會繼續發生?
全部着色器代碼:Pastebin
似乎非常難以解釋。只有一次,我看到了來自着色器的怪異結果,它是由一些未定義的數學引起的,這些數學導致了NaN以怪異的方式傳播和破壞東西。 也許看看所有的pow函數,並確保第一個參數不能通過在abs/max /飽和或者所有這些函數中暫時黑客入侵(pow(pow(dotNH,2.0)*( m_alpha - 1.0)+ 1.0,2.0));可能會有負面的例子)。如果這沒有得到它,我會盡量簡化 – Columbo
@Columbo謝謝。 N和L的點積爲0,給出了零誤差的除法。我已經添加了abs函數作爲修補程序。 – romu4