Surface Shader 抖動溶解效果
寫了個挺垃圾的shader,不過我覺得挺有趣的就分享下(唯一的運算就是三角函數。。)
Shader "Custom/表面著色器學習"
{
Properties
{
_MainTex("Texture", 2D) = "white" {}
_zaodian("噪點貼圖",2D)= "white" {}
_MixValue("MixValue", Range(0,1)) = 0.5
_A("幅度", Range(-1,1)) = 1
_F("速度",float) = 0.5
_S("週期",float) = 0.5
_DissolveEdge("碎片邊界",Range(0.0,0.1))=0.01
_TileFactor("溶解碎片大小",Range(0.0,4.0)) = 1.0
_DisintegrateAmount("溶解程度",Range(0.0,1.01)) = 0.0
}
SubShader{
Tags { "RenderType" = "Opaque" }
CGPROGRAM
#pragma surface surf Lambert vertex:vert
struct Input
{
float2 uv_MainTex;
};
float _A;
float _F;
float _S;
float _Amount;
float _MixValue;
void vert(inout appdata_full v)
{
float timer = _Time.y* _S;
float waver = _A * sin(timer + v.vertex.x*_F);
v.vertex.y += waver;
}
sampler2D _zaodian;
sampler2D _MainTex;
float _DisintegrateAmount;
float _TileFactor;
float _DissolveEdge;
void surf(Input IN, inout SurfaceOutput o)
{
float clipval = tex2D(_zaodian, IN.uv_MainTex*_TileFactor).rgb - _DisintegrateAmount;
if (clipval < _DissolveEdge&&_DisintegrateAmount>0)
//if(1> 2&&3> 1) 表示如果兩個條件都成立則執行之後的邏輯;
{
discard;
//o.Emission = fixed4(0, 0, 0, 0);
//o.Albedo = fixed4(0, 0, 0, 0);
}
else
{//沒有分解部分,正常顯示紋理
o.Albedo = tex2D(_MainTex, IN.uv_MainTex).rgb;
}
}
ENDCG
}
Fallback "Diffuse"
}