六要點(diǎn)實(shí)現(xiàn)Unity3D開(kāi)發(fā)性能優(yōu)化
1、頂點(diǎn)性能
一般來(lái)說(shuō),如果您想在iPhone 3GS或更新的設(shè)備上每幀渲染不超過(guò)40,000可見(jiàn)點(diǎn),那么對(duì)于一些配備 MBX GPU的舊設(shè)備(比如,原始的 iPhone,如 iPhone 3g和 iPod Touch第1和第2代)來(lái)說(shuō),你應(yīng)該保證每幀的渲染頂點(diǎn)在10000以下。
2、光照性能
像素的動(dòng)態(tài)光照將對(duì)每個(gè)受影響的像素增加顯著的計(jì)算開(kāi)銷(xiāo),并可能導(dǎo)致物體會(huì)被渲染多次。為了避免這種情況的發(fā)生,您應(yīng)該避免對(duì)于任何單個(gè)物體都使用多個(gè)像素光照,并盡可能地使用方向光。需要注意的是像素光源是一個(gè)渲染模式(Render Mode)設(shè)置為重要(Important)的光源。像素的動(dòng)態(tài)光照將對(duì)頂點(diǎn)變換增加顯著的開(kāi)銷(xiāo)。所以,應(yīng)該盡量避免任何給定的物體被多個(gè)光源同時(shí)照亮的情況。對(duì)于靜態(tài)物體,采用烘焙光照方法則是更為有效的方法。
3、角色
每個(gè)角色盡量使用一個(gè)Skinned Mesh Renderer,這是因?yàn)楫?dāng)角色僅有一個(gè) Skinned Mesh Renderer 時(shí), Unity 會(huì) 使用可見(jiàn)性裁剪和包圍體更新的方法來(lái)優(yōu)化角色的運(yùn)動(dòng),而這種優(yōu)化只有在角色僅含有一個(gè) Skinned Mesh Renderer 時(shí)才會(huì)啟動(dòng)。角色的面數(shù)一般不要超過(guò)1500,骨骼數(shù)量少于30就好,角色Material數(shù)量一般1~2個(gè)為最佳。
4、靜態(tài)物體
對(duì)于靜態(tài)物體定點(diǎn)數(shù)要求少于500,UV的取值范圍不要超過(guò)(0,1)區(qū)間,這對(duì)于紋理的拼合優(yōu)化很有幫助。不要在靜態(tài)物體上附加Animation組件,雖然加了對(duì)結(jié)果沒(méi)什么影響,但是會(huì)增加CPU開(kāi)銷(xiāo)。
5、攝像機(jī)
將遠(yuǎn)平面設(shè)置成合適的距離,遠(yuǎn)平面過(guò)大會(huì)將一些不必要的物體加入渲染,降低效率。另外我們可以根據(jù)不同的物體來(lái)設(shè)置攝像機(jī)的遠(yuǎn)裁剪平面。Unity 提供了可以根據(jù)不同的 layer 來(lái)設(shè)置不同的 view distance ,所以我們可以實(shí)現(xiàn)將物體進(jìn)行分層,大物體層設(shè)置的可視距離大些,而小物體層可以設(shè)置地小些,另外,一些開(kāi)銷(xiāo)比較大的實(shí)體(如粒子系統(tǒng))可以設(shè)置得更小些等等。
6、DrawCall
盡可能地減少 Drawcall 的數(shù)量。 IOS 設(shè)備上建議不超過(guò) 100 。減少的方法主要有如下幾種: Frustum Culling , Occlusion Culling , Texture Packing 。 Frustum Culling 是 Unity 內(nèi)建的,我們需要做的就是尋求一個(gè)合適的遠(yuǎn)裁剪平面; Occlusion Culling ,遮擋剔除, Unity 內(nèi)嵌了 Umbra ,一個(gè)非常好 OC 庫(kù)。但 Occlusion Culling 也并不是放之四海而皆準(zhǔn)的,有時(shí)候進(jìn)行 OC 反而比不進(jìn)行還要慢,建議在 OC 之前先確定自己的場(chǎng)景是否適合利用 OC 來(lái)優(yōu)化; Texture Packing ,或者叫 Texture Atlasing ,是將同種 shader 的紋理進(jìn)行拼合,根據(jù) Unity 的 static batching 的特性來(lái)減少 draw call 。建議使用,但也有弊端,那就是一定要將場(chǎng)景中距離相近的實(shí)體紋理進(jìn)行拼合,否則,拼合后很可能會(huì)增加每幀渲染所需的紋理大小,加大內(nèi)存帶寬的負(fù)擔(dān)。這也就是為什么會(huì)出現(xiàn)“ DrawCall 降了,渲染速度也變慢了”的原因。
原文鏈接:http://www.unitymanual.com/6572.html
【編輯推薦】