Unity Shader 小功能之 透明
2016-04-22 16:10
441 查看
1.在Properties块中添加一个新的property,这使得我们可以全局控制透明度。
2.改变渲染队列
Tags { "Queue"="Transparent" }一步将决定半透明物体和不透明物体之间正确的渲染关系,如果没有正确设置,那么很有可能就会出现后面的物体跑到了透明物体的前面。
3.在#pragma声明中添加一个新的参数:alpha参数。
解释:再解释一遍上面这句声明的意思。使用名为surf的Surface Function,使用内置的Lambert光照函数,开启透明通道。
4.在surf()函数中添加控制透明度的代码。
完整代码示例:
相关链接:http://blog.csdn.net/candycat1992/article/details/28630459
Properties { _MainTex ("Base (RGB)", 2D) = "white" {} _TransVal ("Transparency Value", Range(0,1)) = 0.5 }
2.改变渲染队列
Tags { "Queue"="Transparent" }
Tags { "Queue"="Transparent" }一步将决定半透明物体和不透明物体之间正确的渲染关系,如果没有正确设置,那么很有可能就会出现后面的物体跑到了透明物体的前面。
3.在#pragma声明中添加一个新的参数:alpha参数。
CGPROGRAM #pragma surface surf Lambert alpha
解释:再解释一遍上面这句声明的意思。使用名为surf的Surface Function,使用内置的Lambert光照函数,开启透明通道。
4.在surf()函数中添加控制透明度的代码。
void surf (Input IN, inout SurfaceOutput o) { half4 c = tex2D (_MainTex, IN.uv_MainTex); o.Albedo = c.rgb; o.Alpha = c.b * _TransVal; }
完整代码示例:
Shader "Custom/SimpleAlpha" { Properties { _MainTex ("Base (RGB)", 2D) = "white" {} _TransVal ("Transparency Value", Range(0,1)) = 0.5 } SubShader { Tags { "RenderType"="Opaque" "Queue"="Transparent"} LOD 200 CGPROGRAM #pragma surface surf Lambert alpha sampler2D _MainTex; float _TransVal; struct Input { float2 uv_MainTex; }; void surf (Input IN, inout SurfaceOutput o) { half4 c = tex2D (_MainTex, IN.uv_MainTex); o.Albedo = c.rgb; o.Alpha = c.b * _TransVal; } ENDCG } FallBack "Diffuse" }
相关链接:http://blog.csdn.net/candycat1992/article/details/28630459
相关文章推荐
- Unity对象池(一)
- unity, GL.TexCoord or GL.Color must put before GL.Vertex!!!
- Unity Shader Tags
- unity 关于Rotation和Quaternion的一些问题(欧拉角与四元数,lerp与slerp)
- Unity5x 场景烘焙,动态物体烘焙不上
- unity 内存管理和原理
- 将FBX文件导入Unity3d中
- Unity 调用外部DLL插件
- unity 发布到Android平台 Splash Screen无法出现完整加载图片
- unity的温度云图实现
- Unity3D的几种坐标系,以及屏幕解锁类似功能
- Unity3D - 动作动画忽略timeScale
- Unity Mecanim在大型mmo中的应用
- Unity 几个物体移动的方法
- Unity3D 图形优化
- Unity3D 性能优化
- 在Unity中对SQLite的增删改查的简单封装
- Unity3D安卓导出包加密学习--加密libmono.so
- 设计师 VR 成型设计知识收集
- unity3D iTween的使用