天美F1引擎專家:如何利用PCG技術加速大世界地形生產?

腾讯天美工作室群發表於2021-12-06
導語:天美十三週年,天美聯合知乎遊戲,舉辦“遊戲未來十三問”主題圓桌,邀請遊戲從業者、玩家和廣大朋友們,一同探討和展望遊戲的未來。本文為圓桌議題“2021年,遊戲行業有哪些能提升開發效率的“黑科技”,前景如何?”下的回答,希望對大家有所幫助。

答者:潛龍旭,天美 F1 工作室技術中臺引擎程式團隊負責人

不知不覺在遊戲開發行業已過十年,從剛入行的技術小白,到現在依然什麼都不懂的技術搬磚工,見證了一個時代的遊戲技術變革。我本人先後做過遊戲開發 SDK,端遊 MMO,休閒手遊,重度手遊,大世界手遊,大世界端遊等各品類產品,現在是天美 F1 工作室技術中臺引擎程式團隊負責人。

遊戲行業發展很快,玩家對遊戲的要求越來越高,遊戲對技術的要求也越來越高,開發量也越來越大。我現在所在的天美 F1 工作室正在開發 AAA 級全平臺的大世界遊戲,這是一件非常具有挑戰的事情。

本人作為遊戲引擎程式,深知技術更新之快,需要不斷的學習才能接受這個挑戰。所幸我們已經提前在多個方向積累了對標國際 AAA 大廠的技術能力,並且還在全球招募了不少具有 AAA 專案研發背景的各方面人才。透過不斷的夯實技術基礎,我們有能力也有信心接受新的挑戰。在我們儲備的技術中,PCG 的技術是目前大世界遊戲必不可少的一種技術,現在做一些簡單介紹。

PCG(Procedural Content Generation,過程化內容生成)技術是最近比較熱的提升遊戲生產效率的一類技術。它是什麼意思呢?

網路百科給出的答案:過程生成(英語:Procedural Generation)是電腦科學中一種使計算機自動製造一類資料的演算法。在計算機圖形學中,它也被稱為隨機生成,常用於製作材質貼圖和三維模型資源,並在電子遊戲領域中用於自動製造大量遊戲內容。過程化生成有著減小檔案體積、擴大內容量、增強遊戲隨機性等優點。

我個人的理解:如果在遊戲中應用,簡單說,過程化內容生成就是利用演算法來自動生成遊戲內容。原有的遊戲內容需要美術和策劃花費大量的精力製作,過程化的方式可以大大降低人工成本,除了可以節省一些重複的人工勞動之外,甚至可以自動創作出一些新的設計內容。試想如果有一個程式可以自動生產遊戲,那是多麼有意思的一件事情,也許那天到來,遊戲開發者都下崗了。

地形是大世界的基礎,大世界沒有地形,就沒有玩家可立足之地。大世界有多大,地形就有多大,如果能用 PCG 技術加速大世界地形生產,就可以大大減少美術和策劃的人力消耗。

這裡有兩個難點,一:如何生成真實自然的地形?真實世界的地形並不是一些雜亂無章的形狀,他是自然的造化,往往具有賞心悅目的美感。利用演算法來生成具有美感的地形是我們面臨的第一大挑戰。二:大世界巨大,內容繁雜,涉及製作人員眾多,如何讓製作人員高效的協作是我們面臨的第二大挑戰。

今天簡單談一談如何利用 PCG 技術加速大世界遊戲裡的地形生產的一些基本思路。

1. 傳統的地形工作流

傳統的地形工作流,大家應該很熟悉,美術先找到一些參考的高度圖,匯入到遊戲引擎編輯器中,隨後根據自己的需求,透過地形編輯工具來編輯地形。比如 UE 的地形編輯器提供了各種各樣的刷子來給美術去手刷和雕刻地形。顯而易見,這種方式對美術來說工作量是巨大的。

