1. 程式人生 > >【轉】: 塞爾達組在GDC2017演講的文字翻譯:技術的智慧

【轉】: 塞爾達組在GDC2017演講的文字翻譯:技術的智慧

ogre 遊戲 style 標準 檢驗 復制 bce 好用 很多

大家好,我是堂田卓宏,在《荒野之息》的制作中我擔任技術總監的職位。我在2003年加入任天堂,並且作為程序員參與了許多不同遊戲的制作。在本次的制作的過程中,我們的程序員團隊也需要打破許多遊戲內技術的常規。從用於制作大型地圖的地形技術、遊戲的畫面和圖形技術、關卡設計的方法論、AI、動畫制作等等,甚至於我們遊戲資源制作、管理和測試的流水線,我們不得不重新思考我們此前挑戰技術難題時常用的方法。我們處理這些難題的過程本身就是一個很有趣的故事,但是我們今天時間並不充裕,如果以後有機會我們會非常樂於和大家分享那些經歷。因此今天我們將談一下我們是如何實現此前藤田先生談到的“復合遊戲”的思路。這其實是一個“物理”和“化學”的問題,但不用擔心,這不是一個學術講座。

技術分享圖片

在我看來,《塞爾達傳說》首先是一個“動作”遊戲,在我們“打破傳統”的道路上,我們決定首先審視“動作”的基本要素。從最基本的組成成分來看,動作遊戲是由“碰撞”、“運動”和“物體狀態”組成的。其中碰撞和運動組合起來就成為了我們所說的遊戲中的物理。

技術分享圖片

但是理所當然地,在遊戲開發當中你並不會想要教科書上的那種物理學,我們所需要的其實是符合遊戲設計需求的物理學。這就是我們所說的“遊戲物理學”,從NES(美版FC的名字)時代開始,一系列各種各樣的遊戲就開始幫助我們理解所謂的“遊戲物理學”。遊戲物理學其實也可以被看作假像的物理學或者謊言物理學,但是為什麽我們需要撒謊呢?這是因為我們需要增加遊戲的可操控度和加強遊戲給玩家的反饋,總而言之,遊戲物理學的目的是為了滿足遊戲設計的需求。同樣的,有些物理學假象可以幫助我們優化遊戲的運行效率,有些時候甚至可以增強遊戲的現實感。但是,從另一個角度來講,如果我們在制造假象,那我們需要物理學法則的目的是什麽呢?我認為一個原因是這樣我們可以在玩家和遊戲之間制造某種信任感。玩家在遊戲中遇到某些他們在現實中也會觀察到的現象,這樣就會相信遊戲世界中的某些特定的規則,而這是我們所謂的“聰明的謊言”的基礎。當然了,塞爾達系列也是如此,我們過往的作品中廣泛地利用了遊戲物理學,這樣使玩家動作或者解密更加符合直覺。作為程序員的一大樂趣便是決定如何去實現實現這些“聰明的謊言”,以及如何最好地表現這些發生在想象世界中的事情。考慮到這個遊戲的背景是設置在了一個龐大的世界,因此這部遊戲也需要一個相應的穩健的“遊戲物理學”來讓這個遊戲更加生動。

技術分享圖片

另一方面,從遊戲開發的最開始高自由度就成為了一個重要的遊戲主題。舉個例子,玩家在遊戲中可以將任何物體搬運到任何遊戲中的地點。實際上如果你足夠努力,你甚至可以將遊戲最開始時玩家遇到的石頭一路推到打最終Boss的地方。當然了,在我們對物理學的模擬中,我們必須得在一系列非常復雜以至於幾乎無限的情況下實現這些東西。創造這些模擬物理學耗費了非常多我們的開發資源,但我們使本作中的物理有趣起來的決心非常堅定。但是我們很快意識到如果我們按照此前我們的開發方法,我們在實現目標之前就會耗盡我們的動力。因此,經過一些簡單的測試之後,我們決定使用havok來幫助我們實現我們的物理學模擬。havok的穩定性和他在遊戲業過往的記錄使得havok成為了一個非常有吸引力的選項,他能夠讓我們完成所有我們希望完成的假象。我們在《荒野之息》中引入的新能力和新道具都非常依賴於物理系統,這使得我們可以專註於實現我們最希望實現的遊戲內元素。

