請留下您的手機(jī)號
課程顧問將幫您激活課程并贈送學(xué)習(xí)禮包
Unity優(yōu)化性能的方法有:包體體積優(yōu)化、骨骼動畫優(yōu)化、LOD的優(yōu)化、模型細(xì)節(jié)增強(qiáng),提升計算性能、 光照優(yōu)化、SetPassCall與Drawcall優(yōu)化、物理引擎的優(yōu)化、陰影的優(yōu)化、Shader優(yōu)化等。
1、包體體積優(yōu)化
聲音文件優(yōu)化: 將wav,壓縮成mp3或ogg, 最好是ogg,沒有版權(quán)問題, 將多聲道變成單聲道。改變聲音的采樣率與碼率,減少聲音文件體積。
貼圖文件大小優(yōu)化: 將png轉(zhuǎn)jpg, 并使用圖片壓縮軟件,壓縮貼圖體積, 盡量減少圖片數(shù)目,復(fù)用圖片,盡量能使用顏色等代碼的方式來代替貼圖。
3D模型文件: 根據(jù)需求適當(dāng)降低模型面數(shù), 去掉多余不用的數(shù)據(jù), 可以通過法線貼圖,高度貼圖等將低模做出高模的效果, 合并貼圖通道數(shù)據(jù)(PBR工作流中,將金屬度,粗糙度,環(huán)境遮擋放一個紋理里面, 將數(shù)據(jù)合并到貼圖不用的通道,比如Albedo貼圖,Alpha通道不用,就可以存放環(huán)境遮擋等,節(jié)約貼圖數(shù)目)
將資源ab包化: 把所有的資源分成一個一個的ab包,ab包本省有壓縮功能,這樣整體的包體也會減小,如果可能,可以把a(bǔ)b包全部放服務(wù)器,第一次運(yùn)行游戲的時候再下載,比如《王者榮耀》,來節(jié)省包體體積。
2、骨骼動畫優(yōu)化
3D游戲中骨骼動畫也是非常消耗性能的地方,因?yàn)槊繋?我們都要通過動畫組件采樣,采樣后重新計算出來我們的頂點(diǎn)的位置,傳給GPU的渲染管線來處理, 我們可以將骨骼動畫的每幀頂點(diǎn)的位置緩存到一個紋理貼圖里面,用空間換時間的方式來節(jié)約動畫組件的開銷,并嘗試合并Drawcall。
3、LOD的優(yōu)化
對于大規(guī)模多角色的場景游戲,我們要開啟LOD,讓遠(yuǎn)處的問題用盡量少的面,近處的物體用更多的面。
4、模型細(xì)節(jié)增強(qiáng),提升計算性能
使用法線貼圖,高度貼圖等細(xì)節(jié)增強(qiáng)手段來降低模型的面數(shù)同時,能獲得和高模同樣的細(xì)節(jié)和更好的計算性能。
5、光照優(yōu)化
靜態(tài)光照烘培+反射探頭來做更好的場景效果,代替實(shí)時的光照計算,減少光源的數(shù)目。對于一些物體的發(fā)光特效,可以通過shader來實(shí)現(xiàn),而不用加光源。定制Shader,可以將逐像素光照改為逐頂點(diǎn)光照,節(jié)約逐像素光照的計算開銷。
6、 SetPassCall與Drawcall優(yōu)化
SetPassCall:通俗的講解就是更換重新裝在渲染管線里面的Shader代碼和配置,就像換畫筆一樣的。SetPassCall開銷非常的大,所以盡可能的要少用一些不同的Shader,再一個場景里面。盡可能的讓同一個Shader 繪制最多的物體后再切換下一個Shader。盡量避免繪制物體的時候平凡交叉的來回切換Shader來節(jié)約SetPassCall的次數(shù)。
Drawcall 優(yōu)化,其實(shí)很簡單三種優(yōu)化手段,靜態(tài)合批,動態(tài)合批,GPU Instancing合批, 然后我們針對合批的條件去達(dá)成對應(yīng)的條件就可以了,比如,我們做一個捕魚達(dá)人3D游戲,我們有很多的魚,可以把魚的所有紋理貼圖,放到一個大圖里面,這樣,這些魚就是同樣的Shader,同樣的紋理貼圖對象,就可以達(dá)到合批的條件而做到合批, 節(jié)約Drawcall。
7、 物理引擎的優(yōu)化
能不用物理引擎的游戲,盡量不用物理引擎,能用代碼自己實(shí)現(xiàn)的盡量用代碼自己實(shí)現(xiàn),因?yàn)槲锢硪娴拈_銷畢竟擺在那里了, 用了代碼很簡單,但是性能開銷也不可忽視。有一些不是真正的物理游戲,比如Moba類的游戲,防止物體穿透等,其實(shí)我們可以不用物理引擎,通過制作地圖格子的方式,標(biāo)記障礙物,自己控制的時候,如果進(jìn)入障礙物的標(biāo)記,就不讓他更新即可,這些可以替換物理引擎獲得很好的性能效果。常用的有菱形的地圖格子與六邊形的地圖格子。
暫時不用的剛體,或者不在視線范圍內(nèi)的剛體可以根據(jù)游戲的需要,來顯示和隱藏,達(dá)到節(jié)約物理引擎計算的目的。修改物理引擎全局的迭代參數(shù),獲得實(shí)用性的同時又有更好的性能。了解物理碰撞器的性能開銷,球體最小,網(wǎng)格碰撞器最大,盡量使用開銷小的碰撞器, 對于靜態(tài)物體,能夠合并物理碰撞器的盡量用一個物理碰撞器。
8、陰影的優(yōu)化
通過開關(guān)控制陰影,在低端機(jī)上關(guān)閉陰影獲得更好的運(yùn)行幀率,在高端機(jī)上開啟獲得更好的運(yùn)行效果。通過偽陰影技術(shù)來做貼圖,節(jié)約陰影計算的開銷, 可以自己定制Shader來實(shí)現(xiàn)高性能的陰影效果。
9、Shader優(yōu)化
減少Shader中的條件判斷和展開循環(huán),來獲得更好的指令緩沖cache 命中率, 減少一些復(fù)雜的計算,可以采用一些空間換時間的方法來緩存計算結(jié)果。逐頂點(diǎn)計算來替代逐片元的計算,減少計算次數(shù)??梢园裇hader 設(shè)置為常駐內(nèi)存緩存,這樣節(jié)約SetPassCall所帶來的開銷。
10、 C#編寫代碼的習(xí)慣
Update里面盡量不要使用GetComponent, Find等,可以在初始化的時候先找出來,然后在Update里面使用, 能不放FixedUpdate盡量不放FixedUpdate, 這樣低端機(jī)上能節(jié)約計算次數(shù)。
能降低FixedUpdate計算時間間隔的,盡量減少計算時間間隔,能減少計算的次數(shù)。寫代碼的平常的一些規(guī)范就不說了,避免大量的new 對象。一些重復(fù)使用的對象,可以通過節(jié)點(diǎn)池等原理先緩存起來??梢圆捎枚嗑€程來做一些計算避免卡住游戲線程導(dǎo)致幀率下降。不要再游戲住線程里面直接做同步的IO以免卡住游戲線程,導(dǎo)致幀率下降,從開始寫代碼起,要把每行代碼寫好,長期的堅(jiān)持積累,才能形成良好的代碼習(xí)慣寫出高性能的代碼,最重要的是學(xué)好數(shù)據(jù)結(jié)構(gòu)與算法等基礎(chǔ)知識,好的算法是好性能的關(guān)鍵。
學(xué)unity3d難嗎
除了虛幻4還有啥高級引擎
Unity有沒有必要轉(zhuǎn)UE4
unity技術(shù)美術(shù)需要會什么
學(xué)unity好還是ue4好
unity引擎的優(yōu)缺點(diǎn)
unity怎么學(xué)
unity的主要功能
unity支持哪些平臺
如何學(xué)好unity3d
unity3d基本功能
unity網(wǎng)課哪家好
unity3d影視作品有哪些
0基礎(chǔ)游戲開發(fā)需要多久
2D游戲UE還是Unity
2d游戲一般是用什么引擎做的
2d游戲什么引擎更適合
2d游戲開發(fā)引擎對比
2d游戲引擎對比
2維游戲用什么軟件制作
3D游戲常用制作軟件
3D游戲開發(fā)軟件
3d游戲一般使用什么工具
3d游戲編程學(xué)哪個語言
大家都在學(xué)
同學(xué)您好!