天神互動康凱:U3D手遊[蒼穹變]性能優化

Gamelook報道/4月11日,由Unity公司舉辦的Unite 2016大會在上海正式舉行,在4月12日的案例分享專場會議上,天神互動U3D高級開發工程師康凱以手遊《蒼穹變》為例講述瞭3DMMOARPG遊戲開發過程中的優化思路和方法。

20

以下是演講實錄:

康凱:大傢上午好,天神互動是一傢2009年成立的公司,公司主要是開發MMO項目,產品有微端版的《蒼穹變》在騰訊遊戲大廳上線,我這次分享的是我們開發的手遊版《蒼穹變》的一些經驗。

我自己是天神互動Unity3D高級開發工程師,在天神有機會參與PC版和手遊版蒼穹變的設計、開發和優化方面的工作。蒼穹變手遊iOS最低配置是iPhone4S,我從三個方面和大傢分享開發蒼穹變手遊版的經驗,主要按照項目時間順序。前期我們會準備基礎知識,因為蒼穹變手遊是我們開發的第一款MMOARPG手遊,接下來跟大傢說一下開發過程中的關鍵點,最後是性能優化。

5

前期基礎準備工作對於整個後期的結果至關重要,所以我們做瞭一些知識方面的準備,包括CPU、GPU硬件支持我們自己科普瞭一下,包括驅動程序、圖形API,當時針對的平臺是iPhone4S,Unity深入的瞭解瞭一下,移動平臺上MMOARPG有一個很關鍵的矛盾,需要解決ARPG龐大復雜的功能需求和對性能的要求,遊戲首先不能崩潰、不能卡頓還不能發燙,在移動平臺有限的硬件資源條件下做開發、比我們開發PC版的MMO復雜很多,我們面臨很多的挑戰。

6

這是我們的一些前期知識準備得到的結論,結論是一般3D遊戲瓶頸主要在渲染方面,渲染問題包括三個方面,CPU、GPU和內存,由於手機上采用的是內存、顯存共享的方式,因此不存在傳統PC上數據從內存到顯存傳輸的瓶頸,在移動平臺上我們更加關註CPU和GPU。

7

CPU眾所周知最大的瓶頸是Drawcall,而它的本質是GPU被設計為高性能低功耗,不具備容錯能力,每次當CPU向GPU提交的數據發生變化時,CPU需要運行驅動程序對數據的合法性進行驗證,這就是Drawcall。

8

開發過程中的關鍵點,首先團隊準備,我們先要確定目標機型,如果沒有目標這個事情無法衡量性能優化的指標是否達標,性能指標主要是Drawcall和內存如何在場景、角色、特效和UI之間進行分配,有句比較受用的話,說優化做的好、不如前期設計規劃的好,像這種大型項目,前期如果沒有一個良好的規劃,後續各個工種之間溝通上成本會非常高。

9

接下來我們講團隊成員對硬件達成共識,就是花一些時間對美術非技術人員,和策劃人員進行一些圖形學方面的培訓,這在一個大型項目中是非常值得的,告訴他們哪些東西消耗多少,我們需要怎麼應對,有時候他們會想出更好的解決方案。

美術規范文檔,它的重要性在於如果是大型項目,像我們的MMOARPG一般團隊四五十人的規模,美術人員占比很高,如果前期沒有科學合理的規范,美術同學到項目後期會涉及到項目的大量返工,我們找瞭同行測試、調研,調研瞭八傢公司。工作流同理,我們參與人員眾多,我們需要規劃清晰的工作流,確保每個部門的輸入輸出盡量減少耦合工作。工具準備,我們會前期準備好一些工具確保我們工作流的順暢。

10

接下來客戶端框架設計,我本人是客戶端開發工程師,所以隻能給大傢講講客戶端的框架設計,至關重要的三個方面,第一方面是資源加載模塊,包括依賴式打包,資源CDN放緩存,從服務器到硬盤,硬盤到內存如何妥善釋放掉。資源加載模塊是我們要解決的一號問題,因為這塊出問題整個遊戲進不去的,整個開發過程中必須保證這一條通道的暢通,我們的做法是放最優秀的技術人員解決這方面的問題。

11

然後GamePlay框架,簡單說是角色的移動戰鬥和換裝這塊,我們采用縱橫模式,縱橫框架縱向采用分層,舉個例子,精靈管理器管理精靈,精靈管理狀態,狀態操作組件。橫向分模塊,精靈管理器,地圖管理器,特效管理器,配表加載模塊,網絡模塊,資源加載模塊等。

接下來是UI框架,UI框架是我們放在第三個但重要性並不是第三,蒼穹變手遊版客戶端代碼有20萬行,80%以上是UI的邏輯,UI對整個項目的高速開發非常重要,我們需要設計一套,並且UI程序員工作占比也比較高,一個開發團隊七八個客戶端大概有5到6人做UI邏輯這部分,部分需要高速並行的開發,策劃的需求變動比較劇烈,因此我們需要良好的UI框架讓各個模塊之間能夠並行、以比較良好的速度運轉。

12

然後談一下關於性能優化方面的經驗,但是請大傢註意這次分享的是蒼穹變手遊版的優化經驗,而蒼穹變手遊我們定位的是iPhone4S這個機能的設備,有些東西不一定是非常適用於現在的iPhone5S之類,我們瞭解清楚基礎原理,再有目的的針對特定的機型做特定的優化。

關於TA(技術美術),大型團隊裡面我們經驗是開發手遊版的MMOARPG必須配備TA,要貨真價實的TA,因為3DMMO遊戲是一種運算密集型的應用,最大量的硬件資源消耗在於圖形渲染,就是我們內存也好、CPU也好、GPU也好這方面需要有一個合格的TA幫我們解決美術資源到程序中的一系列問題,包括美術規范的制定和後期的優化方案的提出。

