Estradas curvas 2D geradas proceduralmente no mapa

9

Eu tenho experimentado algoritmos para gerar automaticamente mapas de estradas para um jogo em que estou trabalhando.

Estou usando os jogos " Kingdom Rush " como ponto de referência, pois eles têm alguns mapas bonitos.

Exemplos de mapas de estradas do jogo "Kingdom Rush"

Eu sou novo na geração de conteúdo processual e queria saber se alguém aqui tem alguma dica. Eu experimentei gerar topologias de estradas aleatórias, por exemplo, alguns nós de entrada / origem, vários nós internos (bifurcação e mesclagem) e alguns nós de saída, usando então algoritmos de layout gráfico para criar um mapa de estradas real com base nessas informações.

Aqui está um exemplo usando o algoritmo Fruchterman-Reingold para o layout da estrada:

Mapa 1 gerado por PCG

O gráfico azul usa alguns pontos de controle Bézier gerados aleatoriamente para fazer com que as bordas pareçam menos retas.

Aqui está outro exemplo gerado usando o mesmo algoritmo, mas com números aleatórios diferentes:

Mapa 2 gerado por PCG

O problema é que muitos dos resultados acabam parecendo bastante semelhantes, e não tenho certeza de quais regras posso adicionar para melhorar a controlabilidade e a diversidade dos mapas gerados proceduralmente.

Qualquer conselho apreciado.

SixTwoOne
fonte
Pergunta incrível. As imagens de referência ajudam muito, incluindo as coisas que você tentou até agora. Você pode elaborar um pouco mais sobre o que você quer dizer com 'controlabilidade'? Há muitas coisas que você pode controlar; alguns exemplos ajudariam.
Pikalek # 8/18
Oi! Obrigado pela resposta. Por controlabilidade, quero dizer, é possível escrever certas regras (por exemplo, não coloque interseções mais próximas que uma certa distância uma da outra; não permita ângulos mais acentuados que x graus) e o algoritmo de geração respeite essas restrições? Além disso, essas regras não devem prejudicar a capacidade do algoritmo de gerar uma gama diversificada de mapas interessantes. Seu encorajamento é encorajador. Eu estava começando a ficar frustrado com os detalhes de fazer isso funcionar!
SixTwoOne

Respostas:

2

Seu exemplo de estradas tem curvas nos segmentos entre cruzamentos, onde os gerados não. Você já tentou adicionar mais pontos de controle "redundantes" em suas estradas?

Que tal ter o número de loops como um parâmetro de geração? Também "curvatura" (número de pontos de controle redundantes) O número de saídas seria outro.

Eu acho que você também pode terminar as estradas quando elas atingem os cruzamentos, dando a eles pontos de controle duplos. Isso deve fazer as interseções parecerem melhores.

Osthekake
fonte
Eu acho que a sugestão de pontos de controle intermediários é boa! O algoritmo de layout gráfico que estou usando no momento produz apenas linhas retas, mas eu poderia colocar um nó de "curvatura curvada" em algum lugar entre dois outros nós e usar uma heurística para colocar pontos de controle próximos que fariam com que parecesse bonito. Definitivamente, preciso analisar mais isso, pois também está relacionado à criação de interseções com melhor aparência.
SixTwoOne