【翻譯&轉載】shader的導數函數介紹

原文連接: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

相關文章
相關標籤/搜索