Unity3D游戲場景優(yōu)化之批處理,我們知道Unity3D在屏幕上繪制一個(gè)圖形本質(zhì)上調(diào)用OpneGL或者DirectX這樣的API,因此在這個(gè)過程中會產(chǎn)生一定程度上的性能消耗。那么在Unity3D中采取了什么樣的措施來降低DrawCall呢?這就是我們今天要說的批處理。
一、Unity3D中批處理的兩種方式
在Unity3D中有靜態(tài)批處理和動態(tài)批處理兩種方式,下面我們就來分別說說這兩種不同的批處理方式!
靜態(tài)批處理:靜態(tài)批處理其實(shí)大家都是知道的。為什么這樣說呢?因?yàn)槲覀冊谑褂?/span>Unity3D的過程中無形中培養(yǎng)了這樣一個(gè)習(xí)慣,那就是將場景中相對來說“靜態(tài)”的物體都勾選Static選項(xiàng),這在Unity3D中稱為Static GameObjects,并且因?yàn)檫@一特性和Lightmapping、Navigation、Off-meshLinks、ReflectionProbe、Occluder and Occludee等內(nèi)容均有著密切的聯(lián)系,因此說靜態(tài)批處理大家都是知道的其實(shí)一點(diǎn)都為過,和場景優(yōu)化相關(guān)的內(nèi)容博主會在后續(xù)的博客中涉及。
靜態(tài)批處理允許游戲引擎盡可能多的去降低繪制任意大小的物體所產(chǎn)生的DrawCall,它會占用更多的內(nèi)存資源和更少的CPU資源,因?yàn)樗枰~外的內(nèi)存資源來存儲合并后的幾何結(jié)構(gòu),如果在靜態(tài)批處理之前,如果有幾個(gè)對象共享相同的幾何結(jié)構(gòu),那么將為每個(gè)對象創(chuàng)建一個(gè)幾何圖形,無論是在編輯器還是在運(yùn)行時(shí)。這看起來是個(gè)艱難的選擇,你需要在內(nèi)存性能和渲染性能間做出最為正確的選擇。
在內(nèi)部,靜態(tài)批處理是通過將靜態(tài)對象轉(zhuǎn)換為世界空間,并為它們構(gòu)建一個(gè)大的頂點(diǎn)+索引緩沖區(qū)。然后,在同一批中,一系列的“便宜”畫調(diào)用,一系列的“便宜”,幾乎沒有任何狀態(tài)變化之間的。所以在技術(shù)上它并不保存“三維的調(diào)用”,但它可以節(jié)省它們之間的狀態(tài)變化(這是昂貴的部分)。使用靜態(tài)批處理非常簡單啦,只要勾選物體的Static選項(xiàng)即可!
動態(tài)批處理:相對靜態(tài)批處理而言,動態(tài)批處理的要求更為嚴(yán)格一些,它要求批處理的動態(tài)對象具有一定的頂點(diǎn),所以動態(tài)批處理只適用于包含小于900個(gè)頂點(diǎn)屬性的網(wǎng)格。
如果你的著色器使用頂點(diǎn)位置,法線和單光,然后你可以批處理300個(gè)頂點(diǎn)的動態(tài)對象;而如果你的著色器使用頂點(diǎn)位置,法線,uv0,UV1和切線,那么只能處理180個(gè)頂點(diǎn)的動態(tài)對象。接下來最為重要的一點(diǎn),如果動態(tài)對象使用的是不同的材質(zhì),那么即使進(jìn)行了動態(tài)批處理從效率上來講并不會有太大的提升。如果動態(tài)對象采用的是多維子材質(zhì),那么批處理是無效的。
二、批處理效率分析
那么批處理對游戲效率提升究竟有怎樣的作用呢?我們來看下面幾組測試對比:
1、三個(gè)不同的物體使用同一種材質(zhì),不做靜態(tài)批處理,不做動態(tài)批處理:DrawCall為4、面數(shù)為584、頂點(diǎn)數(shù)為641
2、三個(gè)不同的物體使用同一種材質(zhì),只做靜態(tài)批處理,不做動態(tài)批處理:DrawCall為2、面數(shù)為584、頂點(diǎn)數(shù)為641
3、三個(gè)不同的物體使用不同的材質(zhì),不做靜態(tài)批處理,不做動態(tài)批處理:DrawCall為4、面數(shù)為584、頂點(diǎn)數(shù)為641
4、三個(gè)不同的物體使用不同的材質(zhì),只做靜態(tài)批處理,不做動態(tài)批處理:DrawCall為4、面數(shù)為584、頂點(diǎn)數(shù)為641
5、三個(gè)不同的物體使用不同的材質(zhì),不做靜態(tài)批處理,只做動態(tài)批處理:DrawCall為4、面數(shù)為584、頂點(diǎn)數(shù)為641
6、三個(gè)不同的物體使用不同的材質(zhì),做靜態(tài)批處理,做動態(tài)批處理:DrawCall為4、面數(shù)為584、頂點(diǎn)數(shù)為641
7、三個(gè)不同的物體使用同一種材質(zhì),不做靜態(tài)批處理,只做動態(tài)批處理:DrawCall為4、面數(shù)為584、頂點(diǎn)數(shù)為641
大家可以注意到各組測試結(jié)果中,只有第二組的DrawCall降低,這說明只有當(dāng)不同的物體使用同一種材質(zhì)時(shí)通過批處理可以從一定程度上降低DrawCall,即我們在文章開始提到的盡可能地保證材質(zhì)共享。
以上就是Unity3D游戲場景優(yōu)化之批處理,希望對大家有幫助。藍(lán)鷗Unity3D開發(fā)培訓(xùn)有著國內(nèi)首家完整的移動Unity3D開發(fā)課程體系,藍(lán)鷗科技作為Unity官方授權(quán)培訓(xùn)中心,獨(dú)創(chuàng)“FCBS”教學(xué)模式,致力于培養(yǎng)具有實(shí)戰(zhàn)經(jīng)驗(yàn)的開發(fā)工程師。在課程設(shè)置上,藍(lán)鷗科技Unity3D培訓(xùn)課程體系基于 3D/2D行業(yè)人才需求,適合 于游戲開發(fā)、多平臺交互、虛擬現(xiàn)實(shí)、增強(qiáng)現(xiàn)實(shí)、科技創(chuàng)意、仿真、建筑可視化等各個(gè)行業(yè)的人才發(fā)展方向。對上海Unity3d培訓(xùn)課程感興趣的小伙伴們,可以通過下面的聯(lián)系方式聯(lián)系我們。
上海Unity3d培訓(xùn)http://sh.lanou3g.com/
藍(lán)鷗培訓(xùn)致力于Java培訓(xùn),大數(shù)據(jù)培訓(xùn),HTML5前端培訓(xùn),VR游戲開發(fā)培訓(xùn)等IT培訓(xùn)課程 ,現(xiàn)所有課程可申請免費(fèi)試聽兩周,試聽期間不收費(fèi),選擇藍(lán)鷗,不止高薪更是高起點(diǎn)!
【詳情咨詢 :021-37652263,(沈老師) QQ:2161519036】
下一篇:巴西秘制五花肉加盟多少錢(圖)
請?zhí)顚懥粞曰蚋鶕?jù)意向選擇下列快捷留言
負(fù)責(zé)聲明:以上所展示的信息由會員自行提供,內(nèi)容真實(shí)性,準(zhǔn)確性和合法性由發(fā)布會與負(fù)責(zé)。本網(wǎng)對此不承擔(dān)任何責(zé)任。
友情提醒:為規(guī)避投資風(fēng)險(xiǎn),建議您在投資前務(wù)必多咨詢,多考察,降低投資風(fēng)險(xiǎn)。