性能優化的前提是要有紮實的基礎,第一步是找到瓶頸,如前所說,憑借要麼是CPU要麼是GPU,而這兩方面的優化方案截然不同,如果問題出在CPU、優化GPU會得到相反的結果,找到瓶頸需要一些工具,推薦的是Adreno Profiler,,另外一個是Unity自己的工具,這個像紅框裡面看到的,可以看到一些信息是被CPU卡住還是被GPU卡住。

13

接下來講紋理貼圖,第一步要解決紋理貼圖的問題,因為貼圖在ARPG遊戲裡面內存占比最高的,性能消耗也是最高的,紋理壓縮大傢可以看一下公式,如果256×256貼圖不采用是256K,采用壓縮是32K,如果遊戲有上百兆紋理題圖、那麼壓縮後可能為原來的50%或更小,遊戲包體能有更小,並且紋理貼圖的尺寸如果采用紋理壓縮,紋理貼圖的數據更容易被二級緩存緩存,也可以大幅提高性能,其實紋理壓縮並不是很復雜。

然後采用適合的尺寸,一個物件占屏幕100×100沒有必要采用256×256貼圖的,但是實際項目中參與美術人員眾多,場景規模非常大,紋理貼圖數量多,這一點是非常容易被忽視的,造成我們寶貴的內存和GPU、浮點運算的浪費。

接下來Alpha通道分離,這個問題我們到後期優化後解決不瞭這個問題,我們請瞭一個外國人,國外頂級的圖形學專傢,他給我們說瞭一系列的優化方案,其中有一條叫做Alpha通道分離,是說Alpha通道的貼圖,建議拆成兩張一張不帶Alpha通道,一種是帶的,這個好處是紋理壓縮格式不帶Alpha通道,我們拆出來以後能夠兼容廣大的安卓設備,另外一條好處單獨拆分的Alpha通道可以縮減尺寸,因為Alpha通道圖大部分是不透明或者透明,基本是01,我們可以縮減尺寸可以對它進行更高強度的紋理壓縮。

14

然後我們說Shader優化的重要性,在於可編程渲染管道裡面想節約GPU浮點運算次數,能做的是在於Shader,Shader這方面大傢想象一下,我們假設象素著色器每一個象素額外多一部分乘法運算,iPhone4S 960×640的象素每幀要多60萬次的浮點運算,如果Shader寫瞭多一步浪費乘法運算,每秒會多出3000萬次的浮點運算。減少象素著色器的運算量,我們建議優先采用低精度的數據類型,這些在某些GPU上能夠以更短的時間周期執行完畢,再說精確點這些在蘋果的GPU使用低精度浮點運算是這樣,安卓的設備上不一定。

15

場景,場景是遊戲裡面內存和GPU和CPU消耗大戶,怎麼解決這個問題呢?一些比較有用的經驗是場景的Mesh烘焙後刪除多餘的信息,比如法線和切線,當數量變成十萬級的時候是非常可觀的,我們的經驗是刪除之後在某些場景內存能夠節約3到5兆,iPhone4S上是不錯的,能把節約出來的這部分內存用來把場景做的更漂亮。

另外地形用的是T4M,這是美術同學們自己總結,用T4M導出obj在3dmax裡二次壓縮有更好的效果。接下來是植物,用Mesh雕刻邊緣,這些被切除的邊緣不會浪費掉寶貴的浮點運算次數。接下來手動區域合並,Unity自己自帶合並,有動態合並和靜態合並,這兩點我們項目沒有使用,靜態合批導致內存增大,我們采用的是手動區域合並,把臨近的物件進行網格的合並。

16

接下來角色,我們並沒有把角色做到次世代這麼高的精度,角色的骨骼、動畫有些設備在CPU進行運算的,而CPU從4S到5S硬件跑分從2000分到1.5萬分性能翻7倍,但是CPU隻是從兩個雙核1G到1.3G,因此角色技術是一個嚴峻的挑戰,在沒有有效技術解決同屏角色問題以前,我們對於角色的頂點數和骨骼數依然謹慎對待。然後動畫,動畫這塊耗CPU也耗內存,一個主角40個動作,4M,所以降低動畫精度,縮短動畫時間,動畫按需加載,一個是SkinMeshRenderer。

17

接著特效,場景、角色和特效是性能三大殺手,特效對性能殺的是GPU,我們如果一個屏幕上疊加瞭960×640半透區域,那就是3000萬次乘加,這個實際上我們遊戲到現在依然沒有一個比較好的解決方案,隻能是把這些采用Mesh雕刻,多餘的部分進行切除,現在能解決是減少半透區域在屏幕的面積,我們測試整個屏幕的半透明的化、性能上幀數要掉10幀,如果一樣是420層的半透區域縮小到10×10象素可以跑滿幀,所以半透區域對性能影響是很大的,消耗瞭我們的浮點運算能力,也耗瞭寶貴電量。均勻分配特效時間,包括技能特效起飛、飛行爆炸,這些時候需要盡量的均勻分配粒子出現的時間。

18

到最後跟大傢分享兩句比較受用的話,遊戲一部分是基於科學的模擬,一部分是繪畫,我們可以采用一些障眼法,由整個團隊合作,由美術、技術和策劃想出一些好辦法能夠大幅度節約運算量達到比較好的效果。另外一部分是越是尊重和理解硬件的限制我們遊戲越能得到良好的表現,我的演講完畢,謝謝大傢。

19

Comments are closed.