探討大世界遊戲的製作流程及技術——大場景製作技術概況篇

Kerry發表於2020-08-24
探討大世界遊戲的製作流程及技術——大場景製作技術概況篇

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

接上文,我們接下來了解一下大世界場景製作技術有哪些,本篇旨在給大家過一遍目前業界的做法,能讓大家有一個巨集觀的知識藍圖。實際上,針對不同的遊戲型別和美術風格,製作技術在細節上有著非常大的不同,業界目前也很難說有一套標準且高效的流程,所以一些細碎的技術點將會在其他篇章逐一討論。

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

說到大世界,到底多大的地圖尺寸才能算的上大世界呢?下面給大家列舉一下目前市面上的大世界遊戲地圖尺寸,詳細的介紹可以看這個視訊。

https://www.youtube.com/watch?v=UvFdMax3wlA

  • 堡壘之夜:5.5 k㎡,~2k x 3 k
  • 漫威蜘蛛俠:11 k㎡,~ 2k x 5k
  • 地平線 零之曙光 :22 k㎡,~ 4k x 5k
  • 絕地求生:64 k㎡,~ 8k x 8k
  • 塞爾達 荒野之息:72 k㎡,~ 8k x 9k
  • 荒野大鏢客2:75k㎡ ~8k x 9k

最後說一下我最近在玩的《刺客信條 奧德賽》,全地圖 256 k㎡(16k x 16k),其中陸地面積佔40%左右,也就是100 k㎡,高度峰值為800~1000米(個人跑圖目測的估值)

探討大世界遊戲的製作流程及技術——大場景製作技術概況篇

建立地形

對於建立如此龐大的地形,顯然不可能直接使用3DMAX等建模軟體製作的靜態模型檔案,一般來說引擎都會有一套地形系統(Landscape)來支援地形的生成和渲染。

引擎的地形系統根據高度圖來構造地形,對於相同的頂點密度,模型資料形式的地形佔用的記憶體是高度圖的6-7倍。而且地形系統還提供強大的LOD功能,遠處的地形網格頂點會被優化減少,分塊渲染等等功能。

探討大世界遊戲的製作流程及技術——大場景製作技術概況篇

分塊管理是大世界製作的核心前提。

世界由多個關卡組成,每個關卡控制各自內部的資源載入和顯示,一般一個關卡包含一個landscape地形。

按照Unreal的地形系統來說,就是一個landscape地形由多個component組成,component是渲染的基本單位,也就是說地形是按照component分佈,一塊一塊地渲染的。

合理規劃好每個關卡的地形尺寸,每個地形部件數量和大小,部件的頂點陣列成,每個頂點間隔代表遊戲世界多少米,對遊戲效能有著重要的影響。

探討大世界遊戲的製作流程及技術——大場景製作技術概況篇

說一下Far Cay 5 的標準:

一個關卡地形大小為1024mx1024m,部件大小為64mx64m,也就是說地形每64平方米為一個渲染批次,一個關卡內大概有400左右個地形批次。

0.5m對應高度一個畫素,也就是說一個關卡地形使用的高度圖、Splat圖的尺寸是2048x2048。

地形工作流

目前比較流行的工作流:worldmachine->houdini->遊戲引擎

如果非要讓我一句話概括地形制作的工作流程,我想會是這樣的:

worldmachine就是一個做地的(特點是:快);到了houdini階段就是在worldmachine的結果上繼續加工,自動化完成worldmachine做不到的事情(特點是:自動);最後到達遊戲引擎,這裡就是廣大美工們默默耕耘一點點細化場景的地方(特點是:手工、細節)

注意:這裡用一使用worldmachine一詞指代地形制作軟體,其實還有很多優秀的地形制作軟體比如world creator、Terragen 3.

分層概念:製作遊戲是一個反覆迭代的過程,在製作初期,我們會嘗試遊戲中的各種各樣的新想法,並可以快速地還原和重做。因此,《幽靈行動 荒野》提出了分層的概念,就是類似於PS的圖層的意思。

對於這個分層的概念,個人認為其實只是製作過程中形成的一種流程概念,實際開發中並不會侷限於這些條條框框,不過了解一下還是很有好處的。

