纳金网
标题:
Unity3d 一个简单的玻璃效果实现
[打印本页]
作者:
奔跑的小兔
时间:
2012-4-25 13:39
标题:
Unity3d 一个简单的玻璃效果实现
官网的demo“Bootcamp Demo”里面有个玻璃的shader,感觉效果不错还挺简单的,于是修改了下,本来那个Shader需要3张图,这里为了简单起见,改成用一张图,现在分享给大家,用来实现简单的玻璃效果是没有问题的。
1.首先创建一个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; s***ct vertInput { float4 vertex : POSITION; float3 normal : NORMAL; float2 texcoord : TEXCOORD0; }; s***ct vertOutput { float4 pos : POSITION; float2 texcoord : TEXCOORD0; float3 reflectVec : TEXCOORD1; }; vertOutput vert(vertInput i) { vertOutput o; //Set position. o.pos = mul (UNITY_MATRIX_MVP, i.vertex); //Set texcoord. o.texcoord = i.texcoord; //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; //Set vector used in cubeMap reflection. o.reflectVec = reflect(posWorld, normWorld); return o; } half4 frag( vertOutput i ) : COLOR { //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。 2.准备一张带透明通道的PNG图,在PhotoShop中做一张图,透明度高点,大概80%以上,颜色你可以自己选择,试一试效果。我使用的是一张淡蓝色的透明度90%的128*128的PNG图,注意一定要是PNG或者PSD图,只有他们带透明通道。
3.在场景中新建一个CUBE,将它拉长拉细点,感觉像块玻璃就可以了,然后将刚才的那张PNG图拖给它,然后修改shader为第一步新建的shader,然后就OK了。
4.看看效果,一个简单的玻璃就这么实现了。
欢迎光临 纳金网 (http://rs.narkii.com/club/)
Powered by Discuz! X2.5