請看一下這幾個例子。首先是“停滯”(Stasis),這是一個可以讓某個物體的時間停止的符文。這看起來好像我們只是讓某個物體停了下來,但實際上這個物體正在努力地保持穩定的狀態(譯者註:從ppt中給出的圖片來看,這句話的意思其實是Stasis實現的方式並不是簡單的停下一個物體,而是實際上給了物體一個相反的動力來讓它停下來,這樣當物體的時間重新開始流動時只需要簡單地撤去那個動力就好了)。

技術分享圖片

這樣看起來似乎物體能夠保持自己自身的動能,但實際上這就是一個“聰明的謊言”。這會讓你感覺這件事情是正常的,但實際上你仔細想一想就會覺得很不對。遊戲內物理最好的狀態就是如此,他讓你創造一些在現實中無法實現的東西。下一個符文是磁力(Magnesis),他能夠讓你自由地移動金屬物體。這看起來好像是磁力,但實際上並不是,它只是一些看起來像磁力的東西。這裏的重點是避免程序上的不穩定同時讓玩家仍然能夠自由地控制物體。接著是藤林秀麿先生經常談到的爬墻能力。通過創造一個林克和他所攀爬的表面之間的動態約束(dynamic constraint),我們成功把林克和他所爬的物體聯結了起來。負責攀爬的程序員花了很大的精力來確保這一系列過程能夠正常運作,而正是因為他的努力當林克在會移動的表面上攀爬時我們可以得到一個比較令人滿意的反饋,而havok在這裏替我們解決了“動態約束”的問題。

技術分享圖片 技術分享圖片

砍到一棵樹實際上也是一種破壞的假象。在樹木開始倒下的一瞬間,他變成了一個“被伐下的物體”(logged object)(譯者註:從ppt的配圖來看,這裏的意思是當木頭被伐倒時它其實並沒有被破壞,而是成為了一個新的物體)。被伐下的木頭倒入水中時,它會浮起來,這種浮起的能力在遊戲設計中有著重要的意義。但是當一個物體在遊戲中浮起時,我們實際上創造了一種獨特但是虛假的漂浮。

技術分享圖片

下面我希望回到此前藤林秀麿先生所提到的復合遊戲的主題。在我們數次的針對遊戲物理系統的測試中我們發現如果遊戲內有一套統一的、連續一貫的物理規則,玩家就會冒出各種各樣的新奇的想法和他們想嘗試的各種各樣的事情。舉個例子,這個金屬板放在這裏的目的是為了讓玩家通過這條河流。但是當你把它舉起來時,你可能會想去試試把它砸在敵人身上。而當你看到河流中漂行的伐木時,你可能會想要跳到它上面去。坐在伐木上順流而下實際上是非常有趣的,你可能會想到之前提到的那個demo。而當你可以攀爬會移動的物體時,在你和一個巨大的、可以攀爬的敵人對戰時你又會有怎樣的體驗呢?當你爬上一個被你用Stasis充能過的物體時,又會發生些什麽?這裏的重點其實是這些各種各樣新奇的想法充滿了我的腦袋,而我興奮感的來源並不是我作為一個開發者,而是我作為一個玩家。不如我去試試做這個?等等,不如我再去試試那個?這是一個簡單的元素組合起來會產生復雜的結果的世界,而你在遊玩中所感受到的激動正是來自於那些你想去嘗試的事情。我意識到這才是我們所想要去創造的遊戲。

現在我想稍微地改變一下我們的話題。圖中的兩位是我們開發團隊的成員,他們正在討論我們該如何打破我們之前提到的傳統,他們看起來挺開心的。正是在這次討論中某些關鍵詞正式誕生了。如果我們在遊戲中有物理引擎,那為什麽我們沒有化學引擎?

技術分享圖片

