上一篇分析了反射光,是整個球體都是的,但是我們可能某些情況下不需要整體反射,只需要局部咋辦,這一篇會分析遮罩反射。
相比上一篇就是小小的改動,但是我覺得還是貼出來,以後用到來翻比較快。
先上圖,是不是有點像地球的感覺
下面上代碼:
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"
}
這個還是很容易的,我就不細說了。。。