1. 程式人生 > >Unity3D中簡單地應用玻璃材質

Unity3D中簡單地應用玻璃材質

最近在學習Unity3D。發現Unity3D中的玻璃效果要用到Shader才能實現。雖然簡單學習了一下能看懂Shader的結構了,但要自己寫一個實現自己想要的效果的Shader暫時還無能為力。這個要麼需要十足的經驗,要麼具有相當的抽象思維。(可惜這兩個我都沒有…………)

隨後在網上找了一個可以可以實現玻璃材質的shader。

源部落格是在:http://www.cnblogs.com/yb_lin/archive/2011/04/21/2023475.html

首先新建一個shader,程式碼如下:

Shader "Glass"
{ 
	Properties
	{
		_MainTex ("Main Texture", 2D) = "white" {}
	}
	Subshader 
	{
		Tags { "Queue" = "Transparent" }
		Pass 
		{
			Cull Off 
			ColorMask RGB
			Blend SrcAlpha OneMinusSrcAlpha 
			CGPROGRAM
			#pragma vertex vert 
			#pragma fragment frag
			#include "UnityCG.cginc" 


			uniform sampler2D _MainTex;
			uniform float _ReflectValue;
			struct vertInput
			{
				float4 vertex : POSITION;
				float3 normal : NORMAL;
				float2 texcoord : TEXCOORD0;
			};
			struct vertOutput 
			{
				float4 pos : POSITION; 
				float2 texcoord : TEXCOORD0;
				float3 reflectVec : TEXCOORD1;
			};  
			vertOutput vert(vertInput i)
			{
				vertOutput o;
<span style="white-space:pre">				</span>//Set position.
				o.pos = mul (UNITY_MATRIX_MVP, i.vertex);  
<span style="white-space:pre">				</span>//Set texcoord.
				o.texcoord = i.texcoord;
<span style="white-space:pre">				</span>//Calculate normal and position in camera space.
				float3 normWorld = normalize( mul((float3x3)UNITY_MATRIX_IT_MV, i.normal));
				float3 posWorld = mul(UNITY_MATRIX_MV, i.vertex).xyz;
<span style="white-space:pre">				</span>//Set vector used in cubeMap reflection.
				o.reflectVec = reflect(posWorld, normWorld);
				return o;
			}
			half4 frag( vertOutput i ) : COLOR
			{
<span style="white-space:pre">				</span>//Get colors of MainTexture and AlphaTexture.
				half4 colorTex = tex2D(_MainTex, i.texcoord);
				return colorTex;
			}
			ENDCG
		}
	}
	SubShader {
		Tags { "Queue" = "Transparent" }
		Pass {
			Cull Off 
			ColorMask RGB
			Blend SrcAlpha OneMinusSrcAlpha 
			SetTexture [_MainTex] { combine texture }
		}
	}
}

然後新建一個材質

之後在材質的地方選擇


Glass也就是之前Shader中第一行顯示的名字

然後在PS中建立一個半透明的紋理。

儲存為psd或者png格式都可以。之後在Unity3D中選擇Texture,選擇剛才建立的圖片。

然後就能實現一個基本的玻璃效果了:

更高階的玻璃效果諸如加入反射啊,折射啊,還需要以後慢慢來學習。不過一步一個腳印,總有學會的一天~