基本含义
- GPU在光栅化的时候一般以2x2的像素块为单位并行执行的。
- ddx , ddy的计算规则如下图(注: dFdx, dFdy是GLSL里的叫法)
- ddx,ddy反映了相邻像素在屏幕空间x和y方向上的距离(变化率);
- fwidth(v) = abs(ddx(v) + ddy(v))
- fwidth则反映了相邻像素在屏幕空间上的距离差值.
- 如:fwidth(pos); 相邻像素位置的差值
- fwidth(normal); 相邻像素法线的差值
- fwidth(uv); 相邻像素uv的差值
计算Mipmap Level
Level 计算公式:
- Mipmap Level = log2(ρ)
- 注:w是3D贴图的第三个坐标轴,对于2D贴图,∂w/∂x和∂w/∂y为0;
- ∂u/∂x是u对x的偏微分(也就是u沿x轴的变化率),即ddx(u),可以理解成当屏幕像 素沿x轴变换一个单位时,贴图沿u方向变化了几个单位.
边缘处理
- 让颜色边缘突出:
- finalColor += (ddx(finalColor ) + ddy(finalColor )) * _Intensity;
- finalColor += fwidth(finalColor) * _Intensity;
计算表面法线
normal = normalize(cross(ddy(IN.worldPos), ddx(IN.worldPos)));