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

Posted 御雪妃舞

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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"



这个还是很容易的,我就不细说了。。。


素材下载

以上是关于Unity Shader------遮罩反射(Masking Reflection)的主要内容,如果未能解决你的问题,请参考以下文章

Unity Shader ------ 高级纹理之立方体纹理及光线反射折射的实现

Unity Shader ------ 高级纹理(上)

Unity Shader ------ UV动画原理及简易实现

Unity Shader ------ 透明效果之半透明效果的实现及原理

Unity Shader ------ 高级纹理之渲染纹理及镜子与玻璃效果的实现

Unity模糊遮罩