Развитие Terrain Generator

12

Я только недавно задал этот вопрос, и, похоже, был сделан вывод, что использование генетического программирования ( GP ) для создания процедурного игрового контента на самом деле не было сделано. Я хочу изменить это.

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

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

В двух словах:

  • Как бы вы представили генератор ландшафта таким образом, который можно разобрать в дерево?

  • Какую местность это должно создать? (карта высот, граф вершин, ...)

    Чем меньше это основано на карте высот, тем лучше.

  • Что будет использоваться для оценки пригодности решения?

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

Алекс Шепард
источник
1
Я действительно чувствую, что вы не хотите GP для этого, но GA. Например, алгоритмы создания шума действительно трудно генерировать на лету, и было бы сложнее создать фитнес-функцию, чем создать систему, которая ее удовлетворяет. GA больше подходит для настройки параметров существующей системы.
DampeS8N
GP делает интересные решения, о которых люди никогда не задумываются. Вот что я ищу. GP трудно использовать, и это, вероятно, не лучший способ использовать это в отрасли, но он показал бы некоторую принципиальную осуществимость, если это окажется.
Алекс Шепард

Ответы:

11

Вам может повезти с подходом, похожим на генетические образы Карла Симса .

Он использует простой набор операторов в LISP-подобном языке, так что любой выход оператора может использоваться для воздействия на изображение, аналогично некоторым языкам шейдеров (т. Е. Скаляр будет значением серой шкалы, a vector3будет RGBи т. Д.). ).

Хотя я предполагаю, что это материал для реализации, так что вы, вероятно, хотите его ключевые слова, которые (iirc) содержат все основы:

  • тригональные функции ( sin, cos, tanи т. д.)
  • положение ( x, y)
  • основные математические операторы ( sqrt, pow, abs, inverse)
  • шумовые функции ( fBm, noise2, noise3)
  • другие фракталы ( mandelbrot, julia)
  • функции интерполяции ( lerp, quad, step, smoothstep)

(Некоторые из вышеперечисленных могут быть не в его реализации; я нашел его работу очень давно и на самом деле несколько лет пытался описать то, что вы описываете - поэтому воспоминания могут протекать :)

Держать это интересно (и быстро)

Мне повезло с многослойным подходом, который значительно уменьшил количество мертвых эволюций.

  1. набор диапазонов генерируется для каждого оператора (или мутирует из предыдущих раундов)
    • они в идеале сохраняют значения в «нормальном» диапазоне для каждой функции, но могут развиваться в диапазоны, которые дают удивительно полезные результаты, что кажется «правильным» решением
  2. генерировать несколько деревьев алгоритмов
    • для каждого из них создайте несколько карт высот в случайных положениях и оцените пригодность
    • если у нас много хороших совпадений, то немного развейте эту ветвь, слегка нарушая диапазоны с шага 1 у каждого ребенка
    • в противном случае, у нас, вероятно, плохие диапазоны, вернитесь к шагу 1

Тем не мение...

Теперь я удобно пропустил алгоритм пригодности , я в основном использовал подход «неестественного отбора» Карла Симса, когда вы видите текущее поколение в центре квадрата группы потомков (популяризируемых Kai Power Tools в те дни - вот образ того , что я имею в виду ) ..

Однако, возможно, у вас может быть набор обучающих изображений, возможно, некоторые из спутниковых изображений и несколько искусственных изображений с особыми качествами, а затем, возможно, использовать вейвлет или 2D БПФ-анализ на них в сравнении с местностью, которую вы тестируете?

Это интересная тема, но я сомневаюсь, что вам нужно было ответить на :)

РЕДАКТИРОВАТЬ: ааа. пришлось удалить кучу ссылок, потому что я новый пользователь: - |

