UnityShader-通过相机纹理实现镜面效果

镜面效果

实现一块镜子材质,让其拥有镜面效果

实现
(1) 新建一个相机,用一张纹理接收相机拍到的内容

UnityShader-通过相机纹理实现镜面效果_第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
    	}
    }

}

效果

UnityShader-通过相机纹理实现镜面效果_第2张图片
镜面给的纹理会影响最终的清晰度,一般默认的是256x256,可以改成1024x1024。这样镜面反射的物体会更加清晰。

你可能感兴趣的:(Unity,Shader,unity,shader)