正如你所知道的,塞爾達系列有著悠久的利用和化學有關的事件作為遊戲要素的歷史(譯者註:比如說點火等)。和物理一樣,創造可以參考現實世界經驗來解決的謎題可以讓玩家依靠本能去解開這些他們。因此我們決定去創造一個化學引擎。那麽,這個物理引擎到底是什麽?物理引擎可以從某種程度上被理解為基於某些規則的運動計算器,相應地,我們認為化學引擎應當被理解為基於規則的狀態計算器。我在此前提到過,動作遊戲實際上是“碰撞”+“運動”+“狀態的改變”,而正是由化學引擎來計算物體狀態的改變。

技術分享圖片

我希望通過一個我們遊戲設計中的簡單例子來向大家展示化學引擎到底會做那些運算。首先,我們將諸如火焰、水和冰等並不具有一個特定的存在方式的物體稱之為“元素”。然後,我們將諸如樹、石頭、玩家自身和武器等固態的物體稱之為“材料”。化學引擎利用這些東西基於三條簡單的原則來進行運算。首先是第一條規則:元素可以改變材料的狀態。所以樹上的葉子遇到火後會消失。其次是第二條規則:元素可以改變另外一個元素的狀態。所以當火遇到水時火會滅掉。最後是第三條規則:材料之間不能互相影響彼此的狀態。所以當一棵樹遇到另外一棵樹時什麽事情都不會發生。這就是我們所謂的化學引擎。

這個模型極其簡單,但是它允許我們去表現各式各樣的事件。請大家看一下下面的各式各樣的事件,他們都是基於這三條簡單的規則。

技術分享圖片 技術分享圖片

但是稍等一下,電和風也是化學的一部分嗎?在教科書中,這個問題的答案當然是否定的,但是在《荒野之息》的化學引擎中,他們也是化學的一部分。除了嚴格的物體的運動以外,我們將所有的自然現象都視為化學的一部分。因此在我們看來,風和電都被視為元素,這樣的處理方式允許我們以一種簡單的方式去打造這個世界。我們並不想打造一個引擎來復制化學,我們所想實現的其實是為這些互相關聯的物體打造一個狀態計算器。我們還有另外一個它稱之為化學引擎的原因。在我們的開發過程中,我們將這些我們希望實現的復合玩法稱之為化學反應玩法。這個引擎正是我們實現復合玩法的關鍵,因此從這個角度來看我們也可以將其稱之為化學引擎。在合適的環境下,元素也同樣可以產生能量來影響物理環境,因此,組成我們這個世界的所有成分都在我們的物理系統和化學系統的控制之下。

有了這些東西之後,我們可以打造我們所希望制作的遊戲,一個利用復合原則來增加玩家可以做的事情的遊戲。在早前藤林先生提出了要如何利用復合原則來拓展玩法的問題,而我們對這個問題的回答是將世界上的所有東西都關聯起來。從這個角度出發,遊戲中的所有東西都是連在一起的。而這些關聯並不是偶然出現的,而是有意圖地如此設計的,以便於讓玩家能夠體驗到整體的連貫性並且符合玩家的直覺。而當然,這些關聯包含了所有我們希望實現的“聰明的謊言”。但是當我們開始設計時,我們並沒有任何把握這種方法一定有用,因此我們利用2D畫面很快的制作了一個原型來檢驗我們的概念。這是你們此前所看到的2D的荒野之息的原型。2D的demo非常好用,因為他允許你將整個遊戲簡化為一系列的符號並且清晰地展示一個想法背後的邏輯。但正如你所見的,這個demo實際上是3D的,而在其背後是早期版本的我們的物理引擎和化學引擎。

技術分享圖片

在《荒野之息》的世界中,這種復合玩法是在“情況”和“目標”之間的空間裏實現的。如果你可以看到在這個世界裏不同物體之間所存在的關系,那麽你所處在的環境就有了全新的意義,對你也提出了新的問題,這也會鼓勵你去試驗各種各樣新的想法。我們將這個世界的每個角落都填滿了這樣的“情況”和“目標”,而當然我們也有自己預期中“正確的”解決這些問題的方法。但這並不意味著我們希望玩家去尋找這些“正確的”答案,實際上我們希望他們通過自己的思考得到他們自己的解決方法。

