《幽靈行動·荒野》中的程式化技術:道路、河流、城鎮、植被

Kerry發表於2020-09-03
《幽靈行動·荒野》中的程式化技術:道路、河流、城鎮、植被

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

上一篇:《幽靈行動·荒野》程式化技術介紹,我們籠統介紹了其程式化技術的應用以及實際專案遇到的問題。

本節是《幽靈行動·荒野》大世界製作技術的第二章。技術美術工程師Erwin Heyms展示了他的團隊在開放世界遊戲中如何處理小城市,河流和道路的程式化生成的一些細節內容。

道路與河流

加入Ghost Recon Wildlands 專案時,建立道路是我的首要任務。當時,我們正在研究如何houdini應用到我們的開發流程當中。我們想要建立一個巨大,逼真且美麗的,玩家可以真正深入體驗的開放世界。使用傳統的地形雕刻技術來建立荒野世界是一項艱鉅的任務,這就是我們決定建立程式化工具的原因。

我們有數千公里的公路,這是多姿多彩的玻利維亞獨特的景觀構成。要使整個景觀世界有一個連貫統一的公路,我們需要一個統一的計算系統。

《幽靈行動·荒野》中的程式化技術:道路、河流、城鎮、植被

我們的道路系統執行得非常快,這使我們見識到自動化工具對於驅動製作流程的強大作用。這大大提高了我們迭代道路系統的速度,而且它還為我們提供了大量的關聯資料,我們可以將其用於其他程式化工具以及遊戲邏輯資料中。

路網系統本質上是一種定製的尋路演算法,它會依賴地形的特徵進行計算。

設計人員只需要為每段道路設定路點,並告訴工具要建立哪種型別的道路,就會自動生成道路並嵌入到當前的路網中。

該工具必須易於使用,並且對我們的美術師來說足夠靈活,因此,我們要確保設計人員可以方便調整道路的彎曲走向,比如能決定哪些區域尋路演算法應該跳過,比如新建的路段要以多大的粘度融入原本的路網中。

《幽靈行動·荒野》中的程式化技術:道路、河流、城鎮、植被

這聽起來可能很複雜,但實際上非常容易理解,這其實跟在現實世界中構建道路的思路是一樣的。在現實世界中中,道路的規劃決於建築成本以及如何生產最便宜的道路。

在後臺,我們的路網系統基本上就是這樣做的。我們給尋路器定義一些特性,比如遇到陡峭的斜坡,我們的道路會呈現很多急轉彎的走向;遇到平坦的地勢就會稍微平順一些。最終,會生成一箇中蜿蜒盤旋的山路的感覺。

同時,尋路器會遵循現有的道路網,按照實現世界建路原則(成本低廉),新建立的道路將會融入到現有的路網中並且合理設計道路分叉。這個功能尤其有利於構建一些非常美觀逼真的路網。

至於我們如何將道路網路應用於地形……

我們通過匯出獲得一系列的高度圖應用到地形上,使得地形變形以適配路網,同時匯出材質權重圖來標記路網區域的材質。

為使加快工作流程,路網的地形變形的計算會放在渲染農場上進行,每當設計師完成鋪設道路的工作時,他們都可以將資料推送到渲染農場,幾分鐘之內就可以得到結果並貼在地形上了。

《幽靈行動·荒野》中的程式化技術:道路、河流、城鎮、植被

鐵路和河流工具使用類似的過程,它們都使用尋路演算法,但規則不同。

鐵路工具比道路需要更淺且更平坦的路徑,並在嘗試穿越山坡時沿途建立了隧道和橋樑。

Twan De Graaf生產的河流和小溪只允許出現在沿著山坡下行的地方,並且尋路是從山頂開始最近的水域。

《幽靈行動·荒野》中的程式化技術:道路、河流、城鎮、植被

最終,河流,道路和其他元素的融合有時會創造出一些令人驚歎的效果。

城市建築

最大的挑戰之一是使城鎮看起來逼真,尤其是對於不同的環境和規模。

道路連線必須合理,城鎮必須看起來好像是向外發展,中心的大型建築向外輻射到較小的房屋和農田。

交給設計人員的工具的第一個版本可以建立看起來像鄉村的城鎮。

它建造了一系列主要街道,較小的街道將中心連線起來,並向外輻射到郊區和農田。

《幽靈行動·荒野》中的程式化技術:道路、河流、城鎮、植被
第一個版本的工具是這樣從左到右一步一步生成的

《幽靈行動·荒野》中的程式化技術:道路、河流、城鎮、植被
最初,該工具主要產生於像這樣的小村莊。

這種方法效果很好,但是與生產中的許多其他事情一樣,一旦賦予藝術家更大的創作能力,他們就會想要更多。

《幽靈行動·荒野》中的程式化技術:道路、河流、城鎮、植被

雖然我們的設計師能夠手動繪製或清除道路,但這種形式的工具太侷限了,無法產生令人信服的結果。

我們真正需要的是建立城市,這意味著我們需要解決更多更復雜的問題。

因此,對於第二個版本,我新增了對網格道路,人行道,建築物行和其他一些功能的支援。

