В этом посте RPG.SE упоминается давно потерянная страница с несколькими онлайн-генераторами.
Мне особенно любопытно, как возникли города. Возьмите это изображение, например:
Хотя многое можно улучшить с точки зрения графики, это было очень хорошо, если учитывать инструменты, доступные в то время (с середины до конца 90-х):
- Схема дороги выглядит довольно органично (даже если учесть, что все дороги расположены ортогонально).
- Не все дороги обязательно связаны, но это кажется правильным .
- Здания размещены в правдоподобных местах.
- Даже деревья, кажется, расположены в логических точках .
Думаю, было бы интересно попробовать и попробовать самому. Тем более что мои предыдущие попытки были слишком "блочными":
Вы заметите, что я описываю многие качества не совсем измеримыми прилагательными ( кажется , кажется , правдоподобными и т. Д.), Поэтому мне трудно переводить их в инструкции и, в конечном итоге, в алгоритм.
Есть ли проверенные алгоритмы для генерации городов?
Я понимаю, что это кажется слишком широким, поэтому подумайте: если бы я попросил алгоритм для генерации карт континентальных массивов суши, я бы сразу получил ссылки на Perlin и другие алгоритмы шума; внимательно следит за вороной.
Я видел такие вопросы , как этот , но они , кажется, имеют более конкретное представление уже в виде (например: 2х2 дом, фиксированное количество домов, каналы и размещение дороги ограничений).
То, что я хотел бы иметь, является чем-то менее ограниченным. За исключением, может быть, компоновки сетки, которая с первой попытки должна быть намного проще, чем, скажем, L-система.
Ответы:
Introversion Software сделали действительно впечатляющий городской генератор для своего
отмененного нанеопределенный срок проекта Subversion :Алгоритм предназначен для генерации крупных современных метрополий. Но те же самые методы могут использоваться, чтобы произвести больше сельских поселений.
Это нисходящий алгоритм, который сначала генерирует грубые контуры, а затем генерирует все больше и больше деталей, чтобы в них вписаться (для обратного восходящего подхода к процедурной генерации проверьте ответ по неуверенности). Вот видео, которое визуализирует алгоритм в процессе .
Алгоритм работает следующим образом (слегка упрощенно):
Относительно размещения деревьев. Мой первый подход - интегрировать их в алгоритм генерации здания. Зданию не нужно заполнять свой участок полностью. Вы можете заполнить свободное пространство соответствующими декоративными предметами.
Проблема с нисходящим подходом состоит в том, что, хотя он может создать правдоподобный город, он может не создать правдоподобный город со всем, что вы хотите . Допустим, каждому городу в вашей игре нужен один магазин оружия, один магазин брони, один магазин зелий и одна гостиница. Приведенный выше алгоритм выбирает здания в зависимости от требований участка, так что вы можете получить 12 магазинов брони, но не одну гостиницу. Я бы подошел к этой проблеме на этапе генерации здания. Прежде чем вы начнете генерировать здания случайным образом, просмотрите список обязательных зданий и выберите наиболее подходящий участок для каждого из них. Затем заполните оставшиеся участки рандомизированными зданиями.
Я с нетерпением жду знакомства с процедурно созданными городами в вашей игре.
источник
Получить ограничения из реальной жизни
Часто ответ о том, как найти правильный алгоритм, начинается с рассмотрения того, как это происходит в реальной жизни. Вы смотрели на это? Сверху головы я могу думать о следующем:
Примените их к вашей топографии
Если у вас есть эти ограничения, вы можете попытаться построить алгоритм вокруг него. Например, создайте свою топографию и распределите необходимые ресурсы по всей карте (возможно, следите за размещением небольших месторождений наиболее важных ресурсов в стартовой зоне, а затем более крупных месторождений дальше и друг от друга). Это, конечно, когда в игру вступают нужды и механизмы вашей игры, но вы, вероятно, также добавите случайный элемент.
Затем постройте предприятия (и их жилые дома) рядом с теми ресурсами, которые их используют. Например, карьер рядом с большой горой. Затем добавьте необходимую им инфраструктуру. Например, торговый пост с почтовым отделением и таверной, где они могут вести бизнес и продавать свой продукт, кузница для предоставления инструментов и т. Д.
Чтобы решить, что и куда делится, разбейте карту на плитки, где вы рассчитываете число для каждой плитки, насколько это желательно для определенной цели, используя весовую функцию. Поместите здания в наиболее желательные плитки для этого типа здания. Добавьте правила типа «один торговый пост может обрабатывать 50 предприятий или 100 домов», что увеличивает вероятность добавления другого торгового поста, если город достигает определенного размера.
Получив это, вы должны получить несколько приличных карт. Если вы заметили, что все карты заканчиваются как неестественные фигуры, добавьте штрафы к своим весовым функциям для этих фигур, например, «если моя улица заканчивается рядом с другой улицей, -100 желательность» или «если моя улица пересекает себя, -100 желательность "и т. д. Вы всегда можете добавить случайный элемент, чтобы придать этому более причудливый вид, или добавить другую механику, например," если к перекрестку подключено более N зданий, то превратите его в перекресток с круговым движением ".
Вы можете даже использовать эти ограничения, чтобы придать разным картам разные ощущения, например, чтобы у определенной страны было больше гор в топографии, или чтобы определенная культура строила больше извилистых дорог, а другая предпочитала прямые дороги и т. Д. Все, просто изменив одну из своих весовые функции.
Упростить
Конечно, этот подход слишком сложен для игр, которые не являются торговыми симуляторами, но в любом случае решите эту проблему и посмотрите, какие типы зданий имеют смысл для вашей игры, и исключите ненужные. Затем придумайте упрощенные правила, такие как «размещать города рядом с рекой, горой или хорошей почвой. 1 здание на 100 ресурсов, предприятия на основе типа ресурса, 10 жилых зданий на каждый полный набор продуктов питания / крафта ... или просто» 1 м реки / 1 м 2 почвы может поддерживать 10 жилых зданий ... все, что имеет смысл для игры. Тем не менее, как только вы узнаете, сколько у вас территории (например, нет зданий на крутых склонах гор) и сколько зданий эта территория может поддерживать, просто разместите наборы зданий в этой области, пока она не заполнится (например, 1 бизнес-здание, 10 жилых домов , 3 инфраструктуры, или что угодно) и соединить их с дорогами
источник
Have you looked into that?
Я имею. Ну, вроде (я не мог придумать много «реальных правил»). Но это довольно откровенно по сравнению с моими предыдущими попытками: я не смог распознать ресурсы, которые я не мог бы привлечь (то есть: есть лес на востоке ... независимо от того, рисую я его или нет).