小記:《技術進步引發的靈感革命》網易游戲學院第二屆公開日


昨天參加了網易游戲學院的公開日《技術進步引發的靈感革命》,干貨十足,期間做了一些筆記,分享一下。

在廣州好幾年了,也是第一次到科韻路信息港,下午去的早了些就在周圍逛了逛,熟悉了一下地形和周邊的小吃(主要是沒吃午飯,到處找吃,只找到一家全家)。太熱了又逛的差不多了,就來到了網易大廈。

163game

我去的太早,還擔心里面沒人。進去之后,發現好多漂亮的禮儀小姐早已經在迎接嘉賓了(可惜沒拍照)。進入會場,大屏幕,電影院的感覺,找了個好位置開始看網易的宣傳片。

163game2

演講開始~

1. 自研引擎力作《亂斗西游》開發經驗

《亂斗西游》是一款完美融合MOBA和ARPG玩法的革命性3D動作手游,上市以來表現優異,多次獲得蘋果官方推薦並入選“App Store 2014年度精選”。作為網易第一款3D手游,在自研引擎NeoX上如何做多線程渲染方案?采用了哪些跨平台/渲染/網絡同步/存儲方案?如何為跨服設計服務器架構?諸多難題,本次由該項目主程陳伊力為您一一詳解。

PPT: http://www.youxituoluo.com/78062.html

注意NeoX的發音,沒錯,就是牛X引擎,名字夠牛。亂斗西游在立項初期,在游戲引擎選擇上面也考慮了諸多,比如商業的Unity, Unreal等,也包括網易自研的引擎,最后,他們選擇了自研的牛X引擎。服務端架構方面使用了MobileServer多服架構(主要語言Python,沒有過多介紹)。數據庫使用mongodb,目前亂斗西游4台服務器可支持10萬玩家。

在提供客戶端效率方面,采用了多線程渲染。將邏輯線程和渲染線程分離。線程消息隊列使用了無鎖的RingBuffer和Double Buffer(雙緩存交換隊列)。通過Profile分析瓶頸,性能得到不斷優化。

同步技術的迭代,這也是我比較關心的內容。在項目初期,考慮到當時的手機網絡環境,亂斗西游只考慮了異步對戰(即不是很真實的玩家實時對戰,對戰的只是帶有一份玩家數據的機器人)。但是,他們非常的清楚,異步對戰不是未來,同期也越來越多游戲加入了同步對戰。所以,在同步對戰方面,亂斗西游采取了分步驟迭代的方式,不久后推出了WIFI對戰功能,即在同一WIFI網絡下實現的同步對戰功能。實現的方式是主客機的方式,即其中一台機器做主機,另外一台機器做客機,只在WIFI網絡內傳輸數據。再后來,為了跨服跨網絡的同步對戰,使用了Router服的方式來實現。即玩家連接到Router服,Router服只負責轉發。這幾種同步對戰方式我之前都考慮過,在上家公司做服務端主程時都給出過具體的方案。我也清楚的知道,這也都不是未來,這些方案主要特點是簡單,能夠快速開發並上線,未來一定是基於服務端計算的真實同步PVP。目前, 亂斗西游正在實現真實同步PVP。

在同步的實現和優化方面,亂斗西游采取了客戶端先行,服務端矯正的方式。比如客戶端的移動先行,在位置出現偏差時,采取一種比較溫和的方式進行矯正。比如,在角色被強制位移時進行矯正,位移速度根據誤差進行縮放等等。

同步的實現方式,一種是像War3星際的幀同步(幀鎖定)方式。這種方式要求嚴格控幀,服務端和客戶端必須步調一致,斷線重連比較復雜,落后需要補幀。由於MoibleServer中Python大量使用了dictionary,遍歷的時候是無序,使用幀同步方式很難保證每次遍歷的順序都是一致的,再加上其他很多原因,亂斗西游未采取幀同步的方式。

另外一種同步實現的方式,就是LOL、Dota2等的實現方式,狀態同步,服務端承載了所有運算,客戶端只負責發出指令和顯示。目前亂斗西游采取的是這種方式。

在同步戰斗的網絡協議方面,亂斗西游采取了UDP的方式。原因是TCP的滑動窗口流量控制機制太不可控,采用UDP的方式可以做到更加高效,對丟包的處理更加可控。

優化方面,使用Neon指令集(ARM Cortex™-A 系列處理器的 128 位 SIMD單指令多數據架構擴展)。

