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.看看效果,一个简单的玻璃就这么实现了。
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.看看效果,一个简单的玻璃就这么实现了。
相关文章推荐
- Unity3D 粒子系统实现一个简单的爆炸效果
- jquery实现的一个简单进度条效果实例
- Tab切换动画滑动效果的一个简单实现
- 用CSS实现一个简单的幻灯片效果页面
- 一个简单的滚动数字的效果实现
- 利用PreLoader实现一个平视显示(HUD)效果(可以运用到加载等待效果),并进行简单的讲解
- iOS 8 模糊视图(毛玻璃效果)的简单实现UIVisualEffectView
- jquery实现的一个简单进度条效果实例
- 一个小型的网站,比如个人网站,可以使用最简单的html静态页面就实现了,配合一些图片达到美化效果,所有的页面均存放在一个目录下,这样的网站对系统架构、性能的要求都很简单,随着互联网业务的不断丰富,网站
- 利用PreLoader实现一个平视显示(HUD)效果(可以运用到加载等待效果),并进行简单的讲解
- unity3d射线的原理用法以及一个利用射线实现简单拾取的小例子
- Javascript实现的一个简单的弹幕效果-优化版
- UE4实现一个简单的炸弹爆炸与镜头振动效果
- [iOS/Swift]简单实现跟系统一样的毛玻璃效果的View,可在上面加控件,可移动
- 如何简单的实现一个tab页title的动画效果
- Unity3D --实现一个物体若隐若现的效果
- Javascript实现的一个简单的弹幕效果-入门版
- html5实现的一个简单的下雨效果
- 利用transition属性实现一个简单小巧的hover效果
- 一个简单的例子,实现UILabel阴影效果