Як я можу генерувати випадкові карти, схожі на випадкові карти Age of Empires II?


18

Мені подобається, як Епоха Імперій II генерує випадкові карти (хороша різноманітність, пристойні переходи біома, карти відчуваються випадковими, не відчуваючи хаотичності), але я намагаюся повторити стиль. Я намагався використовувати, наприклад, Perlin-шум, але все виходить або занадто однорідним, або, як ні, значення Perlin -> евристика рельєфу надто чутлива і неміцна, щоб створювати різноманітні світові типи.

Я пам'ятаю тип карти AoE2 "Невідомий" рекламував "100 000 можливих карт", пропонуючи деяке використання номерів насіння, але я не впевнений, як використовувати номери насіння для отримання сорту, який я бачив.

Які алгоритми та евристики я можу використати для створення випадкових карт, які мають вигляд випадкових карт AoE2?

Редагуйте, щоб бути більш конкретними:

Думаючи далі про мою проблему та вивчаючи те, що мені подобається у двигуні випадкових карт AoE2, я вважаю, що моя найбільша проблема - управління розподілом води та життя рослин на карті . Тепер я бачу, що я це також пов’язав з моїми "переходами біома, які мають сенс", але це вже інша проблема (хоча я сподіваюся, що моє подальше використання шуму Перліна зробить його складним вирішити).

Я додав кілька випадкових карт AoE2, які підкреслюють те, що мені подобається у їхньому механізмі картографування, який мої власні зусилля не вдається відтворити. Усі скріншоти взяті з випадкових типів карти, "Користувацькі" -> "Невідомі". Я не вказував грі використовувати такі географії, як архіпелаги.

Далі нижче - зображення з мого власного двигуна карт. Кожен піксель відповідає одній плитці карти AoE2.

Одним із ускладнень для мого проекту є те, що я хочу, щоб карти були в багато-багато разів більшими, ніж карти AoE2. Таким чином, будь-який двигун, який я використовую, повинен мати можливість створювати весь діапазон біомів на кожній карті, а не один вузький набір біомів на карті, як, наприклад, AoE2.

Карти вік Імперій II

Внутрішні озера

Ось приклад, в якому представлені внутрішні озера та деякі речі, що шукають річки. Мені подобається, як карта включає велику кількість води, розкиданої навколо, але ця вода все ще дещо сконцентрована - є великі ділянки землі, які доступні для побудови вашої імперії. Вам не доведеться витрачати всю гру, плануючи своє місто навколо води.

Сполучені острови

Ось подібний приклад, коли гра була достатньо розумною, щоб з'єднати острови з прохідними болотами. Я не уявляю, як алгоритм, заснований на шумі, створив би там болота, і лише ті місця. Також зауважте, як гра створила землю таким чином, що у кожного гравця є своя приватна велика ділянка землі для початку. Це не створило випадкових патчів землі, а тоді найкраще здогадайтеся, з якого з них було б найменш страшно для кожного гравця.

Острови

Мені подобається, що ця карта також сильно використовує воду, але не включає багато внутрішніх озер. Контрастуйте його з першим зображенням. Мені подобається, як AoE2 створює абсолютно різні географії, використовуючи одні й ті ж будівельні блоки. Моя спроба використання шуму Перліна тут зазнала невдачі - я отримую величезні океани, що розтікаються, що карликують наземну масу, або Землю 10 000 озер. Мені також було важко дістати як острови, так і з'єднані континенти (думаю, Північна / Південна Америка).

Сухий, пишний Сухий, пустельний

Контрастуйте це зображення з зображенням над ним. Вони показують, що посушливість карти не залежить від рівня води. На першому зображенні представлена ​​карта, яка майже позбавлена ​​води, але містить ліси та траву. На другому зображенні є помірна кількість води, проте це пустеля. Мені подобається, що це можливо (подумайте, у Вашому світі є і Нью-Мексико, і Сахара, і Коста-Ріка).

Мої власні карти

Я читав у багатьох місцях, що хороший спосіб побудови карт - це нанесення шарів на кілька рівнів шуму Перліна, кожен з яких представляє різний вимір даних. Дотримуючись популярних рекомендацій, я пішов з підняттям і вологістю, вибравши типи місцевості з таблиці Whittaker тут .

Я взяв дві перлін-карти, кількісно оцінив значення кожного з цілих чисел за допомогою простого if perlin_val < x { i=some_int } else if perlin_val < y..., а потім зіставив цілі пари (висота, вологість) в таблицю типів місцевості (наприклад, [1,0] -> тропічна пустеля, [1,1 ] -> луки). Океани були включені в цю систему - висота = 0 визначеного океану.

g1_success

Є хороші варіації, і багато в чому це відчувається як реальний світ, але є кілька проблем:

  • По-перше, до океанських глибин немає візерунка. Ви очікуєте, що мілководдя біля берега та глибоких вод далі, немає жодної рифми чи причини, де саме де

  • По-друге, вся вода зосереджена в Світовому океані; немає озер чи річок, тому що шум Перліна несподівано знижується до меншої величини посеред континенту.

  • Створити баланс між кількістю кожного біома дуже і дуже складно. Я приписую це:

    • Шум Перліна йде за нормальним розподілом, тому оцінити, як відрегулювати ймовірність кожного відображення розмірів, складно

    • Намагатись збалансувати кілька вимірів важко - можливо, я хочу більше (2,3), тому я збільшую шанси отримати (n, 3). Ну, зараз у мене занадто багато (3,3) і все виглядає неправильно.

    • Коли я збільшував шум досить близько, щоб мати чіткі дані, я не отримував дуже повний зразок значень Перліна. Тож я б переглянув свої дистрибутиви для карти перед собою, перезавантажую нову випадкову карту і отримую зовсім інші результати.

