镜面效果
实现一块镜子材质,让其拥有镜面效果
实现
(1) 新建一个相机,用一张纹理接收相机拍到的内容
纹理没有什么要求,最好是一张纯色的图
(2) 创建一张Plane,或者其他可以赋纹理的组件。
(3) 思路:
------ Shader需要接受一张纹理
------ Shader将纹理的x坐标反转
------ Shader将纹理返回
思路其实非常简单,就是将新相机看到的东西传递到一张纹理,反转坐标之后显示在镜子上
Shader "Custom/Mirror"
{
Properties
{
_MainTex("MainTex",2D) = "white" {}
}
SubShader
{
Pass {
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
sampler2D _MainTex;
struct a2v
{
float4 vertex:POSITION ;
float4 texcoord :TEXCOORD0 ;
};
struct v2f
{
float4 pos:SV_POSITION;
float2 uv:TEXCOORD0 ;
};
v2f vert(a2v v){
v2f o ;
o.pos = UnityObjectToClipPos(v.vertex);
o.uv = v.texcoord;
//反转x轴
o.uv.x = 1 - o.uv.x;
return o;
}
fixed4 frag(v2f o):SV_Target{
return tex2D(_MainTex,o.uv);
}
ENDCG
}
}
}
效果
镜面给的纹理会影响最终的清晰度,一般默认的是256x256,可以改成1024x1024。这样镜面反射的物体会更加清晰。