美文网首页
Shader 学习之路-实现溶解效果的Shader(十一)

Shader 学习之路-实现溶解效果的Shader(十一)

作者: AnimeKing | 来源:发表于2019-05-25 11:48 被阅读0次

             我们都知道在游戏中,对于物体被溶解的效果,如降落伞溶解、纸张溶解销毁等,还是挺常见的,今天我和大家一起学习一下,如何简单实现一个溶解效果的Shader。

     1、新建Shader-Dissolve.shader文件,代码如下:

    Shader "Custom/Shader-Dissolve" {

        Properties {

            _MainTex ("Albedo (RGB)", 2D) = "white" {}

            _DissolveTex("Sub(RGB)",2D)="white"{}

            _EdgeColor("Main Color",Color)=(1,1,1,1)

            _EdgeValue("Dissolve Range",Range(0,1))=0.1

            _AddColor ("Add Color",Color)=(1,1,1,1)

            _UserColorValue("UserColorSpeed",Range(0,1))=0.2 

        }

        SubShader

        {

          Pass

          {

           CGPROGRAM

           #include "UnityCG.cginc" //引用unity 自带的一些方法

           #pragma vertex vert //定义顶点着色器函数

           #pragma fragment frag //定义片元着色器函数

           sampler2D _MainTex;

           float4 _MainColor;

           sampler2D _DissolveTex;

           float4 _EdgeColor;

           float4  _AddColor;

           float _EdgeValue;

           float _UserColorValue;

           float4 _DissColor;

           struct a2v //表示这个结构体 是需要用到顶点函数的

           {

             float4 position:POSITION;

             float2 uv:TEXCOORD0;

           };

           struct v2f//表示顶点函数的返回值作为参数传递

           {

            float4 sv_position:SV_POSITION;

            float2 sv_uv:TEXCOORD0;

           };

           v2f vert (a2v i)//顶点函数

           {

             v2f o;

             o.sv_position = UnityObjectToClipPos(i.position);

             o.sv_uv =i.uv;

             return o;

           }

           float4 frag(v2f v):SV_TARGET

           {

             float4 mainTex= tex2D (_MainTex,v.sv_uv);

             float dissolveValue=tex2D (_DissolveTex,v.sv_uv).r;

             float clipValue =dissolveValue-_UserColorValue;

             clip(clipValue);

             if(clipValue>0 && clipValue<_EdgeValue)

             {

               float4 colors =lerp(_DissColor,_AddColor,(clipValue/_EdgeValue)*2);

               mainTex=colors;

             }

             return mainTex;

           }

           ENDCG

           }

        }

    }

    2、最后测试效果,如图示:

    相关文章

      网友评论

          本文标题:Shader 学习之路-实现溶解效果的Shader(十一)

          本文链接:https://www.haomeiwen.com/subject/scpazqtx.html