unity的shader总结
- clip()函数可以丢弃掉一些不满足条件的像素
比如clip(xx.a-0.3)将丢弃掉alpha值小于0.3的像素。
并不需要随着片段着色器返回fixed4 frag (v2f i) : SV_Target { fixed cutout = tex2D(_NoiseTex, i.uvNoiseTex).r; clip(cutout - _Threshold);//这地方已经将像素丢掉了 fixed4 col = tex2D(_MainTex, i.uvMainTex); return col; }
- lerp函数,
lerp(a,b,w) 根据w返回a到b之间的插值
a,b,w可以为标量也可以为向量,但是三者应该统一。且为向量时长度也需要统一。
相当于float3 lerp(float3 a, float3 b, float w) { return a + w*(b-a); }
- saturate(x)的作用是如果x取值小于0,则返回值为0。如果x取值大于1,则返回值为1。若x在0到1之间,则直接返回x的值.
fixed4 frag (v2f i) : SV_Target { fixed cutout = tex2D(_NoiseTex, i.uvNoiseTex).r; clip(cutout - _Threshold); float degree = saturate((cutout - _Threshold) / _EdgeLength);//取一个0到1之间的值 fixed4 edgeColor = lerp(_EdgeFirstColor, _EdgeSecondColor, degree);//取中间值 fixed4 col = tex2D(_MainTex, i.uvMainTex); fixed4 finalColor = lerp(edgeColor, col, degree); return fixed4(finalColor.rgb, 1); }