【URP】Unity[相机]渲染顺序

【从UnityURP开始探索游戏渲染】专栏-直达

URP相机渲染流程核心机制‌

  • 基础渲染管线顺序
    • Depth Pre-Pass‌:可选深度预渲染(需手动开启)
    • Opaque Rendering‌:不透明物体从近到远排序渲染
    • Skybox Draw‌:天空盒绘制(默认在透明物体之前)
    • Transparent Rendering‌:透明物体从远到近排序渲染
    • Post-Processing‌:后处理效果叠加
  • 多相机协作模式
    • Stacking‌:通过Camera Stack实现多相机合成
    • Layer Overrides‌:使用Camera.RenderType控制渲染层级
    • Clear Flags‌:决定是否继承上一相机的颜色/深度缓冲

‌关键控制参数‌

参数 作用 示例值
RenderType Base/Overlay相机类型 CameraOverrideMode
Culling Mask 层级过滤 Everything/Selected Layers
Depth 相机渲染优先级 -1~100
Clear Flags 缓冲清除策略 Skybox/SolidColor/DepthOnly

‌URP相机渲染顺序的核心优化原理‌

剔除阶段优先级

  • 视锥剔除(Frustum Culling)始终优先执行,基于相机视锥体和物体包围盒自动剔除
  • 遮挡剔除(Occlusion Culling)需手动配置,通过烘焙静态场景数据实现动态遮挡判断
  • 层级剔除(Culling Mask)直接过滤指定图层,减少后续渲染管线负载

渲染顺序策略

  • 3D场景‌:
    • 不透明物体按深度从近到远排序,利用Early-Z优化过度绘制
    • 透明物体按深度从远到近排序,避免混合顺序错误
  • 2D场景‌:
    • 正交相机默认按Sorting Layer/Order in Layer排序
    • 禁用深度写入(ZWrite)以简化渲染流程

多相机协作优化

  • Base Camera与Overlay Camera分层渲染,通过Camera Stack合并输出
  • 渲染纹理(Render Texture)复用机制减少重复绘制

2D与3D场景的差异化处理‌

特性 3D场景 2D场景
剔除依赖 依赖空间包围盒和深度缓冲 依赖Sorting Layer和Sprite Order
相机类型 透视相机(Perspective) 正交相机(Orthographic)
优化重点 减少Draw Call和阴影计算 控制Sprite Atlas合批
典型问题 远处物体LOD管理 像素对齐与抗锯齿

典型配置示例‌

场景需求‌:

  • 主相机渲染3D场景
  • UI相机叠加2D元素
  • 后处理仅影响主相机

实现步骤‌:

  • 主相机设置:

    csharp
    camera.renderType = CameraRenderType.Base;
    camera.depth = 0;
    camera.clearFlags = CameraClearFlags.Skybox;
    
  • UI相机设置:

    csharp
    camera.renderType = CameraRenderType.Overlay;
    camera.depth = 1;
    camera.cullingMask = LayerMask.GetMask("UI");
    
  • 后处理配置:

    yaml
    # URP Asset中关闭UI相机的Post ProcessingAnti-aliasing: MSAA (主相机)
    Post-process: Enabled (主相机)
    

‌性能优化建议‌

3D场景优化

  • 动态调整阴影距离(Shadow Distance)减少级联计算
  • 对静态物体启用Occlusion Culling烘焙
csharp
// 示例:动态修改遮挡剔除参数
void Update() {
    if (Camera.main.farClipPlane > 1000) {
        OcclusionArea.size = new Vector3(500, 500, 500);
    }
}

2D场景优化

  • 使用Sprite Atlas合并纹理减少状态切换
  • 禁用不必要的Post Processing以节省带宽

通用策略

  • 通过Camera.RenderType分离UI与场景渲染
  • 利用URP的SRP Batcher减少CPU开销
  • 减少Overdraw
    • 使用Occlusion Culling剔除不可见物体
    • 透明物体严格控制绘制顺序
  • 合理使用Camera Stack
    • 基础相机数量≤3
    • 静态UI使用Single Pass渲染
  • 高级技巧
    • 动态分辨率缩放(Dynamic Resolution)
    • 按需触发渲染(Camera.Render())

文档中特别说明:URP 14.1优化了多相机场景下的GPU实例化批处理效率,建议通过Frame Debugger验证实际渲染顺序。


【从UnityURP开始探索游戏渲染】专栏-直达
(欢迎点赞留言探讨,更多人加入进来能更加完善这个探索的过程,🙏)

posted @ 2025-11-23 17:36  SmalBox  阅读(17)  评论(0)    收藏  举报