Unity中的渲染顺序自上而下大致分为三层
渲染优先级 Camera depth > Sorting Layer > Order in Layer > RenderQueue
-
Camera depth:越小越先渲染(大的显示在小的前面)
如图:尽管Sphere距离摄像机较远,但由于Camera_Sphere depth大于Camera_Cube,所以最后Sphere显示在Cube的前面。
-
Sorting Layer/Order in Layer:越小越先渲染(大的显示在小的前面)
添加Sorting Layer在Inspector中Tag->Add Tag->Sorting Layers
如下图:Canvas1中是Image是红色的根据UGUI默认显示规则,Canvas1会覆盖Canvas,但由于Canvas的Soriting Layer比Canvas1高,所以渲染顺序改变了。
-
RenderQueue:越小越先渲染(大的显示在小的前面)
- 需要注意的是 RenderQueue 2500是关键值,他是透明与不透明的分界点。
- RenderQueue <= 2500 物体先遵循RenderQueue越小越先渲染,当RenderQueue相同时距离摄像机越近越先渲染,先渲染距离摄像机近的再渲染距离摄像机远的时候遮挡部分可以不渲染这是为了提升性能。
- RenderQueue > 2500 物体先遵循RenderQueue越小越先渲染,当RenderQueue相同时距离摄像机越远越先渲染,这是由于有半透明先渲染远的进行颜色叠加
- RenderQueue 优先级大于深度值。
Unity已经提供了一些默认的渲染队列,每个渲染队列都有一个唯一值来确定何时将物体渲染到屏幕,如下:
渲染队列 |
渲染队列描述 |
渲染队列值 |
Background |
这个队列被最先渲染。它被用于skyboxes等。 |
1000 |
Geometry |
这是默认的渲染队列。它被用于绝大多数对象。不透明几何体使用该队列。 |
2000 |
AlphaTest |
通道检查的几何体使用该队列。它和Geometry队列不同,对于在所有立体物体绘制后渲染的通道检查的对象,它更有效。 |
2450 |
Transparent |
该渲染队列在Geometry和AlphaTest队列后被渲染。任何通道混合的(也就是说,那些不写入深度缓存的Shaders)对象使用该队列,例如玻璃和粒子效果。 |
3000 |
Overlay |
该渲染队列是为覆盖物效果服务的。任何最后被渲染的对象使用该队列,例如镜头光晕。 |
4000 |
示例如下图:当在Shader中把ZWrite 关闭,RenderQueue设置为2000。Camera Clear Flags设置为Solid Color 立方体能显示出来,如下图1,Camera Clear Flags设置为Skybox时,立方体不见了,如果下图2。原因是Skybox渲染顺序为2500.5, 先渲染了立方体再渲染skybox由于没有写入深度值所以会被Skybox替换。如果把RenderQueue设置为>2500即可比如:2501。或者zwrite off改为on文章来源:https://www.toymoban.com/news/detail-641621.html
示例工程下载文章来源地址https://www.toymoban.com/news/detail-641621.html
到了这里,关于Unity 渲染顺序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!