原文連接:http://www.aclockworkberry.com/shader-derivative-functions/
他人的翻譯:http://blog.sina.com.cn/s/blog_7cb69c550102xvog.html
加上理解,一半照抄上面的博客html
偏導函數,是 fragment shader 中使用的指令函數,在HLSL中的是ddx(..)和ddy(..),在GLSL中的是dFdx(..)和dFdy(..)
,分別對應 x,y軸上,在屏幕空間中,像素塊中各類變量的變化率。
上面這句話是因爲ddx和ddy的重載,能夠把偏導函數用於向量和矩陣上。函數
1.最典型的用法是寫出 flat 着色的效果:
在 fragment shader中,咱們若是調用ddx(Pos),和ddy(Pos)這個表明求出相鄰的2個像素塊之間座標的差值,即下面圖中的紅色和綠色2個矢量,而這2個矢量都在這個三角形的平面上,那麼執行 normalize( cross(ddx(pos), ddy(pos)) ) 就求出的面的法線,可是這裏要注意,在HlSL上面,或者Unity上面要寫成normalize( cross(ddy(pos), ddx(pos)) ),否則法線是反向的。這個是因爲左右手座標系引發的。測試
2.其次是使用在紋理採樣上:
在Unity裏面測試翻譯
void surf (Input IN, inout SurfaceOutput o) { half4 c = tex2D(_MainTex, IN.uv_MainTex); //c += ddx(c)*2 + ddy(c)*2;這行代碼開啓和關閉的效果 o.Albedo = c.rgb; o.Alpha = c.a; }
左邊是直接顯示圖片,右邊是在圖片上面加上x和y的偏導數。code