Unity3D使用Shader實現(xiàn)腐蝕消失
本片shader實現(xiàn)的效果是模型腐蝕消失,且腐蝕的邊緣大小可以調(diào)、顏色可調(diào)。效果圖如下:

設(shè)置面板如下:

使用時需要給ClipMask參數(shù)給一張噪點圖,設(shè)置合適的cliplinesize和cliplinecolor,然后調(diào)整clipalpha就可以了。
原理是通過獲取噪點圖上對應(yīng)的顏色,轉(zhuǎn)換成灰度,然后用灰度與clipalpha對比,如果大于則被剪裁掉。
shader實現(xiàn)如下:
Shader "XM/CorrosionEffect" {
Properties {
_Color ("Color", Color) = (1,1,1,1)
_MainTex ("Albedo (RGB)", 2D) = "white" {}
_Glossiness ("Smoothness", Range(0,1)) = 0.5
_Metallic ("Metallic", Range(0,1)) = 0.0
_ClipMaskTex ("Clip Mask", 2D) = "white" {}
_ClipGray ("Clip Alpha", Range(0.0,1.0)) = 0.0
_ClipLineSize ("Clip Line Size", Range(0,1)) = 0.0
_ClipLineColor("Clip Line Color", Color) = (1,1,1,1)
}
SubShader {
Tags { "RenderType"="Opaque" }
LOD 200
CGPROGRAM
// Physically based Standard lighting model, and enable shadows on all light types
#pragma surface surf Standard fullforwardshadows
// Use shader model 3.0 target, to get nicer looking lighting
#pragma target 3.0
sampler2D _MainTex;
sampler2D _ClipMaskTex;
struct Input {
float2 uv_MainTex;
};
half _Glossiness;
half _Metallic;
fixed4 _Color;
fixed _ClipGray;
fixed _ClipLineSize;
fixed4 _ClipLineColor;
void surf (Input IN, inout SurfaceOutputStandard o) {
fixed4 m = tex2D (_ClipMaskTex, IN.uv_MainTex);
fixed gray = Luminance(m.rgb);
if(gray >= _ClipGray)
{
clip(-1);
}
fixed4 c;
if(gray >= _ClipGray - _ClipLineSize)
{
c = _ClipLineColor;
}
else
{
// Albedo comes from a texture tinted by color
c = tex2D (_MainTex, IN.uv_MainTex) * _Color;
}
o.Albedo = c.rgb;
// Metallic and smoothness come from slider variables
o.Metallic = _Metallic;
o.Smoothness = _Glossiness;
o.Alpha = c.a;
}
ENDCG
}
FallBack "Diffuse"
}
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C#中的隨機(jī)數(shù)函數(shù)Random()
這篇文章介紹了C#生成隨機(jī)數(shù)的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-05-05
Unity shader實現(xiàn)移動端模擬深度水效果
這篇文章主要為大家詳細(xì)介紹了Unity shader實現(xiàn)移動端模擬深度水效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-05-05
C#中Activator.CreateInstance()方法用法分析
這篇文章主要介紹了C#中Activator.CreateInstance()方法用法,實例分析了C#中Activator.CreateInstance()方法的功能、定義及使用技巧,需要的朋友可以參考下2015-03-03

