是片元着色器中的一个用于计算任何变量基于屏幕空间坐标的变化率的指令。只能在片段着色器中使用。dFdx要么是通过dFdxFine来计算,要么是通过dFdxCoarse来计算。需要在片元着色器前面加上
#extension GL_OES_standard_derivatives : enable
HLSL中的ddx和ddy,GLSL中的dFdx和dFdy
在三角形栅格化期间,GPU会同时跑片元着色器的多个实例,但并不是一个pixel一个pixel去执行的,而是将其组织在2x2的一组pixels块中并行执行。偏导数就是通过像素块中的变量的差值(变化率)而计算出来的。dFdx表示的是像素块中右边像素的值减去素块中左边像素的值,而dFdy表示的是下面像素的值减去上面像素的值。如下图所示,图中显示的是渲染的屏幕像素,图中红色区域是一个像素块,p(x,y)表示在屏幕空间坐标系中坐标(x,y)的片元(像素)上的某一个变量,图中显示了dFdx和dFdy的计算过程。
偏导数计算
偏导数函数可以用于片元着色器中的任何变量。对于向量和矩阵类型的变量,该函数会计算变量的每一个元素的偏导数。
dFdxFine和dFdyFine基于当前片段及其直接邻居的p值,使用本地差分计算导数。
dFdxCoarse和dFdyCoarse使用基于当前片段的邻居的p值的局部差分来计算导数,并且可能但不一定包括当前片段的值。 也就是说,在给定区域上,实现可以在比对应的dFdxFine和dFdyFine函数所允许的更少的唯一位置中计算导数