Unity
打开Unity,新建一个工程,具体如下图
新建一个 Shader,可以命名为 Dissolve,双击打开脚本进行编辑,具体如下图
编辑 Shader,具体内容如下:Shader 'Custom/Dissolve' { Properties { _MainTex ('Texture', 2D) = 'white' {} _NoiseTex('Noise', 2D) = 'white' {} _Threshold('Threshold', Range(0.0, 1.0)) = 0.5 _EdgeLength('Edge Length', Range(0.0, 0.2)) = 0.1 _RampTex('Ramp', 2D) = 'white' {} _Direction('Direction', Int) = 1 //1表示从X正方向开始,其他值则从负方向 _MinBorderX('Min Border X', Float) = -0.5 //可从程序传入 _MaxBorderX('Max Border X', Float) = 0.5 //可从程序传入 _DistanceEffect('Distance Effect', Range(0.0, 1.0)) = 0.5 } SubShader { Tags { 'Queue'='Geometry' 'RenderType'='Opaque' } Pass { Cull Off CGPROGRAM #pragma vertex vert #pragma fragment frag #include 'UnityCG.cginc' struct appdata { float4 vertex : POSITION; float2 uv : TEXCOORD0; }; struct v2f { float4 vertex : SV_POSITION; float2 uvMainTex : TEXCOORD0; float2 uvNoiseTex : TEXCOORD1; float2 uvRampTex : TEXCOORD2; float objPosX : TEXCOORD3; }; sampler2D _MainTex; float4 _MainTex_ST; sampler2D _NoiseTex; float4 _NoiseTex_ST; float _Threshold; float _EdgeLength; sampler2D _RampTex; float4 _RampTex_ST; int _Direction; float _MinBorderX; float _MaxBorderX; float _DistanceEffect; v2f vert (appdata v) { v2f o; o.vertex = UnityObjectToClipPos(v.vertex); o.uvMainTex = TRANSFORM_TEX(v.uv, _MainTex); o.uvNoiseTex = TRANSFORM_TEX(v.uv, _NoiseTex); o.uvRampTex = TRANSFORM_TEX(v.uv, _RampTex); //v.vertex 设置方向 o.objPosX = v.vertex.x; return o; } fixed4 frag (v2f i) : SV_Target { float range = _MaxBorderX - _MinBorderX; float border = _MinBorderX; if(_Direction == 1) //1表示从X正方向开始,其他值则从负方向 border = _MaxBorderX; float dist = abs(i.objPosX - border); float normalizedDist = saturate(dist / range); fixed cutout = tex2D(_NoiseTex, i.uvNoiseTex).r * (1 - _DistanceEffect) + normalizedDist * _DistanceEffect; clip(cutout - _Threshold); float degree = saturate((cutout - _Threshold) / _EdgeLength); fixed4 edgeColor = tex2D(_RampTex, float2(degree, degree)); fixed4 col = tex2D(_MainTex, i.uvMainTex); fixed4 finalColor = lerp(edgeColor, col, degree); return fixed4(finalColor.rgb, 1); } ENDCG } }}
向工程中导入贴图,具体如下图
在工程中新建一个材质,把 Shader 设置为 刚才新建的 Shader,并把导入的图片对应赋值上去,具体如下图
新建一个脚本 Test,双击脚本进行编辑,具体如下图
Test 脚本的具体代码和代码说明如下图
脚本编译正确,回到Unity,在场景中新建一个 Cube,把脚本和材质赋值给 Cube,具体如下图
运行场景,就会看到溶解从 X 轴方向,开始溶解,具体如下图
可以通过改变材质的 Distance Effect 调整溶解边缘的效果,具体如下图
运行场景,即会看到溶解边缘效果变了,具体如下图
到此,《Unity 消融特效教程之 定向消融效果的快速实现》讲解结束,谢谢
您的支持,是我们不断坚持知识分享的动力,若帮到您,还请帮忙投票有得;若有疑问,请留言 经