unity 渲染批處理

2021-07-13 14:29:57 字數 1467 閱讀 1965

unity 可以在執行時組合一系列物件,並使用單個繪製呼叫統一繪製。這種操作稱之為「批處理」。unity 可以批處理的物件越多,可以獲得的渲染效能就越好(就 cpu 而言)。

只有共享同一種材質的物件才可以批處理。

更改 renderer.material 將建立材料的副本,應該使用 renderer.sharedmaterial 確保材料共享。

動態批處理可自動完成,無需進行任何其他操作。

批處理動態物件中的每個頂點都存在開銷,因此,批處理只應用到包含的頂點屬性少於 900 個的網格。 

如果著色器正在使用頂點位置 (vertex position)、法線 (normal) 和單個 uv,那麼您最多可以批處理 300 個頂點;然而,如果著色器正在使用頂點位置 (vertex position)、法線 (normal)、uv0、uv1 和切線 (tangent),那麼最多隻可以批處理 180 個頂點。

不要使用縮放。分別擁有縮放大小(1,1,1) 和(2,2,2)的兩個物體將不會進行批處理。

統一縮放的物體不會與非統一縮放的物體進行批處理。

使用縮放尺度(1,1,1) 和 (1,2,1)的兩個物體將不會進行批處理,但是使用縮放尺度(1,2,1) 和(1,3,1)的兩個物體將可以進行批處理。

使用不同材質的例項化物體(instance)將會導致批處理失敗。

擁有lightmap的物體含有額外(隱藏)的材質屬性,比如:lightmap的偏移和縮放係數等。所以,通常動態光照貼圖物件應指向同樣的光照貼圖位置才能進行批處理。

多通道著色器將打斷批處理。幾乎所有 unity 著色器都在正向渲染中支援多種光照,為其有效提供額外的通道。「其他逐畫素光照」的繪製呼叫將不會批處理。

收到實時陰影的物件將不會分批處理。

靜態批處理:

靜態批處理允許引擎減少任何尺寸幾何體的繪製呼叫(只要幾何體不移動且共享同一種材質)。靜態批處理比動態批處理明顯更為有效。應選擇靜態批處理,因為它需要的 cpu 功耗更少。

為充分利用靜態批處理,必須明確指定某些物件為靜態且不會在遊戲中移動、旋轉或縮放。如需實現這一操作,可在檢視器 (inspector) 的靜態 (static) 核取方塊中將目標標記為靜態。

使用靜態批處理需要額外的記憶體,以儲存組合的幾何體。

某些時候必須避免對某些物件進行靜態批處理,犧牲渲染效能,以保證更少的記憶體占用。例如,將茂盛的森林中的樹木標記為靜態可帶來嚴重的記憶體影響。

只有 unity 專業版中的所有平台能使用靜態批處理 。

其他批處理:

目前,只有網格渲染器 (mesh renderers) 和粒子系統 可以批處理。這意味著,蒙皮網格、布料、痕跡渲染器和其他型別的渲染元件不能批處理。

半透明渲染器通常需要物件按照前後顛倒的順序渲染,以實現半透明效果。unity 首先以這種順序組織物件,然後試著批處理。但是由於順序必須滿足嚴格的要求,這同樣也意味著批處理的物件比不透明物件更少。

unity 渲染的某些部分還未實現批處理,例如渲染陰影投射、相機深度紋理或 gui 等不會批處理。

Unity 動態批處理和靜態批處理

為了提高遊戲效能,降低遊戲執行時的drawcall,unity會對網格頂點進行批處理,而批處理又分成了動態批處理和靜態批處理 優點 不用自己做任何事情,unity會在遊戲中自動進行動態批處理,只要滿足下述條件。在unity中,要進行動態批處理需要滿足以下條件 原理 unity會檢測哪些gameobj...

渲染之靜態批處理

操作方法 在unity場景的右側屬性面板中直接勾選static屬性,那麼就可以在遊戲引擎中完成靜態批處理 原理 滿足條件 使用相同的材質球,模型是禁止的 標明為 static 的靜態物件,如果在使用相同材質球的條件下,在build 專案打包 的時候unity會自動地提取 這些共享材質的靜態模型的ve...

Unity 物件的批處理

網上有不少的資料。記錄下,方便自己查閱。1.內建模型,像cube,capluse等。2.相同材質,頂點數目。3.動態批處理 動態物件有相同材質,可以批處理。物件需要小與900頂點。如果你的著色器使用頂點位置,法線和uv值三種屬性,那麼你只能批處理300頂點以下的物體 如果你的著色器需要使用頂點位置,...