上一篇文章筆者介紹了任天堂是如何以工業化流程開發《薩爾達傳說:荒野之息》這款巨作,下面接著介紹任天堂是如何利用自動化管線應對開放世界帶來的龐大工作量。
本文譯自「《薩爾達傳說:荒野之息》是如何應對效果「表現目標」和「龐大數量」之間的矛盾」演講,這場演講因為內容比較專業,只有一篇報道記載,如有疏漏敬請諒解。
由於本人學識有限,有些記載不清的地方諮詢了多位專業人士,感謝pro、Hirakawa、#某一口井#等業內人士的指正,這次翻譯對我來說更像是一次學習,特此鳴謝!
演講者介紹
演講者是來自任天堂企劃製作部的兩位開發者,洲卷和也和澤田佳之。
洲卷和也,2005年加入任天堂,曾負責《瑪利歐銀河2》等熱門遊戲的程序開發工作,現任《荒野之息》工具鏈開發工程師。
>
洲卷和也
2005年畢業後加入任天堂情報開發本部負責程序開發工作,近年來主要負責開發環境相關工作,為《荒野之息》工具鏈開發工程師。
澤田佳之,曾在Namco等公司負責美術和技術美術相關工作,加入任天堂後主要負責DCC(數字內容創作)工具開發,在《荒野之息》負責美術資源管線構建。
>
澤田佳之
慶應義塾大學畢業後曾入職Artdink、Namco和Square負責美術和技術美術工作,2011年加入任天堂情報開發本部,負責《荒野之息》美術資源製作管線構建工作。
任天堂理念與開放世界的矛盾
洲卷和也介紹,任天堂的遊戲製作理念是始終把遊戲體驗放在第一位。
遊戲之所以被稱為互動娛樂,是因為它相比電影等其他藝術形式,更重視玩家與遊戲交流互動時所獲得的反饋和感受,這種反饋和感受組成了遊戲體驗。
觀眾通常只能被動地接受電影的資訊輸入,而玩家則可以對遊戲施加影響並得到反饋。
這其中包括,玩家與遊戲世界互動時的視覺效果和音效,比如時間停止技能的金色鎖鏈和「叮叮叮」的聲音。
將遊戲元素自由組合的能力,比如魔物氣球與道具的組合,以及《王國之淚》的余料建造。
採用不同武器、戰術戰勝敵人的成就感。
以及觀察虛擬世界的變化,比如行商會在樹下避雨。
這種植根於交互反饋的遊戲體驗,就是遊戲最大的魅力。
這裡說一個反例,《黑手黨2》同樣是一個開放世界遊戲,畫面和劇情也非常不錯,但這個開放世界非常空洞,玩家與遊戲世界的互動少之又少,玩家評價較低。
《黑手黨2》的問題不是個例,在《真三國無雙8》、《最後一戰:無限》等開放世界遊戲也出現了遊戲世界過於空洞的問題。
如果說這三個遊戲是因為開發團隊缺乏開放世界遊戲經驗所致,那為什麼任天堂首次嘗試製作《荒野之息》這樣的開放世界遊戲卻沒出現這些問題呢?
答案就在這次演講中,如洲卷先生所言,任天堂所有員工,都要擁有「從遊戲的角度審視自己所製作內容有沒有被精心製作」的意識。
也就是說,這些數不勝數的遊戲細節,並非全部是自上而下的指示,而是開發一線成員自發對遊戲不斷打磨的結果。這點,在任天堂員工相關的訪談中常有體現。
比如在岩田聰和宮本茂的一次對談中提到,遊戲延期對玩家可能是壞事,但是對開發者來說是有充足的時間來好好打磨遊戲。
也正是這份對遊戲的熱愛和堅持,才使得任天堂的遊戲品質受到廣大玩家的認可。
但是問題來了:正因為任天堂對遊戲體驗的堅持,遊戲要填充大量的玩法和細節,但是《荒野之息》的開發世界的豐富玩法帶來了巨大的工作量,為此需要在共享遊戲整體開發進度的同時提高生產效率,為了保證遊戲穩健有序地開發需要保持團隊之間的順暢溝通與合作,即使在不斷返工中也能保證遊戲質量不斷提高,諸如此類的矛盾給團隊帶來了巨大的挑戰。
因此,作為工具鏈開發工程師的洲卷和也,與作為技術美術(後文簡稱TA)的澤田佳之,希望在保持任天堂理念的前提下,去接受製作開放世界的挑戰。
構建穩定的開發環境
洲卷先生提到,填充廣闊的開放世界需要大量的遊戲資源,如果堅持遊戲體驗為重的遊戲理念,這要求開發團隊在保證數量和質量的前提下,對資源不斷重做不斷打磨。
但是這樣會帶來巨大的製作成本,而開發團隊的人力和時間是有限的,這個矛盾怎麼解決?
其實這個矛盾是開放世界品類面臨的最大問題,很多開放世界團隊都把人力和時間耗費在構建龐大開放世界上,沒有資源去填充並打磨玩法,導致開放世界顯得空洞無物,比如《真三國無雙8》。
而《荒野之息》團隊的工具鏈開發工程師洲卷和也先生為了解決這個矛盾,提出了讓設計師的遊戲資源製作流程順暢運轉,發揮他們個人的最大潛力的目標。
為了實現這一目標,要確保DCC(數字內容創建)工具環境的穩定性。
《荒野之息》的資源以配有大量的插件的Maya和Photoshop CC進行開發,參與開發的設計師人數也很多。
在這種情況下,容易出現因開發環境不一致導致依賴衝突,一旦出現衝突,項目不得不停工,從而造成人力和時間的損失。
因此,DCC工具的穩定性是首要任務。
為了統一員工的DCC工具的運行環境,開發工具使用專用的啟動器啟動,專用啟動器可以自動獲取最新的插件和環境參數設定,還能自動對工具進行測試,防止出現衝突。
此外,設計師在使用程序時如果報錯,會自動生成錯誤日誌,異常處理hook會把錯誤資訊自動發送到資料庫,便於程式設計師能夠在工具發布後快速修正BUG。
自動化讓設計師集中於創意工作
由於本作採用Havok物理引擎,將時間停滯、磁力、漂浮等物理機制引入遊戲,物理數據的質量與遊戲質量直接掛鉤。
另一方面,為了讓開放世界活靈活現需要填充大量的物理數據,因此,公司決定不設置專職的物理數據工程師崗位,而是由工具鏈開發工程師創造一個能夠讓設計師輕鬆製作物理數據的開發環境。
為此團隊採取的措施是,不讓設計師直接使用Havok,而是將Havok集成在MAYA等DCC工具的插件中,簡化物理數據製作流程。
為了提高物理數據的穩定性,對危險的物理數據進行了事前檢查,以確保它們不會被寫入ROM。
即使寫入ROM,團隊也會對數據定期檢查,一旦規格變動及時調整,由軟體自動檢測危險數據並發布任務,交給地形負責人來修正。
通過這些措施,設計師能夠穩定地製作物理數據。
在製作過程中,考慮到可能會出現大量的返工重做,為了減輕設計師的負擔,引入LOD模型(不同細節層次的模型,如下圖)自動生成技術。LOD模型僅通過生成參數進行控制,並由程式設計師和TA進行管理。這樣一來,設計師就可以專注於基礎模型的製作。
得益於工具鏈開發工程師支持,設計師可以把精力集中在創作上,減少無意義的工作量,讓遊戲的模型質量得到提高。
下面,以「試煉之祠」為例進行講解。在這裡,為了合併設計師、策劃和程式設計師的工作流程,把部件模型製作和部件組合的工作全部自動化。通過優化開發流程,最終能夠深入探索「試煉之祠」的遊戲性。
這裡的部件應該是前文展示的這張圖片(下圖),這張圖片介紹了部件製作規格,在程式設計師的技術支持下,把設計師製作的資源自動生成部件模型。
另一方面,策劃可以通過類似Zelda Editor和《瑪利歐製造》的工具自行對部件進行配置並調試,這樣,通過構建完善的開發環境,讓設計師和策劃專注於自己擅長的領域,來提高員工的工作效率。
這樣的開發流程不只是《薩爾達傳說:荒野之息》有採用,據筆者在FromSoftware的朋友介紹,他們也是採用類似的設計:程式設計師只負責開發引擎工具製作,由策劃使用這些工具直接做遊戲。
不僅是部件製作和策劃,在動畫數據製作方面,模型製作、骨骼製作和動畫製作等各個階段進行版本更新時,也能自動更新數據。
不僅如此,通過設置高度、傾斜程度、摩擦力等遊戲角色與遊戲世界之間的交互參數來自動生成數據,即使之後發生更改,也能馬上獲得最新的數據而不必重做。
這樣一來,遊戲開發中的所有非創意工作都自動化了。設計師可以專注於創作,從而提升整個遊戲資源的質量,用現在流行的話來說就是,讓AI來完成一切不需要創意的工作。
快捷穩健的版本管理
然後是《荒野之息》版本和可執行打包的管理系統。
將設計師製作的DCC中間文件壓縮為源文件,與程式設計師準備的源代碼結合起來,構建出可執行的文件。每幾次數據更新就打出的可執行包,可以作為成果展示給其他員工。換句話說,為了開發順暢進行,需要一個穩定、快速、高頻率運行的打包管線。
在這種情況下,版本管理非常重要。
首先,由於打包十分耗時,在打包後數據變更的話,容易因為數據不匹配導致執行時發生錯誤。
其次,本次遊戲開發是內部團隊與外部公司共同開發的形式,出包流程需要支持多個開發基地。因此,我們設置了能使下資源保持版本更新至和下載可執行文件一致的機制。在本地正在製作的資源例外,可以自行選擇保留或回滾。
此外,還允許開發者從多個可執行文件版本中進行選擇,這樣在出現故障時只需同步別的版本即可恢復。
然後是資源管線。
在這裡,為了避免不必要的額外工作,使資源能夠立即交給下一個人,複合資源必須一直保持準確無誤。在加載複合資源的補丁時,允許臨時使用開發中的資源;這些開發中的資源會在Jenkins的定時打包中被自動清理。
對於成包的資源,雖然可以通過版本管理來加載不同版本的資源包,但這樣有時個別資源就會剛好錯過版本。為此,團隊準備了差異表,可以讓個別資源使用其他版本。這種情況下,美術只上傳有差異的單個資源就可以了。
為了兼顧立即交付和持續穩定,引入了自動化機制。不但為此引入Jenkins打包,還確保不管版本更新了哪個資源,都會將所有資源打包。我們的方針是一時的故障也沒關係,只要最後會收束為可用版本就好。
在構建管線中,需要實現的是高速、高頻率和穩定地創建可執行文件。為了實現高速創建,資源直接從PC導入,而執行文件僅需複製即可,並且只需在構建時記錄版本號。
為實現高頻率構建,主要使用的可執行文件是每5分鐘構建一次。此外,根據平台和構建目標,也會更改構建頻率。其中,在開發中最常用的「Debug調試版」等將以高頻率構建。
為了確保穩定性,構建報錯的通知會明確的通知到相關責任人,而不是發出「來個人修一下」這樣不明確的資訊,這樣就能以最高優先級修復問題。此外,為確保可執行文件的穩定性,還會在實機上進行簡單的冒煙測試。如果測試失敗,則刪除可執行文件,並在聊天頻道中點名指定人員修復。
在打包管線與任務聯動時,需要打包管線確定「包體包含了任務的工作內容」,並且確保「這個包被打好的資訊通知到位」。為了確定包含新增修改,包體按照版本進行編號,以便通過數字大小進行確認。然後,將Jenkins配置為自動更新任務狀態,通過任務來通知驗證包體的就位。
通過完成這些工作,我們成功地做到了新包隨時有,新包隨時玩。這樣,基本上可以讓全體員工在了解遊戲全貌的情況下推進開發。因為能夠高頻的推進開發周期,通過試玩進行的疊代也能持續進行。把創造性的部分交給人類,常規的、確定的和穩定的部分交給自動化後,最終提交中只有52%是由工作人員提交,Jenkins負責的比例高達48%。
結語
其實寫到這裡,再去回答「任天堂如何多快好省地製作開放世界」這個問題,答案就是「自動化」,或者用現在流行的話來說,是一種AI。
創意的部分交給人類,大量的、重複的、非創意的工作交給電腦,再加上良好的管理,這可能就是《薩爾達傳說:荒野之息》成功的秘訣。
很多人說起任天堂都會說起它歷史悠久,是一家「老鋪」,但通過這些演講我們發現,這家擁有悠久歷史的遊戲公司,無論是在創新還是在工業化領域,一直走在時代的前面。