曾经写过一篇关于透明效果shader的实现,不过使用的是顶点片段着色器,今天实现的效果是用表面着色器来实现透明效果。
其实很简单,不过自己悟性太差。
此处我要解决一个更大的问题是,Mesh顶点颜色变换,通过shader反应出随时间变化的效果,那么就需要显示出顶点的颜色。附带着有透明效果
Shader "Custom/Pollutant"
{
SubShader
{
Tags { "Queue"="Transparent" }
LOD 200
CGPROGRAM
#pragma surface surf Lambert vertex:vert alpha
float4 _MainTint;
struct Input
{
//float2 uv_MainTex;
float4 vertColor;
};
void vert(inout appdata_full v, out Input o)
{
o.vertColor = v.color;
}
void surf (Input IN, inout SurfaceOutput o)
{
o.Albedo = IN.vertColor;
if (IN.vertColor.x + IN.vertColor.y + IN.vertColor.z <0.5)
{
o.Alpha = 0;
}
else
{
o.Alpha = 1;
}
}
ENDCG
}
FallBack "Diffuse"
}
解释一下,其实最关键的一句是
#pragma surface surf Lambert vertex:vert alpha
大家看一下圣典就明白了,我为什么这样写
http://game.ceeger.com/Components/SL-SurfaceShaders.html
这样既可以处理顶点的颜色,又可以实现了透明效果。终于集齐了两个透明效果。
有时间尝试一下V&F的顶点颜色处理。