《幽靈行動·荒野》中的程式化技術:道路、河流、城鎮、植被
Barvechos –一個龐大的城市。

該工具還需要一些時間來計算建築物的位置。“計算時間”隨著您要建立的解算區域的增加而呈指數增長。

一次計算我們一些最大的城鎮的所有建築物可能需要20分鐘。

但是,可以通過將資料快取到磁碟來減少解算時間,這還可以一次在較小的群集中計算建築物的位置。

演算法

建築物放置系統可能是整個解算工具中最複雜的部分。

它使用了一種自我感知的打包演算法,我們可以獲取一系列建築物,每個建築物都有自己的放置在城鎮中的規則。

該演算法嘗試按優先順序順序或預定比例從列表中放置每個建築物。

該工具會首先對關鍵性地標建築進行優先順序排序,然後填充上的其餘部分:房屋和市場攤位等其他真正使城鎮栩栩如生的二級建築結構。

該演算法的工作原理是根據道路將城鎮劃分成多個區域,然後從裡到外掃描每個區域以查詢合適的放置位置。

然後,它收集有關這些位置的各種資訊,然後對照建築列表,判斷哪些建組適合放置在這些區域。

這些位置上的資訊包括:與市中心的距離,水邊或附近的鐵路,地形的坡度、由設計師特別指定的資訊。

《幽靈行動·荒野》中的程式化技術:道路、河流、城鎮、植被

《幽靈行動·荒野》中的程式化技術:道路、河流、城鎮、植被

該工具還會檢視有關已放置的其他建築物的資訊。

如果城鎮中已有教堂,則不會在該教堂附近150米之內產生另一座宗教建築。

總共我建立了70多個不同的規則和條件,我們可以為每個建築物設定這些規則和條件,這確實使放置演算法變得非常強大和靈活。

如果我們出於任何原因不得不搬遷或更改城鎮,該工具可能會使這項本來很繁重的任務變得非常容易。

綜上所述,在發展過程中,最大的城鎮之一巴維喬斯(Barvechos)可能已被完全重建了5次以上。

《幽靈行動·荒野》中的程式化技術:道路、河流、城鎮、植被

Khochi –該鎮將許多不同的工具結合在一起。

植被

大場景的植被放置由兩個部分組成

  • 草:根據地形材質的權重密度圖進行分佈
  • 樹、灌木:灌木和樹木的散佈規則由Houdini工具計算並生成點雲資料的方式實現

《幽靈行動·荒野》中的程式化技術:道路、河流、城鎮、植被

散佈樹木和灌木叢基於一個非常簡單的概念“cascade”:下圖中,紅色的點表示大樹,綠點代表中型樹,藍色點代表小樹和灌木叢。

《幽靈行動·荒野》中的程式化技術:道路、河流、城鎮、植被

為了增加複雜性,我們首先調整密度,比例,坡度,資源之間的空間等。然後再新增額外的一些規則,比如朝陽面、比如規定哪些物種對應地表哪一層材質、多層地表材質之間的包容和排斥,例如雨水侵蝕,河床,懸崖等等。最後,我們結合這些規則刪除一些不正確的植被分佈。在道路,鐵路,水域和行人路上,植被會被自動刪除。

我們與地形/岩石美術師緊密合作,以匹配地表分配規則(是指splat map)和植被規則。這樣,與植被分佈有關的地表材質,岩石和flowmap直接影響了森林在遠處呈現的效果。

《幽靈行動·荒野》中的程式化技術:道路、河流、城鎮、植被

在資源方面,我們嘗試對同一物種採用不同的結構,並避免每個群落具有太多不同的物種,這是會更自然一些。您使用的物種越多,就越難做到真實和自然。

《幽靈行動·荒野》中的程式化技術:道路、河流、城鎮、植被

在效能方面,密度是一個問題。我們提出的解決方案是:我們沒有采用每種資源固定的LOD距離值得方法,而是決定採用更靈活的方法:根據植被密度來調整LOD值。

因此,根據其在世界上的位置,同一資源可能具有不同的LOD值。更高的密度意味著LOD更激進,會更快地切換到最後一層LOD:Imposter。

《幽靈行動·荒野》中的程式化技術:道路、河流、城鎮、植被

Imposter是建造如此大的森林的最後一個重要組成部分,從遠處可見。這是一個動態的billboard系統,可根據攝像機的角度允許樹木呈現的不同側檢視。它包含不同的紋理通道達到更復雜的光照效果,例如保持光照關係,假投影和半透明。

《幽靈行動·荒野》中的程式化技術:道路、河流、城鎮、植被

《幽靈行動·荒野》中的程式化技術:道路、河流、城鎮、植被

《幽靈行動·荒野》中的程式化技術:道路、河流、城鎮、植被

原文連結:

https://80.lv/articles/procedural-world-building-in-ghost-recon-wildlands/
https://80.lv/articles/vegetation-generation-in-ghost-recon-wildlands/

擴充套件閱讀:

[技術分析]探討大世界遊戲的製作流程及技術——前期流程篇
探討大世界遊戲的製作流程及技術——大場景製作技術概況篇


相關文章