Shader简单例子之溶解

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命令实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值