Python常量使用優化(Python並沒有提供常量支持,實際使用時會被當做字典的項來進行查找,影響效率,所以上線前將常量自動替換為實際的數值提供效率)。

為了防止腳本被破解,通過修改腳本虛擬機,將OpCode(字節碼)打亂。

2. 《無盡戰區》渲染方案迭代分享

作為網易首款TPS視角MOBA游戲,《無盡戰區》不僅在玩法上做出了突破,同時在畫面效果和品質上也在不斷探索和迭代:日式動漫還是美式卡通?虛幻還是真實?在從無到有的緊張開發期中如何打破層層迷障,創造出有自己特色的渲染方案?本次Inception工作室的李冰將為大家分享,在《無盡戰區》畫面效果迭代中積累的點點滴滴。

天下引擎,需求:重視手感,響應迅速。風格參考了Team Fortness2。分享了卡通角色渲染方案的迭代過程,最后的渲染效果的確很贊。

3. 全局光照利器CloudGI技術全解析

CloudGI是一款網易自研的烘培器,它可以在數秒鍾內計算完軟影、AO、間接光照、體光源等全局光照效果(一台機器),已經為網易內部數十款游戲提供烘培服務。本次由CloudGI的開發者李文耀,為大家介紹如何利用GPU把烘培時間減少到幾秒的級別,包括烘培基本算法、烘培直接光照、烘培間接光照三個部分。

很牛逼,能把耗時的烘焙時間減小到10秒,不過只能針對網易自研的引擎烘焙優化。

4. 次世代無縫大世界 ——《天諭》自研引擎分享

次世代的畫面表現對資源的需求量是巨大的,如何在符合國內玩家軟硬件水准的情況下,驅動一個巨大的無縫游戲世界?《天諭》的自研引擎通過嚴格的Budget系統和細致的Streaming/LOD/Proxy等技術,將大世界渲染中所需的資源降低了1-2個數量級。其中的技術細節和心得體會,會在此逐一道來。

PPT: http://www.youxituoluo.com/78063.html

天諭的大世界有150平方公里,比魔獸世界的卡利姆多大陸還大(100平方公里)。一同隨去的天鴻同學直呼《天諭》引擎的偉大。要求美術所有貼圖都有一張替代貼圖,場景任意時刻和位置面數不能超過50萬面。運用科學的方法,通過機器人跑遍整個場景進行離線分析和LOD優化。通過Proxy技術將場景切分為一個個立方體,對立方體內的模型物件進行整體的LOD優化。在保證了幀數流暢的前提下, 也保證了畫面的精致。

5. 百萬在線的基石 ——夢幻手游服務器架構

說到手游中的重度游戲MMO,如何提供一個穩定高效的手游MMO服務器引擎?夢幻西游手游如何做到萬人同時在線?手游和端游在MMO上有何不同?AOI如何實現?通過什么樣的開發流程就可以保證在產品上線時穩定,不會出現大面積DOWN機的情況? 一整套解決方案,你值得擁有。

PPT: http://www.youxituoluo.com/78130.html

夢幻手游服務端架構來自端游的服務器架構,支持單服2.2W人,最高在線達到200W人。服務端架構如下:

MengHuangServer

由於是沿用端游的架構吧,這是一種早期比較常見的服務端架構。Server采用單進程多線程的方式,同時保證寫邏輯代碼時只在單一線程,不需要考慮多線程問題。AOI(Area Of Interest)的實現主要有兩種:格子和十字鏈表。夢幻手游采用的是九宮格的格子算法。(AOI算法主要解決NPC和玩家位置同步,AI事件觸發的算法問題,可以這樣理解,最簡單直接的算法,是遍歷整個場景的NPC或玩家,將位置信息同步給玩家。顯然這樣的效率是很低的,因為離你很遠的玩家的位置其實是不需要的。) 數據存儲使用udb,nosql,binlog。AI使用行為樹,將AI的設定全部交給了策划同學。

使用valgrind追蹤內存泄露問題,統計腳本虛擬機object數量分析瓶頸。IO操作全部異步化。項目管理采用不強制的CodeReview,有自動化的協議測試Case,分析CodeCoverage,使用代碼靜態分析工具。


### 小結

公開日組織的不錯,演講嘉賓的內容也干貨十足。中間和最后有抽獎環節,可惜沒中。。在游戲自研領域,網易體現了其強大的研發實力。總的來說,受益匪淺,不虛此行。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM