码迷,mamicode.com
首页 > 其他好文 > 详细

关于ddx/ddy重建法线在edge边沿上的artifacts问题

时间:2014-12-11 06:45:18      阅读:342      评论:0      收藏:0      [点我收藏+]

标签:blog   http   ar   os   使用   sp   for   strong   on   

经验证,原来ddx、ddy这两个操作,在forward rendering与deferred rendering中存在着很微妙的语义区别。

在forward rendering中,GPU shader会自动地判断其2x2区域是否仅有部分落在当前绘制的三角面所覆盖的interpolate范围内。

而在dr中,在将ddx/ddy操作应用于一个NDC quad时,GPU shader这一免费的“非法校验”操作便失效了。用于计算ddx/ddy的2x2像素区域有可能一部分位于三角面A、而另一部分则位于三角面B。也就是说:参与ddx/ddy运算的像素,有可能超出了同一三角面的插值范围,从而导致ddx/ddy得到错误的结果。从而导致模型edge上的artifact。这一问题在dr中使用像素world坐标重建几何法线时(normalize(cross(ddx(posW), ddy(posW)))),尤为突出,而且真正理解上述原因的人少之又少。

总结:使用ddx/ddy,切记一定要确保其2x2区域位于同一三角面的光栅化范围内,不能跨三角面。在DR中,GPU shader不会自动地保障上述前提成立,所以没有引入其他额外机制的前提下,只能避免使用ddx/ddy计算几何法线。

附图1:deferred rendering,使用ddx/ddy重建法线,存在artifacts
bubuko.com,布布扣

附图2:forward rendering,使用ddx/ddy计算法线,不存在artifacts
bubuko.com,布布扣

 

关于ddx/ddy重建法线在edge边沿上的artifacts问题

标签:blog   http   ar   os   使用   sp   for   strong   on   

原文地址:http://www.cnblogs.com/neoragex2002/p/4156702.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!