大世界遊戲製作:《幽靈行動·荒野》程式化技術介紹

Kerry發表於2020-08-28
大世界遊戲製作:《幽靈行動·荒野》程式化技術介紹

作者:Kerry 本文首發於知乎專欄“TA週刊”
地址:https://zhuanlan.zhihu.com/p/164857684

這一次給大家帶來《幽靈行動·荒野》專案的大世界製作技術,總共分為四個章節。

本篇為第一個章節:程式化技術篇,分享者Benoit Martinez和Vincent Delassus 分享了關於程式化流程中的一些心得,其中包括之前不少讀者私信我關於Houdini與手動流程的結合以及成本、迭代等問題,希望能給大家帶來一些啟發。(原文地址:https://80.lv/articles/procedural-technology-in-ghost-recon-wildlands/)

最大的挑戰

巨大的開放世界最大的挑戰絕不僅是地形本身,還包括如此多樣的生物群落(11種)。每一種生物群落都要有與之匹配的且特定的景觀,植被,岩石,建築物等。

大世界遊戲製作:《幽靈行動·荒野》程式化技術介紹

基本上來講,我們必須從頭開始制定管線流程和製作工具,因為這是一個開放的世界,因為它與自然景觀息息相關,並且地形非常重要。

最初,我們使用靜態網格模型來製作地形,1平方千米一塊地形Mesh(帶LOD)。

基於World Machine製作的高度圖,我們有一個Houdini流程來自動對地形進行分塊並生成對應的LOD,但是從Houdini到編輯器來回過程需要進行大量的維護工作,這點非常棘手,而且一點都不靈活。除了Benoit之外,當時沒有人在使用Houdini,因此他是唯一可以迭代的人。

大世界遊戲製作:《幽靈行動·荒野》程式化技術介紹

顯然,在量產階段這種做法是行不通的,因此我們決定將重點放在開發定製化的地形編輯器上。功能需求方面,我們希望能夠直接在編輯器中以任何比例進行雕刻,能夠雕刻山脈的整體結構(巨集觀)也能調整很小的地形細節(微觀)。最初,地形高度圖的解析度為1畫素25釐米,但有時覺得精度太高了,這是一個非常繁重的資料量,因為碰撞體和導航mesh也需要同樣的精度。我們最終確定了1畫素50釐米的高度圖解析度(也就是一米需要高度圖的兩個畫素),同時由於我們還具有硬體曲面細分功能,這已經足夠了。

大世界遊戲製作:《幽靈行動·荒野》程式化技術介紹

地形只是第一步,隨後需要在這上面填充美術資源,這個過程可能需要很多牛逼的美工來完成。由於許多原因,我們不想增加團隊規模(成本原因)。大型團隊通常意味著需要有非常細化的分工組織。我們是一個很小的團隊,我們知道如何合作,我們的流程非常敏捷,我們希望繼續保持這個優點。這就是為什麼我們決定在Houdini上投入更多資金來開發程式化/自動化的工具。

在美術資源製作方面,關鍵在於如何平衡3個要素:團隊–時間–工具。通常,您不能控制專案的開發時長,因為這是定死的。在我們的案例中,我們決定使用工具來提升生產力,而不是增加團隊規模(美工人數)。在巴黎,我們從未有超過15位水平的藝術家來創造所有資產和世界建築。

使用程式工具

自《幽靈行動:未來戰士》以來,我們一直在這裡試驗程式化方法。我製作的第一個工具只是幫助藝術家放置電線。藝術家正在匯出一條曲線,然後再調整一下引數,就能在幾秒鐘內生成線杆和電線。

大世界遊戲製作:《幽靈行動·荒野》程式化技術介紹
第一個houdini工具

然後,我們進一步推進這種程式化邏輯到地形編輯環節,我們自動生成道路,並且新增細節和生成UV,同時凹陷地形做相應的匹配。

大世界遊戲製作:《幽靈行動·荒野》程式化技術介紹

我們很快意識到,不僅程式方法有助於擺脫繁瑣的任務,而且還節省了時間。藝術家能夠專注於質量,有更多的時間來提高自己的水平。

使用Houdini,我們已經能夠重新定義工具建立過程。Houdini的學習曲線陡峭,但沒有您想的那麼難。houdini官方是線上上提供的大量資料,如果您對此很認真,則只需幾個月的時間就可以開始建立自己的工具。自從我開始學習Houdini的那一天起,我過去更多地是在藝術家方面,而不是技術方面。它完全重新定義了我處理美術資源的方式。

地圖規模

首先,我們去了玻利維亞幾個星期,全國各地有4個團隊。對我們來說,研究建築,景觀和植被非常重要。我們拍攝了大約15000張照片和15小時的視訊。在整個製作過程中,我們都依靠該資料庫來建立我們的工具並設計世界,以確保所有內容都是一致且真實的。

大世界遊戲製作:《幽靈行動·荒野》程式化技術介紹

到目前為止,我們還沒有與外界討論任何關於世界規模的問題,因為我們希望玩家在沒有比較或期望的情況下進行探索。我們認為這與尺寸規模無關。它更多地是關於多樣性和您可以達到的細節豐富程度。但它仍然是育碧有史以來最大的動作冒險世界,大概需要花費幾個小時才能走遍整個地圖。

我們開始使用現實世界的位置資料進行原型製作。在最初的幾個測試中,我們只是獲取了真實海拔檔案並在World Machine中對其進行了完善和細化。

大世界遊戲製作:《幽靈行動·荒野》程式化技術介紹


就寫實性而言,效果還不錯,但缺乏多樣性。

獲取海拔資料很容易,但是我們缺少好的工具來編輯和組合它們。在Photoshop中編輯16bit和32bit的灰度圖是非常麻煩的,當時在包括World Machine在內的任何其他應用中也是如此。最後,我們只是在World Machine中使用噪聲和腐蝕從頭開始。這並不容易,但是我們想盡辦法來提高編輯的可控性,從而能設計出我們想要的地形。在最終生成的這張地圖中,沒有什麼是隨機的,每條河,每座山在哪兒都是有它存在的理由,整個設計和製作過程都有章可循。

大世界遊戲製作:《幽靈行動·荒野》程式化技術介紹

我們希望得到從最高的山峰到底層叢林的雨水侵蝕效果。這是一個龐大的的模擬計算量。無法在一臺計算機上以這種解析度(64k x 64k)計算如此大的地形。

我們必須在World Machine上進行一些自定義開發。我們向WorldMachine的開發者Stephen Schmitt請求了一些額外的開發。他為分塊渲染系統新增了一個額外的變數介面,以便與用c#編寫的專用渲染場一起使用。

我們最終試用了World Machine,並每3天在80臺計算機上進行一次計算。

由於成本的原因,這些圖塊之間的訪問受到限制,因此另一個挑戰是在不同的機器之間需要確保產生一致的侵蝕。為了解決這個問題,我們先在一臺機器上以較低的解析度渲染大面積侵蝕土地,然後使用Tile系統在渲染農場中分配微侵蝕和其他昂貴的細節。它修正了90%的分塊接縫問題。但是當時版本的WorldMachine還不能做到百分百的完美。

大世界遊戲製作:《幽靈行動·荒野》程式化技術介紹

我們將Houdini用於許多不同的事物。

  • 在地形自動新增其他細節,例如道路和河流
  • 根據規則自動放置物體(貼花,森林,建築物等)
  • 建立特定美術資源
  • 這裡有個自動組合生成建築物的工具示例。

這個工具只是用來快速組建一些通用建築資源,細節要求不會太高,因此工具能很好地發揮作用。它有幫助你組合窗戶和門的大小,窗戶和地板的高度等,並匹配UV,而且會生成一些多邊形帶,以幫助在牆壁/地面交叉點上混合一些汙垢。然後手動新增所有細節(窗戶,門,支撐)。

Building+Tool(Houdini)

對於村落佈局,我們採用了完整的程式化方法。

這個想法是要幫助藝術家,使他們有足夠的控制權來實現有趣的圖形分佈,多樣性和美觀的居住環境。它為他們節省了足夠的時間以便手動新增細節。


無論程式生成的質量如何,它都不是完美的,並且需要藝術家干預。您是如何解決的?

我們完全同意。我們學到的是不要過多地提及程式化,因為每個人都認為“程式化”就像是一個魔法按鈕,按一下就能獲得無聊而乏味的結果。對於程式化,我們更多地認為這是輔助藝術家解放生產力的工具,使他們在構建一個完整大世界擁有足夠的控制權。對於每種特定工具,我們都會與專門的藝術家緊密合作。他是決定該工具將如何發揮作用,他需要什麼以及他希望它如何工作的人。關鍵是能夠大規模構建並節省時間。然後,利用節省下來的時間,我們可以專注於細節和提高質量,因為這是程式化無法做到的。在使用程式化和手動之間也要取得平衡。在某些情況下,我們需要完全手動控制,並且我們將完全手動指定某些位置,而無需任何工具。我們可能想在某些地方設定Boss在村莊內的位置,然後我們可以使用程式化工具在其周圍建立村莊。

程式和手動不能很好地融合在一起。當您開始在程式化的基礎上手動修改,您必須鎖定它。如果不這樣做,您將在下次更新時丟失所有手動調整的結果。當然,我們有一些解決方法,但這並不是一件簡單的事。在大多數情況下,我的建議是在繼續手動操作之前要先鎖定程式化資料;或者設定一個手動區域,程式化構建的時候會繞過這塊區域。

最後,究竟哪些需要程式化、哪些需要手動完成,其實無所謂,主要看專案、團隊、美術的喜好等等因素共同決定。

大世界遊戲製作:《幽靈行動·荒野》程式化技術介紹

如何管理一個大型專案

我們有4位Houdini藝術家(包括Benoit)。在製作過程中我們學到了很多東西。我們最終使用Houdini超出了我的預期。

我們瞭解到的是,構建(大量)工具會改變您的生產節奏

大世界遊戲製作:《幽靈行動·荒野》程式化技術介紹
左:正常生產。右圖:工具開發(平)和新內容量(陡)

常規量產過程是線性的。您有一個團隊,從第一天開始,他們就製作資源並構建關卡/世界。

當您決定專注於工具時,您會經歷一些平穩階段。這並不容易,因為有時您只是不知道需要多長時間。但是,當該工具準備就緒時,只需幾天,您就可以推送新的大量的內容。最後,這比你僅用蠻力所達到的製作速度會更快,處理的內容量會更多。

這正是地形,河流,道路,鐵路,森林,定居點,礦山等等之類的製作流程所展示出來的實際收益。我們每一層的資源內容逐級疊加,整個世界就是這樣一層一層內容地疊加製作完成的。


Houdini團隊中的每個人都在使用一些特定工具:

  • Guillaume在所有後端上工作,並確保Houdini管線的可靠性和高效。他特別從事關於渲染農場的分散式計算。
  • Erwin主要負責道路和村落分佈。
  • Twan負責建築工具,河流,田野和關於音效的工具以及gameplay等等。
  • Benoit設法保持這些工具流程的健康高效的執行,並推動了建築學的運用,同時研究了植被,岩石,貼花和電源線等。

當您開始用Houdini進行場景製作的時候,您可能會犯的最大錯誤是嘗試在一個工具之內完成所有工作。一個功能任務對應一個工具,這樣維護會更容易。最難得部分是需要為每個工具正確定義輸入和輸出,以便工具之間能夠相互引用資料。

例如,橋樑工具可以單獨使用。但我們用鐵路工具的時候,也可以使用它在需要的地方自動放置橋樑。


利用Houdini的優勢

Houdini是一個工具箱。無論您生產什麼產品,無論規模如何,Houdini都能為您提供幫助。您可以使用它來自動執行任務,建立內容,幫助美術師(或聲音設計和遊戲程式設計師)。它既靈活又強大。

Houdini本身很有價值,但我不得不提到Houdini-Engine。基本上,它是Houdini核心API,您可以將其整合到主機應用程式中。在我們的案例中,我們確實在內部編輯器中整合了Houdini-Engine。這意味著TA可以在Houdini中建立工具,任何藝術家都可以直接在編輯器中使用這些工具。這是一個示例,說明它可以以多快的速度建立現成的工具:


Houdini幫助我們擴大了思維範圍,超越了藝術水平。我們對所取得的成就感到非常滿意,令人興奮的是,我們將能夠在此基礎上進一步發展。

最後,欣賞一下這個由一群非常敬業且有才的藝術家共同創造的世界。



相關文章