2. 過程化地形

天美F1引擎專家:如何利用PCG技術加速大世界地形生產?
一些可用的地形噪聲

過程化地形可以利用演算法自動地生成地形。常用的有隨機噪聲地形,這類方法是一類構造式的演算法,透過設計一些噪聲函式來隨機生成地形高度資訊,比如常見的 Perlin Noise,Worley Noise,Voronoi Noise,Flow Noise等等。

另外還有一類是侵蝕演算法。通常真實世界的地形,是大自然常年累月對地形進行影響的結果。這類演算法會透過對侵蝕過程進行數學建模,然後模擬得到一個擬真的自然的地形效果。比如熱侵蝕,水力侵蝕等 ......

我們來看幾個過程化地形的例子。比如如何用噪聲表達丘陵地形?就像圖中連綿起伏的小山包。其實很簡單,我們對噪聲函式取一個絕對值就好了,這時噪聲的形狀會發生一個凸起達到表達丘陵的效果。

天美F1引擎專家:如何利用PCG技術加速大世界地形生產?
無人深空中的丘陵地形

天美F1引擎專家:如何利用PCG技術加速大世界地形生產?

那如何利用噪聲表達山脊線呢?很多大的山脈會有一條條山脊線,就像圖中的阿爾卑斯山。我們可以把噪聲先取絕對值再取反,翻轉後抬高。

可以觀察到在波形相交的地方形成了一個尖點,圖裡的是二維的情況,如果在三維中就會形成一條條區域性最高點的線,這樣就可以模擬這種山脊的形狀。

天美F1引擎專家:如何利用PCG技術加速大世界地形生產?
阿爾卑斯山脈

天美F1引擎專家:如何利用PCG技術加速大世界地形生產?

那如何用噪聲表達河流呢?我們可以透過域扭曲的方法來做。這種方法很簡單,就是對噪聲函式的定義域做一次變換,比如這裡的例子,簡單的對變數做一個位置的偏移,經過多次的位置扭曲,形成一些很特別的效果。可以看到圖中高度資料的變化過程,最後形成像河流一樣的效果。

天美F1引擎專家:如何利用PCG技術加速大世界地形生產?
天美F1引擎專家:如何利用PCG技術加速大世界地形生產?
天美F1引擎專家:如何利用PCG技術加速大世界地形生產?

剛才的講的幾個例子都是一些簡單有效的噪聲表達地形的方法。但真實的地形其實有一些特別的地方,比如自相似性。什麼意思呢?

我們從不同層次的視角去觀察真實地形的時候,會有一些相似的特徵。大到山脈,小到山體,更小的山上的每個石頭都在起伏。也就是說如果用噪聲表達這個特點,需要噪聲在多個尺度具有自相似性。

天美F1引擎專家:如何利用PCG技術加速大世界地形生產?
山脈

天美F1引擎專家:如何利用PCG技術加速大世界地形生產?
山體

天美F1引擎專家:如何利用PCG技術加速大世界地形生產?
山石

為了實現這個效果,我們其實可以直接把多層噪聲疊加起來實現。每一層噪聲有自己的頻率和振幅,疊加在一起就會形成這種具有分形效果的地形。為了更好的控制分形的效果,我們可以調整每層噪聲之間的關係:關係有兩種,一種是每層頻率之間的變化率,另一種是每層振幅之間的變化率。

特別的,如果每層振幅的變化跟頻率的變化互為導數,這種多層噪聲叫做粉紅噪聲。更特別的,如果變化率是 2 的冪次,我們把這種噪聲的每層成為一個倍頻(Octave),那這種噪聲每層頻率翻倍,振幅就減半。一般來說,Octave 小於 8 就夠用了,太大了計算量增加,效果不會有大的增幅。

這裡是我們常見的分層 Perlin 噪聲的效果,在 Octave 為 8 的情況下。可以看到這個分層地形,在大的高度變化上是一個低頻的變化,在小的尺度上會有一些高頻的變化。

