本页面介绍通用渲染管线 (URP) 摄像机何时执行以下操作:
在通用渲染管线 (Universal Render Pipeline, URP) 中,摄像机清除行为取决于摄像机的渲染类型 (Render Type)。
在渲染循环开始时,具有基本渲染类型 (Base Render Type) 的摄像机可以将其颜色缓冲区清除为天空盒,将其颜色缓冲区清除为纯色,或使用未初始化的颜色缓冲区。当渲染类型 (Render Type) 设置为基本 (Base) 时,您可以使用摄像机检视面板 (Camera Inspector) 中的背景类型 (Background Type) 属性定义此行为。
请注意,未初始化的颜色缓冲区的内容因平台而异。在某些平台上,未初始化的颜色缓冲区将包含来自前一帧的数据。在其他平台上,未初始化的颜色缓冲区将包含未初始化的内存。仅当摄像机绘制到颜色缓冲区中的每个像素,且不希望产生不必要清除操作的成本时,才应选择使用未初始化的颜色缓冲区。
基础摄像机总是在每个渲染循环开始时清除其深度缓冲区。
在渲染循环开始时,叠加摄像机 (Overlay Camera) 接收一个颜色缓冲区,该缓冲区包含来自摄像机堆叠中先前摄像机的颜色数据。颜色缓冲区的内容不会清除。
在渲染循环开始时,叠加摄像机接收一个深度缓冲区,该缓冲区包含来自摄像机堆叠中先前摄像机的深度数据。当渲染类型 (Render Type) 设置为叠加 (Overlay) 时,您可以使用摄像机检视面板 (Camera Inspector) 中的清除深度 (Clear Depth) 属性定义此行为。
当清除深度 (Clear Depth) 设置为 true 时,叠加摄像机会清除深度缓冲区,并将其视图绘制到所有现有颜色数据之上的颜色缓冲区。当清除深度 (Clear Depth) 设置为 false 时,叠加摄像机会在将其视图绘制到颜色缓冲区之前针对深度缓冲区进行测试。
如果 URP 场景包含多个摄像机,Unity 会以可预测的顺序执行摄像机的剔除和渲染操作。
Unity 每帧执行一次以下操作:
Unity 可以在一帧内多次渲染叠加摄像机的视图,可能是因为叠加摄像机出现在多个摄像机堆叠中,或者是因为叠加摄像机多次出现在同一摄像机堆叠中。发生这种情况时,Unity 不会再次使用剔除或渲染操作的任何元素。按上述顺序完整重复这些操作。
注意:在此版本的 URP 中,仅当使用通用渲染器 (Universal Renderer) 时才支持叠加摄像机和摄像机堆叠。如果使用 2D 渲染器,叠加摄像机不会执行其渲染循环的任何环节。
URP 在摄像机内执行多项优化,包括优化渲染顺序以减少过度绘制。但是,使用摄像机堆叠时,实际上会定义这些摄像机的渲染顺序。因此,必须小心操作,确保摄像机的顺序不会导致过度绘制。
当摄像机堆叠中的多个摄像机渲染到同一个渲染目标时,Unity 会为摄像机堆叠中的每个摄像机绘制渲染目标中的每个像素。此外,如果多个基础摄像机或摄像机堆叠渲染到同一渲染目标的同一区域,则 Unity 会再次在重叠区域中绘制所有像素,渲染次数与每个基础摄像机或摄像机堆叠所需的渲染次数相同。
您可以使用 Unity 的帧调试器 (Frame Debugger) 或特定于平台的帧捕获和调试工具了解场景中过度的过度绘制的位置。然后,可以相应地优化摄像机堆叠。