文章出處

經驗證,原來ddx/ddy這兩個操作,在forward rendering與deferred rendering中存在著微妙的應用區別。

在forward rendering中,GPU shader會自動地判斷其2x2像素區域是否僅有部分落在當前繪制的三角面所覆蓋的光柵化interpolate范圍內。

而在dr中,當將ddx/ddy操作應用于一個render target(即NDC quad)時,GPU shader這一免費的“合法性校驗”操作便失效了。用于計算ddx/ddy的2x2像素區域有可能一部分位于模型的三角面A、而另一部分則位于模型的三角面B。也就是說:參與ddx/ddy運算的像素,有可能超出了模型中同一三角面的插值范圍,從而導致ddx/ddy得到錯誤的結果,進而導致模型edge上的artifacts。這一問題在dr中使用像素world(或view)坐標重建幾何法線時(normalize(cross(ddx(posW), ddy(posW)))),尤為突出。

總結:ddx/ddy與forward rendering的兼容性更佳。使用ddx/ddy,切記一定要確保其2x2區域位于同一三角面的光柵化范圍內,不能跨三角面。在deferred rendering中,GPU shader不會自動地保障上述前提成立,所以沒有引入其他額外機制的前提下,宜避免使用ddx/ddy計算幾何法線。

附圖1:deferred rendering,使用ddx/ddy重建法線,注意到edge上存在artifacts

附圖2:forward rendering,使用ddx/ddy計算法線,注意到不存在edge artifacts

 


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()