top of page

【Gamystery】EP7 | PCG 到底怎麼用 Part 2

已更新:2024年4月28日

前言


在前一篇【Gamystery】EP6 | PCG 到底怎麼用 Part 1。整理了PCG 官方提供的案例中,篇幅最長的內容,大概只佔一個小時的內容。接下來正文,除了官方解說的內容外,也是我逐一理解後,做的紀錄,會傾向將較多的過程、架構、易理解的概念納入,希望幫助讀者建立概念、更快上手。


開始前,也可看看再回味一下官方PCG展示短片 | 官方解說直播


PCG 結合地圖實例( Level Instance )

主要檔案:

  Level -  ElectricDreams_PCGSplineExample

  PCG Graph - SplineExampleGraph


▊ 概要


在這一節,展示「素材→地圖實例→PCG 」的應用方式,比起純用素材與PCG的組合,實務上來說,更為可行。某種程度降低了美術與程式的邏輯的耦合。


「地圖實例→PCG 」的組合,會導致物件生成的內容過於詳細,稍稍變動,就會造成視覺上嚴重的破壞。不僅如此,也提高了工作的難易度,讓美術不易上手撰寫邏輯,而工程師做視覺又慘不人賭。


展示中,更提到要如何即時編輯Level Instance,並即時反映到PCG最終的結果上。


ree
ree
即時調整、編輯Level Instance

  

概念上,每個地圖( Level )可以產生應用於PCG的設定( PCG Settings ),PCG Graph 可以使用這些設定檔來產生原本的模型。每當地圖( Level )更新時,只要重新產生設定檔,就可以在PCG不改動的前提下,產生新的結果。

ree


▊ 過程


ree
ExampleSpline PCG Graph

PCG Graph 首先對線段做取樣( Sample ),產生節點( Point Data )

節點為圖片中,線段上一個個方形。


ree
ree
取樣結果

案例中有設定邊界大小,不是重要。就算不加也不影響最終結果。

可能的原因是可以先在樣板還沒完成前,共識的預計的大小,讓工作可以平行進行。


ree
ree

接著,加上雜訊( Noise ),增加視覺變化性( 非常微小變化,卻能為視覺上創造自然的感覺 ) 。


ree

最後把Level Instance的複製到一個節點上,就完成了。

SG_CopyPointsWithHierarchy 的效果類似於CopyPpint可以吧SourcePoint都複製一份到TargetPoint。


最終結果,樹木都變得更加茂盛。


ree


Eletric Dreams 討論


緊接著,回到上次未解說完的案例,主要針對如何運用PCG製作出物件1。

共分為七個區塊 ,會依序說明。


主要檔案:

Level - ElectricDreams_PCGCloseRange

PCG Graph - LargeAssemblyGraph


ree
ree
LargeAssembly 零件

ree
LargeAssembly PCG Graph

第一階段 取樣


首先內圈的Spline,根據曲率( Curvature )篩選節點,分成兩類,可分別使用不同類型的素材。

黑色為低曲率節點( Low Curvature ),灰為高曲率的節點( High Curvature )。


ree
ree
ree
ree

第二階段 基底


再來,將Level Instance載入( 只擷取部分素材模型 )


ree
ree
ree
ree
ree
ree

藉由Graph Node - CopyPoint ,在指定的節點產生Level Instance。

CopyPoint 會是把Level Instance 複製到灰色的位置上( Level Instance=Source, 灰色節點=Target )。


ree
ree

Copy Points直觀上比較不容易理解。兩個不同的資料來源做兩兩相乘的擴張。

效果相當於讓我的實例資料在每個節點上都附製一份。

可以透過監看( Inpsect ),觀察顯示數量與屬性變化,完成後的數量等於Source, Target Points數量的乘積。


ree
ree
ree
ree

Level Instance就可以正確的擺放到目標上,當所沿著內圈就會形成一個中空的岩石。


ree

ree
階段結果

第三階段 頂部表面


