【从UnityURP开始探索游戏渲染】专栏-直达
URP 相机渲染类型概述
在 Unity Universal Render Pipeline (URP) 中,相机组件提供了多种渲染类型选项,用于控制相机如何参与渲染流程。这些类型决定了相机是否渲染、如何与其他相机交互以及渲染结果的用途。
主要渲染类型及其用途
Base(基础)
用途:这是默认的渲染类型,用于渲染游戏世界的主要视图。Base 相机通常作为场景中的主相机使用。
特点:
- 渲染到屏幕或渲染纹理
- 可以与其他 Base 相机叠加(通过相机的 Depth 属性控制渲染顺序)
- 支持后期处理效果
使用示例:
csharp
// 创建一个基础相机
Camera mainCamera = gameObject.AddComponent<Camera>();
var urpCameraData = mainCamera.GetUniversalAdditionalCameraData();
urpCameraData.renderType = CameraRenderType.Base;
Overlay(叠加)
用途:用于在 Base 相机渲染的内容之上叠加额外的内容,常用于UI、特效或特殊视觉效果。
特点:
- 不能单独渲染,必须叠加在 Base 相机上
- 可以叠加多个 Overlay 相机到一个 Base 相机
- 渲染顺序由相机的 Depth 属性控制
- 可以有自己的后期处理效果
使用示例:
csharp
// 创建一个叠加相机用于UI
Camera uiCamera = new GameObject("UICamera").AddComponent<Camera>();
var urpCameraData = uiCamera.GetUniversalAdditionalCameraData();
urpCameraData.renderType = CameraRenderType.Overlay;// 将叠加相机添加到主相机
mainCamera.GetUniversalAdditionalCameraData().cameraStack.Add(uiCamera);
ScreenSpaceOverlay(屏幕空间叠加)
用途:类似于旧版Unity的Screen Space - Overlay模式,用于UI渲染。
特点:
- 渲染顺序在所有其他相机之后
- 不受场景光照影响
- 适合用于传统的UI系统
使用示例:
csharp
// 创建一个屏幕空间叠加相机
Camera uiOverlayCamera = new GameObject("UIOverlayCamera").AddComponent<Camera>();
var urpCameraData = uiOverlayCamera.GetUniversalAdditionalCameraData();
urpCameraData.renderType = CameraRenderType.ScreenSpaceOverlay;
相机组合使用示例
基础+叠加相机组合
csharp
// 主相机(Base)
Camera mainCam = Camera.main;
var mainCamData = mainCam.GetUniversalAdditionalCameraData();
mainCamData.renderType = CameraRenderType.Base;// 特效叠加相机(Overlay)
Camera effectCam = new GameObject("EffectCamera").AddComponent<Camera>();
effectCam.clearFlags = CameraClearFlags.Depth;
var effectCamData = effectCam.GetUniversalAdditionalCameraData();
effectCamData.renderType = CameraRenderType.Overlay;// 将特效相机添加到主相机的堆栈中
mainCamData.cameraStack.Add(effectCam);
多相机渲染顺序控制
csharp
// 主相机
Camera mainCamera = Camera.main;
mainCamera.depth = 0;// 后处理特效相机
Camera postEffectCamera = new GameObject("PostEffectCamera").AddComponent<Camera>();
postEffectCamera.depth = 1;
var postEffectData = postEffectCamera.GetUniversalAdditionalCameraData();
postEffectData.renderType = CameraRenderType.Overlay;// UI相机
Camera uiCamera = new GameObject("UICamera").AddComponent<Camera>();
uiCamera.depth = 2;
var uiCameraData = uiCamera.GetUniversalAdditionalCameraData();
uiCameraData.renderType = CameraRenderType.Overlay;// 添加到堆栈(顺序由depth决定)
mainCamera.GetUniversalAdditionalCameraData().cameraStack.Add(postEffectCamera);
mainCamera.GetUniversalAdditionalCameraData().cameraStack.Add(uiCamera);
注意事项
- 性能考虑:每个Overlay相机都会增加额外的渲染开销,应尽量减少Overlay相机的数量。
- 清除标志:Overlay相机通常应设置为
CameraClearFlags.Depth或CameraClearFlags.Nothing,以避免清除Base相机的内容。 - 后期处理:Base相机和Overlay相机可以有不同的后期处理效果,但要注意性能影响。
- 渲染纹理:Base相机可以渲染到纹理,Overlay相机也可以叠加到这些纹理上。
- VR支持:在VR中,Overlay相机会为每只眼睛渲染一次,需要注意性能问题。
【从UnityURP开始探索游戏渲染】专栏-直达
(欢迎点赞留言探讨,更多人加入进来能更加完善这个探索的过程,🙏)
URP 相机渲染类型概述 在 Unity Universal Render Pipeline (URP) 中,相机组件提供了多种渲染类型选项,用于控制相机如何参与渲染流程。这些类型决定了相机是否渲染、