Unity中的shader使用反射光,相當於我們初中物理的反射光,入射光,發現,發射光的知識,實際上就是模擬現實中的光照。
但是Unity中的反射光向量Unity自己計算好的,不需要我們來計算,然後下文看書中的Cubemap有很多人覺得複雜,也有人問過我怎麼創建,我這裏先簡單介紹下:
1.Cubemap
Cubemap:立體空間貼圖(這是個人翻譯的理解),實際上它屬於貼圖類型,只不過他是由六個方向的貼圖連接成,下面直接看官網的解釋:
cubemap是六張方形貼圖的集合。
他支持的6張圖的排布方式如下:
具體的大家可以去官網看下。
2.反射光
Shader "MyShaders/SimpleReflection"
{
Properties
{
_MainTint("Diffuse Tint", Color) = (1,1,1,1)
_MainTex("Base (RGB)", 2D) = "white" {}
_Cubemap("CubeMap", CUBE) = ""{}
_ReflAmount("Reflection Amount", Range(0.01, 1)) = 0.5
}
SubShader
{
Tags{ "RenderType" = "Opaque" }
LOD 200
CGPROGRAM
#pragma surface surf Lambert
sampler2D _MainTex;
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) * _MainTint;
o.Emission = texCUBE(_Cubemap, IN.worldRefl).rgb * _ReflAmount;
o.Albedo = c.rgb;
o.Alpha = c.a;
}
ENDCG
}
FallBack "Diffuse"
}