熱門
“最原汁原味的”《斗羅大陸》3D手游都用到了哪些 Unity 技術?
“最原汁原味的”《斗羅大陸》3D手游都用到了哪些 Unity 技術?
在游戲領域,目前市場上已有多款《斗羅大陸》改編的手游,但質量卻參差不齊。據行業媒體游戲智庫評測,這款游戲可能是截至目前最原汁原味的一款“《斗羅大陸》3D 手游”。
在本文中《斗羅大陸:魂師對決》的主創團隊,將從技術的角度來談一談,如何復刻出最原汁原味的「斗羅大陸」!
三年前,三七游戲便確立了「精品化、多元化」的研發戰略。負責《斗羅大陸:魂師對決》的研發工作是公司負責精品化游戲研發的團隊,團隊上下共約 200 人。每個人在團隊中都發揮著重要的作用,并且往往出現只為尋找解決問題的最佳方法,而不管團隊成員的什么職位什么資歷的情況。真正做到了團隊上下一心,團隊的最高宗旨就是做出更好的游戲。團隊同學不少都是資深「斗羅迷」,對于斗羅世界的一切可謂了如指掌。
《斗羅大陸》是一個非常知名的 IP,有非常多的以此 IP 為基礎影視作品及游戲產品。制作這類具有龐大粉絲群體的 IP 產品,會需要注意哪些細節呢?
系統
游戲的系統需要基于 IP 的設定,拿養成系統來說,三七游戲采用了 IP 本身最核心的升級、突破、魂環、魂骨系統,拿戰斗系統來說,游戲支持上陣 8 個卡牌,因為無七怪,不斗羅,他們必須得可以同時上陣,此外,戰斗中消耗魂力使用魂技,各個角色的魂技都和原著有所對應。
玩法
在斗羅大陸這個?IP 中,最重要的玩法就是狩獵魂獸,獲取魂環魂骨,因此這也是游戲貫穿始終的核心玩法,同時游戲制作團隊為了加強玩家獲取魂環時的感受,在玩家戰斗勝利后會播放一段魂獸死亡倒地,魂環從其身體往上飄的動畫展示,讓斗羅 IP 的玩家一看就知道,這感覺對了。
劇情
IP 類產品最重要也是最基礎的一個點,就是劇情的還原,為了讓玩家更好地體驗我們的劇情,團隊設定了玩家重走唐三的斗羅之路,從初見小舞到和其他史萊克的怪物互相扶持,一步一步直至成神,讓玩家能夠有一個最自然的體驗劇情視角。
場景和人物
在游戲的場景和人物方面要做到「跟動漫一模一樣」。而其中游戲場景包括渲染風格、標志性建筑、光影變化等;人物包括模型、動作、技能、特效、臺詞、配音等都必須忠于 IP,而且要抓重點。比如斗羅中有多個經典場景,如:花海的夢幻櫻花,武魂殿的恢弘磅礴,嘉陵關的黃沙漫漫。決定了團隊一定要強化場景中的 GI 效果和天氣效果,要表現足夠豐富的光影變幻。斗羅動漫中也有著豐富的特寫鏡頭,趙無極的古銅色皮膚,朱竹清細膩的皮膚,長大后唯美的小舞都給動漫迷留下了深刻印象。在游戲的角色設計中會參考斗羅動漫的設計,很多斗羅迷也是動漫迷,玩家會不自覺地拿游戲的人物和動漫的進行比較。而這一特點也指引了游戲制作的技術方向。
“沒有思路就沒有出路”。斗羅世界擁有復雜而華麗的技能表現,傳統的技能制作方式效率上沒有出路。因此團隊開發了全新的技能編輯器。通過用 timeline 和 cinecamera 的組合,他們解決了所見即所得的痛點,美術在技能制作過程中就可以在不同小怪或 Boss 鏡頭下查看和編輯技能從釋放到受擊的全過程。它在 UI 交互方面做到了標準化、統一化,簡單化。
技能編輯器不僅支持常規的動作動畫控制,更可以控制大招場景的過渡、后處理的變換、多對象交互。美術能用簡單的操作實現如武魂融合等協同表演、模塊化特效元素、場景光影更替等天馬行空的設計。
一款「好用」的編輯器看起來要足夠簡單,是 TA、美術、技術深度合作的產物,他既要能發揮各個部門最擅長的部分,又要能提高效率,還要滿足技術指標。
美術喜歡使用更直接的交互:編輯單個預設、單個場景或者一段零散的表演。比如場景更換元素,美術編輯好大招場景。TA 處理好場景間光照環境變化、氣候變化、后處理過度變化等。編輯器也支持復制、撤銷、多目標預覽等操作提高產出效率。技術則需要改進 TimeLine 源碼。Editor 側需要支持 WWISE 音頻資源、預設事件的拖拽、點擊元素等自定義交互事件,Runtime 則需要打通資源加載底層。
團隊對美術在技能中使用到的預設、場景、后處理等資源引用關系做了運行時自動拆分,這樣技能釋放時加載量能控制在 10KB 以下,也方便查看所有資源的依賴關系和定制緩存策略,同時可以保證運行時和編輯環境完全一致。而這些都不會影響到美術的制作。還有很重要的一點,技能播放過程中編輯器需要幫助美術統計 Overdraw,方便自查資源負載情況。
場景編輯器是所有項目中不可或缺的,它是項目成敗的關鍵一環?!富陰煂Q」中的場景編輯器設計理念是強大、包容。而場景編輯器隨著項目的成熟已經發展成了一個獨立完整的插件——場景制作平臺。強大指它要包含場景制作人員涉及到的所有工序,包容指它要能能容納更多有創意的創新工具。
「魂師對決」的場景全部采用基于物理的光照模型,場景優化工作是重中之重。比如場景中的不透明物件如果產生 overdraw,其嚴重程度遠遠高于特效,會造成毀滅性的災難。
為了充分利用移動端的 early-z,制作團隊對場景中所有的材質隊列有嚴格的規劃,并且在相同的渲染隊列區間根據不同變體錯開排列。通過對所有的背景物件采用 gpuinstance 的方式繪制,對可行走區域一定距離的物件他們會關閉陰影相關變體,關閉 lightprobe、reflectionprobe。并合并多余的反射探針、對場景特效關閉間接光、陰影的接收。對樹葉采用自定義透光機制,關閉反射探針等。而這些優化措施完全不需要美術部門的介入,只需一鍵優化提交即可。
Unity 的地形刷工具已經很強大了。但是手機游戲總會有他的限制。為了更好的適配多種機型,團隊重寫了 Unity 的地表刷系統。場景工作平臺的地表刷功能繼承了 Unity 的一筆多刷(刷顏色、刷濕度、刷明暗)功能方便美術使用。
另外團隊在美術保存時增加了末位剔除功能。也就是會在美術使用的 16 張 Texture Array 中選取前 4 個占比最高的貼圖。保證每個像素最多采樣四次。大部分低端設備上最多只支持 4 張貼圖采樣,因此在重新編寫的地標刷系統中團隊還加入了貼圖交換功能。美術刷完地圖后可以把占比較高的貼圖交換到前面。這樣就能最大程度保證市面上所有機型的效果。
基于物理的渲染大家這兩年都很熟悉了,使用 PBR 光照模型能制作出非常寫實的效果。而「魂師對決」則有所不同。場景工作平臺需要支持所有的風格化參數的調整。從基礎功能來說,包含高光、反射、霧效、風格化天空盒、透光、樹葉、主角光源等一系列參數。進一步來講,它形成了晝夜變化、天氣變化兩個獨立的模塊。場景工作平臺的晝夜變化和天氣變化的目標就是用最小的代價做到實時 GI 的表現。
對于游戲中的尋路網格想必大家也有多種方案。場景工作平臺在尋路網格的創建上有所突破。因此可以自動調整到和合適視角拍攝俯視圖,根據 tag 生成一張圖片。美術在 ps 中調整圖片,就可以導出尋路網格了。根據俯視圖生成的 mesh 團隊采用了基于 GEM 的漸進式網格優化方法??梢宰詣由勺銐蚝喕膶ぢ肪W格。同時也降低了服務器尋路的壓力。
場景制作平臺提供了拍照工具,比如美術覺得一棵樹好看,可以對樹使用拍照功能。遠景復雜的樹木就變成了一顆難辨真假的面片。拍照功能支持單角度,多角度,自定義 mesh 烘焙等模式,應對各種復雜的遠景表現。
眾所周知在移動設備上 compute shader 的支持一般,但是在 PC 上卻能大放異彩。每個團隊一定都會為大量的重復、相似、屯余、大透明范圍的貼圖頭疼。在很多人的想象中「魂師對決」這種大型項目的資源管理一定很復雜。實際上卻很輕松。
團隊為美術定制了專屬資源優化工具。它可以對所有的美術貼圖逐像素對比,然后找到完全相同的貼圖,列出相似度較高的貼圖、輸出透明占比以及屯余的貼圖。這些操作都是使用 compute shader 實現的。
這里以特效為例,「魂師對決」的特效有 2 萬 texture,相當于要對比 2 億次貼圖。找一臺好一點的機器,線程數全部用滿的情況下檢查全部貼圖只需要半小時就可以得到結果。對于完全相同的貼圖計算機會刪掉多余的,修改相關材質和預設的引用然后一鍵提交。相似度高的貼圖美術會酌情處理。這樣美術完全不用關心貼圖重復的問題,也不會因貼圖放置的位置亂而頭疼了。自然而然保證了項目中資源的整潔可控。
工具永遠是為了提高生產力的,「魂師對決」對工具的產出極為重視,最終也取得了很好的結果。
在斗羅大陸中有眾多的森林場景?;ú荼闶呛苤匾囊画h。開發團隊研究了多種做法和光照模型?,F在比較流行的模型加頂點色做草的方式難以表達復雜的花草效果。所以團隊最終選擇了以?alpha test 的方式來做,接下來遇到的問題就是光照模型的選擇。面對大面積的草,一般只能選擇 lambert、blinnphone 這種簡單模型。但是單獨使用,無法和 PBR 的場景融合。團隊嘗試將 GGX 高光烘焙到頂點或者在頂點計算高光,效果基本達到了但是性能又滿足不了要求。最終他們采用了雙層高光方案:一層較弱的改進版 blinnphone 高光來模擬反射效果,一層透光模型來做場景融合。最終達到了預期。
晝夜系統是「魂師對決」的一大特色。為了在手機上做到 24 小時變換效果做出了諸多努力。先來說說霧,美術希望能在相同的場景,不同時間段能用霧表達出完全不同的氛圍。團隊對于場景統一使用了指數高度霧。它相對于深度霧第一個重大的優勢就是越遠的地方霧上升的越高。這樣當玩家在比較淺的霧效區域看遠景也會有非常理想的霧效。指數高度霧第二大特點是參數好調節。密度、偏移和開始距離就能很好的表述它的特性。最后把色散融入了霧效,氛圍感就比較好了。
團隊希望在晝夜的變化中保留完整的實時光和環境光。團隊烘焙了多套 lightmap 和多套 lightprobe,這樣在不同的時間物件會有很好的光照過度。現在移動設備上比較好的烘焙方案是 shadowmask。而 shadowmask 這張圖剛好可以合并另一時段的 lightmap 顏色貼圖。也就是對 lightmap 的差值除了差值算法本身基本不帶來額外的消耗,這樣所有配置的機器都能有良好的性能表現。不過想要完美使用多套間接光過度,還是要對 Unity 源碼進行修改才可以。
Unity 的烘焙器對相同的物體的 uv2 在 lightmap 中的排布是隨機的。這會導致不同時間段的表現異常。通過修改烘焙器源碼,對相同物件在烘焙時 uv2 在 lightmap 中的排布有完全一致的排序規則。在使用 lightprobe 差值的時候會發現無論是采集兩套 lightprobe 還是 SphericalHarmonicsL2 的差值都會造成巨大的消耗。團隊將 lightprobe 的計算全部挪到了 C++ 層,實測下來 CPU 時間可以降低到 1/20。
斗羅大陸的場景環境極為多變,宏大的場景中難免會有大面積的陰影區域。引擎中陰影區域的光照主要來自于環境光。太寫實的環境光并不適合我們。斗羅最終采用了 directinal 的烘焙方式。為了在間接光中產生真實的光照表現,通過參考 2018 GDC 上寒霜引擎的 GI 數據存儲方式。團隊用 LightProbe 球偕的方向代替 4 個映射的方向與 Unity Directional 貼圖方向加權平均再計算 GGX 高光,也就時間接高光越強的地方 SH 高光占比越高。好在方向圖不需要很高的精度,我們把多張方向圖放在了同一張貼圖中。玩家也會受到 SH 高光的影響。
有了這些,基本的晝夜效果已經很豐富了。后面的云、星星、銀河、月亮等順其自然也成了必需品?;谖锢淼奶炜蘸性谔柨拷仄骄€時會有很好的容積光效果,但是光譜計算對于美術理解不是很友好,通過在天空流明度的計算中加入了顏色參數的方法方便美術調整不同時間的風格化表現。移動端的晝夜做起來實屬不易,美術為每個場景制作了 7 個不同時間段的表現才有了現在能在游戲中看到的晝夜變換。
天氣系統是另一個較為龐大的系統。得益于晝夜系統對 GI 的熟練控制,不同天氣的環境氛圍在斗羅中很容易被表達出來。重點反而在獨特天氣的表現,比如雨水、風場等。在雨天的制作中團隊在 hudini 中下了一場大雨,記錄下地表的水紋表現。通過對比多種下雨效果發現橫向的雨水流動能非常好的描述真實的下雨場景,導出雨點和水平方向的法線在游戲中可以實現逼真的下雨效果。
「魂師對決」的皮膚渲染模擬了表皮層和真皮層。實現了可分離的次表面散射效果。真皮層負責對次表面散射的實現,表皮層主要參考了 HDRP 中皮膚的實現,負責對散射后的光線進行模糊處理。皮膚的卷積計算并不適合在手機上使用。我們在 HDRP 中調整卷積核,找到最適合斗羅大陸的參數應用到項目中。
為了解決斗羅世界皮膚差異巨大的問題,團隊把屏幕空間的運算改良到了 Command Buffer 中,這樣每個角色都能有不同的散射效果。配合皮膚表現根據美術的骨骼結構自研了頭部骨骼的 IK 解算。無論美術給角色凹了什么造型,都可以正確解算頭部、頸部、眼睛、肩膀、腰部等骨骼,表現自然的注視效果。體積云、體積光、水面都可以提升場景氛圍,在繪制水時團隊使用了 Ray-Matching 技術。Ray-Matching效果固然好,不過求交計算會帶來 10ms ?以上的 GPU 耗時。想要有比較好的性能表現,只能采用指數步進法,求交時間可以控制到 3ms 以下。
游戲畫質的提升,隨之而來的的確是對性能的考驗。團隊把性能優化始終放在最高的位置。一款重 GPU 的游戲指令和變體的優化非常重要。之前提到過魂師對決的場景、模型都是用的基于物理的渲染,除此之外特效也有多種多樣的表現。
一般優化 shader 的步驟是對變體進行變量歸屬和精度修正,然后剔除變體相關的計算,再根據手機 GPU 架構優化 cycles 數量。團隊實現了全自動的指令優化工具。拿樹葉舉例,全屏是樹葉的情況下,渲染耗時能降低 50%。特效使用這套工具也可以減少所有美術沒有用到的采樣器和對應的計算指令,全部特效跑完指令優化工具后 CPU 溫度降低了 2-4 度。耗電量同時大幅下降。
回合制游戲的另一大優化痛點是切換地圖。團隊把場景資源分割成了物件、植被、貼圖、劇情、特效、地表幾大塊。在開發階段測試時他們會持續統計所有資源的加載順序、卸載時機。根據玩家當前的設備、等級、養成和位置決定加載和緩存策略。最終大部分情況可以做到 1s 切圖的效果。
電話:010-50951355 傳真:010-50951352 郵箱:sales@www.gentlemenlisten.com ;點擊查看區域負責人電話
手機:13811546370 / 13720091697 / 13720096040 / 13811548270 /
13811981522 / 18600440988 /13810279720 /13581546145