Unity 模型简单雪覆盖

效果图

原理

判断模型的向量与向上向量点乘。以此作为颜色插值的参考值。

主要的代码和注释如下:

//将法线转换到世界坐标系,方便下面的计算
float3 wn = UnityObjectToWorldNormal(i.normal);
//默认一个向上的向量,与法向量做点积,让其取值范围在[0,1]之间。1-点积的数值 ,法向量与向上的向量夹角为0是值为0 ,90度为1.
float flag = 1 - saturate(dot(float3(0.0,1.0,0.0),wn));
//使用强度值用于指数运算,将提高数值的变化率。
flag = saturate(pow(flag,_SnowStrength * 3));
fixed4 col = tex2D(_MainTex, i.texcoord);
//默认积雪是白色,当然应用于其他,可以修改这个颜色或将其做成变量。
fixed4 sc = fixed4(1.0,1.0,1.0,1.0);
//使用lerp做差值运算 ==> sc*(1-flag)+col*flag
col = lerp(sc,col,flag);
UNITY_OPAQUE_ALPHA(col.a);
return col;
示例下载

猜你喜欢

转载自blog.csdn.net/st75033562/article/details/129447582