Мені подобається, як Епоха Імперій 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 визначеного океану.
Є хороші варіації, і багато в чому це відчувається як реальний світ, але є кілька проблем:
По-перше, до океанських глибин немає візерунка. Ви очікуєте, що мілководдя біля берега та глибоких вод далі, немає жодної рифми чи причини, де саме де
По-друге, вся вода зосереджена в Світовому океані; немає озер чи річок, тому що шум Перліна несподівано знижується до меншої величини посеред континенту.
Створити баланс між кількістю кожного біома дуже і дуже складно. Я приписую це:
Шум Перліна йде за нормальним розподілом, тому оцінити, як відрегулювати ймовірність кожного відображення розмірів, складно
Намагатись збалансувати кілька вимірів важко - можливо, я хочу більше (2,3), тому я збільшую шанси отримати (n, 3). Ну, зараз у мене занадто багато (3,3) і все виглядає неправильно.
Коли я збільшував шум досить близько, щоб мати чіткі дані, я не отримував дуже повний зразок значень Перліна. Тож я б переглянув свої дистрибутиви для карти перед собою, перезавантажую нову випадкову карту і отримую зовсім інші результати.
Я спробував виправити проблеми річок / озер, зробивши воду з третього набору значень Перліна. Бінарне рішення про воду / землю, а потім застосуйте всі перераховані вище речі до землі. Це суттєво полегшує контроль розподілу води (все ще не ідеальний, але кращий), але вводиться проблема, що існує багато переходів біому, які не мають сенсу. Наприклад, незрозумілі плями пустелі посеред пишних пасовищ, снігу на пляжі тощо. Також важко контролювати пропорції сухопутних біомів із зазначених вище причин.
Дивлячись на вищезазначені проблеми, я спробував більш простий алгоритм, який лише відобразив шум Перліна в один вимір. Зараз у мене є масив типів місцевості, що ескалюють від 0 = глибокий океан -> 1 = мілкий океан -> 2 = пляж ... -> N = сніг. Незважаючи на те, що це дає острови та континенти та значно спрощує збалансування пропорцій кожної місцевості, типи місцевості є занадто скупченими. Кожна земельна маса виглядає як карта висот, як правило, без типів місцевості, розкиданих по її поверхні. Кожна земельна маса має приблизно однакові риси, завжди в одному порядку і завжди в однаковій формі кільця.