目录
[相机深度(Camera Depth)](#相机深度(Camera Depth))
[Clear Flags](#Clear Flags)
[Render Queue](#Render Queue)
[Render Queue的作用](#Render Queue的作用)
[Render Queue的分类](#Render Queue的分类)
相机深度(Camera Depth)
- 作用:相机的深度值用来确定多个相机之间的渲染顺序。深度值较低的相机先渲染,深度值较高的相机后渲染。
- 应用场景:在使用多个相机的场景中,比如一个相机渲染3D场景,另一个相机专门渲染UI层。
在讲解这个上面应用之前需要先了解Clear Flag:
Clear Flags
"Clear Flags"是相机组件的一个设置,它决定了每次渲染之前相机如何清除其视口。这个设置主要用于确定在开始渲染当前相机的视图之前,应如何处理之前渲染的内容。这对于渲染的正确性和视觉效果都非常重要。
Unity提供了几种不同的Clear Flags选项,每种都有不同的用途:
-
Skybox:
- 使用这个选项时,相机会在每一帧渲染之前使用当前的Skybox来清除视图。如果场景中没有Skybox,将使用默认的背景颜色。
- 这是3D游戏中最常用的选项,特别是当场景有天空盒时。
-
Solid Color:
- 这个选项会让相机用指定的单一颜色来清除其整个视图。
- 它常用于需要单色背景的场景,或者在不使用天空盒的情况下。
-
Depth only:
- 当选择这个选项时,相机只会清除深度缓冲区(Z-buffer),而不会清除颜色缓冲区。这意味着先前渲染的图像将保留在屏幕上,而新的渲染将在其上进行。
- 这个选项通常用于多相机设置中,例如,一个相机渲染3D场景,另一个相机渲染UI层。
-
Don't Clear:
- 选择这个选项时,相机不会清除颜色或深度缓冲区。这就意味着新的渲染将直接覆盖在先前渲染的内容之上。
- 这个选项在特殊情况下使用,例如需要在多次渲染之间保留图像的后处理效果。
多相机渲染不同部分
在UI复杂的应用中,可能需要一个相机来渲染3D世界,另一个相机来渲染UI。通过设置不同的深度值,可以确保UI始终渲染在3D世界之上。
1. 创建并设置3D世界相机
首先,你需要一个相机来渲染3D世界:
- 在场景中创建一个新的相机(如果已经有一个默认相机,可以使用它)。
- 将这个相机的
Clear Flags
设置为Skybox
(如果有天空盒)或Solid Color
(如果没有天空盒)。 - 设置相机的
Depth
值为较低的值,例如0
。这将是用来渲染3D场景的主相机。
2. 创建并设置UI相机
接下来,创建一个专门用于渲染UI的相机:
- 在场景中再创建一个新的相机。
- 将这个相机的
Clear Flags
设置为Depth only
。这样,它就不会清除主相机的渲染结果,而只负责渲染UI元素。 - 设置UI相机的
Depth
值为比3D世界相机更高的值,例如1
。这确保UI相机在3D世界相机之后渲染,从而UI元素会显示在3D场景之上。 - 设置UI相机的
Culling Mask
以仅渲染UI层(或者你放置UI元素的特定层)。这样,UI相机不会渲染3D世界中的对象。
3. 配置UI元素
确保你的UI元素(如Canvas)配置为使用UI相机:
- 选择或创建一个
Canvas
对象。 - 在Canvas的
Render Mode
属性中选择Screen Space - Camera
。 - 将UI相机分配给Canvas的
Camera
属性。
SortingLayer
它允许开发者控制2D对象(如Sprite和UI元素)的渲染顺序。Sorting Layer
主要用于确定哪些对象应该先绘制,哪些对象后绘制,从而实现不同2D元素之间的正确层叠和遮挡关系。
(SortingLayer只针对于2D的物体)
同一SortingLayer下的还可以通过order In Layer来设置先后的顺序。
先后顺序
在不同Sorting Layer
之间,渲染顺序是根据Sorting Layer
在项目设置中的排列顺序决定的,列表中越上面的Sorting Layer
越先渲染。
Order in Layer
值较小的对象会先于值较大的对象渲染,从而在视觉上出现在后者的后面。
如果Sorting Layer
和Order in Layer相同,
在Hierarchy窗口中更靠下的对象会被渲染在更靠前的对象之上。
Render Queue
在Unity中,Render Queue(渲染队列)是一个用于决定材质和着色器在渲染过程中的顺序的属性。每个材质都有一个与之关联的Render Queue值,这个值决定了材质在渲染管线中的位置,从而影响渲染的顺序。
Render Queue的作用
-
决定渲染顺序:
- Render Queue值用于决定一个对象(及其材质)相对于其他对象被渲染的先后顺序。这对于透明度、遮挡和深度测试等渲染效果至关重要。
-
处理透明度:
- 对于透明物体,正确的渲染顺序尤其重要。透明物体需要在不透明物体之后渲染,以确保透明度和混合效果正确实现。
Render Queue的分类
Unity中的Render Queue被分为几个预设范围:
- Background:这个范围用于背景元素,如天空盒。Render Queue值通常在1000以下。
- Geometry:这是大多数不透明物体的默认队列。Render Queue值在2000左右。
- AlphaTest:用于需要alpha测试的透明物体。Render Queue值在2450左右。
- Transparent:透明物体的队列。这些对象需要在不透明对象之后渲染。Render Queue值通常在3000以上。
- Overlay:用于在所有其他内容之上渲染的元素,如UI元素。Render Queue值在4000以上。
GeometryLast(值为2500)
-
含义:
- "GeometryLast"是指Render Queue值为2500的分类,它标志着被视为"不透明"(opaque)的渲染队列的末尾。
透明物体的渲染
- 当所有Render Queue值为2500或以下的物体渲染完成后,随后才开始渲染Render Queue值大于2500的透明物体。透明物体通常需要在不透明物体渲染完成后渲染,以确保正确的混合和遮挡效果。
渲染顺序总结
1.Camera Depth: 越小越优先
2.RenderQueue 2500以下
-
Sorting Layer/Order in Layer
-
按照Sorting Layer/Order in Layer 设置的值,越小越优先
-
无此属性,等同于 Sorting Layer=default ,Order in Layer=0 参与排序
2.RenderQueue 越小越优先
3.RenderQueue 相等,由近到远排序优先
3.RenderQueue 2500以上