Unity中SortingLayer、Order in Layer和RenderQueue的讲解 | 您所在的位置:网站首页 › sorting › Unity中SortingLayer、Order in Layer和RenderQueue的讲解 |
文章目录
一. 前言二. 摄像机(Camera)1. 3D摄像机2. UI摄像机3. 摄像机的Depth和Clear Flags设置
三. 画布(Canvas)1. Sorting Layer2. Order in Layer
四. Shader的RenderQueue
一. 前言
Unity游戏开发中,模型、界面、特效等等,需要规划好层的概念,涉及到摄像机(Camera)、画布(Canvas)、Shader等相关内容。 二. 摄像机(Camera)一般3D游戏项目,会创建至少两个摄像机,一个3D摄像机(使用透视视角)和一个UI摄像机(使用正交视角)。 1. 3D摄像机一般UI摄像机的Depth要大于3D摄像机的Depth,这样才能使UI在3D摄像机渲染的物体的前面显示。 摄像机的Clear Flags建议使用Depth only,然后在Culling Mask选择相应的层(Layer)。 比如3D摄像机的Culling Mask如下: UGUI中,所有UI元素都必须在画布(Canvas)的子节点中。Canvas的Render Mode一般是使用Screen Space - Camera模式,把UICamera赋值给Canvas的Render Camera。 添加Sorting Layer可以点击Inspector窗口的Tag -> AddTag -> SortingLayer 拓展:UGUI会自动合并批次,原理是它会把一个Canvas下的所有元素合并在一个Mesh里,如果Canvas下的元素很多,任意一个元素发生位置、大小的改变,就需要重新合并所有元素的Mesh。如果元素非常多的话,就可能会造成卡顿。 一个比较好的做法是每个UI界面都设置成一个Canvas。如果这个界面下的元素比较多,可以考虑嵌套多几个Canvas。尤其是会频繁改变位置大小的元素,这样可以降低它们合并Mesh的开销。但是Canvas嵌套太多也不好,Mesh合并是降低了,但是DrawCall又上去了,因为每个Canvas都会单独占用一个DrawCall。 注意:到这里,应该明白了Layer与Sorting Layer无关,它们是两个概念。 2. Order in LayerOrder in Layer顾名思义,就是Sorting Layer的内部排序,这样配合Sorting Layer就是两级的排序,可以解决大部分情况的渲染顺序需求。 当然,如果创建多个UI摄像机,不同Canvas绑定不同的UI摄像机,再配合摄像机的Depth,就是三级排序,但一般不创建太多的UI摄像机,除非逼不得已。 小结: 渲染排序级别:Camera的Depth > Canvas的Sorting Layer > Canvas的Order in Layer 另外,ParticleSystem也有Sorting Layer和Order in Layer。 Unity提供给我们一些默认的渲染队列,每一个对应一个唯一的值,来指导Unity绘制对象到屏幕上。这些内置的渲染队列被称为Background, Geometry, AlphaTest, Transparent, Overlay。这些队列不是随便创建的,它们是为了让我们更容易地编写Shader并处理实时渲染的。 示例 Tags{ "RenderType" = "Geometry" }在材质球中可以看到显示。 当RenderQueue填-1是使用shader自定义的值,否则使用手动填的值。 2500是关键值,它是透明跟不透明的分界点。 知识点: RenderQueue > 2500的物体绝对会在RenderQueue |
CopyRight 2018-2019 实验室设备网 版权所有 |