在今年的游戲開發者大會(GDC 2025)上,騰訊游戲帶來20場議題分享,圍繞AI、渲染、跨端游戲開發等游戲技術應用及游戲研發經驗與全球游戲開發者探討交流。本文為“程序化生成之路:重建秦朝古都”分享的圖文版干貨內容。
分享嘉賓:
陳宇青 騰訊游戲天美工作室T1技術美術
余果 騰訊游戲效能產品部技術美術
大家好,歡迎來到我們今天的分享會。我叫陳宇青,很高興和我的同事余果一起和大家交流我們去年做的一個項目。這個項目是關于如何通過程序化方法構建一座城市。先簡單介紹一下我自己,我于2020年加入騰訊,最近5年一直負責開發程序化內容生成(PCG)相關的工具集。在深入主題之前,我想先播放一段關于這個項目的視頻。
我們將主要討論四個話題。首先是項目背景,我們之前做過什么,以及我們為什么要構建這樣一個演示項目。第二部分是我們的工具集架構,我們想要實現的一些目標,以及我們做出的一些設計選擇。第三部分是實現細節,包括布局、建筑和興趣點區域。最后一部分是總結。
這是預告片的一個片段。我想展示一下我們之前做的一些自然環境方面的工作。如大家所見,過去幾年我們一直在構建一款開放世界類型的手機游戲。我們的目標是擁有64平方公里的可玩區域。其中64%的世界將是自然環境。接近40%將是像小鎮和大都市這樣的以人類活動為中心的環境。
左邊的圖片是我們之前完成的一座中型城市。我們采用的是人工密集型工作流程完成的,包含約2萬棟建筑。我們花了21個人月來構建它,每次迭代需要2個人月。我們想要構建一座像右邊圖片那樣的大都市,其規模是當前城市的16倍。如果采用舊方法,預計需要336個人月,基本上這是不可能完成的任務。那么我們應該怎么做呢?
帶著這些問題,我們尋找了一些行業解決方案來幫助我們。育碧之前發布了一系列關于程序化生成的演講,還有幾款基于Houdini的解決方案在自然環境方面非常出色。
我們從中學到了很多,并且已經建立了一個構建自然環境的流程。正如您所看到的這些圖片,它們是我們正在構建的世界的不同地點。但以人類活動為中心的環境仍然是個問題。
我們在尋找一些程序化城市解決方案,我們回顧了蜘蛛俠系列和《黑客帝國覺醒》技術演示。它們給了我們很多啟發。
但關鍵在于,我們想要創建一座以中國古代為基礎的城市,特別是秦朝(大約2600年前)。
這里有一些關于這座城市的參考,如您所見,它們的布局更加不規則。由于現代城市通常建立在大面積的平坦區域上,秦朝的城市通常圍繞山脈建造,并且在垂直方向上有多個層次的結構。
所以我們意識到我們必須自己構建一個解決方案。這就是我們想要構建古代城市項目的原因。
現在讓我們回顧一下在這個項目中我們需要實現的一些目標。
第一個目標是構建一個以藝術家為導向的工作流程。我們的藝術家將遵循四個不同質量階段來制作高質量的場景,我們需要在PCG工作流程中尊重這一點。并且我們希望我們的藝術家在虛幻引擎內創建程序化內容,而無需打開其他應用程序。
第二個目標是遵循中國古代城市的布局設計。我們需要提供一些工具來幫助他們原型化城市的布局,就像左邊圖片展示的那樣。同時,工具生成的內容也應該符合這些要求。我們對程序化元素的值和位置有一些限制。例如,我們不能有一個太窄的隧道或建筑物和墻壁之間太小的間隙。以符合游戲玩法設計。
第三個目標是提高生產效率。因為我們有手動完成這項工作的慘痛經歷。
接下來談談我們對此的回答。我們構建了一個包含三個步驟的工具集。
第一步是為手動放置設計的。我們允許藝術家放置自定義的立方體和曲線,以代表主題區域和道路,從而快速原型化城市的關卡設計。
第二步基本上是一個交互式的PCG過程。我們將在藝術家在第一步放置的區域內程序化地生成更多的子盒子,以代表建筑物和多個PCG目標。藝術家可以調整盒子的位置、大小。并將它們發送去處理,來回調整PCG結果。
第三步,在每個庭院內生成更高質量的資源和裝飾性內容,這部分的結果應符合交付質量。
另外一點是,我們通過兩種自定義編輯模式擴展了虛幻引擎,即古代城市編輯模式和興趣點(POI)編輯模式,這將允許藝術家直接在虛幻引擎內創建與PCG相關的所有內容。
在虛幻引擎和后端Houdini之間通過PCG服務進行數據傳輸。正如您所看到的,左邊的圖片是我們在虛幻引擎中的一個城市關卡,右邊的是在Houdini中的傳輸代理數據,我們將把處理好的數據送回虛幻引擎以完成一個計算循環。
為了實現第二個目標,即尊重中國古代城市的布局要求。我們回顧了中國不同朝代的城市特征,我們發現每個朝代都有其獨特的風格,像秦朝的閭里制和宋朝的街巷制。我們還調查了不同區域的布局規則,像居住庭院、花園、宮殿和傳統寺廟,我們將在工具開發過程中尊重這種獨特性。
對于我們第三個目標,效率提升部分,我們希望我們的關卡藝術家專注于POI區域,這些區域可能包含大量的游戲玩法設計。
因為城市80%的部分將是PCG部分(圖片中的藍色區域),而另外20%是POI區域,我們為這部分設計了特定的工具。
為了實現第三個目標,即效率部分。我們開發了分布式處理方法來加速我們的布局進度。多個區域可以同時處理,藝術家可以以高頻率獲得反饋。
對于一個單獨的地塊,我們可以通過參數控制生成多種結果,讓藝術家挑選其中更好的一個。
此外,我們的PCG結果可以由藝術家手動修改,以決定該區域的最終外觀。
我們整個框架由兩部分組成。圖片左側的虛幻引擎界面和右側的PCG后端,PCG服務將在它們之間進行數據傳輸。引擎界面旨在處理來自藝術家的數據輸入,如繪制區域和立方體,接收來自PCG后端的數據。后端本身負責程序化相關的計算。
引擎界面將允許藝術家繪制區域和道路以原型化關卡設計。道路如果與輸入區域重疊,將把它們分成子區域。就像這張圖片中的紅色和黃色框,這些子區域將是后續處理的基礎。
PCG后端將從引擎接收區域數據,并根據我們之前提到的規則,如閭里制,遞歸且分層地運行計算。以匹配秦朝的風格。并且詳細內容,如建筑物、內部道路、NPC和裝飾性內容也將在該步驟中生成。
對于POI區域,藝術家可以使用我們的POI工具集快速創建多種元素,如繩索、標志、雜物、城墻或城市外的稻田。
接下來由我同事余果來解釋PCG后端部分。
首先,它利用USD進行標準化。這不僅允許與行業中的其他數字內容創作工具無縫集成,還賦予了我們前所未有的表達能力。
其次,它是一個基于Omniverse構建的云服務。這使我們能夠更輕松地與團隊成員合作,并在需要時擴展計算資源。
第三,它采用Houdini進行布局算法。Houdini仍然是程序化內容生成最強大的工具,并且它與Flow在云端配合得非常好。
最后,它利用分布式并行計算,使我們能夠快速高效地生成大規模內容。
此外,它與UE5中的新PCG圖集成了良好的配合,這一點我差點忘了提及。希望這能回答“為什么還要使用另一個PCG框架?”這個潛在問題。
另外,它已經被無數電影作品測試和證明。
USD,憑借其能力,已在業內廣泛采用。除了在業內的廣泛采用,我們還非常重視USD的高性能和高擴展性。
由于USD被設計為快速且高效,它可以輕松處理大規模內容。USD具有將修改后的內容保存在單獨文件中的能力,這就像一個補丁,這種補丁般的行為進一步降低了通信成本,并與Flow框架完美結合。
眾所周知,USD誕生于皮克斯,為電影行業服務,許多功能都是圍繞他們的需求開發的。另一方面,我們是游戲開發者,USD在某些方面尚未覆蓋,例如在虛幻引擎中,我們有地形、植被、藍圖等。
幸運的是,USD極其靈活。我們可以傳遞任意數量的屬性,可以定義自己的語義,并且可以表達資產、組件、Actor及其屬性間的復雜關系。這對于設置虛幻場景至關重要。
憑借這些特性,我們現在可以用USD表示一個完整的虛幻場景。通過這種方式,通過USD,我們可以在Houdini中完全控制虛幻場景。
在這個例子中,我們在一個屬性中放入了一大塊文本數據,這樣可以確保生成的虛幻Actor在虛幻中可重新編輯,這個屬性有時可能高達數十MB。
這當然不是USD原本的設計用法,但它可以毫無問題地處理這種用法。而且,用其他格式很難實現這個功能。
讓我們來談談在云端運行Houdini的好處。實際上,這是我們構建Flow框架的最初動機。
最后,分布式計算。這是我們為古代城市項目構建的,并且極大地提升了性能。現在有了我們現有的工具,這已經變得很容易了。
布局算法本質上是可并行化的,因為每個區域可以獨立計算。這使它們成為分布式計算的理想候選者。隨著Houdini實例已經在云端運行,USD文件已經存儲在云端,這只是調度任務和收集結果的問題。
在這張圖片中,一個用戶提交了一個任務,許多工作進程同時處理它。但由于我在用戶名上打了馬賽克,可能看起來不太清楚。
無論如何,憑借這個框架,大型城市可以在幾分鐘內生成,陳宇青稍后會列出具體數字,現在我覺得是我把時間交還給陳宇青的時候了,多謝。
好的,多謝我的同事,歡迎回到我的頻道。這部分是關于我們如何實現不同區域的布局設計的。
我們的城市布局可以分為兩種類型,定居點型建筑,如平民區和富人區,還有像政府大樓和皇帝宮殿這樣的大型建筑。
我想再詳細解釋一下我們的布局規則閭里制。
秦朝在當時是一個軍事化的國家,所以政府用非常嚴格的法律來統治人民,居住區的布局也是這種統治的反映。所以有一句來自我們古籍《周禮》的諺語,它說五戶為一比,五比為一閭,所以這個規則被稱為閭里制。
閭里制的布局更像是一個棋盤,從這些圖片中可以看出,尤其是右上角和左下角的圖片,它就像一個網格空間。為了獲得更好的視覺效果,我們在原始的閭里制基礎上添加了尺寸變化。以打破這種高度重復的韻律。
以平民區為例,我們的技術美工在Houdini中開發了算法,以遞歸的方式劃分和生成布局。
我們將有一個輸入區域塊,這是藝術家在虛幻引擎中創建的。這個塊將被劃分為幾個閭里單位,一些內部道路數據也會生成。每個閭里單位將在第三步被再次劃分為幾個小庭院,在第四步根據之前的結果生成建筑物和墻壁,第五步生成更多的裝飾性內容,如生物群落區域和NPC。
最后我們將這些數據讀回虛幻引擎。
第六步 還有一個第三人稱視角查看。
富人區的開發遵循相同的邏輯,但具有更多的空間和更整潔的布局。
你可以看到第五步的圖片。
對于政府大樓,重點在于它將占據更大的空間,并且在建筑規模上具有更高的對比度。
它總是會有一個主庭院和一個大建筑在里面。
所以我們的技術美工將輸入區域塊劃分為至少一個帶有英雄建筑的主庭院。
在我們為這部分開發的算法中,我們總是通過動態規劃算法找到輸入區域的最大內接觸矩形,無論藝術家輸入的形狀如何,工具將始終確保有足夠區域來放置我們的英雄建筑。其他子區域遵循之前的相同邏輯。
你可以在第五步看到最終結果。
為了使政府區域的布局多樣化,我們開發了一種稱為共線編輯模式的特定編輯方法。
由于我們的布局總是由Houdini生成,藝術家在處理之前無法看到結果。
這個功能將在Houdini的第一次處理時創建操作器。并允許藝術家根據視覺結果進行修改,而無需依賴Houdini。我們的藝術家可以避免輸入參數并反復嘗試。
從視頻中可以看到,我們通過拖動布局邊界輕松調整了一個政府區域的布局。
這種共線編輯模式是一種基于幾何算法的操作,靈感來源于室內設計理念。當藝術家拖動布局邊緣時,會觸發拆分或吸附行為,以幫助藝術家重新定義現有布局。
我們用這個功能來構建秦朝的皇宮。
第一步我們編輯一個由Houdini生成的現有布局,然后將結果發送到后續的第二步、第三步和第四步。第五步是最終結果。
如果你還記得,我們仍然需要在庭院內生成詳細內容,主要有四個主要類別需要生成。建筑物、內部道路、NPC和一些裝飾,如內部花園。
庭院的建筑設施也可以有多種類型,如主建筑、副建筑、后院建筑和墻壁。它們各自有不同的要求,我將在后面建筑編輯器部分詳細講解。
對于像內部花園這樣的裝飾性內容。我們設計了一種特殊的方法,結合虛幻PCG框架與Houdini計算。
例如,一個花園將根據不同的區域進行變化,如富人區或平民區,有些部分需要藝術家預先定義,比如這個區域可以使用什么樣的樹。但花園的輪廓和生物群落位置可以隨機變化。
所以我們有一個稱為本地PCG的過程。藝術家可以在虛幻引擎中原型化花園預設的外觀。就像左邊視頻顯示的那樣。藝術家正在使用基于虛幻PCG框架的工具編輯這個預設。
我們將這個預設及其名稱、權重和一些重要參數(如是否啟用樹木生成)一起傳遞。讓Houdini后端來決定分布過程。
當我們把數據讀回虛幻時,有一個根據Houdini的輸出實例化我們預設的過程。正如圖片所示,一個政府區域內的花園被生成。
通過這種方式,我們的藝術家可以直觀地原型化PCG元素,并且這部分的關鍵外觀得到保證。同時,我們避免了大量點云數據的輸入和輸出。
對于道路和NPC,我們也使用了這種方法。
為了更高效地組織模塊并重復使用它們。我們創建了兩個新概念。
1. 建筑模塊,它由一個單一模塊資產和一個單一語法規則組成。就像圖片的中間列。這個建筑模塊可以導入和導出以供重復使用。我們不需要每次都從頭創建規則
2. 建筑模板,它由幾個有序的建筑模塊組成,它可以附加到一個建筑塊上,用于形成更大的建筑。
我們還開發了一個稱為布局融合的功能,它包含兩個操作,合并和切割。
這將幫助藝術家處理類似布爾操作的任務。
有些建筑可能需要部分調整大小。這里有一個錨點系統。
這是一個三維錨點系統。我們用這些錨點來控制哪部分需要固定,哪部分可以調整大小。
我們還為藝術家提供了程序化生成功能。他們可以快速通過幾次點擊彈出不同的建筑。
在我們的城市中,有許多具有獨特特征的興趣點區域。它非常依賴藝術家的手動放置,也很耗時。簡單說幾句。
所以我們設計了一套POI工具來增強場景的多樣性并提高該區域的游戲玩法設計。
這張圖片是我們創建的一個POI區域。通過結合使用我們的POI工具。
關于這些工具的框架設計,我們設計了一個虛幻C++基類來封裝基本工具行為,如初始化或退出過程,和一個交付類來處理鼠標交互邏輯,如點擊和拖動。
線基類繼承自鼠標交互類,用于處理曲線形狀的創建和編輯。我們有一系列工具繼承自該類,如路徑對齊分布工具、河流生成工具或城墻生成工具。
每個工具將生成一個新類,稱為生物群落代理,就像右邊圖片顯示的那樣。這是我們生成PCG內容的區域。
對于生物群落代理,我們使用藍圖系統來擴展它,并在幕后使用虛幻PCG系統。由于我們的工具基于虛幻PCG框架,我們的技術美工可以輕松將其擴展為不同的POI工具。讓我們快速看一下這些工具。
曲線散射工具我們用這個工具在建筑前放置一些馬車。這是最常用的工具之一。
標志工具。我們通過識別建筑的結構框在建筑表面創建標志。
我們用NPC工具創建行人。
我們用城墻工具創建城墻,并通過拖動墻段而不是樣條點來調整它,這對藝術家來說非常方便。它可以適應地形變化,并可以在城墻模塊之間插入建筑。
我們在城市外創建稻田。該工具支持不同的模式,如曲線形狀和直線。還可以在稻田中生成農民和一些設施。
正如我們之前提到的,用手工方法構建這樣的城市需要336個人月才能完成,每次迭代需要32個人月。通過使用我們的古代城市工具集,我們將成本降低到9個人月完成,0.5個人月迭代。對于未來,我們認為虛幻PCG框架可以在游戲開發中扮演重要角色。
最后。我想感謝我的古代城市團隊,過去一年我們一直在努力工作,終于完成了這個項目。很高興成為這個團隊的一員。
游戲葡萄招聘內容編輯,
| |
| |
| |
游戲行業書籍推薦: 葡萄書房
(星標可第一時間收到推送和完整封面)
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.