天美F1引擎專家:如何利用PCG技術加速大世界地形生產?
Layered Perlin Noise

純過程化地形做的比較好的遊戲,有《無人深空》,Minecraft。《無人深空》的地形是做的很不錯的,有很多關於噪聲的技巧應用,做出來一些挺不錯的風格化的效果。

天美F1引擎專家:如何利用PCG技術加速大世界地形生產?
《無人深空》

天美F1引擎專家:如何利用PCG技術加速大世界地形生產?
《我的世界》

現在總結一下純過程化地形的特點:

基於隨機的演算法;

技術性是比較強的,美術不易理解;

容易重複;

可控性比較差,美術難以調效果

3. 美術主導的過程化地形生成

既然純過程化地形生成有這麼多問題,那大世界地形制作又想利用過程化技術來提升效率,怎麼辦?由於遊戲場景的最終效果其實是美術來把控的,其實整個場景很複雜,不僅僅只有地形存在,涉及到的東西很多都需要美術來把關,所以我們需要的是美術主導的過程化生成。

這種工作流需要更多的考量使用者友好性,美術使用的工具是互動要人性化,要足夠易用的。還需要有良好的藝術性表達性,美術可以很方便的做藝術設計。過程化技術在其中的作用主要是用來提升工作效率,並不像純粹的過程化地形生成,一鍵生成地形,美術很難參與其中。

這樣的一個工作流,它的主體成員可以是一個比較小的團隊組成,由 TA 和引擎工具根據美術需求設計開發地形工具,工具開發完後,美術使用工具設計地形。

具體來說美術主導的過程化地形工作流分為以下三個階段:

1:原始地形生成,這個階段 LA 和 TA 一起配合,利用一些過程化地形工具,比如 UE4 Landmass,Houdini,World Machine,World Creator,Gaea 之類的,根據世界的結構生成一份原始地形。

2:過程化工具地形加工,這個階段美術會在原始地形的基礎上進行場景製作,會新增場景的其他層,比如河流,道路,岩石等等,這些場景元素的製作在過程化管線中對應一個個的過程化工具,這些工具可能會對地形產生影響。

3:人工編輯,所有的過程化工具對地形作用完畢後,如果美術還不滿意效果,這時需要進行人工調整,調整後形成最終的地形效果。

3.1 原始地形生成

我們先看原始地形生成,這個階段的思路是,整個造型過程是從初模到高模,高度圖資料從低解析度到高解析度的一個過程,然後對真實地形來說侵蝕是很重要的一步。

以 Houdini 來舉例,大概有圖例畫的這些步驟。整個過程可以完全在 Houdini 內部做,也可以透過自定義的 Houdini Engine 在引擎中製作。完全在 Houdini 裡做,對TA來說比較方便,在引擎編輯器內做的話,美術會比較方便。各有優缺點。

天美F1引擎專家:如何利用PCG技術加速大世界地形生產?
Houdini 地形工作流

具體的,我們來看下這個流程。首先是 Massing,可以透過手繪,投射幾何體或者直接匯入高度資料進行一個最粗糙的造型,接下來,為了獲得更自然的效果,我們對粗模進行一些細節的擾動,這個過程可以透過應用一些噪聲來實現,還可以透過在特定區域新增一些障礙物。

Seeding 後的地形有了一些細節,更自然,也有利於後面的侵蝕效果。再就是裂片,一般真實的山體會被河流或地殼運動切割開來,我們可以透過侵蝕演算法加大侵蝕力度來獲取這種切割效果。最後我們可以從高度這個層次進行 Remapping,對不同區域進行反覆的造型。比如我們在第一遍的時候對地圖的平原區域進行造型,第二遍對高原區域進行造型。

天美F1引擎專家:如何利用PCG技術加速大世界地形生產?
地形粗模過程

