天天看點

Unity之Optimizing graphics performance前言(三)

寫在前面,對于優化,自己都是在工作實踐中,别人說什麼就是什麼,從來沒有去認真的學習過這一塊的事情,是以這一次通過部落格的形式來學習和總結一下,其中肯定有不到之處,望朋友們能指出,并給出建議。謝謝。

一個成功的遊戲對良好的性能要求是非常高的。是以Unity在這方面給出了很好的Tips。

遊戲的性能主要受到計算機裝置的兩個方面影響——— CPU 與 GPU

是以首先要找出影響性能的問題在哪,在根據這個問題所回報的情況,來定位并相應制定優化政策(理想情況下,是針對CPU和GPU同時優化,但是世間萬事不能兩全其美,往往采取政策是犧牲CPU成全GPU,亦或者犧牲GPU成全CPU)。

一、重點内容針對這個CPU與GPU優化比較常見的問題及檢查方法如下:

1. CPU

CPU經常受限于需要渲染的批次(batches)數量。因為CPU每次需要為渲染準備以及收集資料,然後調用GPU圖形處理接口,這個過程是相當耗時費力的。

是以Unity 提供了一個非常好用的工具——Statistics Window面闆。

可以通過 Statistics面闆 檢查正在渲染的 batches數量,如果數量過高,那麼意味着CPU的消耗過高。

2. GPU

GPU往往受限于在渲染時像素的填充率以及現存帶寬的使用。

如何來檢查并定位Unity給出的針對填充率是這樣檢查的:

Lower the display resolution and run the game. If a lower display resolution makes the game run faster, you may be limited by fillrate on the GPU.

降低遊戲的分辨率然後運作,如果在低分辨率的情況下,遊戲的運作非常流暢,那麼可能在GPU上受到的像素填充率的影響。

Unity同樣也提供了一個很好用的工具,來便于我們進行優化—— FrameDebugger。

二、不常見的問題及檢查方法:

1. CPU

如果在渲染時CPU需要處理太多的頂點(vertex),情況如處理skinned meshes(蒙皮網格:用于骨骼動畫等)、cloth simulation(布料仿真)、particles system(粒子系統)以及一些遊戲裡面的gameObject和網格(Mesh)。

針對于上面的情況,通常在不影響遊戲的品質的情況下,盡量保持定點數越低越好,這樣才能盡可能的保持CPU的流暢性。針對于此,後面文章會介紹。

2. GPU

如果在渲染時,GPU也要去處理太多的頂點資料(Vetex Data)。

此時在確定遊戲的流暢性的情況下,可以接受的頂點資料的總數,取決于GPU性能和頂點着色器(Vertex Shader)的複雜性。

為此Unity給出的Tips:

針對于移動裝置,盡量目前每幀渲染頂點數不要超過十萬個。

針對于PC裝置,盡管PC裝置的性能優于移動裝置,也能更好的處理頂點資料,甚至能同時處理幾百萬個,但是仍然可以通過優化這個,然後仍然可以獲得一個非常好的額實際性能效果。

3. Garbage Collection(GC 垃圾回收)或者Physics

如果渲染時,通過檢查定位,發現其實影響性能的并非是因為CPU的Batches或者GPU引起的,那麼,這個問題可能出GC或者Physics(實體計算)。

綜上所述,做一個好的遊戲,從碼農角度來看,為了保證程式的流暢性,我們要對Unity性能,針對以上幾個方面着手,對齊性能去優化,才能給使用者最好的體驗,同樣,才可以使我們的勞動得到更高的價值。

在後面幾篇文章中,我會繼續貼上自己的學習心得和總結。

繼續閱讀