shader实例(十五)渲染队列进行深度排序

标签:
深度排序渲染队列unityshader |
分类: Shader |
这几天忙着换UI,不仅是身体累,心也累。美术主管感觉下面的人画的不好,换!运营期,运营老大说界面不好,换!一个网页游戏非要折腾到第四版界面,真是闲得没事做,游戏的好坏跟界面换不换有很大的关系吗?至少从小玩游戏到大就没感觉那个游戏因为画面好看而成为经典,更何况是界面。吐吐槽,哈哈,工作嘛,做多了无脑体力活厌倦也正常。感觉游戏开发取舍很重要,最主要的是找到平衡点,不要为了做功能而开发游戏,玩家不是傻子,要有一颗把自己当玩家的心!http://www/uc/myshow/blog/misc/gif/E___7393ZH00SIGG.gif好像废话太多了,进入正题。。。
深度排序可以理解为photoshop中的图层概念,可以控制物体显示的层级顺序,Unity提供这样的内置标签,方便我们自由控制。
实例如下:
1.创建一个平面和两个球体,如下:
http://s2/mw690/002wvREMgy6O6e2XAeB21&690
2.编写shader,注意红色部分为深度的控制代码。
Shader "Custom/Depth" {
}
3.将上面的shader加到前面的那个大的球体上,效果如下:
http://s13/mw690/002wvREMgy6O6esu0Jm8c&690
可以看到大的球体在最后面了,不过它的影子没有变化,在这里只是手动去控制它的渲染顺序了。
默认情况下,unity会根据物体与摄像机的距离来决定渲染顺序,但是在特殊情况下,我们需要控制物体的渲染顺序,这时使用Tags模块就可以了。
Unity已经提供了一些默认的渲染队列,每个渲染队列都有一个唯一值来确定何时将物体渲染到屏幕,如下:
渲染队列 | 渲染队列描述 | 渲染队列值 |
Background | 这个队列被最先渲染。它被用于skyboxes等。 | 1000 |
Geometry | 这是默认的渲染队列。它被用于绝大多数对象。不透明几何体使用该队列。 | 2000 |
AlphaTest | 通道检查的几何体使用该队列。它和Geometry队列不同,对于在所有立体物体绘制后渲染的通道检查的对象,它更有效。 | 2450 |
Transparent | 该渲染队列在Geometry和AlphaTest队列后被渲染。任何通道混合的(也就是说,那些不写入深度缓存的Shaders)对象使用该队列,例如玻璃和粒子效果。 | 3000 |
Overlay | 该渲染队列是为覆盖物效果服务的。任何最后被渲染的对象使用该队列,例如镜头光晕。 | 4000 |