粗模造型在低精度下進行,迭代效率是比較快的,大的造型設計儘量在粗模階段進行。粗模完成後對地形精度進行上取樣,更高的精度可以擁有更多的細節,之後繼續進行 Shaping,再之後就是侵蝕了。

為了獲得比較好的侵蝕效果,可以在侵蝕前再進行一次擾動。侵蝕是個比較耗時的操作,要比較快的迭代效果需要 TA 對此很熟悉。如果不滿意效果,可以反覆的造型和侵蝕,得到最終的原始地形效果。

天美F1引擎專家:如何利用PCG技術加速大世界地形生產?
地形高模過程

3.2 過程化工具地形加工

原始地形有了後,就進入到了過程化工具地形加工階段。一般 PCG 的工具管線會按不同的工具種類進行分層,比如按照湖泊,河流,道路,柵欄,植被這樣的層次進行劃分。

這裡需要注意的是,每個工具之間具有依賴關係,前個工具的輸出資料對後個工具會產生影響,比如我先用河流工具生成了一條河流,接著在河流經過的一個區域又用道路工具生成了一條路,那道路工具就需要考慮河流工具。比如我們可以透過輸出 Mask 來標記河流的區域,這樣道路工具就知道這裡有一條河了。

一般來說,這樣的工具順序需要事先規定好,做好流程的設計。

天美F1引擎專家:如何利用PCG技術加速大世界地形生產?
過程化工具流程圖

這些過程化的工具都可能對地形產生影響,包括高度和材質,那關於地形的變化,這裡有個隱藏的含義是後個工具是在上個工具影響後的地形上進行操作的,比如剛才提到的道路工具在河流之後,那河流工具本身會對地形進行形變,道路工具此時地形的輸入就是河流工具對地形形變後的結果。

當然有些工具可能對地形不會有形變作用,比如柵欄工具一般不會對地形有影響。所以在這個工作流中,我們需要把每層地形的變化都儲存下來,如果沒有這些中間結果,後面的工具便沒有了地形的輸入。

3.3 人工編輯

既然過程化解決不了所有問題,那接下來進入到人工編輯階段。問題又來了,哪些階段需要進行地形的人工編輯呢?

先回顧一下過程化工具的地形流程,如圖,是一個鏈式的結構,可以看到我們可以在每個工具之間都可以進行人工編輯,比如河流工具對地形影響後,美術不滿意,可以進行編輯調整,在調整後的地形基礎上,再使用道路工具鋪設道路,道路工具又會對地形進行影響,之後美術又可以繼續在此基礎上進行地形效果的調整。

天美F1引擎專家:如何利用PCG技術加速大世界地形生產?
過程化工具地形流程圖

有了這樣的流程,就存在地形的修改如何儲存的問題?

為了實現非破壞性編輯,每層地形的修改都需要儲存,推薦不要把修改資料儲存到編輯器場景中,而是存到外部檔案,這樣對 Houdini 比較友好。

另外一個值得思考的問題是人工修改的這部分資料是儲存差異還是直接覆蓋?儲存差異直觀上來看,有個優點,前階段的工具地形輸出有變化的時候,人工修改的資料可能可以繼承,比如由於某些原因,道路工具把路整體抬高了,由於儲存的是差異值,之前對一些區域性的人工修改就可以複用。

缺點是,可複用的資料的合理性其實是很模糊的,很多時候差異資料不可用,這種資料應用後出錯了也不易發覺。採用覆蓋的方式,優缺點是顯而易見的,直接覆蓋不會出錯,但一旦前面的層對地形有修改,後續的每一層的手工修改就全部報廢了,後續每一層都需要修改。

基於正確性第一的原則,推薦使用覆蓋而非差異的方式。人工修改一般只是修改區域性,覆蓋的方式就需要存兩種資料,一種是標記哪些區域修改了的 Mask 資訊,一種是需要覆蓋的高度圖資訊。

