U3D批處理的靜態與動態

2021-09-13 17:19:51 字數 899 閱讀 1142

在螢幕上渲染物體,引擎需要發出乙個繪製呼叫來訪問圖形api.每個繪製呼叫需要進行大量的工作來訪問圖形api,從而導致了cpu方面顯著的效能開銷。

unity在執行時可以將一些物體進行合併,從而用乙個繪製呼叫來渲染他們,這一操作,我們稱之為「批處理」。一般來說,untiy批處理的物體越多,你就會得到越好的渲染效能。

材質只要擁有相同材質的物體才可以進行批處理。因此,如果你想要得到良好的批處理效果,你需要在程式中盡可能地復用材質和物體。

如果你的兩個材質僅僅是紋理不同,那麼你可以通過紋理拼合操作來將兩張紋理合成一張大的紋理。一旦紋理拼合在一起,你就可以使用這個單一材質來代替之前的兩個材質了。

動態批處理

如果動態物體共用者相同的材質,那麼unity會自動對這些物體進行批處理。

動態批處理操作是自動完成的,並不需要你進行額外的操作。

批處理動態物體需要在每個頂點上進行一定的開銷,所以動態批處理今支援小於900定點的網路物體。

靜態批處理

相對而言,靜態批處理操作允許引擎對任意大小的幾何物體進行批處理操作來降低繪製呼叫(只要這些物體不移動,並且擁有相同的材質)。因此,靜態批處理比動態批處理更加有效,你應該盡量使用它,因為它需要更少的cpu開銷。

為了更好地使用靜態批處理,你需要明確指出哪些物體是靜止的,並且在遊戲中永遠不會移動、旋轉和縮放。想完成這一步,你只需要在檢測器(inspector)中將static核取方塊打勾即可。

靜態批處理和動態批處理打上勾 如下圖

profiler效能分析器 可以檢視draw call

U3d動態載入聲音

在虛擬實境中,乙個專案包好幾十g,hero出來都是轉殖 clone 出來的,然而要想從第一視角聽到聲音,必須把聲音源加到hero中,而hero的結構是很複雜的,不能隨便動prefab的hero.此時,可以通過動態載入聲音。1.在場景中,給其乙個空物體,在物體上加乙個指令碼 gameadd priva...

U3D層的運用

layermask下面簡單說一下層的開關方法 1.首先引入 的概念 與 交集 10000001 10000100 10000000 或 並集 10000001 10000100 10000101 非 反轉 10000001 01111110 2.int mylayermask 1 curlayer ...

U3D層的運用

layermask下面簡單說一下層的開關方法 1.首先引入 的概念 與 交集 10000001 10000100 10000000 或 並集 10000001 10000100 10000101 非 反轉 10000001 01111110 2.int mylayermask 1 curlayer ...