Unity 在游戲開發(fā)行業(yè)中扮演著非常重要的角色。很多游戲都是用Unity開發(fā)的,所以在Unity運(yùn)行的時(shí)候,需要合并一些對(duì)象,用一張圖來(lái)渲染。這就是Batch processing,今天的文章只是想告訴大家Unity中如何處理批處理的靜態(tài)和動(dòng)態(tài)問(wèn)題:
動(dòng)態(tài)批處理
如果動(dòng)態(tài)對(duì)象共享相同的材質(zhì),Unity 會(huì)自動(dòng)批處理這些對(duì)象。
動(dòng)態(tài)批處理是自動(dòng)完成的,不需要您進(jìn)行額外的工作。
提示:
1、 批處理動(dòng)態(tài)對(duì)象需要每個(gè)頂點(diǎn)的開銷,因此動(dòng)態(tài)批處理僅支持少于 900 個(gè)頂點(diǎn)的網(wǎng)格。
2、 如果你的著色器使用頂點(diǎn)位置、法線和UV值,那么你只能批處理低于300個(gè)頂點(diǎn)的對(duì)象;如果您的著色器需要使用頂點(diǎn)位置、法線、UV0、UV1 和切線向量,那么您只能批處理低于 180 個(gè)頂點(diǎn)的對(duì)象。
3、請(qǐng)注意:屬性數(shù)量的限制將來(lái)可能會(huì)改變。
4、 不要使用比例。兩個(gè)具有比例的對(duì)象(分別為 1,1,1) 和 (2,2,2)) 不會(huì)被批處理。
5、 均勻縮放的對(duì)象不會(huì)與非均勻縮放的對(duì)象進(jìn)行批處理。
兩個(gè)具有尺度 (1,1,1) 和 (1,2,1)) 的對(duì)象不會(huì)被批處理,而是具有尺度 (1,2,1) 和 (1,3, 1) 兩個(gè)對(duì)象將能夠被批處理。
6、 不同材質(zhì)的實(shí)例化對(duì)象會(huì)導(dǎo)致批處理失敗。
7、帶有光照貼圖的對(duì)象具有額外的(隱藏的)材質(zhì)屬性,例如光照貼圖偏移和縮放因子。因此,帶有光照貼圖的對(duì)象不會(huì)被批處理(除非它們指向光照貼圖的同一部分)。
8、 多通道著色器會(huì)妨礙批處理操作。例如,Unity 中幾乎所有的著色器都支持前向渲染中的多個(gè)燈光,從而有效地為它們打開了多個(gè)通道。
9、預(yù)設(shè)實(shí)例將自動(dòng)使用相同的網(wǎng)格和材質(zhì)。
靜態(tài)批處理
相比之下,靜態(tài)批處理允許引擎批處理任何大小的幾何對(duì)象以減少繪制調(diào)用(只要對(duì)象不移動(dòng)并且具有相同的材質(zhì))。因此,靜態(tài)批處理比動(dòng)態(tài)批處理效率更高,您應(yīng)該盡量少使用它,因?yàn)樗枰?CPU 開銷更少。
為了更好地使用靜態(tài)批處理,您需要明確指出哪些對(duì)象是靜態(tài)的,并且在游戲中永遠(yuǎn)不會(huì)移動(dòng)、旋轉(zhuǎn)和縮放。要完成此步驟,您只需在 Inspector 中勾選 Static 復(fù)選框。
使用靜態(tài)批處理操作需要額外的內(nèi)存開銷來(lái)存儲(chǔ)合并的幾何數(shù)據(jù)。在靜態(tài)批處理之前,如果某些對(duì)象共享相同的幾何圖形,引擎將為處于編輯和運(yùn)行狀態(tài)的每個(gè)對(duì)象創(chuàng)建幾何圖形的副本。這并不總是一個(gè)好主意,因?yàn)橛袝r(shí),您將不得不犧牲一點(diǎn)渲染性能來(lái)防止某些對(duì)象的靜態(tài)批處理,從而減少內(nèi)存開銷。例如,將茂密森林中的樹設(shè)置為靜態(tài)會(huì)導(dǎo)致嚴(yán)重的內(nèi)存開銷。
靜態(tài)批處理目前僅支持 Unity iOS Advanced。
Unity中如何處理批處理的靜態(tài)和動(dòng)態(tài)問(wèn)題?不同的問(wèn)題必須以不同的方式處理。如果您對(duì)Unity有更多的專業(yè)知識(shí)需要學(xué)習(xí),那么您可以來(lái)我們千鋒教育的Unity培訓(xùn)班實(shí)地考察,或咨詢我們了解詳情。更多關(guān)于Unity培訓(xùn)的問(wèn)題,歡迎咨詢千鋒教育在線名師,如果想要了解我們的師資、課程、項(xiàng)目實(shí)操的話可以點(diǎn)擊咨詢課程顧問(wèn),獲取試聽(tīng)資格來(lái)試聽(tīng)我們的課程,在線零距離接觸千鋒教育大咖名師,讓你輕松從入門到精通。