摄像机堆叠
在通用渲染管线 (Universal Render Pipeline, URP) 中,可以使用摄像机堆叠将多个摄像机的输出分层并创建单一组合输出。“摄像机堆叠”让您能够创建 2D UI 中的 3D 模型或车辆驾驶舱之类的效果。
URP 中的摄像机堆叠
一个摄像机堆叠由一个基础摄像机 (Base Camera) 和一个或多个叠加摄像机 (Overlay Cameras) 组成。摄像机堆叠使用摄像机堆叠中所有摄像机的组合输出来覆盖基础摄像机的输出。因此,使用基础摄像机的输出执行的任何操作,都可以使用摄像机堆叠的输出来执行。例如,可以将摄像机堆叠渲染到给定的渲染目标,应用后期处理效果,等等。
URP 在摄像机内执行多项优化,包括优化渲染顺序以减少过度绘制。但是,使用摄像机堆叠时,实际上会定义这些摄像机的渲染顺序。因此,必须小心操作,确保摄像机的顺序不会导致过度绘制。如需了解 URP 中的过度绘制的更多信息,请参阅高级信息。
向摄像机堆叠中添加摄像机
向摄像机堆叠中添加摄像机
在场景中创建一个摄像机。此摄像机的 Render Type 默认为 Base,因此是一个基础摄像机。
在场景中创建另一个摄像机,然后选中该摄像机。
在 Camera Inspector 中,将该摄像机的 Render Type 更改为 Overlay。
再次选中基础摄像机。在 Camera Inspector 中,滚动到 Stack 部分,单击加号 (+) 按钮,然后单击叠加摄像机 (Overlay Camera) 的名称。
叠加摄像机现在是基础摄像机的摄像机堆叠的一部分。Unity 在基础摄像机的输出上层渲染叠加摄像机的输出。
可通过直接操作基础摄像机的 Universal Additional Camera Data 组件的 cameraStack 属性,在脚本中将摄像机添加到摄像机堆叠,如下所示:
var cameraData = camera.GetUniversalAdditionalCameraData();
cameraData.cameraStack.Add(myOverlayCamera);
从摄像机堆叠中移除摄像机
从摄像机堆叠中移除摄像机
创建一个包含至少一个叠加摄像机的摄像机堆叠。有关说明,请参阅向摄像机堆叠中添加摄像机。
选择摄像机堆叠的基础摄像机。
在 Camera Inspector 中,滚动到 Stack 部分,单击要移除的叠加摄像机的名称,然后单击减号 (-) 按钮。
叠加摄像机仍然在场景中,但不再是摄像机堆叠的一部分。
可通过直接操作基础摄像机的 Universal Additional Camera Data 组件的 cameraStack 属性,在脚本中将摄像机从摄像机堆叠中移除,如下所示:
var cameraData = camera.GetUniversalAdditionalCameraData();
cameraData.cameraStack.Remove(myOverlayCamera);
更改摄像机堆叠中摄像机的顺序
从摄像机堆叠中移除摄像机
创建一个包含多个叠加摄像机的摄像机堆叠。有关说明,请参阅向摄像机堆叠中添加摄像机。
选择摄像机堆叠中的基础摄像机。
在 Camera Inspector 中,滚动到 Stack 部分。
使用叠加摄像机名称旁边的手柄重新排列叠加摄像机列表。
基础摄像机渲染摄像机堆叠的基础层,而堆叠中的叠加摄像机按照它们的列出顺序从上到下在此基础层之上渲染。
可通过直接操作基础摄像机的 Universal Additional Camera Data 组件的 cameraStack 属性,在脚本中重新排序摄像机堆叠。
将同一个叠加摄像机添加到多个堆叠
要将一个叠加摄像机添加到多个摄像机堆叠,请执行以下操作:
创建一个包含至少一个叠加摄像机的摄像机堆叠。有关说明,请参阅向摄像机堆叠中添加摄像机。
在场景中创建一个摄像机。此摄像机的 Render Type 默认为 Base,因此是一个基础摄像机。
选择新的基础摄像机。
在 Camera Inspector 中,滚动到 Stack 部分,单击加号 (+) 按钮,然后单击要在两个摄像机堆叠中使用的叠加摄像机的名称。
叠加摄像机现在会在两个摄像机堆叠中渲染。
还可通过直接操作基础摄像机的 Universal Additional Camera Data 组件的 cameraStack 属性,在脚本中将摄像机添加到摄像机堆叠,如下所示:
var cameraData = camera.GetUniversalAdditionalCameraData();
cameraData.cameraStack.Add(myOverlayCamera);