http://www.itdecent.cn/p/3b285110069f
https://blog.csdn.net/e295166319/article/details/79107399《第16章 Unity中的渲染優(yōu)化技術(shù)》
角色模型面數(shù):一個(gè)角色移動(dòng)平臺一般300 ~ 1500面,PC平臺一般1500~ 4000面。
-
模型骨骼數(shù):一般不多于30個(gè)骨骼
https://docs.unity3d.com/Manual/ModelingOptimizedCharacters.html -
Draw Call計(jì)算公式
http://www.cnblogs.com/zhaoqingqing/p/4623839.html
在來談到 Batch,其實(shí)也是 Draw Call 的另一種稱呼。你可以想成每一次的 Draw Call 會(huì)產(chǎn)生一個(gè) Batch,而 Batch 里裝的是物件頂點(diǎn)信息,Batch 由 CPU 通過 “驅(qū)動(dòng)程序” 將頂點(diǎn)信息送往 GPU,GPU接手后將物件畫在畫面上。由此可知,越多 Draw Call,CPU 就越忙碌。這下更清楚知道 Draw Call 數(shù)量所影響的是 CPU 效能而非 GPU。
NVIDIA 在 GDC 曾提出,25K batchs/sec 會(huì)吃滿 1GHz 的 CPU,100% 的使用率。所以他們推出了一條公式,來預(yù)估游戲中大概可以 Run 多少個(gè) Batch:
Draw Call計(jì)算公式
Draw Calls = 25K * GHzcpu * Percentcpu / FrameRate ;
舉個(gè)例子:如果你的目標(biāo)是游戲跑30FPS、使用2GHz的CPU、20%的工作量發(fā)給Draw Call來使用,那你每秒可以有多少Draw Call呢?
333 Batchs/Frame = 25K * 2 * 20% / 30 .
性能優(yōu)化最直觀的目標(biāo)是提升幀率,幀率可以理解為我們常說的刷新率,通常用FPS表示,即游戲每秒鐘的刷新次數(shù)Frames per second.
用幾個(gè)數(shù)字大致了解性能優(yōu)化的目標(biāo):
- FPS = 1/ T ; T為每幀游戲消耗的CPU時(shí)間。
通常比較理想的幀率為60,相應(yīng)地,一幀的CPU的時(shí)間為T=1/60=0.016秒; - 蘋果A11處理器最高時(shí)鐘頻率大約為 2.5 GHz,其運(yùn)行速度為每秒6000億次浮點(diǎn)計(jì)算,0.6T FLOPS(float point operation per second)。
以幀率60計(jì)算,A11處理器的運(yùn)算次數(shù)為每幀不超過6000億/60=100億次計(jì)算。 - 如果將應(yīng)用程序的一次指令集調(diào)用視為一次計(jì)算,可以理解為應(yīng)用程序的Update中的函數(shù)語句調(diào)用次數(shù)不超過100億次。
- 應(yīng)用程序或者說游戲的一次Update到底有哪些事情在處理?
一次Update的工作:
邏輯+渲染
-
資源優(yōu)化
http://www.itdecent.cn/p/8f591a7d7834
資源優(yōu)化標(biāo)準(zhǔn)
Mesh動(dòng)態(tài)模型:
- 面片數(shù)<3000
- 材質(zhì)數(shù)<3
- 骨骼數(shù)<50
靜態(tài)模型: - 頂點(diǎn)數(shù)<500
Texture貼圖: - 長寬<1024
音樂資源優(yōu)化 - Audio長時(shí)間音樂(背景音樂)壓縮格式 mp3
- 短時(shí)間音樂(音效)非壓縮格式 wav
Shader - 盡量減少復(fù)雜數(shù)學(xué)運(yùn)算、
- 減少discard操作
-
Unity渲染統(tǒng)計(jì)窗口:https://blog.csdn.net/linuxheik/article/details/78866677
Unity 統(tǒng)計(jì)窗口:https://docs.unity3d.com/Manual/RenderingStatistics.html -
參數(shù)說明
參數(shù)說明:https://www.cnblogs.com/umpjls/p/7319480.html -
優(yōu)化概覽
image.png
一、 Draw Call batching
https://docs.unity3d.com/Manual/DrawCallBatching.html
繪制調(diào)用合并,主要有static batching(合并渲染批次)、dynacmic batching、instancing(實(shí)例渲染)
Unity內(nèi)置的批次合并,首先要求要合并的物體使用同一個(gè)材質(zhì)。
1 static batching:靜態(tài)批次合并
靜態(tài)批次合并,是指Unity可以將靜止并且材質(zhì)相同的物體合并為一個(gè)巨大的mesh來渲染。
- 將游戲?qū)ο笤O(shè)置為靜態(tài)。
- 使用同一個(gè)材質(zhì)。只有使用同一材質(zhì)的物體才可能被合并。因而,如果想要獲得好的合并效果,要盡可能多的讓不同的物件模型共用同一個(gè)材質(zhì)。
- 紋理打包。如果有兩個(gè)材質(zhì)球,使用的Shader相同,僅僅是貼圖不同,可以考慮合并這些貼圖到一個(gè)大的貼圖里,這個(gè)過程叫做圖集打包——Texture atlasing。一旦這些貼圖在一個(gè)圖集里,就可以將這兩個(gè)材質(zhì),用一個(gè)材質(zhì)球代替。
2 dynamic batching:動(dòng)態(tài)批處理
3 GPU Instancing:多實(shí)例渲染

- animation instancing:https://blogs.unity3d.com/cn/2018/04/16/animation-instancing-instancing-for-skinnedmeshrenderer/
https://www.cnblogs.com/88999660/p/5541695.html
在Unity中用手動(dòng)方式降低Draw Call
如果我們想減少draw call,在Unity中或者在其他引擎上,可以盡量減少使用的material(材質(zhì))。基本上,這些可以還原為這些簡單的步驟:
1.整理所有的material并且通過他們的shader類型收集他們
2.第二步:對于使用相同shader的材質(zhì),將他們的貼圖做成一個(gè)圖集(Atlas)
3.創(chuàng)建一個(gè)material,它將包含shader和圖集(Atlas)
4.網(wǎng)格的所有UV重新映射,使用Shader適配圖集的坐標(biāo)
5.用映射的網(wǎng)格創(chuàng)建出步驟3的material
二、LOD
Levels of Detail的簡稱,意為細(xì)節(jié)層次。
三、Occlusion Culling
遮擋剔除,Culling Distance。
角色模型
針對角色模型
1. 角色模型
關(guān)閉光照探頭、
關(guān)閉反射探頭、
關(guān)閉接收陰影、一般效果要求開啟投射陰影,但是接收應(yīng)該沒有必要開啟,視情況而定
VBO(頂點(diǎn)緩沖對象Vertex Buffer Objects-是讓APP存儲(chǔ)和操作GPU內(nèi)存中數(shù)據(jù)的一種機(jī)制,當(dāng)GPU處理數(shù)據(jù)時(shí),不需要從CPU內(nèi)存中讀取,可以節(jié)約內(nèi)存帶寬) Total的值是207.2KB,這與場景里沒放物體207.2KB一樣大小,這說明了動(dòng)態(tài)批處理不僅優(yōu)化了CPU的DC,還有優(yōu)化了Memory(內(nèi)存)大?。?/p>
影響因子:
1.光照
-
光照方程:
圖片引用:http://www.itdecent.cn/p/2e73fbee0d62 -
光照方程的加標(biāo)示版本:
圖片引用:http://www.itdecent.cn/p/2e73fbee0d62 陰影
霧氣
LOD






