原理图
实现方法:新建一个 Unlit shader 文件,编写 shader 代码(见下文),通过 shader 右键创建一个 Material,新建一个Render Texture,将这个 texture 拖到 Material 的Texture
属性上,同时将这个 texture 拖到目标摄像机的Target Texture
属性上,最后将 Material 拖到场景中的 GameObject 上(如屏幕、镜面等片状物体效果都是很好的)。
最后奉上 Shader 代码:
Shader "Custom/HorizontalFlip" {
Properties{
_MainTex("Texture", 2D) = "white" {}
}
SubShader{
Pass {
Tags { "RenderType" = "Opaque" }
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct appdata {
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
};
struct v2f {
float2 uv : TEXCOORD0;
float4 vertex : SV_POSITION;
};
sampler2D _MainTex;
v2f vert(appdata v) {
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = v.uv;
return o;
}
fixed4 frag(v2f i) : SV_Target {
// 将纹理坐标水平翻转
float2 flippedUV = float2(1.0 - i.uv.x, i.uv.y);
// 从纹理中获取颜色
fixed4 col = tex2D(_MainTex, flippedUV);
return col;
}
ENDCG
}
}
FallBack "Diffuse"
}