Base層:WorldMachine製作的原始資源(高度圖和weight map等)我們定義為base層。WorldMachine提供了一套完整專業的工具集,用它來構建世界原型進行快速驗證是個不錯的選擇。

Macro層:在worldmachine解算的基礎上,通過筆刷等手段手工地對地形的巨集觀結構進行調整,這一層的調整內容為macro層。如果編輯結果不令人滿意,則可以輕鬆擦除Macro圖層內容,以返回到高度圖的原始狀態。軟體方面使用World Creator是個不錯的選擇。

macro翻譯為“巨集觀”的意思。

DCC層:然後進入houdini環節,通過各種程式化的工具細化我們的地形,例如生成道路網、河道、村落分佈,這些輸出內容我們定義為DCC層。在此階段,我們還會完成其他重要的工作:例如根據坡度,高度,粗糙度和WorldMachine的其他遮罩(如flow map、smoothness)來定義地形的材質分佈;例如根據坡度,高度,地表材質,密度,向陽面等規則來生成生物群落的分佈;自動化生成峭壁;這些稍後討論。

Micro層:最後,這三層匯入到引擎中。我們完成了大規模巨集觀視角下的工作後,自然也需要對微觀細節進行手工調整,這一階段的修改,定義為micro層。

micro翻譯為“微觀”的意思。

探討大世界遊戲的製作流程及技術——大場景製作技術概況篇

WorldMachine階段

通常選擇WorldMachine工作流開始建立地形。

探討大世界遊戲的製作流程及技術——大場景製作技術概況篇

從NASA等網站匯入展示地形資料Heightmap,配合分型噪點功能,然後進行應用侵蝕建模細化地形。

WorldMachine除了輸出HeightMap,還能分層匯出多種有用資訊;權重圖SplatMap(也叫Weight Map)是初步紋理化的依據,此外還能匯出高精度全域性地圖Visa Map。

權重圖(也稱為splat map或者weight map)是一組一個或多個RGBA點陣圖,其通道充當歸一化的權重,用於控制世界上任何給定位置的紋理繪製。

Houdini階段

WorldMachine幫助我們快速建立這個大世界的雛形結構,並且擁有簡單的紋理外表。

有了WorldMachine生成的高度圖、splat map等資源,我們就可以在Houdini中重構地形,利用houdini強大的自定義程式功能,我們可以制定任意的規則去程式化地完善我們的地形,並模擬複雜的自然規律細化群落分佈,地表材質等等。

探討大世界遊戲的製作流程及技術——大場景製作技術概況篇

主要做的內容包括:

1、進一步細化地形,自動化完成路網、河流、村落、城市的分佈。輸出高度圖和splat map、路點資訊。

2、按照自然物理規則模擬生物群落分佈情況。輸出分佈密度圖、splat map、點雲資訊等。

3、根據地形自動化生成峭壁、河流等網格模型。輸出靜態模型。

Houdini匯出的資料內容將直接跟引擎編輯器對接,常見的資料型別為:點陣圖、點雲資訊、模型。

遊戲引擎階段

資源進入遊戲引擎階段,場景編輯開始分工協作,每個人負責各自的區塊,所以引擎必須要提供一套合理的多人協作方案,以及需要制定諸多製作規範避免出錯。

在這一階段最重要的問題是,houdini自動化的內容與人為修改的內容如何同步的問題。《幽靈行動-荒野》專案組提出的方案是讓引擎修改的資訊迴流到houdini,然後讓houdini重新計算其自動化資訊再同步到引擎。對於這一點,個人意見是,沒有這種硬實力的公司或團隊最好不要這樣做。個人認為最好的解決方案是,houdini一旦輸出到引擎,就已經定死了,之後的所有修改都要靠人為調整(除非是大規模的迭代,需要重新返回houdini演算)。

然而在這階段仍然可以開發一些自動化的工具來協助提高編輯速度,比如:道路/河流/橋樑編輯工具、物件組合生成器、物件自動對齊地形、群落生成器等等。

渲染分析

