蛮牛的专栏可以常看看:
http://www.manew.com/forum-47-132-2.html
第1个函数:step函数
Shader "MyShader/Step"
{
Properties
{
_Variable("variable",range(1,10))=1
_Threshold("threshold", int) = 5
}
SubShader
{
Pass
{
Cull off
ZWrite off
ZTest Always
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct appdata
{
float4 vertex : POSITION;
};
struct v2f
{
float4 vertex:SV_POSITION;
};
v2f vert(appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
return o;
}
int _Variable;
int _Threshold;
fixed4 frag(v2f i):SV_Target
{
fixed b = step(_Threshold, _Variable);
if (b == 0)
{
return fixed4(1, 0, 0, 1);
}
else if (b == 1)
{
return fixed4(0, 1, 0, 1);
}
else
{
return fixed4(0, 0, 1, 1); //不会走到
}
}
ENDCG
}
}
}
解释:
step(_Threshold, _Variable);
这个函数的意思就是如果_Variable<_Threshold,则返回0;_Variable>=_Threshold,则返回1;
其实就是分段函数。
效果:
设置阈值为5,当滑动slider的时候,小于5则返回红色;大于等于5则返回绿色。
第2个函数:clam(x,a,b):
x如果小于a返回a,如果大于b返回b,在a~b范围内返回x
第三个函数:smoothstep:
smoothstep(min,max,x):
另:Factor= (x-min)/(max-min);
res=3FactorFactor - 2FactorFactor*Factor,当x=min时返回0,当x=max时返回1
https://blog.csdn.net/u010333737/article/details/82859246
http://www.pianshen.com/article/5880316450/
其他函数:三角函数、平移、旋转、缩放函数见原文。