可以從PCG Graph觀察到,主要節點的來原一樣是內圈Spline。經過篩選(Difference )、位移(Transform )後,就可以讓節點移動至上層表面。


最後,在節點生成Level Instance。


ree
ree
平面節點
ree
ree
平面+LevelInstance節點
ree
ree
階段結果

第四階段 倒下樹的樹幹


地圖獨特的效果之一。在調整地圖的時候,時不時會產生倒下的樹幹,形成一道天然的道路。主要的概念是計算內外之間的距離,根據距離判斷,判斷如何能不能加上樹幹、擺放素材。


ree

首先,根據外圈的線段,篩選出幾個節點後,當作外圈產生節點( 以拱門的方式標記出來 )


ree
ree

接著,內圈產生測試的節點


ree
ree

然後,從內側節點向外延伸測試距離( 根據素材不同有適合的大小 )。特別在於,綠色表示原素材平放的長度,藍色代表延伸的地方。當外圈落在藍色區域,就會以擺放傾斜的方式擺放。( 也有可能落在綠色區域,或是都沒有 )


ree
ree

藉由內部延伸方格,判斷是否與外部的節點測有產生交集。

黑色部分為有交集的位置,經過運算後,總共找到三個與外圈測試點有交集的位置。


ree

根據這些最後黑色的節點,把倒下的樹枝擺上去。

PCG Graph 上,還幫不同位置的樹木加上不同的雜訊( Noise ),增加視覺上的變化性。


ree
ree

第五階段 樹叢


這個階段更豐富平台上的木質裝飾。

一樣選擇從內部的Spline節點當作節點的的來源,運用一些條件篩選出幾個節點後,就可以把高挑的植物放上去。


ree
ree
ree
階段結果

第六階段-擎天石柱


添加大中柱,在平台上。這個石柱的位置是可編輯的。

方法依循「找到參考點→產生物件」:

  1. 圖片首先的區域,先找到參考點的位置( 用Tag 名稱辨識 )。

  2. 調整參考點的位置( 測試過,可有可無 )

  3. 產生石柱( !很重要的基本組合 )

ree
ree
ree
可編輯石柱位置

第七階段-石柱周遭點綴


最後一個階段,石柱周遭的點綴,個人認為非常微小的點綴( 沒辦法RD審美…


ree
ree
產生前、後對比

Graph Node的邏輯上還是有值得講解的地方。

邏輯上,利用內圈的節點當作Source,經過篩選條件後,產生物體。

以這邊來說,判斷以中柱周圍的節與內圈的節點有相交者

就會當作產生物體的節點( 接著判斷與中柱中心的距離 )。


ree
以內圈節點當作輸入
ree
ree
修改平面節點高度


PCG的看點


研究至此,分享下對這個實驗性功能的看法( 官方表示該功能為實驗性質 )。

熟悉多媒體軟體的讀者,可以能在其他軟體也曾聽聞,將場景的製作程序化( Proceduralize ) 的功能,例如 Blender - Road Generator Plugin。

Unreal 自家推出這個系統後,對其他的技術的支援更高。意味者,有機會在3A等級的作品中,將體驗與PCG的特性做結合。


ree
Unreal Engine 5.2 Feature

過去,遊戲的地圖都是精心設計,透過大量內容堆疊的線性體驗,礙於成本與體驗上的考量,相當合理。

然而,運用PCG製作出的地圖,賦予了變化、重複利用...等特性。目的在於有望為遊戲的地圖增添更多可能性。小從「草地的外觀」、「家具的擺設」,大至「迷宮的探險」、「軍隊的組成」。雖然該系統,在即時( Runtime )的支援上,仍然有技術需要克服。

官方的展示看似將功能侷限靜態的設計( 場景的製作 )上,其實是可以運用敵人、陷阱..等具有邏輯的元素上。



關於Graph Node的內容,沒有一 一解析,會以比較High Level的角度,說明主要流程。

所以,預計會再整理一篇PCG常用Node的解說、常見組合,可以作為起手工具。



ree
ree



 

bottom of page