Unity優(yōu)化是一個(gè)很大的概念,我們優(yōu)化時(shí)需要注意三個(gè)方面:CPU優(yōu)化,GPU優(yōu)化,內(nèi)存優(yōu)化。
CPU方面的優(yōu)化:
(1) 減少DrawCall.
(2) 物理組件(Physics)。
(3) 減少GC(垃圾回收)次數(shù)。
(4) 腳本的代碼質(zhì)量。
一、對(duì)DrawCall的優(yōu)化
1、什么是DrawCall ?
答:Draw Call就是CPU調(diào)用圖形編程接口,比如DirectX或OpenGL,來(lái)命令GPU進(jìn)行渲染的操作。
2、 如何減少DrawCall ?
答: 思路就是每個(gè)物體盡量減少渲染次數(shù),多個(gè)物體最好一起渲染。所以有三個(gè)方案:
(1)使用批處理,Unity在運(yùn)行時(shí)將物體合并一次渲染。這里分為動(dòng)態(tài)批處理和靜態(tài)批處理。
(2)通過(guò)把文理打包成圖集盡量減少材質(zhì)的使用。
(3)盡量減少反光,陰影之類的效果,因?yàn)槟菚?huì)使物體多次渲染。
靜態(tài)批處理就是將沒(méi)有生命的不同物體設(shè)置為Static。
動(dòng)態(tài)批處理是引擎自動(dòng)進(jìn)行的,例如動(dòng)態(tài)實(shí)例化Prefab(預(yù)制體)如果動(dòng)態(tài)物體共享相同的材質(zhì),引擎會(huì)自動(dòng)批處理。動(dòng)態(tài)批處理有很大限制,網(wǎng)格物體頂點(diǎn)數(shù)不能超過(guò)900。
二、對(duì)物理組件的優(yōu)化
1、設(shè)置一個(gè)合適的FixedTimestep。
2、盡量不要使用網(wǎng)格碰撞器,占用CPU計(jì)算。
三、處理GC的優(yōu)化
雖然GC是用來(lái)處理內(nèi)存的,但是的確會(huì)增加對(duì)CPU的開(kāi)銷(xiāo),因此對(duì)于GC的優(yōu)化目標(biāo)就是盡量減少GC的觸發(fā)。
GC是何時(shí)觸發(fā)的?
1、堆的內(nèi)存不足時(shí),自動(dòng)調(diào)用GC。
2、編程人員手動(dòng)調(diào)用GC。
GC的優(yōu)化說(shuō)白了就是代碼的優(yōu)化,主要注意一下5點(diǎn):
(1)字符串連接的處理。。
(2)盡量不要使用foreach,減少迭代器產(chǎn)生。
(3)不要直接訪問(wèn)gameObject的tag屬性。換成“if(obj.CompareTag(”P(pán)layer“))”
(4)使用對(duì)象池,以實(shí)現(xiàn)空間的重復(fù)利用。
(5)不要使用LinQ。
四、對(duì)代碼質(zhì)量的優(yōu)化
(1)Transfrom組件獲取一次就保留引用,而不是每次都獲取。
(2)不用頻繁的GetComponent
(3)使用內(nèi)建數(shù)組,如Vector3.zero而不是new Vector(0,0,0)。
(4)對(duì)方法的參數(shù)優(yōu)化,善于使用ref關(guān)鍵字。
GPU方面的優(yōu)化:
GPU瓶頸:
(1)填充率,可以簡(jiǎn)單理解為圖形處理單元每秒渲染的像素?cái)?shù)量
(2)像素的復(fù)雜度,比如動(dòng)態(tài)陰影、光照、復(fù)雜的shader等
(3)幾何體的復(fù)雜度(頂點(diǎn)數(shù)量)
(4)GPU的顯存帶寬
影響GPU性能的無(wú)非就兩大方面,一方面頂點(diǎn)數(shù)量過(guò)多,像素計(jì)算過(guò)于復(fù)雜;另一方面就是GPU的顯存帶寬。
優(yōu)化方法:
① 減少頂點(diǎn)數(shù)量,簡(jiǎn)化計(jì)算復(fù)雜度。
② 壓縮圖片,以適應(yīng)顯存帶寬。
一、減少頂點(diǎn)數(shù)量,簡(jiǎn)化計(jì)算復(fù)雜度
(1)保持材質(zhì)的數(shù)目盡可能少,更容易批處理。
(2)使用紋理圖集,代替小貼圖。
(3)如果使用了紋理圖集和共享材質(zhì),使用Renderer.sharedMaterial來(lái)代替Renderer.material。
(4)使用光照貼圖(lightmap)而非實(shí)時(shí)燈光。
(5)使用LOD(多層次細(xì)節(jié)),好處就是那些離得遠(yuǎn)看不清的細(xì)節(jié)可以忽略。
(6)遮擋剔除
(7)使用mobile版的shader,因?yàn)楹?jiǎn)單。
二、壓縮圖片,減小顯存帶寬壓力
(1)OpenGL ES2.0使用ETC1格式壓縮等,在打包設(shè)置里有。
(2)使用MipMap,小圖集
內(nèi)存方面的優(yōu)化:
(1)Unity3D的內(nèi)部?jī)?nèi)存
(2)Mono的托管內(nèi)存
(3)若干自己引入或第三方DLL所需的內(nèi)存(非重點(diǎn))
-
cpu
+關(guān)注
關(guān)注
68文章
11083瀏覽量
217183 -
gpu
+關(guān)注
關(guān)注
28文章
4949瀏覽量
131323 -
Unity
+關(guān)注
關(guān)注
1文章
128瀏覽量
22499
發(fā)布評(píng)論請(qǐng)先 登錄
TechWiz LCD 3D應(yīng)用:局部液晶配向
開(kāi)源項(xiàng)目!如何制作一個(gè)手機(jī)用的電動(dòng)3D掃描轉(zhuǎn)盤(pán)
將應(yīng)用程序工具套件集成到Unity 3D OpenVINO?過(guò)程中遇到\"DLLNotFound異常\"錯(cuò)誤怎么解決?
TechWiz LCD 3D應(yīng)用:局部液晶配向
SciChart 3D for WPF圖表庫(kù)

3D打印技術(shù)在材料、工藝方面的突破

TechWiz LCD 3D應(yīng)用:局部液晶配向
uvled光固化3d打印技術(shù)

3D打印機(jī)優(yōu)化:ARMxy嵌入式計(jì)算機(jī)的作用


3D 建模:塑造未來(lái)的無(wú)限可能
對(duì)稱三相電壓的特點(diǎn)是哪三個(gè)方面
3D封裝熱設(shè)計(jì):挑戰(zhàn)與機(jī)遇并存

評(píng)論