dFdx
dFdx
计算一个值在屏幕空间 X 轴上的变化率或梯度。它能回答“当屏幕位置向右移动一个像素时,这个值变化了多少?”,从而让一个像素的计算能“感知”到其邻居的信息。
核心优势
将 GPU 硬件原生支持的高性能梯度计算功能暴露给开发者,解决了在常规着色器编程中几乎无法完成的任务。这是实现高质量程序化抗锯齿和许多高级效果的基石。
常见用途
计算程序化内容的梯度以实现平滑的抗锯齿边缘。
分析UV坐标变化率,以动态调整法线贴图强度或实现自定义纹理滤波,防止远处产生噪点。
通过检测重心坐标的梯度,在模型上动态绘制线框或描边效果。
如何调整
输出值与输入值的“变化频率”成正比。例如,对一个高频噪点图案(输入值变化快)使用 dFdx,会得到比平缓图案更大的结果,这使得抗锯齿强度可以自动适应内容的复杂度。同时,由于计算是在屏幕空间进行的,物体的朝向会显著影响结果,一个延伸向远方的平面,其世界坐标的 dFdx 值会随着距离增加而变大。
代码示例
1// p 可以是 uv、世界坐标或任何其他在片元着色器中计算的值
2const gradientX = dFdx( p );