您的位置:首页 > 其它

显示被遮挡的人物或者物体

2016-02-20 14:52 399 查看


如图,要实现这个效果,再右侧物体上使用下面的shader

// Unlit alpha-cutout shader.
// - no lighting
// - no lightmap support
// - no per-material color

Shader "基础/Transparent Cutout ZTest" {
Properties{
_MainTex("Base (RGB) Trans (A)", 2D) = "white" {}
_Cutoff("Alpha cutoff 1", Range(0,1)) = 0.5
_Color("Text Color", Color) = (1,1,1,1)
}

SubShader
{
Tags{ "Queue" = "AlphaTest" "IgnoreProjector" = "True" "RenderType" = "TransparentCutout" }
LOD 100

Lighting Off

Pass
{
// Tags {
// 	"Queue"="Transparent"
// 	"IgnoreProjector"="True"
// 	"RenderType"="Transparent"
// 	"PreviewType"="Plane"
// }

ZWrite off
ZTest Greater
// Cull Off
Blend SrcAlpha OneMinusSrcAlpha

CGPROGRAM
#pragma vertex vert
#pragma fragment frag

#include "UnityCG.cginc"

struct appdata_t {
float4 vertex : POSITION;
fixed4 color : COLOR;
float2 texcoord : TEXCOORD0;
};

struct v2f {
float4 vertex : SV_POSITION;
fixed4 color : COLOR;
float2 texcoord : TEXCOORD0;
};

sampler2D _MainTex;
uniform float4 _MainTex_ST;
uniform fixed4 _Color;

v2f vert(appdata_t v)
{
v2f o;
o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
o.color = v.color * _Color;
o.texcoord = TRANSFORM_TEX(v.texcoord,_MainTex);
return o;
}

fixed4 frag(v2f i) : SV_Target
{
fixed4 col = i.color;
// col.a *= tex2D(_MainTex, i.texcoord).a;
// col.a *= 0.5;
// col = (0.1,0.3,0.4,0.5);
col.r = 0.13;
col.g = 0.36;
col.b = 0.7;
col.a = 0.6;
return col;
}
ENDCG
}

Pass
{
// Tags {"Queue"="AlphaTest" "IgnoreProjector"="True" "RenderType"="TransparentCutout"}

ZTest On
ZTest LEqual

CGPROGRAM
#pragma vertex vert
#pragma fragment frag

#include "UnityCG.cginc"

struct appdata_t {
float4 vertex : POSITION;
float2 texcoord : TEXCOORD0;
};

struct v2f {
float4 vertex : SV_POSITION;
half2 texcoord : TEXCOORD0;
};

sampler2D _MainTex;
float4 _MainTex_ST;
fixed _Cutoff;

v2f vert(appdata_t v)
{
v2f o;
o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
o.texcoord = TRANSFORM_TEX(v.texcoord, _MainTex);
return o;
}

fixed4 frag(v2f i) : SV_Target
{
fixed4 col = tex2D(_MainTex, i.texcoord);
clip(col.a - _Cutoff);
return col;
}
ENDCG
}
}

}


整个shader很简单,第一次先绘制被遮住的部分,第二次绘制剩余部分。此shader 来自

陆泽西
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: