版本:Unity 6 (6000.0)
语言:英语
在 URP 中创建渲染请求
URP 中的运动矢量

URP 中的相机渲染顺序

本页介绍了通用 渲染管线一系列将场景内容显示在屏幕上的操作。Unity 允许您选择预建的渲染管线,或编写您自己的。 更多信息
参见 词汇表
(URP) 相机一个组件,用于创建场景中特定视点的图像。输出要么绘制到屏幕上,要么作为纹理捕获。 更多信息
参见 词汇表
执行以下操作

清除颜色和深度缓冲区

在通用渲染管线 (URP) 中,相机清除行为取决于相机的 渲染类型

基础相机

颜色缓冲区

在渲染循环开始时,具有 基础渲染类型 的相机可以将其颜色缓冲区清除为 天空盒一种特殊类型的材质,用于表示天空。通常是六面的。 更多信息
参见 词汇表
,将其颜色缓冲区清除为纯色,或使用未初始化的颜色缓冲区。当 渲染类型 设置为 基础 时,您可以使用 相机检查器 中的 背景类型 属性定义此行为。

请注意,未初始化的颜色缓冲区的内容因平台而异。在某些平台上,未初始化的颜色缓冲区将包含来自上一帧的数据。在其他平台上,未初始化的颜色缓冲区将包含未初始化的内存。只有当您的相机绘制到颜色缓冲区的每个 像素计算机图像中的最小单位。像素大小取决于您的屏幕分辨率。像素灯光是在每个屏幕像素处计算的。 更多信息
参见 词汇表
,并且您不希望承担不必要的清除操作的成本时,您才应选择使用未初始化的颜色缓冲区。

深度缓冲区

基础相机始终在每个渲染循环开始时清除其 深度缓冲区一个内存存储,用于保存图像中每个像素的 z 值深度,其中 z 值是从投影平面到每个渲染像素的深度。 更多信息
参见 词汇表

叠加相机

颜色缓冲区

在渲染循环开始时,叠加相机 会收到一个包含来自相机堆栈中先前相机的颜色数据的颜色缓冲区。它不会清除颜色缓冲区的内容。

深度缓冲区

在渲染循环开始时,叠加相机会收到一个包含来自相机堆栈中先前相机的深度数据的深度缓冲区。当 渲染类型 设置为 叠加 时,您可以使用 相机检查器 中的 清除深度 属性定义此行为。

清除深度 设置为 true 时,叠加相机将清除深度缓冲区,并将它的视图绘制到颜色缓冲区,位于任何现有的颜色数据的顶部。当 清除深度 设置为 false 时,叠加相机将在将它的视图绘制到颜色缓冲区之前针对深度缓冲区进行测试。

剔除和渲染

如果您的 URP 场景场景包含游戏的环境和菜单。将每个独特的场景文件视为一个独特的关卡。在每个场景中,您放置环境、障碍物和装饰,本质上是设计和构建游戏的各个部分。 更多信息
参见 词汇表
包含多个相机,Unity 将以可预测的顺序执行它们的剔除和渲染操作。

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

  1. Unity 获取场景中所有活动 基础相机 的列表。
  2. Unity 将活动基础相机组织成 2 组:将视图渲染到 渲染纹理一种特殊类型的纹理,在运行时创建和更新。要使用它们,首先创建一个新的渲染纹理,并指定您的相机之一渲染到它。然后,您可以像使用普通纹理一样在材质中使用渲染纹理。 更多信息
    参见 词汇表
    的相机,以及将视图渲染到屏幕的相机。
  3. Unity 按 优先级 顺序对渲染到渲染纹理的基础相机进行排序,以便具有更高 优先级 值的相机最后绘制。
  4. 对于每个渲染到渲染纹理的基础相机,Unity 执行以下步骤
    1. 剔除基础相机
    2. 将基础相机渲染到渲染纹理
    3. 对于作为基础相机的 相机堆栈 一部分的每个 叠加相机,按照相机堆栈中定义的顺序
      1. 剔除叠加相机
      2. 将叠加相机渲染到渲染纹理
  5. Unity 按 优先级 顺序对渲染到屏幕的基础相机进行排序,以便具有更高 优先级 值的相机最后绘制。
  6. 对于每个渲染到屏幕的基础相机,Unity 执行以下步骤
    1. 剔除基础相机
    2. 将基础相机渲染到屏幕
    3. 对于作为基础相机的相机堆栈一部分的每个叠加相机,按照相机堆栈中定义的顺序
      1. 剔除叠加相机
      2. 将叠加相机渲染到屏幕

Unity 可以在一帧中多次渲染叠加相机的视图 - 要么是因为叠加相机出现在多个相机堆栈中,要么是因为叠加相机在同一个相机堆栈中出现多次。当这种情况发生时,Unity 不会重复使用剔除或渲染操作的任何元素。这些操作会按照上述顺序完整重复执行。

注意:在此版本的 URP 中,叠加相机和相机堆栈仅在使用通用渲染器时受支持。如果使用 2D 渲染器,叠加相机将不会执行渲染循环的任何部分。

渲染顺序优化

URP 在相机内部执行了几个优化,包括渲染顺序优化,以减少过度绘制。但是,当您使用相机堆栈时,您实际上定义了这些相机的渲染顺序。因此,您必须小心不要以导致过度绘制的顺序排列相机。

当相机堆栈中的多个相机渲染到同一个渲染目标时,Unity 会为相机堆栈中的每个相机绘制渲染目标中的每个像素。此外,如果多个基础相机或相机堆栈渲染到同一个渲染目标的同一区域,Unity 会根据每个基础相机或相机堆栈的要求,绘制重叠区域中的任何像素。次数。

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

其他资源

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