一、效果示意图
二、透视的过程
要看的效果:【相机】借助【球体】,透过【圆柱】看到【红色的方块】
三、实现原理-Shader
借助shader,两个挂有特殊shader的物体,当他们在视线里重叠的时候,重叠的部分变成透明。
shder清单见附录部分
(1)透镜的shader设置
(2)障碍物的shader设置
四、附录-shader清单
(1)透镜挂在的shader
Shader "Custom/MaskShader4"
{
Properties
{
_MainTex ("Texture", 2D) = "white" {}
_Color ("Color", Color) = (1,1,1,1) // 添加颜色属性
}
SubShader
{
Tags { "RenderType"="Opaque" "Queue"="Geometry-1" }
ColorMask 0
ZWrite Off
Stencil
{
Ref 1
Comp Always
Pass Replace
}
CGPROGRAM
#pragma surface surf Lambert alpha
sampler2D _MainTex;
fixed4 _Color; // 声明颜色变量
struct Input
{
float2 uv_MainTex;
};
void surf (Input IN, inout SurfaceOutput o)
{
fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color; // 应用颜色
o.Albedo = c.rgb;
o.Alpha = c.a;
}
ENDCG
}
FallBack "Diffuse"
}
(2)障碍物挂在的shader
Shader "Custom/MaskedObjectShader4"
{
Properties
{
_MainTex ("Texture", 2D) = "white" {}
_Color ("Color", Color) = (1,1,1,1) // 添加颜色属性
}
SubShader
{
Tags { "RenderType"="Opaque" "Queue"="Geometry" }
Stencil
{
Ref 1
Comp NotEqual
Pass Keep
}
CGPROGRAM
#pragma surface surf Lambert
sampler2D _MainTex;
fixed4 _Color; // 声明颜色变量
struct Input
{
float2 uv_MainTex;
};
void surf (Input IN, inout SurfaceOutput o)
{
fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color; // 应用颜色
o.Albedo = c.rgb;
o.Alpha = c.a;
}
ENDCG
}
FallBack "Diffuse"
}
五、鸣谢
感谢chatGpt公公和Claude婆婆的慷慨大方