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命令实现
Shader简单例子之溶解
最新推荐文章于 2024-09-04 15:33:37 发布