х-окремо-вода

Я спробував виправити проблеми річок / озер, зробивши воду з третього набору значень Перліна. Бінарне рішення про воду / землю, а потім застосуйте всі перераховані вище речі до землі. Це суттєво полегшує контроль розподілу води (все ще не ідеальний, але кращий), але вводиться проблема, що існує багато переходів біому, які не мають сенсу. Наприклад, незрозумілі плями пустелі посеред пишних пасовищ, снігу на пляжі тощо. Також важко контролювати пропорції сухопутних біомів із зазначених вище причин.

Одновимірний збій

Дивлячись на вищезазначені проблеми, я спробував більш простий алгоритм, який лише відобразив шум Перліна в один вимір. Зараз у мене є масив типів місцевості, що ескалюють від 0 = глибокий океан -> 1 = мілкий океан -> 2 = пляж ... -> N = сніг. Незважаючи на те, що це дає острови та континенти та значно спрощує збалансування пропорцій кожної місцевості, типи місцевості є занадто скупченими. Кожна земельна маса виглядає як карта висот, як правило, без типів місцевості, розкиданих по її поверхні. Кожна земельна маса має приблизно однакові риси, завжди в одному порядку і завжди в однаковій формі кільця.


Я не впевнений, що хтось, хто не входить до команди розробників, справді не зможе відповісти на ваше запитання, але я б припустив, що насіння набагато нижче, ніж ви очікували. Насіння майже напевно генерує різні карти в залежності від типу базової карти, і включення їх усіх у будь-яку комбінацію є, швидше за все, тим, що дозволяє досягти 100 000.
Маг

Це питання видається поза темою, оскільки воно вимагає детальних відомостей про впровадження конкретної вже існуючої гри, а не про створення гри.
Тревор Пауелл

@TrevorPowell Переглянувши вказівки щодо тематичних питань для цього сайту, я переформулював це питання.
spiffytech

Ви опублікували цю редакцію приблизно через десять секунд після мого коментаря. Тепер це послуга! ;)
Тревор Пауелл

1
-1 Я все ще занадто широкий, я думаю. Вам потрібно конкретизувати, що означає "карти, які відчувають себе". Для того, щоб відповісти на це запитання, потрібні конкретні приклади того, про що ви говорите. Процедурне покоління, більш мистецьке, ніж люди часто думають, що воно є. Творчість та сприйняття мистецтва - це суб’єктивна тема. Виберіть конкретну річ, на якій хочете зосередитися, і запитайте лише про це. Обсяг цього питання наразі дуже широкий.
MichaelHouse

Відповіді:


9

Ознайомтеся з чудовою статтею Amit Patel, яка, на мою думку, є своєрідним ресурсом для процедурного генерування місцевості ...

http://www-cs-students.stanford.edu/~amitp/game-programming/polygon-map-generation/

Головне, що він робить, - це використовувати структуру графіків для моделювання своєї місцевості, а не прямі карти шуму (Перлін та ін). Я не буду вставляти його ілюстрації, але прочитаю статтю, і, думаю, вам стане в нагоді роздумувати про інший підхід.

Якщо ви робите гру типу CIV / AOE, розміщення ресурсів буде важливим. Ви не можете мати ключові ресурси надто рідкісними, або висококласні, або занадто поширеними. Якщо ви вважаєте, що кожен багатокутник є зоною із заданою характеристикою (див. Ілюстрації статті, це матиме більше сенсу), я міг би бачити присвоєння ресурсів кожному багатокутнику на основі певного алгоритму на ваш вибір. Ви можете стати досить розумним, зробивши ресурси на полігоні статистично упередженими сусідами, так що ліс поруч із пустелею може бути рідкісним, але ліс поруч із пасовищами більш поширений, наприклад.


2
Посібник Аміта створює надто реалістичну місцевість для Епохи Імперій. :)
Сет Беттін

Так, правда. Але основна концепція використання осередків різної величини (де кожна є певним типом рельєфу) буде добре працювати, як я думаю. Вилучіть із рівняння ідею висоти місцевості.
Тім Холт

Я переглянув статтю Аміта, але вона занадто щільно оптимізована навколо одного острова. Зробити висоту простою функцією відстані від берега призведе до незграбних результатів з кількома островами чи більшими континентами, і його метод розподілу води передбачає помітний пік у ландшафті, який врешті-решт тече до океану. Якби я знімав висоту місцевості зі схеми Аміта, я не знаю, як адаптувати його ідею щодо розподілу біомів до мого проекту.
spiffytech

5

Я створюю сценарії випадкових карт для Age of Empires 2 . Моя сама остання - це версія HD.

Якщо ви хочете зрозуміти, як створити карти для Age of Empires 2, є чудовий посібник з RMS (Random Map Scripting) .

Age of Empires використовує експертну систему, що дозволяє сценаріям писати підпрограми за правилами генерації, з яких можна багато чому навчитися. Що стосується регіонів, то я думаю, що це був би випадок маскування областей та відповідного застосування різних сценаріїв / процедур до маскуваних областей. Ви можете легко побачити правила генерації існуючих скриптів карт, відкривши їх у текстовому редакторі. Я пишу свою в Блокнот

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.