Генерируемые процедурно 2D кривые дороги на карте

9

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

Я использую игры « Kingdom Rush » в качестве ориентира, так как у них есть отличные карты.

Примеры дорожных карт из игры «Королевство Раш»

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

Вот один пример использования алгоритма Fruchterman-Reingold для разметки дороги:

PCG-сгенерированная карта 1

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

Вот еще один пример, сгенерированный с использованием того же алгоритма, но разных случайных чисел:

PCG-сгенерированная карта 2

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

Любой совет приветствуется.

SixTwoOne
источник
Внушительный вопрос. Справочные изображения очень помогают, в том числе и то, что вы уже пробовали. Можете ли вы подробнее рассказать о том, что вы подразумеваете под «управляемостью»? Есть много вещей, которые вы могли бы контролировать; некоторые примеры помогут.
Пикалек
Привет! Спасибо за ответ. Под управляемостью я имею в виду, можно ли написать определенные правила (например, не размещать пересечения ближе, чем на определенном расстоянии друг от друга; не допускайте, чтобы углы были острее x градусов), и должен ли алгоритм генерации соблюдать эти ограничения? Кроме того, эти правила не должны мешать алгоритму генерировать разнообразные интересные карты. Ваше ободрение воодушевляет. Я начинал расстраиваться из-за деталей, как заставить это работать!
SixTwoOne

Ответы:

2

В ваших примерных дорогах есть кривые на отрезках между перекрестками, где ваши сгенерированные не имеют. Вы пытались добавить больше «лишних» контрольных точек на ваших дорогах?

Как насчет того, чтобы количество циклов было параметром генерации? Также «извилистость» (количество избыточных контрольных точек) Количество выходов будет другим.

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

Osthekake
источник
Я думаю, что предложение промежуточных контрольных точек это хорошо! Алгоритм компоновки графа, который я использую в данный момент, производит только прямые линии, но я мог бы поместить узел с «изогнутым изгибом» где-то между двумя другими узлами и использовать эвристику для размещения контрольных точек поблизости, чтобы это выглядело красиво. Я определенно должен рассмотреть это подробнее, так как это также связано с созданием более привлекательных пересечений.
SixTwoOne