InfinityBakeTool是一款專為低端平臺設計的Infinity 粒子系統輔助工具。通過空間換時間的策略,烘培一段時間的特效效果,將繁重的模擬運算轉移至離線階段。在 Runtime 時跳過粒子系統的模擬時間,顯著提升粒子系統的性能。
InfinityBakeTool 特性
粒子系統是游戲開發中不可或缺的核心技術,尤其在營造復雜絢麗的場景時,往往需要數百甚至數千個粒子系統協同工作。這些系統對性能要求極高,而移動端開發者受硬件限制,常采用烘焙(Baking)策略來優化運行時表現。
無論是將特效直接烘培成 Texture,還是通過 VAT(Vertex Animation Texture)方案進行烘培,都需要烘培得到一張或多張 Texture。這雖然能夠解決 CPU 負擔過重的問題,但烘焙后的 Texture 往往很大,尤其是前者。VAT 方案相比前者 Texture 確實會大大減小,但需要額外對 Shader 做定制化處理。而這兩種方案烘培得到不同的 Texture 就意味著不同粒子系統之間是無法進行合批的。
相比傳統的烘培方式,InfinityBakeTool 采用了不同的策略:
1.僅烘焙 Instance 渲染數據,以文件形式存儲。根據不同粒子系統的模塊參數決定烘培哪些渲染數據,對于渲染 Quad,渲染 Mesh 一視同仁,用盡可能小的空間換取珍貴的運行時間。
2.額外烘焙影響渲染的參數,使烘焙后的粒子系統仍然支持跨粒子系統的合批渲染。不光是原 InfinityParticleSystem 之間也能夠進行合批, BakedInfinityParticleSystem 之間也能夠進行合批。
InfinityBakeTool 如何進行工作
1.能夠對多粒子系統形成的特效組合進行一鍵烘焙,形成 prefab
2.生成的 prefab 保留原特效的層級結構,原特效中的每一個粒子系統烘培生成一個 bakedinfinity 類型的 asset
3.BakedInfinityParticleSystem 能夠在 Runtime 下運行,提供了 Play(),Pause(),Stop(),Simulate()等常用 API
Infinity 性能對 Demo
隨著 Infinity 粒子系統 1.3.0 版本的發布,我們同步開放了 Demo 工程,方便開發者對比 Built-in 粒子系統,Infinity 粒子系統,和 BakedInfinity 粒子系統之間的性能差異。
我們構造了六種不同類型的測試場景,代表粒子系統使用中常見的幾種類型:
1.TestType:粒子系統種類 100+
2.Test200/500/1000:單一粒子系統粒子數量少,粒子系統大量重復
3.TestMore:多個粒子系統粒子數量負載不均衡,少則十數,多則上萬
4.TestMesh:渲染 Mesh 的粒子系統
5.TestSingle:單一粒子系統粒子數量大
6.TestPool:測試池化場景,特效批量生成,批量死亡
Demo 下載:
git clone https://cnb.cool/tuanjie/Infinity_Benchmark_Suite.git
InfinityBakeTool 帶來的性能收益
BakedInfinityParticleSystem 在 Runtime 下能夠跳過模擬過程,僅需要執行 Transform 更新和渲染相關邏輯,能夠大大提升 CPU 耗時降低主線程開銷;
烘焙后的粒子系統仍然使用 GPU Instancing 渲染支持合批,相比 Built-in 粒子系統渲染線程開銷仍有很大優勢;
在內存開銷方面,雖然烘焙過程需要額外存儲多幀的渲染數據,需要占用更多的內存,但 Runtime 下省掉了運行時模擬數據占用內存的開銷,除此之外,由于多粒子系統共享參數和渲染數據,所以部分場景在烘焙后內存開銷反而變低;
InfinityBakeTool 在 Test200/500/1000 這種單一粒子系統粒子數量少,粒子系統大量重復的場景下優勢十分顯著,下面以 Test1000 為例進行展示,該場景中有 1000 個粒子系統持續播放,場景內粒子總數達 1.5w。從 Profiler 中可以直觀地看到烘培后的 Infinity 粒子系統帶來的性能優勢。
![]()
Test1000 場景效果圖
![]()
Built-in 粒子系統的 Test1000
![]()
BakedInfinity 粒子系統的 Test1000
我們在不同機型不同芯片上進行了測試,下圖表中展示的是純主線程耗時,和主線程+渲染線程耗時,所有測試均取 1000 幀的平均值,在鎖 30fps 的狀態下進行測試的,測試結果如下,可以看到,烘焙后的場景在 CPU 耗時方面基本能夠達到 50% 以上的提升。
![]()
![]()
Android / IOS 上的性能測試結果
這個場景在內存占用方面也沒有增加額外開銷,反而小有優勢。
![]()
![]()
Android / IOS 上的性能測試結果
在 DrawCall 方面,烘焙后的粒子系統仍然能夠合批渲染,這個場景在 DrawCall 方面也有極大提升,能夠從幾百數量級直接降低到個位數。
![]()
![]()
Android / IOS 上的性能測試結果
烘焙方案對于小游戲項目有明顯優勢,Test500 場景在小游戲上的測試結果如下,可以看到烘焙方案能夠有效降低 CPU 占用率和功耗開銷,內存開銷有勝有負。
![]()
![]()
微信小游戲上的性能測試結果
![]()
微信小游戲上的性能測試結果
但對于粒子數量很大的特效進行烘焙,可能會占用過多的內存,例如 TestMore 和 TestSingle 的場景,開發者使用時應該酌情考量,InfinityBakeTool 界面在每次烘焙結束后會顯示當前設置下渲染數據大小的估計值,可以作為參考供開發者調整參數,使烘焙后的數據大小降低到可接受的狀態。
快速上手
您可以通過以下步驟對粒子系統進行烘焙:
1.在 Tool 工具欄中打開 InfinityParticleSystem Bake Tool
2.配置相應參數:
![]()
基礎設置:
起始時間 指定從何時開始烘焙粒子系統
模擬總時間 從起始時間開始至烘焙結束的總時間
每秒幀數 每秒烘焙輸出的幀數,總幀數將在下方顯示
Save Path 用于設置烘焙生成結果的輸出保存位置,默認保存至項目的
Assets/目錄下。
GameObject 要進行烘焙的目標系統對象
Prefab 要進行烘焙的目標預制體
3.點擊烘焙按鈕,烘焙結果將保存在設置的路徑中:
![]()
4.烘焙能夠得到以“Name_Baked”命名的文件夾,包含一個 prefab 和一個 data 文件夾
prefab能夠拖入場景中直接使用
data文件夾內包含若干.bakedinfinity asset文件,每一個asset文件代表原特效中可渲染的Infinity粒子系統
1.BakedInfinityParticleSystem 只支持 Runtime
2.烘焙過程中會移除所有 GameObject 為隱藏狀態或不進行實際渲染的粒子系統
3.不支持Main Module - Auto Random Seed,烘培過程只能支持確定的 Random Seed
4.只支持在 Local 空間中進行模擬的粒子系統,不支持在 World 空間(或 Custom 空間)中進行模擬的粒子系統,涉及到的模塊包括:
Main Module - SimulationSpace
Velocity over Lifetime Module - Space
Limit Velocity over Lifetime Module - Space
Force Over Lifetime Module - Space
Known issues
1.有限支持Main Module - Gravity Modifer,若該值不為 0 并且該粒子系統及其父級粒子系統有旋轉時,渲染效果不正常
2.有限支持Sub Emitter Module 模塊
對于 sub 粒子系統的 Transform,Bake 過程會將其歸一化,若原 Transform 中的 Rotation 不等于 0,BakedInfinityParticleSystem 可能會出現錯誤旋轉
對于 Trigger 或 Collision 觸發 Sub 生成粒子的效果支持受限
如果 father 粒子系統啟用 Looping,而 Sub 粒子系統不啟用,烘焙前 Sub 粒子系統使用 father 的設置,烘焙后由于丟失父子信息,使用自己的設置
3.有限支持涉及與場景中其他 GameObject 產生交互的模塊,包括:
External Force Module
Collision Module
Triggers Module
4.暫不支持Trails Module 的烘焙
5.暫不支持Lights Module 的烘焙,無法生成動態光源
Unity 官方微信
第一時間了解Unity引擎動向,學習進階開發技能
每一個“點贊”、“在看”,都是我們前進的動力

特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.