这个Shader目前实现了积雪的颜色变化,雪的厚度和高度控制,积雪边缘的smoothstep的一个渐变过渡。
大体效果如下图,效果要好的话,模型很重要,面数当然是越高越好,但布线要优化好可以省很多面数。
积雪量的三个对比效果
顶点渲染中,加入了一张噪波图,可以控制积雪表面的起伏,注意表面需要一定的顶点数量。
可以控制积雪的厚度和向外溢出的效果
顶点着色部分代码:
v2f vert (appdata v) { ... float4 uvNoisetex=tex2Dlod(_VertNoiseTex,float4(TRANSFORM_TEX(o.uvNoise.xy,_VertNoiseTex),0,0)); if(dot(wN,_SnowDirection)>lerp(1,-1,_Snow)){ v.vertex.xyz+=uvNoisetex.rgb* _VertOut*v.normal; v.vertex.y+=_VertHeight+_VertOut; } ... }
下面一段是片元着色部分代码:
fixed4 frag (v2f i) : SV_Target { //法线与假定的下雪方向做点积计算 float edge=dot(N,_SnowDirection); if(edge>lerp(1,-1,_Snow)){ //边缘做一个宽度的渐变 float sm=smoothstep(0,_SnowEdgeOut,edge); //积雪边缘的过渡 fixed3 xue=lerp(col.rgb,_SnowColor.rgb,sm); //积雪的颜色加了个透明 col.rgb=lerp(col.rgb,xue,_SnowAlpha); } }