Shader 反射光(reflection)

Unity中的shader使用反射光,相當於我們初中物理的反射光,入射光,發現,發射光的知識,實際上就是模擬現實中的光照。

但是Unity中的反射光向量Unity自己計算好的,不需要我們來計算,然後下文看書中的Cubemap有很多人覺得複雜,也有人問過我怎麼創建,我這裏先簡單介紹下:


1.Cubemap


Cubemap:立體空間貼圖(這是個人翻譯的理解),實際上它屬於貼圖類型,只不過他是由六個方向的貼圖連接成,下面直接看官網的解釋:


cubemap是六張方形貼圖的集合。



他支持的6張圖的排布方式如下:



具體的大家可以去官網看下。


2.反射光


unity計算好反射向量後,我們搞起來還是比較容易的:


反射向量直接在worldRefl中獲取,自發管設置爲cubemap和參數的乘積,具體看下面的腳本:

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"
}

3.效果

設置既效果如圖:

Amnount只接近於0時,就是幾乎沒有反射光:
下面展示了不同值對應的效果:



以上就是簡單的反射光,有什麼建議的互相交流哈!

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