Version: Unity 6.0 (6000.0)
语言 : 中文
在 URP 中创建渲染请求
URP 中的运动矢量

URP 中的摄像机渲染顺序

本页面介绍通用渲染管线 (URP) 摄像机何时执行以下操作:

清除颜色和深度缓冲区

在通用渲染管线 (Universal Render Pipeline, URP) 中,摄像机清除行为取决于摄像机的渲染类型 (Render Type)

基础摄像机

颜色缓冲区 (Color buffer)

在渲染循环开始时,具有基本渲染类型 (Base Render Type) 的摄像机可以将其颜色缓冲区清除为天空盒,将其颜色缓冲区清除为纯色,或使用未初始化的颜色缓冲区。当渲染类型 (Render Type) 设置为基本 (Base) 时,您可以使用摄像机检视面板 (Camera Inspector) 中的背景类型 (Background Type) 属性定义此行为。

请注意,未初始化的颜色缓冲区的内容因平台而异。在某些平台上,未初始化的颜色缓冲区将包含来自前一帧的数据。在其他平台上,未初始化的颜色缓冲区将包含未初始化的内存。仅当摄像机绘制到颜色缓冲区中的每个像素,且不希望产生不必要清除操作的成本时,才应选择使用未初始化的颜色缓冲区。

颜色缓冲区 (Depth Buffer)

基础摄像机总是在每个渲染循环开始时清除其深度缓冲区。

叠加摄像机

颜色缓冲区 (Color buffer)

在渲染循环开始时,叠加摄像机 (Overlay Camera) 接收一个颜色缓冲区,该缓冲区包含来自摄像机堆叠中先前摄像机的颜色数据。颜色缓冲区的内容不会清除。

颜色缓冲区 (Depth Buffer)

在渲染循环开始时,叠加摄像机接收一个深度缓冲区,该缓冲区包含来自摄像机堆叠中先前摄像机的深度数据。当渲染类型 (Render Type) 设置为叠加 (Overlay) 时,您可以使用摄像机检视面板 (Camera Inspector) 中的清除深度 (Clear Depth) 属性定义此行为。

清除深度 (Clear Depth) 设置为 true 时,叠加摄像机会清除深度缓冲区,并将其视图绘制到所有现有颜色数据之上的颜色缓冲区。当清除深度 (Clear Depth) 设置为 false 时,叠加摄像机会在将其视图绘制到颜色缓冲区之前针对深度缓冲区进行测试。

剔除和渲染

如果 URP 场景包含多个摄像机,Unity 会以可预测的顺序执行摄像机的剔除和渲染操作。

Unity 每帧执行一次以下操作:

  1. Unity 获取场景中所有活动基础摄像机 (Base Cameras) 的列表。
  2. Unity 将活动的基础摄像机分为 2 组:一组摄像机将其视图渲染到渲染纹理,另一组摄像机将其视图渲染到屏幕。
  3. Unity 按照优先级 (Priority) 顺序对渲染到渲染纹理的基础摄像机进行排序,因此具有更高优先级值的摄像机将最后绘制。
  4. 对于渲染到渲染纹理的每个基础摄像机,Unity 执行以下步骤:
    1. 剔除基础摄像机
    2. 将基础摄像机渲染到渲染纹理
    3. 对于基础摄像机的摄像机堆叠中的每个叠加摄像机,按照在摄像机堆叠中定义的顺序:
      1. 剔除叠加摄像机
      2. 将叠加摄像机渲染到渲染纹理
  5. Unity 按照优先级 (Priority) 顺序对渲染到屏幕的基础摄像机进行排序,因此具有更高优先级值的摄像机将最后绘制。
  6. 对于渲染到屏幕的每个基础摄像机,Unity 执行以下步骤:
    1. 剔除基础摄像机
    2. 将基础摄像机渲染到屏幕
    3. 对于基础摄像机的摄像机堆叠中的每个叠加摄像机,按照在摄像机堆叠中定义的顺序:
      1. 剔除叠加摄像机
      2. 将叠加摄像机渲染到屏幕

Unity 可以在一帧内多次渲染叠加摄像机的视图,可能是因为叠加摄像机出现在多个摄像机堆叠中,或者是因为叠加摄像机多次出现在同一摄像机堆叠中。发生这种情况时,Unity 不会再次使用剔除或渲染操作的任何元素。按上述顺序完整重复这些操作。

注意:在此版本的 URP 中,仅当使用通用渲染器 (Universal Renderer) 时才支持叠加摄像机和摄像机堆叠。如果使用 2D 渲染器,叠加摄像机不会执行其渲染循环的任何环节。

渲染顺序优化

URP 在摄像机内执行多项优化,包括优化渲染顺序以减少过度绘制。但是,使用摄像机堆叠时,实际上会定义这些摄像机的渲染顺序。因此,必须小心操作,确保摄像机的顺序不会导致过度绘制。

当摄像机堆叠中的多个摄像机渲染到同一个渲染目标时,Unity 会为摄像机堆叠中的每个摄像机绘制渲染目标中的每个像素。此外,如果多个基础摄像机或摄像机堆叠渲染到同一渲染目标的同一区域,则 Unity 会再次在重叠区域中绘制所有像素,渲染次数与每个基础摄像机或摄像机堆叠所需的渲染次数相同。

您可以使用 Unity 的帧调试器 (Frame Debugger) 或特定于平台的帧捕获和调试工具了解场景中过度的过度绘制的位置。然后,可以相应地优化摄像机堆叠。

其他资源

在 URP 中创建渲染请求
URP 中的运动矢量