Unity Shader------遮罩反射(Masking Reflection)

上一篇分析了反射光,是整個球體都是的,但是我們可能某些情況下不需要整體反射,只需要局部咋辦,這一篇會分析遮罩反射。


相比上一篇就是小小的改動,但是我覺得還是貼出來,以後用到來翻比較快。


先上圖,是不是有點像地球的感覺




下面上代碼:


Shader "MyShaders/MaskingReflection" 
{
	Properties
	{
		_MainTint("Diffuse Tint", Color) = (1,1,1,1)
		_MainTex("Base (RGB)", 2D) = "white" {}
		_ReflAmount("Reflection Amount", Range(0, 1)) = 1
		_Cubemap("Cubemap", CUBE) = ""{}
		_ReflMask("Reflection Mask", 2D) = ""{}
	}

	SubShader
	{
		Tags{ "RenderType" = "Opaque" }
		LOD 200

		CGPROGRAM
		#pragma surface surf Lambert

		sampler2D _MainTex;
		sampler2D _ReflMask;
		samplerCUBE _Cubemap;
		float4 _MainTint;
		float _ReflAmount;

		struct Input
		{
			float2 uv_MainTex;
			float3 worldRefl;
		};

		void surf(Input IN, inout SurfaceOutput o)
		{
			half4 c = tex2D(_MainTex, IN.uv_MainTex);
			float3 reflection = texCUBE(_Cubemap, IN.worldRefl).rgb;
			float4 reflMask = tex2D(_ReflMask, IN.uv_MainTex);

			o.Albedo = c.rgb * _MainTint;
			o.Emission = (reflection * reflMask.r) * _ReflAmount;
			o.Alpha = c.a;
		}

	ENDCG
	
	}
	FallBack "Diffuse"
}


這個還是很容易的,我就不細說了。。。


素材下載

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章