萬物皆可隨機化!淺談《銀河破裂者》中程式化地圖生成
編者按
《銀河破裂者》是一款深受各種遊戲型別影響的遊戲。遊戲的基地建設和基地防禦方面讓人回憶起了經典和現代的即時戰略遊戲。掠奪和製造系統類似於知名動作 RPG 遊戲中的系統。動態天氣、時間變化和獨特的生物群落都是偏探索和生存的遊戲的重要組成部分。而能將眾多遊戲型別串聯起來,靠的就是由地圖多樣性帶來的遊戲玩法。接下來,本作的開發者將會為大家介紹遊戲的程式化地圖生成。
作者:Piotr Bomak
校稿:shushudai
本文內容首發Game Developer,經由GWB編譯
https://www.gamedeveloper.com/disciplines/systematic-chaos---procedural-map-generation-in-the-riftbreaker
(轉載請徵得同意,文章僅為作者觀點,不代表GWB立場)
《銀河破裂者》的最大優點是不會有兩局完全相同的遊戲。即使知道會發生什麼,玩家每次開始新遊戲時也必須從頭探索每個任務的具體細節。實現這種多樣性的唯一方法是通過程式地圖生成。此功能一直是《銀河破裂者》的設計支柱之一,也是整個專案最重要的任務之一。該遊戲使用我們自己的 Schmetterling 引擎,它也幫助我們進行了之前的專案 Zombie Driver 和 X-Morph: Defense。但是,這些遊戲使用了預先設計的、固定的關卡。在本文中,我們將談及我們為《銀河破裂者》設計的世界生成系統。
地圖生成過程是在每個新的生存模式開始之前執行的。這種模式的前提是每個會話都是獨立的體驗,而程式生成的世界對此有很大幫助。該過程分為幾個階段——讓我們來看看具體每個階段。
一、生物群落隨機化
該過程開始於使用者對生物群落的選擇。對於玩家來說,生物群落的選擇將影響他們將要遇到的生物型別、可用的動態天氣事件池,以及資源的可用性以及遊戲區域的整體外觀和感受。然而,對於遊戲本身,生物群落定義了一組將影響世界生成過程的總體引數。《銀河破裂者》中的每個生物群落預設都包含有關光照引數、天空盒及其屬性的資訊,以及一組用作地形基礎紋理的材質。生物群落還定義了在生成地圖時可供遊戲使用的地塊。
叢林生物群落的紋理選擇示例
玩家在戰役中會遇到的多種生物群落片段:叢林,沙漠,酸地和岩漿
生物群落沒有“固定”配置,這意味著兩個“叢林生物群落”的地圖可能看起來非常不同。我們靠生物群落隨機化實現了這一點。我們沒有為遊戲提供一組它必須使用的屬性,而是為它提供了一組預配置的隨機選項。因此,遊戲幾乎不可能為任何給定的兩場遊戲選擇一組完全相同的材料、天空盒和照明。雖然仍然由我們的設計師預先定義,但生物群系屬性的混合重組,從一開始就為世界生成引入了一些多樣性。
二、地塊生成
在選擇了所有生物群落引數後,演算法開始對地塊執行第一次操作。地塊是我們在《銀河破裂者》中生成地圖的基本構建方塊。它們是我們的關卡設計師手動準備的最小的可編輯模組。它們的最小尺寸為 128x128 米(或 64x64 遊戲內網格。我們遊戲中的每個網格都是 2x2 平方米)。地塊在準備投入遊戲之前需要滿足一些基本標準。當然,這些要求很容易滿足,並且可以通過一些創造性的方式來滿足,這樣它們就不會限制設計師的自由。
地塊的設計師只需要用幾種型別的遮罩來覆蓋地形紋理將從可用組中隨機選擇
其中一項要求是使用地形混合來掩蓋表面。表面積可以由三種全域性材料之一覆蓋——為簡單起見,我們將它們命名為 A、B 和 C——在生物群落隨機化過程中選擇的材料。設計師不選擇具體的材料,他們只是使用材料組 A(例如沙質類)、材料組 B(例如草地類)和材料組 C(例如岩石層類)指定遊戲將覆蓋的區域。也可以用真實的紋理來繪製一個區域。在這種情況下,隨機化過程不會影響它。
如果設計師選擇使用常規紋理而不是蒙版,則該區域將不會受到隨機化過程的影響。這在物件下新增細節很有用
在這之後,地圖製作者可以開始為遊戲的邏輯元素放置生成點。他們決定玩家可以從哪裡開始旅程,在哪裡放置資源(及其種類),以及將生成的遊戲內 NPC 的位置。
三、預製體隨機化
在這裡你可以準確地看到哪些區域被標記為會由預製體替換,以及哪些物件已被自動放置
我們決定在《銀河破裂者》的世界生成演算法中加入的另一個隨機元素,也就是所謂的預製體。在我們的專案中,預製體是一個特殊的手工場景,由設計師填充各種物件。它們的目的是填補設計師留下的地塊的空白空間,並標記為由預製體遮蔽。換句話說——預製件藏在常規地塊底下,當有上面留有足夠空間時就會跳出來,以隨機方式用物件填充該區域,而無需任何額外的人工輸入。
使用預製蒙版繪畫可讓你立即獲得外觀獨特的地塊
設計師選擇他們希望在新地塊上使用的預製場景。每個預製體都有自己的遮罩,而設計師會決定在哪裡使用它。然後來自預製場景的物件將填充遮罩區域。生成地圖時,預製體的位置和方向是隨機選擇的。然後,將預製場景的多個副本縫合在一起,位於遊戲世界的整個區域下方。這樣,我們可以確定無論創作者指定的區域如何,預製蒙版都能夠用物件填充設計師標記的區域。定位、方向和預製選擇的細微差異可以極大地改變地塊的感覺。
預製場景有幾種變體,其中擠滿了物件,因此無論處於何處,它們都可以完成自己的工作
這是同一張地圖。唯一改變的是預製隨機化的生成器種子。差別可以非常細微,也可以大相徑庭
四、地塊地圖生成
現在地塊已經隨機化了,是時候生成地圖了。遊戲會檢查地圖應該有多大——我們支援各種地圖尺寸,從單地塊到 12x12 塊的龐然大物。《銀河破裂者》當前版本為生存模式生成 5x5 地圖,為戰役模式生成不同尺寸的地圖。地圖的大小會影響遊戲選擇和引擎效能。戰役中的探索任務需要更大的可玩區域,而基地防禦目標可以適應更小的世界,以實現更精簡的遊戲玩法。
設計者還應為地圖的每個邊分配資訊以進行匹配。只有當它們的邊匹配時,地塊才會相互連線,從而防止連線錯誤。地塊隨機化過程選擇將用於生成地圖的地塊、將使用哪些生成點以及地塊將如何旋轉(我們支援 0、90、180 和 270 度的旋轉)。地塊在地圖生成過程中可能會重複,並且它們的屬性可能因例項而異。
這個遊戲世界是通過解決“王的地塊問題”的一個版本而產生的。您可以在此處閱讀有關此概念的資訊。在最初的問題中,地塊的彩色邊必須相互匹配而不執行任何旋轉。由於我們允許旋轉,因此我們的案例稍微簡化了一點,但是,當涉及到側面時,相鄰的地塊仍然必須彼此匹配。這需要相當多的操作才能使這一切奏效,但由此產生的組合數量非常高。
建立更大面積的地形也是可行的。遊戲仍然將它們視為一個地塊,將整個結構視作一個整體,並在地圖生成過程中將其與其他地塊配合。它允許設計師建立跨地塊結構,如山脈或峽谷
值得一提的是,並非所有地塊都需要是 128x128 平方米。我們還支援多個‘基礎’地塊的組合,以支援跨越多個地塊的獨特結構,例如巨大的岩層、大型湖泊或河流。如果像這樣的特殊地塊結構被選擇作為生成世界的一部分,它會被完整地放在地圖上,以保持設計師準備的道具的連續性。然後像往常一樣用隨機地塊填充周圍區域。
五、資源和玩家出生點隨機化
最後,在演算法通過上述所有步驟生成地圖後,我們可以繼續進行資源分配。《銀河破裂者》中的每個任務都定義了應該向玩家提供什麼樣的資源。但是,它只指定了任務期間可用的資源數量,而沒有指定位置。這部分再次進行了隨機。遊戲為資源儲存選擇可能的重生點,並根據相關規則進行分配。
這是資源分配規則集的示例。所有遊戲模式和地圖都需要自己的規則來改變和平衡遊戲體驗。
一旦演算法選擇了資源生成點,該過程就相當簡單了。選擇資源型別,然後是儲存點的‘密度’——可供玩家使用的資源量。該值是任務邏輯檔案中定義的最小值和最大值之間的簡單隨機。然後,遊戲嘗試確定資源存放的中心。該領域將是最豐富的中心,它將由不同的物理模型表示,以便於視覺識別。
資源可以在標有紅色的區域生成。遊戲將確定資源存放的中心和產量,然後相應地調整網格
分配完所有資源後,遊戲會檢查所有玩家重生點,並選擇一個最接近基礎資源區的。一旦這個地點確定,玩家就可以開始遊戲了。
我們對我們為《銀河破裂者》開發的地圖生成系統感到滿意。它使我們能夠在相對較短的時間內向遊戲世界引入多種變化。甚至在生物群落池中新增幾個新地塊都會為新玩家和迴歸玩家帶來有趣的體驗。新增隨機預製體,使地圖地塊每次都具有略微不同的外觀和感覺,這樣你就有了構建遊戲的堅實基礎。
目前這套系統非常實用,但仍然可以通過許多有用的功能進行改進,以使遊戲世界更加逼真。我們正在研究動態 NPC 放置,它將根據生物群落、所選難度級別、一天中的時間以及玩家在遊戲中的進度進行調整。有了這樣的系統,《銀河破裂者》將會鼓勵玩家根據局勢隨時制定和調整對策,而不是每個任務都背板。
來源:騰訊GWB遊戲無界
原文:https://mp.weixin.qq.com/s/LXfetOoX5CnU3zJtrEw-mA
相關文章
- 用立方體色塊造就千軍萬馬之勢,《銀河破裂者》中的AI系統竟是這樣做出來的AI
- 從Ori系列兩代間的變化淺談銀河城類遊戲的復興遊戲
- 《漫野奇譚》大火的背後:淺談程式化敘事生成和戰棋遊戲設計遊戲設計
- 萬物RxJava(1):封裝高德地圖APIRxJava封裝地圖API
- powershell 生成隨機使用者資訊隨機
- 淺談百度地圖API的坑地圖API
- 物聯網的銀河,華為的槳,少年的歌
- C#實現一個萬物皆可排序的佇列C#排序佇列
- 今天談談使用者故事地圖,不是使用者故事地圖
- 智慧城市長文綜述:展望未來城市,萬物皆可運營
- 創意為先,萬物皆可遊戲——睡神飛工作室遊戲
- vmware安裝銀河麒麟V10系統宿主機斷電異常關機銀河麒麟開機報錯
- Python中如何生成隨機數?Python隨機
- 淺談生成函式函式
- 隨機生成使用者資訊(號碼、名字)隨機
- 淺聊程式化世界構建流程
- 圖靈機:萬物皆演算法?圖靈演算法
- 碉堡!“萬物皆可分”標記模型上線「GitHub 熱點速覽」模型Github
- [遊戲]深巖銀河倖存者 --修改實現無敵遊戲
- python生成隨機圖形驗證碼Python隨機
- 生成隨機排列隨機
- 生成隨機數隨機
- 國產化適配——銀河麒麟V10(1)
- [轉帖] 銀河麒麟系統安全機制-KYSEC
- 如何讓玩家擁有獨一無二的故事體驗?淺談程式化生成敘事
- 淺談 PHP 生成器PHP
- python生成隨機數、隨機字串Python隨機字串
- 發售一週售出50萬份 《深巖銀河:倖存者》的火爆有何啟發?
- 《什麼是高爾夫?》:萬物皆可高爾夫的瘋狂遊戲遊戲
- 淺談附近地點搜尋
- vmware安裝銀河麒麟
- 【Javascript + Vue】實現隨機生成迷宮圖片JavaScriptVue隨機
- javascript隨機生成字串,可以用來生成隨機密碼JavaScript隨機字串密碼
- JavaScript 生成隨機數JavaScript隨機
- mysql生成隨機數MySql隨機
- 淺談ES6中迭代器和生成器
- 淺談 iOS 中的檢視優化iOS優化
- 基於隨機定位的地圖資訊獲取方式隨機地圖