Пентапхоб
источник
Кажется, это приводит к тому же, что и я: алгоритмы предназначены не для постоянной случайной генерации контента, а для обучения генерации к единому или ограниченному набору результатов ... и все же требует, чтобы человек делал выбор.
Джеймс
Из того, что я могу понять, пригодность должна быть основана на некотором статистическом анализе результатов. Факторы, которые я мог бы придумать, - это величина дисперсии внутри одного сгенерированного ландшафта, усредненная по некоторому количеству сгенерированных ландшафтов (максимизировано), и значение стандартного отклонения (минимизировано, для устойчивости дисперсии). Но тогда, я думаю, нам нужно было бы максимизировать среднее изменение высот между любыми двумя сгенерированными ландшафтами.
Алекс Шепард
1
@ Алекс, возможно, эта статья тоже будет интересна. Я полагаю, что если вы включите некоторые из упомянутых техник с ног на голову, вы можете использовать их для руководства фитнесом. (Или это может быть просто то, что вы хотите :)
Pentaphobe
@phobius Вах! Здорово. Мне нужно изучить это еще немного, но это выглядит действительно многообещающе. Теперь, чтобы превратить это в проблему поиска ...
Алекс Шепард
2

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

  • Вы захотите выбрать поколение ландшафта, где некоторые его аспекты могут быть просто основаны на значениях данных. Это не сложно сделать, но вам нужно выбрать поколение местности. Так как область, в которой я работаю, связана с генерацией вокселей, такие вещи, как частота дискретизации, проходы через туннелирование, уровни возвышения и т. Д., Могут быть предметом, который можно поместить в данные и «развить».
  • Вид идет рука об руку с первой частью. На самом деле не имеет значения, с какой формой генерации вы идете, если вы можете установить различные свойства для нее. Этот выбор должен иметь больше общего с типом игры, которую вы хотите сделать.
  • Вот где это ломается. Я не могу придумать способ измерить это в стороне от Человека, который действительно смотрит на мир и говорит: «О, это мило». Но это устраняет компьютер, делающий его собственную итерацию. Это также подразумевает, что вы собираетесь использовать эту форму поколения, чтобы в конце концов создать единый мир, каждый раз ища «лучший», а не случайный.

Генетические алгоритмы обычно используются для решения известной проблемы, где вы можете определить среду с помощью правил. Затем вы можете создавать наборы данных, которые представляют различные свойства, которые влияют на то, как вещи реагируют на правила. Затем компьютер воспроизводит «раунд» с исходным набором данных, выбирает верхнее число X, смешивает их значения после их объединения и выполняет еще один раунд. Типичным примером этого является «разведение лучшего тролля» (выполнение разведения в найти набор ценностей, в которых тролль обычно очень хорошо себя чувствует в своей среде (способен охотиться и есть, убивать или держаться подальше от жителей деревни, может собирать добычу и собирать все блестящие предметы, которые ему нужны, и т. д.).

Я просто не уверен, что то, что вы пытаетесь достичь, применимо в области создания ландшафта. Единственное, что я могу придумать, - это оценки игрового контента, в которых вы не хотели планировать мир, но хотели создать такой, в котором путь ИИ может быть точно рассчитан или что-то в этом роде. Однако даже при этом вы ищете один или, по крайней мере, ограниченный набор миров.

Джеймс
источник
Ах ... Я думаю, что вы путаете эволюционные алгоритмы с генетическими программами. Эксперты используются для оптимизации и настройки входов в алгоритм. ГП используются для построения самого алгоритма, и это то, что я ищу. Хороший ответ, хотя. Как примечание: эти ландшафты не должны быть реалистичными, просто интересными.
Алекс Шепард
Если вы не можете определить «интересное» программным способом, то у вас возникнет проблема, на которую я пытаюсь ответить в ответе.
Джеймс
0

Какую местность это должно создать? (карта высот, граф вершин, ...)

Определенно вершинный граф (сетка), он компактен в плане хранения и может быть растеризован (тесселярован) по требованию.

Как бы вы представили генератор ландшафта таким образом, который можно разобрать в дерево?

Клеточные автоматы. Я могу думать о двух реализациях:

  1. Автоматы с набором правил, возможно, с элементами конечных автоматов (когда учитывается текущее состояние, такое как счетчик попыток или время простоя).

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

Сам набор правил может быть представлен как дерево решений ветвления или простой пакет команд (не уверен, что это будет работать)

Это просто один набор правил для каждого узла

  1. Мир-строители. Вместо того, чтобы применять решатель для каждого отдельного узла, вы можете создать только несколько из них и позволить им перемещаться по сетке.

    • У каждого строителя свой набор правил
    • Запретить им вход в узел, занятый другим строителем
    • Каждый строитель может быть представлен как ветвь дерева
    • Во время эволюции строители могут дублировать

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

Что будет использоваться для оценки пригодности решения?

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

Должен попробовать для себя с моим генератором сетки, когда / если есть свободное время =)

badunius
источник