path tracing 渲染bunny glass材質,為什麼會有奇怪的黑色?

path tracing 渲染bunny glass材質,為什麼會有奇怪的黑色? (是全反射? 還是其他原因?應該不是法向量弄反)

初步發現是fresnel寫錯了,偷懶地直接將Cos(wo)的絕對值去作為參數,但其實得根據Cos(wo)的符號判斷是哪種折射,所以之前的問題在於全反射的時候,反射光線的fresnel非常小。

還有一處改動,在某個交點上決定是反射還是折射,之前是用0.5的概率去採樣,現在將採樣改為fresnel反射率,並且固定反射部分下線為0.5,不知道這樣做有沒有什麼問題,請大神指導?

不知道是path tracing的採樣效率低,還是我上面說的還有問題?


樓上給出了很好的Debug方法,授人以漁。

我直接貼個正確答案,把魚也授給你。

你的這個Bug很好重現,錯誤的結果如下:

錯誤的地方在於,當光線折射到兔子內部的時候,在內部的表面同樣也會發生反射和折射。如果你在內部(也就是入射光線和表面法線方向不是一個方向的時候)不採樣反射,只採樣折射,就會出現這個現象。如下圖,如果你沒有模擬那條紅色的光線,就會出現這個問題。

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

最後放上更正確的渲染結果,使用16作為最大散射次數。其實理論上應該設這個最大次數為無窮,然後依賴Russian Roulette停止追蹤。注意不僅顏色更加正確,連牆上和地面的焦散也和之前的圖片有所不同。


你可以選擇某個黑色像素,看看從這個像素區域出發的Ray最後都到了哪裡,是否都抵達了漫反射表面或光源,返回了什麼顏色,把這些終點、路徑和顏色在屏幕中標出來做個可視化,就能找到問題原因了,這會比直接得到答案來得更有意思。


很可能是全反射,ray彈了多次以後壽終正寢


面光源好像噪點非常多,補充一個點光源的結果,麻煩看一下結果是不是正確

上面的點光源有問題,重新上傳一個


我以前出現過一次類似的問題。我的貌似是坐標normalization出錯了


推薦閱讀:

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

TAG:計算機圖形學 |