今天要做一个毛球的效果
核心的算法通过多个pass,从里到外一层一层的糊上一层透明diffuse,越靠外面的地方层次越少看起来越稀疏,越模糊
FurHelper.cginc
struct v2f {
float4 pos : SV_POSITION;
half2 uv : TEXCOORD0;
half2 uv1 : TEXCOORD1;
fixed4 diff : COLOR;
};
float _FurLength;
sampler2D _MainTex;
float4 _MainTex_ST;
sampler2D _FurTex;
float4 _FurTex_ST;
float _Blur;
v2f vert(appdata_base v) {
v2f o;
v.vertex.xyz += v.normal * _FurLength * FURSTEP;
o.pos = UnityObjectToClipPos(v.vertex);
o.uv = TRANSFORM_TEX(v.texcoord, _MainTex);
o.uv1 = TRANSFORM_TEX(v.texcoord, _FurTex);
float3 worldNormal = normalize(mul(v.normal, (float3x3) unity_WorldToObject));
o.diff = LambertDiffuse(worldNormal);
o.diff.a = 1 -