前面討論了地形制作的流程,下面簡要地分析地形渲染的相關技術,還是以《刺客信條 奧德賽》的截幀畫面來例子。

探討大世界遊戲的製作流程及技術——大場景製作技術概況篇

畫面由GPA擷取所得,初步分析:畫面上看到的東西分為四類:地形、人物、巖壁模型、植被

主角腳下附近的地形網格明顯被曲面細分過,細分割槽域集中在道路上,可知僅有道路材質具有曲面細分功能。主角站立面積大約佔地形正常網格一個單位,推測地形精度為0.5m。

同屏內地形材質數量4-5個:泥石、草皮、泥土、石質。水坑的實現考慮為貼花。

巖壁模型被大量運用在地形斜坡上。

探討大世界遊戲的製作流程及技術——大場景製作技術概況篇

地形材質

要實現如此龐大且多樣的地形地貌,且要滿足近處高質量的細節要求,Tilling材質混合是唯一的選擇。通過Substance、Quixel等獲得高精度的四方連續材質的pbr貼圖,然後通過多張權重圖將不同型別的材質混合在一起,從而構造出豐富的地形地貌,這些權重圖稱為splat map。

然而,手動會繪製如此龐大的地形混合權重圖是不可能事情,幸運的是,我們在world machine/houdini製作地形的時候,可以通過演算法來生成這些地形材質的分佈,並獲得各種規則生成的mask,最終合成匯出為我們想要的splat map。

遠方地形如果依然使用tilling材質混合的方法,會出現明顯的重複感,所以我們預先烘焙匯出一份“巨集觀俯瞰圖”global color map用作遠景渲染。

探討大世界遊戲的製作流程及技術——大場景製作技術概況篇

地形材質方案

地形混合技術:三件事情

(1)當前畫素用到哪些貼圖(2)應每一層貼圖的權重是多少(3)混合的演算法

方案一:Unreal的地形材質採用經典的方案:一張權重圖weight map包含四個通道只能混合四種材質,超出四種材質就要新建一張weight map。而一種材質包含albedo、normal、roughness/metallic三張貼圖,四層材質就要13個紋理samples,可見shader的計算是非常昂貴的。使用此方法渲染地形,必須要對地形的材質有很好的規劃和控制。

探討大世界遊戲的製作流程及技術——大場景製作技術概況篇
我們已經很熟悉的權重貼圖

方案二:一些自研引擎常常會採用id map的方法,在繪製地形的時候,引擎會自動篩選出當前區塊內權重最高的4種材質,並將他們的index和權重儲存到id map中。在shader在解碼id map資訊,就知道對應的材質和權重了。

方案三:runtime虛擬貼圖技術,簡而言之就是通過預先將地形的材質混合(在computer shader中計算)並快取到一張巨大的實時紋理上,shader取樣時只需要從這張大紋理中拿到屬於自己的那“一塊”即可,拿到的結果已是最終的混合結果。原來要取樣多張圖然後混合,現在相當於就是單層材質了,shader的效能也得到極大的提升。

探討大世界遊戲的製作流程及技術——大場景製作技術概況篇

貼花

貼花能有效增強場景材質的多樣性,但存在overdraw重疊繪製的開銷。

runtime虛擬紋理技術的另外一個收益就是能極大地降低貼花的效能消耗,因此能突破限制被大量運用到場景中。

水攤、碎石、公路劃痕等貼花型別被廣泛使用並以程式化的方式放置。

探討大世界遊戲的製作流程及技術——大場景製作技術概況篇

《孤島驚魂5》進一步提升了這種貼花技術,讓它具備曲面細分的功能。

探討大世界遊戲的製作流程及技術——大場景製作技術概況篇

有趣的是,這種區域性的曲面細分方式比起直接對攝像機近處的地形進行曲面細分效能要高,效果和可調節性更好。

地形與靜態網格的融合

地形與地上的物件不可避免會產生銜接問題:主要是紋理、法線、幾何三方面的匹配。

常見的處理辦法有:三平面對映、pixel depth offset、距離場混合等。但是這些方案都各有利弊,而虛擬紋理技術是目前解決這個問題的最佳選擇。對於這個問題,會另開篇幅詳細介紹。