技術分享圖片

在制作《荒野之息》的過程中我們所打破的一個傳統就是我們創造了一個通過遊戲元素的復合(Mulplication)來為玩家帶來趣味的世界,而過往的遊戲中遊戲元素僅僅只是簡單地疊加(Plus)在了一起。通過復合玩家動作、遊戲世界的設計和這個世界中的物體,我們創造了一個幾乎任何事情都有可能發生的情況。我們的目標是創造更加主動和開放的遊戲體驗,而我希望玩家可以得出自己獨特的對遊戲內謎題和挑戰的解法。我們非常希望玩家能夠體會到“我的天哪,我真是個天才”的那個瞬間。

下面換一個話題,我希望向大家分享一封我們在開發Wii U版本時收到的郵件。

發件人:青沼英二

收件人:堂田卓宏

抄送:藤林秀麿,瀧澤智

主題:Nintendo Switch

我們決定讓《荒野之息》跨平臺到Switch上。祝你們好運!

我們被額外追加了開發Switch版本的任務。真不愧是我們的制作人啊,他比藤林先生更有“訴說的勇氣”。

發件人:青沼英二

收件人:堂田卓宏

抄送:藤林秀麿,瀧澤智

主題:Re:Nintendo Switch

哦對了,首發之前把這事兒搞定: )

但話又說回來,讓遊戲兼容Switch比我們想象中容易不少,這是我作為一個遊戲開發者真實的想法,讓我簡單談一下我的感想。首先,SDK(開發者套件)幫了很大的忙,NintendoSDK是NS平臺的標準開發環境。在硬件方面也同樣如此,在屏幕上就可以看到的屬性(attribute)讓我們有了一個可以輕松工作的多功能架構。我為NGC、NDS、Wii、3DS和Wii U都開發過遊戲,但Switch是第一次我們不用因為硬件架構去搞一些很復雜的技巧。當我們第一次在Switch上運行這款遊戲、還沒有進行任何優化的時候,我們就已經得到了比Wii U還好的幀數。我們也開始思考如何利用《荒野之息》去展現Switch的魅力。Switch有很多獨特的要素,而其中最明顯的一個就是JoyCon,而我們本身就非常擅長於利用這些獨特的要素。但是《荒野之息》並沒有利用任何這些特點。對於《荒野之息》而言,我們希望Wii U版和Switch版有相同的體驗。但是回首望去,在新平臺發售時我們都有一些目的為展示新平臺獨特魅力的遊戲。但是在Switch版的這個遊戲裏我們希望帶給玩家什麽東西呢?我們認為可以隨身攜帶本身就是一個很重要的特點了。而同樣的,你實際上不需要任何額外的設計就能夠得到這樣一個增值。我們是第一群被這樣的特性驚喜到的人,我們也希望開發者和粉絲們能夠感受到這一特性。除了《荒野之息》以外,我不認為我們有任何其他作品能夠更好地展現這一點。我們最後增強了《荒野之息》的畫面和聲效,然後Switch版就完成了。

最後Switch還為《荒野之息》帶來了另外一個功能。大屏幕上這位正在盯著屏幕的先生是我們開發團隊的成員,遊戲實際上正在運行,但是他只用盯著看就好了。根據他的說法,這是玩這部遊戲最舒服的方法。《荒野之息》是一款關於自由的遊戲,但是在Switch上這種自由被延展到選擇自己喜歡的遊玩方式的自由。這些遊玩方式並不必然是我們心目中“正確的”方式,但是如果你覺得這樣玩有趣且舒服,那麽這就是屬於你的正確的方式。

技術分享圖片

以上就是我的Presentation的結尾,感謝各位。下面我們會討論我們如何為這樣一個復雜的世界賦予它獨有的藝術風格,這將由我們的藝術總監瀧澤智完成。

【轉】: 塞爾達組在GDC2017演講的文字翻譯:技術的智慧