path tracing 渲染bunny glass材質,為什麼會有奇怪的黑色?
01-13
path tracing 渲染bunny glass材質,為什麼會有奇怪的黑色? (是全反射? 還是其他原因?應該不是法向量弄反)
初步發現是fresnel寫錯了,偷懶地直接將Cos(wo)的絕對值去作為參數,但其實得根據Cos(wo)的符號判斷是哪種折射,所以之前的問題在於全反射的時候,反射光線的fresnel非常小。
還有一處改動,在某個交點上決定是反射還是折射,之前是用0.5的概率去採樣,現在將採樣改為fresnel反射率,並且固定反射部分下線為0.5,不知道這樣做有沒有什麼問題,請大神指導?
不知道是path tracing的採樣效率低,還是我上面說的還有問題?
樓上給出了很好的Debug方法,授人以漁。
我直接貼個正確答案,把魚也授給你。你的這個Bug很好重現,錯誤的結果如下:


實際上,玻璃材質的物體會因為上面這個現象發生成百上千次的反射和折射。因為上面紅色的那個光線又會再內部不斷的反射下去,同時也產生更多折射的光線。所以就算正確實現了BRDF,也要確保光線追蹤的反射次數夠大。如果不夠的話,同樣的場景就會明顯偏暗。下圖是用5作為最大散射次數渲染的。


你可以選擇某個黑色像素,看看從這個像素區域出發的Ray最後都到了哪裡,是否都抵達了漫反射表面或光源,返回了什麼顏色,把這些終點、路徑和顏色在屏幕中標出來做個可視化,就能找到問題原因了,這會比直接得到答案來得更有意思。
很可能是全反射,ray彈了多次以後壽終正寢
面光源好像噪點非常多,補充一個點光源的結果,麻煩看一下結果是不是正確


我以前出現過一次類似的問題。我的貌似是坐標normalization出錯了
推薦閱讀:
※像玻璃球這種透明且帶有折射現象的物體如何進行實時渲染?
※學計算機圖學時,自己寫的軟渲染器代碼結構是否應模仿OpenGL的狀態機模式?
※為什麼CryENGINE3引擎號稱最強大、最真實的引擎,但在孤島危機2/3當中的畫面仍然有一種光澤度過強的塑料質感?
※Unity中DrawCall和openGL、光柵化等有何內在聯繫,為什麼說DC降低有助於渲染性能優化?
※unity走圖形學好,還是轉行做架構?
TAG:計算機圖形學 |


