dFdy
dFdy
计算一个值在屏幕空间 Y 轴(垂直方向)上的变化率或梯度。它能回答“当屏幕位置向下移动一个像素时,这个值变化了多少?”,提供了屏幕空间导数的垂直分量。
核心优势
与 dFdx 协同工作,提供完整的二维屏幕空间梯度信息。这种组合对于方向无关的计算(如 fwidth)至关重要,并解锁了强大的原生 GPU 硬件功能以实现高级效果。
常见用途
与 dFdx 配对,为任意形状提供鲁棒的程序化抗锯齿。
通过分析 UV 在两个轴上的变化,为精确的纹理 Mipmap 等级选择提供必要信息。
在 fwidth 内部使用,通过检测所有三角形边缘来创建稳定的线框渲染。
在如三向贴图(Triplanar Mapping)等高级技术中计算混合权重,以实现无缝的纹理过渡。
如何调整
输出值与输入值的垂直“频率”成正比。例如,更多的水平条纹(Y轴上的更高频率)会产生更大的 dFdy 结果,从而自动增强抗锯齿效果。它对垂直方向的透视很敏感;对于一个地板平面,其世界坐标的 dFdy 值会随着它延伸到远处而变大。
代码示例
1// p 可以是 uv、世界坐标或任何其他在片元着色器中计算的值
2const gradientY = dFdy( p );