欢迎光临散文网 会员登陆 & 注册

24. DDX和DDY

2022-10-22 19:26 作者:那个人真狗  | 我要投稿


目的

  • DDX DDY是什么?

  • DDX 和DDY有什么作用?

介绍 | 偏导函数

  • DDX 和DDY是做查找斜率的节点,

在数学上:导数就是函数的变化率。几何意义是固定面上一点的斜率

查找斜率需要两个数据,从一个值减去另一个值就可以计算出之间的差距。

偏导数计算

我们知道在光栅化的时刻,GPUs会在同一时刻并行运行很多Fragment Shader,但是并不是一个pixel一个pixel去执行的,而是将其组织在2x2的一组pixels分块中,去并行执行。而偏导数就正好是计算的这一块像素中的变化率。从上图可以看出来ddx 就是右边的像素块的值减去左边像素块的值,而ddy就是下面像素块的值减去上面像素块的值。其中的x,y代表的是屏幕坐标。

  • 该值属于以红色突出显示的 2×2 块

  • ddx是右减左的差值

  • ddy是下减上的差值

注意:偏导数ddx/y可以计算我们FragmentShader中任意的变量。向量,矩阵等等。

验证

  • 使用UV 执行节点,通过数值显示

  • 效果

  • 黑白边界是有0-1变化,因此使用DDX计算出一条垂直的直线。

示例:计算面的法线

  • 面法线方向

  • 我们使用DDX和DDY计算出全局空间中2个像素之间的坐标差值,计算出2个向量,

这俩个向量都是在这个三角形的平面上,使用Cross节点求出这个面的法线向量。


  • 在使用转换转换功能把世界空间下的法线转换成切线空间下。

这样效果就完成,实现了不平滑的效果。

示例:描边效果

左边缘和上边缘是差值为正数的像素,右边缘和下边缘是差值为负数的像素,纯色的区域差值为0,因此分别取绝对值后加一起,不为0的像素就是边缘。


总结

  • DDX,DDY是偏导函数,

  • DDX和DDY可以重建法线出现问题。

资料

着色器导数函数简介|发条浆果 (aclockworkberry.com)

(51条消息) Unity Shader - ddx/ddy偏导函数测试,实现:锐化、高度图、Flat shading应用、高度生成法线_Jave.Lin的博客-CSDN博客_ddx ddy unity


24. DDX和DDY的评论 (共 条)

分享到微博请遵守国家法律