В больших процедурных пейзажных играх земля кажется скучной, но это, вероятно, потому, что реальный мир в значительной степени скучный, только с ограниченными местами, где пейзаж драматичен или тактичен.
Если взглянуть на мировое поколение с этой точки зрения, генератор ландшафта для игры (то есть не ради пейзажа, а ради игрового процесса) должен не следовать правилам ландшафтного дизайна, но вместо этого некоторые правила должны сочетаться с ожидания геймера. Например, может существовать дроссельная точка / генератор маршрута, который создает холмы, ущелья, реки и горы между городами, а не естественные пути возникновения городов, разбросанные по земле на основе ресурсов или условий, создаваемых горами и схемами осадков.
Есть ли какая-либо существующая работа, выполняемая таким образом? Начать с городов или населенных пунктов, а затем добавить в местности?
Причина, по которой я спрашиваю, состоит в том, что я ранее задумывался над тем, чтобы взять существующие карты из фантастической фантастики (моей и других), поместить информацию в систему в качестве базовой точки, а затем создать хороший мир для игры на ней. Это, кажется, покрыто существующей технологией, то есть, когда разработчик вводит всю необходимую информацию, такую как население города, ресурсы, биомы, дорожные сети и реки, затем позволяет PCG заполнить пробелы.
Но теперь мне интересно, возможно ли, чтобы генератор контента генерировал общий дизайн. Создайте города и населенные пункты, уравновесив их таким образом, чтобы возникла естественная кажущаяся потребность в торговле, затем сгенерируйте позиции и возможности подключения, затем из типа города составьте список необходимых ресурсов, которые должны быть поблизости, и только тогда, может быть, дано некоторые правила о том, как сделать путешествие между городами как правдоподобным, так и интересным, сгенерировать окончательное содержание, включая дороги, точки дросселирования, мосты и туннели, паромы и местность, включая необходимые биомы и береговую линию.
Если бы это было сделано раньше, я хотел бы знать, и хотел бы знать, что пошло не так, а что пошло правильно.
источник
Ответы:
Вот отличный пример процедурной генерации рельефа с использованием таких параметров, как влажность, высота и т. Д. Http://www-cs-students.stanford.edu/~amitp/game-programming/polygon-map-generation/
источник
Я полагаю, что я пристально смотрел на этот вопрос в течение последних трех дней, задавая себе вопрос, как процедурное поколение миров или даже галактик может быть в то же время детерминированным (например, всегда генерировать одно и то же содержимое из одного и того же семени ), выглядят естественно, и все же имеют уникальные, интересные, необычные или даже красивые черты в своем ландшафте.
Я продолжаю возвращаться к тому же общему ответу, что это сильно зависит от жанра игры и ее собственной внутренней непротиворечивой истории в истории. Например, постапокалиптический жанр, зачем кому-то строить мегаполис с массивными стенами посреди пустоши и заставлять всех в нем жить несчастно? Зачем колонизировать такие планеты? В высокой фантазии зачем строить город на вершине плавучего острова? Почему гномы строят города в горах? А твой злой враг родом из огненной земли с действующими вулканами? Правило Круто?
Таким образом, все возвращается к вашему собственному ответу, где вы вводите информацию в PCG, и он заполняет пробел, а также к другому ответу о создании миров, которые соответствуют линиям сюжета и общей истории.
Таким образом, сюжет генерирует элементы игрового процесса, который генерирует подходящий ландшафт.
Тем не менее, мне интересно, создаст ли сюжет, который генерирует дерево последовательных сюжетных линий, общий дизайн геймплея, который вы ищете.
(PS: эти те же три дня размышления также заставили меня прийти с другим ответом на проблему, которая может возникнуть: должен быть автоматизированный инструмент тестирования, чтобы проверить, является ли сгенерированный игровой дизайн здоровым, например, у вас должна быть средневековая армия с трудом время победить сформировавшуюся крепость)
источник
Единственным документом, посвященным схожим вопросам, который я мог найти на месте, является « Алгоритм автоматизированной фрактальной деформации рельефа » Стачняка и Штюрцлингера . Предполагается, что вы сначала создаете ландшафт и деформируете его (или, точнее, алгоритм выбирает параметры для автоматического деформирования), чтобы потом соответствовать вашим ограничениям, поэтому он не отвечает на вопрос напрямую. Тем не менее, методы, представленные в нем, могут оказаться полезными для других с аналогичными проблемами.
источник
Разве такой алгоритм не будет автоматически генерировать больше «тактического» ландшафта, когда дороги создаются между городами?
Предполагая, что дороги могут иметь только определенное изменение высоты на расстоянии, высота ландшафта будет адаптирована к высоте дороги, что приведет к возникновению удушающих точек всякий раз, когда дорога проходит через холм / овраг / что угодно. Конечно, величина изменения высоты ландшафта тоже должна быть ограничена, иначе дороги будут проходить прямо через самые высокие пики.
источник
Когда я был в Cryptic Studios, мы работали над чем-то вроде этого для генерации миссий / квестов. Разработчики задали цели миссии несколько абстрактно, и они с некоторой случайностью изложили их в «порядке перемещения игрока» и проложили пути между ними.
Ранняя версия поставляется вместе со Star Trek Online как Genesis Missions (архив) . В то время мы были очень взволнованы этим, но я понятия не имею, сколько это продолжалось после того, как я ушел, или доступно ли это в инструментах Foundry для конечного пользователя. (Какая была конечная цель.)
источник
Типичный подход к процессуальному формированию рельефа заключается в том, чтобы рисовать конкретные элементы вручную и использовать генератор для заполнения остальных. У VTerrain есть что-то интересное по этой теме.
источник
Lighthouse 3D имеет хороший обзор некоторых простых алгоритмов генерации ландшафта. Если вы начинаете с карты, которая содержит города или другие интересные области, вы можете использовать некоторые из этих методов для создания любой местности, которую вы хотите. Например, разумное использование алгоритма разлома может быть использовано для создания обрывов или долин вокруг вашего города, которые будут действовать в качестве задыхающихся точек. Кроме того, использование алгоритма окружности было бы отличным способом для создания местности для размещения башни. Это всего лишь несколько примеров, но использование этих простых алгоритмов было бы довольно простым способом создания интересного ландшафта вокруг ваших городов.
источник
Может быть, я упрощаю, но зачем игнорировать тот факт, что города построены на выгодной местности, или, если на то пошло, любого размера цивилизованного района по любой причине? Возможно местность предлагает тактическое преимущество для военного взноса или возможно есть лесопильный завод на пересечении большого леса и реки, у которой есть более крупная деревня ниже по течению. Даже «святые» места основаны на местности, даже если по той простой причине, что этот конкретный участок земли в какой-то момент считался святым и т. Д. Независимо от того, каковы последствия, окончательное место отдыха подавляющего большинства цивилизации существует в физическое место по очень наземным причинам. Даже в случае роста города просто потому, что между двумя более крупными городами происходит достаточно торговли, чтобы гарантировать посреднику, если хотите, расположение этого города будет выбрано на основе пути наименьшего сопротивления. Он был бы размещен где-нибудь, чтобы предлагать хорошие плоские сельхозугодья для местного снабжения продовольствием в сочетании с землей, которая хорошо подходит для строительства дорог. Я уверен, что вы думали об этом ...
Итак, если вы собираетесь строить города в первую очередь, конечно, почему бы и нет? Почему бы не построить город, деревню, поселок или что-то еще, вместе с приличным участком окружающей местности, построенным вручную, который поддерживает такое учреждение?
Возьмите процедурные биомы в качестве примера. Они обычно применяются к псевдослучайным картам температуры, влажности и высоты. Если вы уже спроектировали город (или лесопильный завод и т. Д.), То, скорее всего, у вас есть четкое представление о том, как должна выглядеть земля, что, если я не ошибаюсь, именно ваша точка зрения. Возьмите фантастическое здание, такое как Orthanc, изобилующее планами этажей и окружающей местностью, которые вы покорно воспроизвели. Ну, мы знаем, что в зависимости от временной шкалы Ортханк был окружен огромным лесом, заполненным энтами (древовидными существами) и т. Д. Если вы пытаетесь повторить это, то применение случайной местности не имеет смысла для меня. Тем не менее, как только вы создали эту обстановку для самой башни и окружающего леса, что находится между Ортханком и каким бы ни был ваш следующий город?
Простым подходом может быть написание процедурной генерации рельефа, размещение настроек внутри случайно сгенерированной системы рельефа и перетаскивание своих высот вокруг ваших фиксированных настроек и альта, в которых вы можете разместить Ортханка во многих различных случайно сгенерированных мирах (если это то, что вам нужно).
Тем не менее, я думаю, что вам лучше всего использовать комбинацию обстановки, рельефа и определенного биома, а также убедиться, что Ортханк будет помещен в процедурно генерируемый большой лесной биом. В зависимости от того, как вы его кодируете, вы можете установить минимальный / максимальный биом, местность, влажность и т. Д. Для каждой предварительно определенной настройки, здания или города, которые вы создали. Будет ли это небольшая задача в полноценном фотореалистичном трехмерном мире? Очевидно нет.
Я думаю, что если бы я попытался это сделать, я бы сначала исследовал процедурные алгоритмы береговой линии. Принимая подход, что почти все цивилизации на протяжении всей истории следовали любой береговой линии, будь то океан, море или большое озеро. Это путь наименьшего сопротивления для роста, так как там, вероятно, много рыбалки, поблизости деревья для дров, и, конечно, более быстрое путешествие даже при зачаточном плавании (по крайней мере, в одну сторону).
Я думаю, что вам придется строить полностью задом наперед. Подумайте, псевдослучайные точки на карте, представляющие точки цивилизации, возможно, с помощью алгоритма шума, определяющего популяции этих цивилизаций, прежде чем что-либо еще будет определено. Итак, 1 балл присуждается населению 1000, еще 2 000 000 (или любому другому соотношению, в зависимости от вашего населения мира, конечно). Зачем? Почему эти числа населения там? Население в 1000 человек может быть небольшим сообществом лесозаготовительных предприятий. Возможно, это сообщество майнинга, если оно находится на северной стороне карты, если вы создаете сферический трехмерный мир. Здесь становится немного нечетко, потому что я не знаю, движетесь ли вы бесконечно во всех направлениях, делая NESW бессмысленным в определении биомов, или если вы хотите очень настоящую «Землю»
Однако, если вы столкнетесь со своими цивилизациями, основываясь на псевдослучайных популяциях шума, я думаю, что мы можем смело предположить несколько правил (но, возможно, не абсолютных), таких как ... Чем больше цивилизация, тем больше вероятность того, что большее количество полезных ресурсов на рука и местность, чтобы поддержать их. Должны присутствовать драгоценные минералы, лес и т. Д. До тошноты, или должна существовать огромная торговая система для поддержки такого огромного предприятия. Исходя из этого, вы можете начать создавать автомагистрали из города в город и дороги в отдаленные населенные пункты, такие как глубокая добыча полезных ископаемых и т. Д. Выберите точки цивилизации, которые бы сформировали хорошие береговые линии и полностью отбросили точки населения с карты, где вам нужно заполнить океаны (или, может быть, у вас есть Атлантида в вашем мире, или морские нефтяные учения).
Заполнение промежуточной местности снова полностью зависит от вашего подхода к биому. Если у вас есть бесконечное в каждом направлении мире, тогда положите Orthanc вниз, где бы он ни подходил для населения, выньте его в лесной биом и строите вокруг него наружу, пока вы не доберетесь до половины до вашего следующего заданного пункта назначения, который ваш алгоритм выполняет ту же процедурную генерацию около. Lerp / Смешайте две местности вместе, когда они встречаются, и да, это очевидное упрощение.
Без реального рабочего знания того, что вы на самом деле пытаетесь выполнить механически, я могу выбросить только идеи и, возможно, плохие. Я думаю, что у вашего подхода есть свои достоинства, даже если он действительно фантастический в реальности, потому что вы нацелены на то, что всегда является самым важным фактором в любой игре: развлекается ли игрок? Или я создаю случайный мир, который не скучен и, следовательно, не весел?
Что также может стать интересным, и это может быть частью поколения цивилизаций в любой игре, в первую очередь на местности или нет, что произойдет, если вы сбросите 2 больших города рядом друг с другом? Что это означает? Они на войне? Являются ли они массовыми торговыми операциями между двумя процветающими странами? Какие враги прячутся в лесах этой лесопилки?
Я думаю, что одно можно сказать наверняка, если вы пытаетесь построить ландшафт на основе «городов», и это то, что население этого города будет напрямую зависеть от ландшафта и природных ресурсов (и, возможно, даже от красоты).
Я не уверен, действительно ли я ответил на что-либо или это было уместно, но это очень интересная концепция, и я хотел бы услышать, куда вы направляетесь.
источник
Я бы сгенерировал игровые возможности одновременно как часть одного и того же процесса. Есть несколько способов построить ландшафт на основе правил. Этот разговор на YouTube от разработчиков Path to Exile является довольно хорошим примером: https://www.youtube.com/watch?v=GcM9Ynfzll0 . Кроме того, для менее заранее подготовленного подхода это выглядит интересно: https://www.youtube.com/watch?v=RAtdFKiqs34 . Вы можете использовать перлин-шум для генерации высот для каждой вершины вороной и идти оттуда
источник