您的位置:首页 > 移动开发 > Unity3D

Unity3d 一个简单的玻璃效果实现!

2011-04-21 13:49 267 查看
其实网上有很多玻璃效果的shader,我也是在网络上找了找,发现官网的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;

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;

//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.看看效果,一个简单的玻璃就这么实现了。



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