探討大世界遊戲的製作流程及技術——大場景製作技術概況篇

探討大世界遊戲的製作流程及技術——大場景製作技術概況篇

峭壁渲染

到目前為止,我們討論到的所有地形材質效果都基於世界空間xz平面的,前面提到的地形紋理都是自上而下的“投影”下來的。我們還有沒考慮到地形的垂直面(斜坡)要如何處理。

這意味著當我們有陡峭的坡度時(見圖1中紅區區域),紋理會產生拉昇變形(見圖2山坡區域)。

探討大世界遊戲的製作流程及技術——大場景製作技術概況篇
圖1

探討大世界遊戲的製作流程及技術——大場景製作技術概況篇
圖2

要解決此問題,一種經典的方法是採用三平面紋理對映,得出的效果(圖3)。

探討大世界遊戲的製作流程及技術——大場景製作技術概況篇
圖3

但這種方法會產生的渲染消耗是普通地形的三倍,Far Car 5為了優化此耗時使用各種trick(取巧手段),過程略微複雜,不在本文討論範圍內。

如前文所說,Tilling材質在遠處會產生明顯的紋理重複感,由於峭壁是垂直面的,無法使用前面預先bake出現的global color map作為遠景渲染。所以可以在shader中對遠距離的峭壁做減少tilling的處理。(圖4)

探討大世界遊戲的製作流程及技術——大場景製作技術概況篇
圖4

最後,為了增加懸崖結構的立體感,在Houdini中檢測這些懸崖區域並生成峭壁包裹模型,最後將相關布點資訊輸出到引擎進行程式化放置。(圖5、6)

探討大世界遊戲的製作流程及技術——大場景製作技術概況篇
圖5

探討大世界遊戲的製作流程及技術——大場景製作技術概況篇
圖6

程式化/自動化 技術

前面討論了地形制作以及渲染的相關技術及流程,下一步要繼續豐富我們的地面及地面之上的內容,面對這麼龐大的地形,完全靠人工編輯是很困難的。

接下里將會詳細介紹三種具有代表性的程式化場景製作技術,分別圍繞:植被、峭壁、道路系統展開論述。

探討大世界遊戲的製作流程及技術——大場景製作技術概況篇

植被

首先來說基於密度圖的植被放置方法。

顧名思義就是利用一張灰度圖來控制植被模型的分佈。一層灰度資訊只能控制一種植物的分佈。

一般來說按照heightmap的尺寸,一個畫素代表一平方米的話,這個精度是不足以表達精確的位置點的,所以一般會提供一個密度引數給藝術家控制每個畫素應該放置多少棵植物,但不會考慮植被之間的模型穿插問題。

因此這種放置技術比較適用於草叢這種大面積連續的的植被。

探討大世界遊戲的製作流程及技術——大場景製作技術概況篇

像森林這樣複雜的生態系統,其生物群落的分佈要考慮各種規則:種群的多樣性、優勢種和劣勢種的結構、水資源和陽光分佈因素、樹木的年齡等等。

這個模擬過程是通常是基於物理分佈的,輸出的結果要求儲存大量資訊。

我們在Houdni中實現這種物理模擬分佈的過程,最終生成一系列的點雲資料,每一個點儲存著物件ID和矩陣資料(包含位置、旋轉、大小)資訊,最後將這些資訊匯入引擎例項化生成對應的植被型別和並設定位置、旋轉、大小。

探討大世界遊戲的製作流程及技術——大場景製作技術概況篇

可以看到,基於點雲的放置方法能夠支援複雜型別的物體放置,每一個物體的ID、位置、旋轉等資訊都會被當成一個“點雲”資料儲存起來。

除了植被之外,貼花、岩石、道具等等所有獨立的模型都可以以點雲的方式來實現自動化放置。

探討大世界遊戲的製作流程及技術——大場景製作技術概況篇

峭壁

讓我們回到峭壁的製作話題,上面說到峭壁渲染的一些效能問題,以及其網格模型可以由Houdini自動化生成。下面就來討論以下如何在《far cry 5》中自動化生成峭壁包裹層,以及在《刺客信條-奧德賽》中的採用的巖體堆砌的方案。

