实现原理:
- 设置一个额外的摄像机用于捕捉镜子所包括的场景,并将捕捉到的画面渲染到渲染纹理中存储起来,用于镜子的渲染。
- 给镜子编写shader利用渲染纹理。
实现效果:
场景:
镜子:
实现代码:
// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'
Shader "Custom/Chapter10-Mirror"
{
Properties
{
//摄像机渲染到的渲染纹理
_MainTex("Main Tex",2D)="white"{}
}
SubShader
{
Tags { "RenderType"="Opaque" "Queue"="Geometry"}
Pass{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
sampler2D _MainTex;
struct a2v{
float4 vertex:POSITION;
float3 texcoord:TEXCOORD0;
};
struct v2f{
float2 uv:TEXCOORD0;
float4 pos:SV_POSITION;
};
v2f vert(a2v i){
v2f o;
o.uv=i.texcoord;
o.pos=UnityObjectToClipPos(i.vertex);
o.uv.y=1-o.uv.y;
return o;
}
fixed4 frag(v2f i):SV_Target{
return tex2D(_MainTex,i.uv);
}
ENDCG
}
}
FallBack Off
}