Unity3d ddx ddy 法线

最近摸到一个很神奇的API -> DDX, DDY (DX) 或者 FDX, FDY (Opengl)

ddxddy normal

三角面片这么明显的法线有木有

在Nvidia 文档说, ddx/ddy 是求一个近似偏导函数, 以对齐屏幕分辨率的值进行取值

看了好几遍,不懂,然后仔细一想一阶求导不就是斜率嘛, 那么斜率是什么呢,就是平面向量啊。
于是测试了 ddx(worldSpaceVertex.xyz) ddy(worldSpaceVertex.xyz) 可以求出 ddx[(x,x) – (x+1,x)] , ddy[ (y,y) – (y-y)] 即隔壁像素所在三角形和当前像素的斜率差,或者说当前像素到隔壁像素的斜率

x轴 斜率表示前进方向向量, 和 y 轴斜率表示右手方向向量,就可以求 三角面的法线
normalize(ddx) cross normalize(ddy) = normal;
normal = normalize(normal);

这个时候,如果直接输出fixed4(normal,1.0) 就是这样
ddxddy normal fragment

继续阅读“Unity3d ddx ddy 法线”