《天諭》手遊被網易寄予了厚望,它是2015年《天諭》端遊的IP續作,也是網易2021年開年的首款MMO遊戲。1月8日上線後,遊戲穩坐iOS免費榜首至今,並且在TapTap熱門榜和新品榜高居頭名,好遊快爆平臺評分也有8.6分。
在MMO表現技術不斷拉高標準的競爭環境下,網易選擇Unity作為《天諭》手遊的開發引擎,讓低端設備也能實現雲層、海底、植被等資源的高效渲染,最終呈現出高品質的美術表現。此次採訪主旨為了解網易是如何利用Unity引擎功能,完成移動端美術技術的硬品質呈現。
以下為工作室的採訪分享,葡萄君整理:
能簡單介紹一下《天諭》手遊和它的開發背景嗎?
網易天諭手遊:《天諭》手遊由網易雷火遊戲事業部開發,目前旗下遊戲主要為《天諭》端遊等MMORPG類型的產品。《天諭》端遊於2011年3月立項的,並於2015年6月正式上線運營,上線初期便打破了30萬人同時在線的記錄。目前端遊仍保持穩定長線運營,積累下一批核心玩家。
因此在2016年8月,我們決定正式立項《天諭》手遊,選擇Unity引擎圍繞「 日月生息」、「萬物有靈」、「一見傾心」和「肆意冒險」的設計思路,打造一款業界標杆級的MMORPG手遊。
《天諭》手遊是一款以東方幻想為主題的MMORPG遊戲,遊戲為玩家打造出能夠在雲海穿梭飛翔探索的世界,並且有豐富的職業選擇、高難度副本挑戰,以及高自由度捏臉系統,帶給玩家獨特的開放世界遊戲體驗。
《天諭》手遊已於2021年1月8日全平臺公測,我們期望遊戲能帶給玩家不一樣的遊戲體驗,同時也希望天諭IP能夠不斷壯大,帶給玩家更多不同類型的遊戲作品。
遊戲採用的無縫大世界是眾多亮點之一,可以分享下它的實現方式嗎?
網易天諭手遊:項目場景需求是大場景(2500 x 2500),遠視距(標誌物件2000米),場景豐富(日月升息, 萬物有靈,大量三級物件)。引擎原生的單場景機制會造成場景資源佔用內存過大,面數、drawcall壓力大,多圖加載耗時長等問題。
我們嘗試過使用引擎提供的多場景機制,遇到了一些難以規避的問題。不過在此基礎上,引擎也為我們提供了一些大場景的製作思路,並實現了大場景流式加載方案。
製作階段,我們給美術人員提供多人編輯工具,一個大場景可以分給若干人員,每人負責一塊。製作完成後合併為一個大場景進行打光烘焙,提升製作效率。
場景製作完成之後,我們會根據場景中物件的大小、類別、重要程度等信息,給每個物件計算一個推薦視距,美術人員可以在此基礎上對特殊物件視距進行調整。
之後我們將大場景導出成配置文件和物件prefab,配置文件裡面記錄每個物件的資源路徑、坐標、旋轉、scale等信息。這個過程中,我們會根據物件的視距,對它們做分層和分塊處理,並結構化存儲在配置文件中,以提高運行時編輯場景物件的效率。
運行時,系統會根據主角位置的變化,去計算當前需要加載/卸載的物件,並分幀進行加卸載操作,以保證只有玩家周圍可以看到的物件在內存中,而離玩家較遠的物件可以及時卸載。
這樣就基本解決了前面提到內存佔用大、面數、drawcall高、切圖時間長等問題。在此基礎上,我們還做了一些其他工作,來優化流式加載中的效果和性能,包括:
遮擋剔除優化面數,drawcallTexture Streaming優化貼圖內存機型適配, 畫質分級,整體縮放場景視距使用LOD優化面數、內存定製SRP Batch方案最優化渲染狀態切換開銷,優化drawcall開銷場景靜態物件No GameObject化的優化實例化耗時合理的緩存和資源總量控制,優化內存和實例化耗時採用Vulkan技術降低功耗開銷
遊戲中採用了Unity最新的DOTS技術的JobSystem多線程管理器來實現魚群的效果,可以分享下JobSystem的使用經驗以及使用前後的數據對比嗎?
網易天諭手遊:Unity的DOTS在多線程開發的易用性和安全性方面提供了保障,《天諭》手遊藉此開發了多種魚群生態行為和優化算法,實現了40餘種、8000多條,不同魚群生態的海底效果。
我們在iPhone6s 單worker線程跑5000條魚的情況下,按照耗時能達到理論上250幀 ,在核心數更多的手機上,可以有更加優秀的性能表現。Unity的DOTS確實為更底層的性能提升提供了可能性,是一個革命性的技術。
以下是iphone 6s上5000條魚可以跑250幀的耗時分布:
《天諭》手遊實現了對遊戲性能優化高要求的千人同屏玩法,可以分享一下項目組的性能優化經驗嗎?
網易天諭手遊:首先,我們要非常感謝Unity技術團隊每個月來項目組駐場,持續為項目提供性能分析和優化服務,畢竟優化這件事不是一蹴而就的。
群戰在客戶端上做過的的優化主要包括:
熱點代碼(比如戰鬥邏輯、位置同步等)本地化,降低CPU消耗;加入了特效分級和總量控制機制,限定同屏特效的數量和消耗;AI人數加入邏輯個數限制和模型顯示數量限制,以及模型LOD分級,從邏輯和渲染兩個方面控制人物消耗;動畫邏輯制定了分幀和總量控制系統,減少瞬時卡頓;合理的特效、動畫、角色模型等的緩存邏輯;實現遊戲動態解析度方案,自動根據特效的播放量進行解析度的動態改變,降低功耗。
遊戲中的次世代渲染技術也是一大亮點,手機端的雲海渲染方式可以分享下嗎?
網易天諭手遊:為了構建幻想的立體海天大世界,我們實現了很多次時代渲染技術。手機遊戲的渲染技術的難點是必須對所有已經在PC和主機上使用的渲染技術進行深度優化和方案改進。
比如雲海使用在手機上實現超高品質的可造型、可穿行、可隨24小時天氣變換的雲海效果。
首先,通過多張3D Texture存儲雲的形態,美術可通過模型和曲線的形式編輯雲海,實現任意造型。
我們使用Ray Marching做雲海的繪製。
為了流暢性,我們做了很深度的性能優化,比如使用Sphere Tracing降低步進、使用Jittering 解決採樣率不足的問題,使用Mixed Resolution Rendering降低Fragment的渲染開銷,使用TAA降噪。在萬米高空、層雲多疊、資源爆炸的情況下,在非常低端的手機上,依然可以流暢的體驗雲海效果。
TAA前:
TAA後:
海量魚群、海底水體以及超大規模植被的渲染工作,也是開發者比較關注的點,可以分享這些如何在Unity引擎中實現嗎?
網易天諭手遊:魚群渲染主要是採用Unity DOTS進行比較深度的性能優化,可以實現海量的魚群渲染。
海底的渲染我們通過模擬水體吸收光的特性,定製了特殊的霧效和屏幕後期處理方案。讓整體的色彩氛圍能夠符合水下的感受。
另外,海中還有很多特殊的光影效果,比如焦散、海面射入海底的光線散射、水中漂浮物。我們也實現了定製化的渲染方案,讓整體的海底氛圍感能夠得到比較好的表現。
超大規模植被的渲染主要的挑戰來自於渲染性能的壓力,我們幾乎每個大地圖都規劃大量的植被,比如蘇瀾的花海、盈川的草海。它的優化可以從幾個方面來做:
降低Overdraw開銷,一個是儘量減少PS的開銷,我們幾乎把所有的光影計算都放在VS來完成,這樣PS的開銷就特別小;比較好的LOD方案,我們一般會做3級LOD,在切換LOD的時候做一定的隨機切換保證過渡的平滑性,通過LOD方案可以降低面數和Overdraw;因為數量特別多,遮擋剔除也是需要按照塊來進行層級的剔除,這樣能夠減少遮擋剔除帶來的計算開銷;另外,草海花海這種數量特別多的資源需要特殊的存儲方式來用最小的文件大小來記錄每個草的位置和旋轉信息。
你們是否考慮在移動平臺上加入光線追蹤的功能?
網易天諭手遊:我們會在遊戲後續的版本迭代中加入光追的功能,未來可以針對各類不規則表面的玻璃曲面、鏡面、盔甲、水面,實現非常真實的反射效果。
你們在為《天諭》手遊做引擎選型時,是如何考慮的?
網易天諭手遊:Unity具有非常好的開發者基礎,這讓我們可以快速在項目立項之初組建一隻經驗豐富的研發團隊。開發的過程中,Unity方便易用、迭代速度快,可以大幅降低大型遊戲的開發成本,並且成本可控。
新版Unity發布了DOTS和SRP功能。DOTS是一個革命性的技術,對大規模的角色對象模擬提供了更深度的優化。SRP則提供了定製引擎渲染管線更便捷的方案,降低了很多我們渲染定製的工作量。另外SRP的渲染性能也比老的內置渲染管線有很大的提升,是一個非常有價值的技術。
其次,Unity中國區提供了全面的性能優化支持和技術美術支持,有一批固定的工程師長期跟隨駐紮在我們的項目現場。Unity官方在很多方面會提前給出開發建議,節約了項目組探索嘗試的時間成本。
這兩年Unity在工具鏈上也提供給開發者更多便利的開發工具,比如收集崩潰數據的Backtrace及自動化性能測試工具UPR,讓我們可以安心使用全套工具鏈,把精力放在開發高品質遊戲本身。