【渲染流水線】[應用階段]-[遮擋剔除]以UnityURP為例
遮擋剔除(Occlusion Culling)業務邏輯層的優化方案,不是所有項目都會用,主要用在第一人稱視角的游戲。通過對場景離線計算每個點能看到的物體列表數據,將數據保存下來,當角色在場景中的點時,根據計算好的列表數據顯示相應可見物體。
Unity URP中的遮擋剔除技術主要采用GPU加速算法與混合剔除策略,其核心實現位于引擎C++底層,通過URP管線進行定制化整合。以下是詳細分析:
【從UnityURP開始探索游戲渲染】專欄-直達
?算法架構?
?基礎機制?:
- 采用改進的BSP樹與預計算可見性(PVS)技術,2021版后引入Compute Shader實現動態遮擋體實時計算
一、改進的BSP樹與PVS技術原理
- BSP樹優化架構
- 空間分割策略:采用軸向對齊的八叉樹變體(QBSP),通過遞歸細分場景空間,每個節點存儲多邊形集合和分割平面
- 動態平衡機制:引入表面面積啟發式(SAH)算法,自動調整分割平面位置,使樹深度控制在12層以內,查詢效率提升40%
- LOD協同優化:高層級節點使用簡化碰撞體,當攝像機距離超過閾值時切換為球體測試,降低70%遍歷開銷
- 早期Unity版本曾使用BSP樹輔助空間分割,但現代URP管線已優化其應用,BSP樹不再作為遮擋剔除的核心算法。PVS技術憑借更低運行時消耗成為靜態優化的基礎,而GPU加速填補了動態場景的缺口
- PVS技術增強
- Unity URP中的PVS(預計算可見性) 技術增強技術是用于優化渲染性能的核心機制。它通過離線計算場景對象的可見性關系,顯著減少運行時渲染負載
- 多級單元格劃分:將場景分解為10m3的基礎單元,每個單元包含256個采樣點,通過蒙特卡洛射線投射生成可見性位圖
- 差異壓縮算法:使用RLE編碼壓縮相鄰單元格的PVS數據,內存占用減少65%(實測1GB場景壓縮至350MB)
- 動態更新策略:對移動物體采用"潛在可見集增量更新",僅重新計算受影響單元格的15%采樣點
- 運作機制
- ?編輯器階段預計算?(動態密度探針網格):使用Unity編輯器中的遮擋剔除窗口烘焙場景,生成基于網格單元的可見性數據。
- 根據場景幾何密度自動生成4x4x4探針組成的? 磚塊(Brick) 結構,室內復雜區域采用高密度探針(間距1-3米),開放地形使用低密度探針(間距9-27米),實現內存與精度的自適應平衡
- 每個像素渲染時采樣周圍?8個最近探針?,通過GPU加速的三線性插值消除傳統光照探針的接縫問題
- ?運行時動態評估(流式數據管理) ?:根據攝像機位置實時加載預計算數據,僅渲染當前可見對象;動態物體通過包圍盒測試更新遮擋關系。
- PVS數據按邏輯分區存儲在? 光照場景(Lighting Scenes) 中,配合Addressables系統實現運行時動態加載/卸載
- Adaptive Probe Volumes (APV)技術支持?分塊更新?,晝夜循環中僅刷新受陽光角度影響的探針組,單幀更新耗時低至3ms
- ?混合渲染協同(混合精度烘焙) :與URP的單Pass前向渲染結合,在一個Draw Call中處理多個光源,減少渲染通道開銷
- 預計算階段結合? 16K×16K虛擬陰影貼圖(VSM) 深度數據,精確捕捉遮擋體輪廓
- 采用?多級LOD協同?策略:遠景物體用簡化碰撞體參與計算,近景物體保留完整網格,烘焙效率提升8倍
- ?編輯器階段預計算?(動態密度探針網格):使用Unity編輯器中的遮擋剔除窗口烘焙場景,生成基于網格單元的可見性數據。
- 輸出數據類型
- ?可見性位圖?:存儲每個網格單元的可見性信息,格式為壓縮位圖(BitArray),運行時通過GPU快速解析。
- ?動態更新數據包?:記錄移動物體引起的遮擋變化,包含漫反射/鏡面光照強度、方向性光照等參數,按三通道浮點紋理存儲,通過異步管線傳輸至GPU。
- ?烘焙配置文件?:存儲編輯器生成的遮擋參數(如Smallest Hole),適配不同場景復雜度。運行時生成的局部更新數據(如移動物體遮擋關系變化),通過異步計算管線傳輸至GPU。
graph LR A[場景幾何分析] --> B[自動探針密度劃分] B --> C[深度緩沖區烘焙] C --> D[可見性位圖生成] D --> E[運行時流式加載] E --> F[每幀8探針采樣] F --> G[三線性插值渲染]
- Unity URP中的PVS(預計算可見性) 技術增強技術是用于優化渲染性能的核心機制。它通過離線計算場景對象的可見性關系,顯著減少運行時渲染負載
二、Compute Shader實時計算體系(2021+)
-
硬件加速架構
- 三級流水線設計:
[Depth Pyramid構建] → [HiZ緩沖生成] → [遮擋查詢并行化]
通過異步計算管線實現三階段重疊執行,延遲降低至0.8ms
- 三級流水線設計:
-
核心算法實現
- 深度層次結構(HiZ):
- 使用Mipmap鏈式結構存儲深度圖,每級分辨率減半
- 通過
InterlockedMin原子操作更新深度值,支持128線程并行寫入
- 動態遮擋判定:
單個DrawCall可處理2048個物體包圍盒測試// Compute Shader關鍵代碼段 [numthreads(8,8,1)] void OcclusionTest(uint3 id : SV_DispatchThreadID) { float4 bounds = _ObjectBounds[id.x]; if(TestHiZOcclusion(bounds, _HiZBuffer)) { _VisibleIndexBuffer.Store(id.x, 0); // 標記為不可見 } }
- 深度層次結構(HiZ):
-
混合精度模式
- 移動端適配:采用FP16精度存儲深度金字塔,性能提升2.3倍(對比FP32)
- PC端優化:RTX顯卡啟用Tensor Core加速,HiZ生成速度達120FPS@4K
三、技術對比與演進
| 特性 | 傳統BSP/PVS | Compute Shader方案 |
|---|---|---|
| 更新頻率 | 靜態/每5秒 | 每幀(60Hz) |
| 動態物體支持 | 不支持 | 完全支持 |
| 內存占用 | 場景體積的30% | 顯存的5% |
| 典型延遲 | 15ms | 1.2ms |
| 適用場景 | 大型靜態環境 | 開放世界+動態破壞 |
當前URP 2025版本已實現兩種技術的自動切換:當動態物體占比>35%時啟用Compute Shader模式,否則回退到優化后的PVS方案
- ?混合剔除?:在AR/VR場景中結合深度傳感器數據,通過多模態融合算法更新遮擋關系,精度達99%
- 混合剔除策略通過分層處理優化性能:靜態物體完全依賴預計算數據,動態物體每幀實時查詢,遠景物體則采用近似方法減少更新頻率。整體上,URP的遮擋剔除以PVS為骨架,通過硬件加速提升適應性
- PVS技術主導靜態場景?:
靜態物體必須預先烘焙遮擋數據,通過編輯器設置Occluder Static或Occludee Static標簽,并利用Window > Rendering > Occlusion Culling窗口生成可見性信息。這種預計算方法將場景劃分為網格單元(Cell),離線計算并存儲可見性位圖(BitArray),大幅降低運行時負載,尤其適用于墻體、地形等固定遮擋物。烘焙參數如Smallest Hole和Backface Threshold可調節精度與效率平衡。 - ?實時GPU加速支持動態場景?:
對于動態物體(如移動角色),Unity 2021后引入Compute Shader驅動的異步查詢機制,通過分離遮擋計算與渲染流水線,實現實時深度緩沖區分析。這打破了傳統PVS的限制,支持每幀更新遮擋關系,并結合Occlusion Area組件定義動態物體的參與范圍。在混合架構中,動態物體采用包圍盒或精確網格測試,避免預烘焙開銷 - ?GPU加速?:通過異步計算管線分離遮擋查詢與渲染流程,復雜場景效率提升300%
?執行層級?
- ?C++核心?:剔除計算主要在引擎底層實現,包括視錐體剔除和遮擋查詢
- ?URP定制?:通過C#端配置
Occlusion Culling屬性和Occlusion Area組件,控制剔除精度(QualitySettings.occlusionCullingQuality) - ?數據烘焙?:需在編輯器預生成遮擋數據,通過
Window > Rendering > Occlusion Culling窗口操作
?優化要點?
- ?材質限制?:透明材質需標記為
Occludee Static,建議使用不透明材質作為遮擋體 - ?移動端適配?:動態調整剔除精度可降低15% GPU功耗,視覺差異小于2%
- ?LOD協同?:靜態遮擋物使用LOD0輪廓進行剔除判斷,需注意各級別輪廓一致性
?未來演進?
- ?神經渲染?:實驗性整合NeRF技術預測未觀測區域遮擋關系,延遲降低80%
- ?硬件協同?:RTX 40系列光追核心與Unity API深度整合,實現實時光追場景60fps+
【從UnityURP開始探索游戲渲染】專欄-直達
(歡迎點贊留言探討,更多人加入進來能更加完善這個探索的過程,??)
本文由博客一文多發平臺 OpenWrite 發布!

本文解析了Unity URP渲染管線中的遮擋剔除技術,重點介紹了靜態PVS預計算與動態GPU加速的混合方案。核心技術包括改進的BSP樹空間分割、多級單元格PVS預計算,以及基于ComputeShader的實時HiZ緩沖動態遮擋計算。文章詳細闡述了兩種技術的實現原理、性能對比及適用場景:PVS適合靜態環境,通過探針采樣和位圖壓縮優化內存;ComputeShader方案則支持動態場景,利用硬件加速實現每幀更新。URP2025版本已實現自動切換機制,并引入混合剔除策略優化AR/VR應用。文章還提供了材質限制、移動
浙公網安備 33010602011771號