下圖是far cry 5在houdini中生成峭壁包裹層的流程,自動檢測坡度是一個簡單的操作,然後就是在斜坡區域生成相應拓撲結構的模型,不需要生成uv,貼圖採用世界空間三平面對映的方式進行取樣。

探討大世界遊戲的製作流程及技術——大場景製作技術概況篇

《刺客信條-奧德賽》採用簡單粗暴的方法,可以看到斜坡區域被岩石模型恰當地填充,從而減少了地形渲染處理斜坡問題上的缺陷暴露。同樣的,材質採用Tilling紋理+三平面紋理對映方法渲染。

探討大世界遊戲的製作流程及技術——大場景製作技術概況篇

路網

通過以上的流程,我們已經完成了大自然最基本的面貌,接下來開始考慮加入人類的蹤跡:路。

先考慮我們的遊戲需要怎樣形式的路,如果我們需要的僅僅是泥路、石頭路,那麼直接在splat map上開闢出相關的材質區域即可。(如下圖所示泥路)

探討大世界遊戲的製作流程及技術——大場景製作技術概況篇

但這樣做無法表達出材質紋理的方向性,如果我們想要做出那種高速公路那種效果,就必須要使用模型,或者大規模的貼花(比如幽靈行動的做法)

探討大世界遊戲的製作流程及技術——大場景製作技術概況篇

將分段路面模型重複利用拼接組合成網是一個很好的思路,但是無法解決路面彎曲的拼接問題。可以預先製作多種型別的拼接元件,按照一定的規則來組合,但這樣做限制略大,可控性不高。

探討大世界遊戲的製作流程及技術——大場景製作技術概況篇

Spline mesh是一種網格變形技術,可以用兩個點控制一條樣條曲線,從而使靜態模型沿著曲線變形。Spline Mesh配合打點資料(程式化輸出),是程式化製作公路網的一種方法。

探討大世界遊戲的製作流程及技術——大場景製作技術概況篇

探討大世界遊戲的製作流程及技術——大場景製作技術概況篇

路網的生成

道路網路的貫穿整個遊戲的玩法重要內容,是指引玩家進行探索方向的第一要素。所以道路的分佈應該按照設計圖紙進行還原,同時要兼顧地形高低做出調整。

我們需要一套基於尋路演算法的Houdini道路外掛,根據使用者輸入的起始點計算出一條合理的路徑,再進一步生成子道路網。

Houdini輸出的資源分別是:

1.道路軌跡點資料,配合Spline Mesh構成道路Mesh。

2.道路的高度圖,用來填平原有地形,使得Spline Mesh與地形貼合

3.Splat Map用來控制道路兩邊的材質。

另外,在這一操作中,還可以根據道路軌跡順便生成道路貼花的擺放資訊,輸出為點雲資料。

探討大世界遊戲的製作流程及技術——大場景製作技術概況篇

水域

水域(不包括海域)的形態也是多種多樣的,從製作層面可以分成兩類:A:江河、湖泊 ;B:溪流、運河、水塘

探討大世界遊戲的製作流程及技術——大場景製作技術概況篇

江河湖泊在構造地形的時候就已經被雕塑出來,只要在Houdini中計算對應的水平面,生成對應的模型。模型大小按照關卡大小進行分割,比如1平方千米

溪流可以類似運用道路的生成方式,從山頂引流到江河,根據尋路演算法生成對應的Mesh。

其餘小規模的水域就按人工放置平面模型來做,或者運用spline mesh曲線工具快速拉出一條水流。

探討大世界遊戲的製作流程及技術——大場景製作技術概況篇

關於大場景製作技術暫時寫到這裡,其實自動化和程式化部分內容並不是本人專長,都是從PPT上拔下來的內容。程式化做為一種新穎的技術方向,雖然充滿著挑戰性,它在未來對於遊戲製作技術的意義讓我們拭目以待。

在接下來的篇章中,我會著重講述渲染相關的內容,每一種技術方案都會開一個獨立的篇章來講述,深入細節地跟大家討論。



相關文章