Как я могу определить характерные регионы в процедурном мире?

26

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

  • В Dwarf Fortress, один из аккуратных аспектов мирового поколения - это то, как игра «узнает» области и дает им названия, хотя они не имеют прямоугольной формы. Я хотел бы иметь возможность "распознавать" мои леса, мои реки, мои холмы ... есть идеи, какой алгоритм я мог бы использовать для сканирования моей карты и интерпретации ее областей? И как бы вы это сохранили? Я использую базовый граф C ++, сделанный из вектора вектора «объекта плиток».

  • Этот остров должен быть разделен на политические районы, а не только чисто природные регионы. Я мог бы использовать горы и реки, чтобы сделать «естественные границы», но моя процедурно сгенерированная карта не гарантирует, что у меня будут хорошие «анклавы», которые сформируют королевство; Я мог оказаться в гигантских «ленточных» политических зонах, окруженных микро-королевствами. Другой возможностью было бы искать подходящие районы для города или замка. Затем «вырастить» политическую область вокруг него. Но опять же, я хотел бы иметь несколько известных алгоритмов, прежде чем пытаться разработать свой собственный.

Этот вопрос может быть истолкован как слишком расплывчатый, поэтому один из его способов перефразировать: как разделить (без изменений!) Процедурно сгенерированный мир на области, подходящие для игрового процесса? Заранее спасибо за вашу помощь.

Raveline
источник
Спасибо за исправление, и извините за плохое качество моего английского :)
Raveline
У вас отличный английский, просто «заголовок» желательно формулировать как вопрос на сайтах StackExchange.
dlras2

Ответы:

21

Амитп предлагает использовать водоразделы для определения различных регионов, как объясняется в его посте о создании полигональных карт . Водоразделы лучше всего увидеть, создав карту, используя его демо . Преимущество использования водоразделов для разделения континентов состоит в том, что они обеспечивают границы, перпендикулярные береговой линии, в то время как горы обычно обеспечивают параллельные границы.

Если бы я подразделял географические регионы, я использовал бы комбинацию гор, водоразделов и обнаружения краев на различных биомах на моей карте.

Я также укажу, что политические регионы обычно охватывают многие географические регионы. Сначала я бы сгенерировал географические регионы, а затем назначил каждому региону рейтинг желательности (это побережье, есть ли золото, есть хорошие сельскохозяйственные угодья?) И стоимость проезда (крутая местность, тяжелые леса?). Затем, используя ваш любимый алгоритм прохождения, создайте тепловая карта путешествий между желаемыми регионами. Они станут вашими дорогами, и вы сможете строить свои политические границы оттуда. Эти границы, как правило, имеют много дорог внутри и меньше дорог между ними.

dlras2
источник
1
Спасибо за помощь. Я уже знал решение Амита, и хотя я нашел его довольно элегантным, я не знаю достаточно о математике позади (я должен был бы изучить их, что я сделаю рано или поздно, но не сейчас!). Размышление с точки зрения водораздела, безусловно, могло бы помочь мне, и настройка алгоритма генерации реки не должна быть слишком сложной. Мне нравится ваше решение для строительства дорог и политических границ, я должен подумать, как именно я собираюсь его реализовать, но идея замечательная!
Raveline
@Raveline - Если вы используете поколение политических границ, прокомментируйте здесь и дайте мне знать! Я хотел бы видеть, как это получается.
dlras2
13

Добавить к ответу Дана Расмуссена :

Одна из основных причин, по которой я переключился с Perlin Noise ( этот проект ) на использование полигонов ( этот проект ), заключается в том, что полигоны обеспечивают некоторую удобную структуру для назначения более крупных областей (политические регионы, леса, пустыни, именованные области, границы и т. Д.). Начать со структуры, а затем сгенерировать карту, похоже на рендеринг полигонов, что относительно просто. Начиная с карты, а затем выводя структуру, похоже на компьютерное зрение, что относительно сложно, но возможно. Мне нужны и структура, и карта, поэтому я решил пойти относительно простым путем построения карты поверх структуры (узлов и ребер).

Уже тогда я обнаружил, что мне нужны более крупные структуры, чем те, которые я создал. Водоразделы были одной из попыток построить эти более крупные структуры, но мне нужно попробовать больше подходов к объединению полигонов. Я не нашел то, чем я доволен.

Я не уверен, как это делает Dwarf Fortress. Учитывая, насколько эти парни великолепны, я не удивлюсь, если у них будет сложный алгоритм «компьютерного зрения».

amitp
источник
Я понимаю причину, хотя я не уверен, что ваш путь так прост ... Так как мой проект довольно скромный, я постараюсь исправить что-то не слишком сложное, но без полигонов, так как это означало бы изучение гораздо большего количества алгоритмов. подразумевается. (PS: ваш сайт - удивительный источник вдохновения, и мне это нравится!)
Raveline
3
статья генерации многоугольной карты была превосходной.
Рейн
3

Что касается вашего первого вопроса, я бы предпочел использовать алгоритм обнаружения краев, чтобы найти границы ваших естественных областей (леса, холмы, ...). Для такого рода проблем существует множество алгоритмов.

Что касается второго вопроса, вы можете использовать свою собственную идею, чтобы породить замок (обычно на вершине холма для хорошей защиты и рядом с пресной водой), а затем использовать алгоритм вороного, чтобы иметь области вокруг каждого замка. Вы можете использовать шум или пределы вашего биома, чтобы сделать границы более реалистичными.

XGouchet
источник