在其他游戏里见到过这样的效果:
人物走到建筑后面,被建筑挡住的部分做特殊显示、没有被建筑挡住的部分正常渲染。
想要实现这种效果,关键的要点是 ZTest.
今天借助unity了解了 ZTest 机制.再此做一下总结.
创建一个空场景,两个 cube,距离近的是 cube_1, 远的是 cube_2
分别给 cube_1 ,cube_2 写 shader
cube_1 的 shader 叫做 Shader_1. Shader_1 只包含一个颜色属性,把 cube_1 渲染成蓝色
Shader_1 代码如下
Shader "Custom/Shader_1"
{
Properties
{
_Color("color",Color) = (1,1,1,1)
}
SubShader
{
Tags { "RenderType"="Opaque" }
LOD 100
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct appdata
{
float4 vertex : POSITION;
};
struct v2f
{
float4 vertex : SV_POSITION;
};
fixed4 _Color;
v2f vert (appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
return o;
}
fixed4 frag (v2f i) : SV_Target
{
return _Color;
}
ENDCG
}
}
}
cube_2 的 shader 是 Shader_2 ,Shader_2