unity靜態批處理原理理解

2022-07-04 18:54:11 字數 1829 閱讀 5571

1、靜態批處理的時間點

1)在遊戲匯出的時候,在player setting中勾選static batching,這樣在匯出包的時候就進行批處理,匯出來的包就會比較大

2 ) 在遊戲場景中勾選場景物體的static選項,在載入該場景的時候,會進行一次靜態批處理的合併,這樣匯出來的包不大,但是在載入的時候會使得記憶體變大。

2、靜態批處理的基本原理

場景中有4個物體,abcd,如果都勾選靜態選項,在進行靜態批處理的時候,引擎會判斷這四個物體是否共用同一渲染材質。

如果共用同一渲染材質,則會將這四個物體視為可以批處理的物件,引擎會基於單個渲染物件的大小拷貝出3個,總共變為4個mesh,此時這4個mesh會存在乙個index buffer中,此時會讓資源占用的記憶體變大4倍,這樣在渲染的時候,是將這個更大的mesh傳遞給gpu進行渲染操作的。

3、為什麼要用靜態批處理?

在遊戲的執行中,有時候cpu的瓶頸也會至關重要。如果cpu的執行速度較慢,則gpu會出現等待cpu的情況,此時遊戲主要受到cpu的限制。

cpu在遊戲中的主要分工,主要分為兩個部分:設定渲染狀態和呼叫dc。 其中設定渲染狀態屬於比較重要的分工,對於載入到遊戲中的資源和物件等,cpu需要計算其頂點相關的矩陣,渲染所用的貼圖,渲染所用到的材質和shader,渲染所用到的燈光等。

如果每個物體的材質和貼圖等都不一樣,此時cpu的主要工作就是設定這些物體的渲染狀態(當然呼叫dc也會更多,但此時渲染狀態的改變更消耗效能,也就是setpass),遊戲的執行會比較緩慢。所以在常見的遊戲中,對於大量的不需要改變位置的物體,都會採用靜態批處理的方式來解決渲染狀態的瓶頸。

採用批處理的方式,對於相同渲染材質的物體,會合併成乙個更大的渲染物件mesh來進行渲染,這時候設定合併後的渲染物件的渲染狀態,與設定合併前的多個渲染物件的渲染狀態相比會大大減小次數。

此外對於大部分的渲染物件,主要的判斷依據就是渲染狀態和位置矩陣相關的引數。如果渲染狀態一致,則基本可以視為同乙個批處理的物件,然後對於位置矩陣進行單獨的設定即可。其實在引擎的內部,對於需要渲染的物件也會進行乙個渲染排序,會優先將渲染狀態相同的排在一起進行設定,這樣渲染狀態的切換就不會過於頻繁。

通過批處理的方式來降低渲染狀態的切換次數,可以極大的優化cpu的渲染瓶頸,所以在很多時候會採用靜態批處理的方式來優化cpu的瓶頸。

4、對於靜態批處理後的物體,如何決定其可視?

對於靜態批處理後的物體,比如abcd,那麼如何在實際的遊戲中去具體的渲染abcd中的那幾個可見(位於相機的視錐體內)? 這需要解釋一下批處理的合併方式:在unity5中,會構建乙個更大的記憶體buffer空間,依次存放abcd的資料。

在渲染a的時候,會呼叫dx的介面來取這份buffer中的指定起始點和長度的資料出來,傳遞到gpu中進行渲染。如果需要渲染ad兩個物件,則會在前面的基礎上,再將整體取出來(因為d存在末尾),然後傳遞到gpu中進行渲染。注意此時是整體傳遞a或者abcd的資料,不會在cpu進行裁剪的工作。具體的a的哪部分可見,是在gpu的頂點裁剪過程中進行的。

此時相當於要進行兩次渲染,渲染的次數增大了,這樣當然會帶來一定的效能損耗,但是相對於渲染狀態的設定改變帶來的效能損耗,是可以接受的。遊戲中如果大量的物體都採用靜態批處理,此時會出現很大的記憶體buffer,如果渲染頭和尾部的物體,則會使得渲染資料過大(cpu傳遞給gpu),帶來較大效能損耗,所以可以在遊戲中對靜態批處理物件進行乙個分塊的處理。將場景中的物件分成多個塊,每個塊的大小可以依據乙個經驗值來設定,此時就會出現多個靜態批處理的操作,而不是統一的乙個靜態批處理操作。具體的分塊操作取決於具體的專案的場景大小,可以多次測試得到乙個經驗值來進行設定。

後面對於動態批處理的原理,待我學習請教後再補上~

Unity百例開發日記 之 靜態批處理原理理解

unity 靜態批處理原理理解 在遊戲匯出的時候,在player setting中勾選static batching,這樣在匯出包的時候就進行批處理,匯出來的包就會比較大。在遊戲場景中勾選場景物體的static選項,在載入該場景的時候,會進行一次靜態批處理的合併,這樣匯出來的包不大,但是在載入的時候...

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

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

CSS 原理理解

網頁製作最初,html規定了 normal document stream 標準文件流 來規範元素在網頁中的顯示法則 標準文件流中元素分兩種 塊內元素,行內元素。行內元素的特點 span標籤 豎直margin中的塌陷現象,上下緊密排列的元素的外邊距並不是兩個元素外邊距之和,而是選取那個最大的外邊距作...