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