靜態批處理是一種繪制調用批處理方法,它組合不移動的網格以減少繪制調用。它將組合的網格轉換為世界空間,并為它們構建一個共享頂點和索引緩沖區。然后,對于可見網格,Unity 會執行一系列簡單的繪制調用,每個調用之間幾乎沒有狀態變化。靜態批處理不會減少繪制調用的數量,而是減少它們之間的渲染狀態更改的數量。靜態批處理比動態批處理更高效,因為靜態批處理不會轉換 CPU 上的頂點。
兼容性:
功能 | 內置渲染管線 | 通用渲染管線 (URP) | 高清渲染管線 (HDRP) | 自定義可編程渲染管線 (SRP) |
---|---|---|---|---|
靜態批處理 | 是 | 是 | 是 | 是 |
開啟批處理:
1.構建時:
在Edit > Project Settings > Player > Other Settings (其他設置) 中,勾選 Static Batching 。
將需要合批的物體在物體的?Inspector 面板中勾選Static,并選擇Batching Static
注意:如果在構建時執行靜態批處理,則 Unity 在運行時不會使用任何 CPU 資源來生成靜態批處理的網格數據。
2.運行時:
運行時使用StaticBatchingUtility 類批處理靜態網格,靜態 StaticBatchingUtility.Combine 方法將傳入的游戲對象組合在一起,并為靜態批處理做好準備。對于運行時以程序方式生成的網格有用。
與構建時的靜態批處理不同,運行時的批處理不需要啟用 Static Batching Player Setting。
合批條件:
合批時機:
1.構建時:
2.運行時:
性能影響:
使用靜態批處理需要額外的 CPU 內存來存儲組合的幾何體。如果多個游戲對象使用相同的網格,則 Unity 會為每個游戲對象創建一個網格副本,并將每個副本插入到組合網格中。這意味著相同的幾何體在組合網格中多次出現。無論您使用的是編輯器還是運行時API來準備用于靜態批處理的游戲對象,Unity 都會執行此作。如果要保持較小的內存占用,可能必須犧牲渲染性能并避免對某些游戲對象進行靜態批處理。例如,在茂密的森林環境中將樹木標記為靜態可能會對內存產生嚴重影響。
注:
1.靜態批處理可以包含的頂點數存在限制。每個靜態批處理最多可以包含 64000 個頂點。如果有更多,Unity 會創建另一個批次。
2.一旦游戲對象被標記為靜態并進行了靜態批處理,在運行時就不能再改變其位置、旋轉、縮放等屬性,否則會導致渲染錯誤。
3.靜態批處理會影響光照計算,因為合批后的對象會被視為一個整體。在使用靜態批處理時,需要注意光照烘焙的設置,以確保光照效果符合預期。
4.靜態批處理可以顯著減少 Draw Call 數量,提高渲染性能,特別是在場景中包含大量靜態對象的情況下。但對于經常移動或變化的對象,不適合使用靜態批處理。
未完待續。。。
參考鏈接:
靜態批處理 - Unity 手冊
Unity - Manual: Static batching (unity3d.com)