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