Unity3D – SpeedTree + MeshBaker – High Performance Method

內容目錄

簡介

SpeedTree可以說是Unity到目前為止我看過數一數二擬真的自然樹木的package,應用在真實模擬器場景中可以有畫龍點睛的效果,但有好必然有壞處,由於SpeedTree物件的細節度很高可以呈現很好的視覺效果,但是缺點就是耗能頗大的,雖然package樹木prefab都有製作LOD-Group(四階),但是對於提升系統效能還是非常有限。

因此我想使用SpeedTree又不想讓效能被吃該套件樹木消耗太多資源,所以就實驗了使用MeshBaker結合SpeedTree,看來是可行的,以下會提供實作的過程步驟與需注意事項紀錄。

實作

實作的套件我是下載免費的SpeedTree與前幾篇有提到Mesh Baker套件,並且使用Mesh Baker Group懶人法Bake場景中所有的樹木。先來從頭看起:

Step1 : 先看看前置作業,場景中我植栽了200株四種不同樣式的樹木。(植栽快速做法是使用Terrain來種植,最後再把樹木透過先前有介紹過的一篇“把Terrain中的樹木拆出”)

Step2 : 先把所有樹木Unpack,由於他是一種獨特SpeedTree Prefab檔案,所以假如不想被原始Prefab影響參數,就必須把物件Unpack。

Step3 : 將所有樹木的LOD-Group拆掉,並Mesh Renderer保有LOD0最細緻的模型mesh檔與最細緻的Material材質球。

Step4 : 將上一步移除Billboard , LOD1 , LOD2(但要留下樹木的 Collider),當移除上述Unpack的Prefab後,樹木的Prefab元件的LOD-Group自動會移除,如上圖所提到的點。然而每個場中的樹木都必須要做以上的步驟。接著就使用Mesh Baker Group功能做快速的Baker,可以看到下圖Baker過跟沒Baker過的Batches數值差。

Batches差 : 1346 – 89 足足省下 1257 Batches
FPS差:451 – 383 足足減少 68 FPS

可以透過數值來證明之。

小結

就像我簡介提到的一件事情有好就會有壞,雖然我們將效能提高,Batches樹木從好幾千降到不到一百也可以顯示優質的樹木畫面,但是隱憂是假如你的場景有使用wind(風動效果),原本的樹木會隨著此效果搖曳,但是Bake過後是會將所有樹木mesh全部整合成一塊並且讀取一顆結合的材質球,所以不會跟著風搖曳,這可能是唯一的隱憂,但至少透過Mesh Baker大大的提升遊戲的效能。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *