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