Shader简单例子之溶解

来源:互联网 发布:解答数学题的软件 编辑:程序博客网 时间:2024/04/28 19:31
Shader "Custom/s2" {Properties      {         _MainTex ("Base (RGB)", 2D) = "white" {}         _CanKaoTex ("单通道的图",2D) = "white"{}//这张图呢  试验的话  随便找个  只有R通道  的图片即可.(当然可可以只有B,也可以不仅仅有R通道,只是去这张图的R值进行是否溶解的一个判断标准         //写汉字只是为了更好理解.         _RongJieTime ("完全溶解所需时间 (Second)",Float) = 2             }     SubShader      {         Tags { "RenderType"="Opaque" }                  Pass         {             CGPROGRAM             #pragma vertex vert             #pragma fragment frag             #include "UnityCG.cginc"                           uniform sampler2D _MainTex;             uniform sampler2D _CanKaoTex;             uniform float _RongJieTime;     struct vertexOutput{             float4 pos : SV_POSITION;             float2 uv:TEXCOORD0; };             vertexOutput vert(appdata_full v)     {vertexOutput o;o.pos = mul (UNITY_MATRIX_MVP, v.vertex);o.uv = MultiplyUV( UNITY_MATRIX_TEXTURE0, v.texcoord );return o;      }             float4 frag(v2f_img i):COLOR             { //随时间的增加,应该溶解的标识.(这里只是正好用时间去比较,实际上它和颜色值无关)                 float shoudRongJie = saturate(_Time.y / _RongJieTime);//saturate为cg封装的函数,作用是应该是相当于clamp的意思,把计算出来的值小于0的都为0,大于1的都为1 //参考图的R通道值                 float cankaoTexPassR = tex2D(_CanKaoTex,i.uv).r;     //参考图上对应的R值较小的部分先开始溶解.                         if(cankaoTexPassR <= shoudRongJie)                 {                     discard;                 }                                  float4 texColor = tex2D(_MainTex,i.uv); return texColor;             }                          ENDCG         }     }           FallBack Off }和上一篇的挖孔是一个道理,主要用discard命令实现

0 0