博客 / 詳情

返回

【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開始探索遊戲渲染】專欄-直達
(歡迎點贊留言探討,更多人加入進來能更加完善這個探索的過程,🙏)
user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.