這樣我們就有了一套完備的地形工作流程,但給美術實際使用時仍然遇到了不少問題。

第一個是可手動編輯的階段過多,大世界一般都會有十幾層甚至幾十層,工作流可調整的地方太多,其中的邏輯美術不易理解,第二個可控性差,之前也提到,前面層的修改會影響後面,導致頻繁修改,非常容易出錯,第三個最直接的就是美術反饋操作太繁瑣,不好用。

天美F1引擎專家:如何利用PCG技術加速大世界地形生產?
過程化工具人工修改流程

重新考量了下,這個流程雖說比較完整,但很多階段其實沒必要,由於過程化工具對地形影響頻繁,整個階段可以不需要人工修改地形,所以最終人工修改可以在整個過程化之前和之後進行,這樣就可以簡化為 4 個大的地形階段。

原始地形:採用 Houdini,world Machine 輸出。

人工修改 1:美術可以在引擎編輯器中對原始地形進行調整。

過程化工具地形階段:合併為一個大的階段,中間不允許人工調整。

人工修改 2:對最終地形進行人工調整。

整個過程可以迴圈重複迭代。

天美F1引擎專家:如何利用PCG技術加速大世界地形生產?
過程化地形工作流

3.4 一些經驗小結

① 可控性很重要

完全的隨機地形生成不可用

美術導向,而非技術導向

② 非破壞性編輯

原始地形不可丟

可反覆快速迭代

③ 資料儲存

便於匯入匯出

使用覆蓋,不要使用差異

④ 依賴關係

後階段依賴前階段地形

杜絕迴圈依賴

編輯前及時鎖定,避免衝突

編輯前及時更新,避免錯誤修改

⑤ 不要過度依賴過程化

⑥ 鎖定

階段越前,越需要更早確定

地形修改工作量非常大

4. PCG 技術的前景

PCG 技術不僅僅用來生成地形,還可以用於生成大世界環境中的方方面面,比如植被,道路,河流,湖泊,海洋,街區,建築等等。

如果把這些問題在實際專案中全部解決,生成符合美術需求的資產,那製作大世界遊戲的成本會大大降低。當然並不是說美術沒有事情可以做了,而是美術可以專注於藝術創作,去除不需要關心的重複勞動。這樣 PCG 技術可以起到加快設計和驗證效果的迭代速度。

另外 PCG 技術還可以和機器學習等其他技術融合,來輔助美術設計,這類技術透過對已有的資產庫資料進行學習,自動生成一些新的數字資產,美術再進行一些挑戰,這樣可以加快創作速度。

PCG 技術甚至可以在一定程度上開放給玩家,用於製作 UGC 內容,玩家可以像遊戲製作者一樣創造遊戲世界。整個 PCG 技術的應用前景空間巨大。

目前天美 F1 技術中臺除了在 PCG 管線上有不錯的積累,其他 AAA 遊戲技術我們也取得了一些成績。

天美F1引擎專家:如何利用PCG技術加速大世界地形生產?
F1 技術積累圖

引擎技術、美術等方面,目前我們已經儲備並在不斷最佳化驗證的方向包括:

對標頂級 AAA 公司的,支援 AAA 品質開放大世界的 PCG 工業化遊戲內容生產管線

次世代主機級渲染技術及美術製作工藝

GTA 級的大都市模擬遊戲 AI 技術

超擬真載具物理模擬技術

基於光學動捕和 MotionMatching 的角色動畫技術及製作管線

基於 FACS 系統的寫實面部表情繫結和動畫管線

基於 AI 學習的人物動畫生產技術

...

最後歡迎大家加入 F1 工作室,和天美共同成長,做成國產 AAA 大作,實現個人技術突破。


來源:TiMi Club 天美俱樂部
原文:https://mp.weixin.qq.com/s/miOnAB9wervyBGe7ep1MRQ


相關文章