寫了個挺垃圾的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"

}

這個是效果

最後大佬請輕噴,我也才剛開始學T-T

推薦閱讀:

相關文章