Routes courbes 2D générées de façon procédurale sur la carte

9

J'ai expérimenté des algorithmes pour générer automatiquement des cartes routières pour un jeu sur lequel je travaille.

J'utilise les jeux " Kingdom Rush " comme point de référence car ils ont de superbes cartes.

Exemples de cartes routières du jeu "Kingdom Rush"

Je suis nouveau dans la génération de contenu procédural et je me demandais si quelqu'un ici avait des pointeurs. J'ai expérimenté la génération de topologies de routes aléatoires, par exemple quelques nœuds d'entrée / source, plusieurs nœuds internes (fourche et fusion) et certains nœuds de puits de sortie, puis en utilisant des algorithmes de présentation graphique pour créer une feuille de route réelle basée sur ces informations.

Voici un exemple utilisant l' algorithme Fruchterman-Reingold pour le tracé des routes:

Carte générée par PCG 1

Le graphique bleu utilise des points de contrôle de Bézier générés aléatoirement pour rendre les bords moins droits.

Voici un autre exemple généré en utilisant le même algorithme mais des nombres aléatoires différents:

Carte générée par PCG 2

Le problème est que la plupart des résultats finissent par être assez similaires, et je ne sais pas quelles règles je peux ajouter pour améliorer la contrôlabilité et la diversité des cartes générées par la procédure.

Tout conseil apprécié.

SixTwoOne
la source
Super question. Les images de référence aident beaucoup, tout comme celles que vous avez essayées jusqu'à présent. Pouvez-vous élaborer un peu plus sur ce que vous entendez par «contrôlabilité»? Il y a beaucoup de choses que vous pouvez contrôler; quelques exemples pourraient aider.
Pikalek
Salut! Merci pour la réponse. Par contrôlabilité, je veux dire qu'il est possible d'écrire certaines règles (par exemple, ne placez pas les intersections à une certaine distance les unes des autres; ne permettez pas des angles plus nets que x degrés) et que l'algorithme de génération respecte ces contraintes? De plus, ces règles ne devraient pas entraver la capacité de l'algorithme à générer une gamme diversifiée de cartes intéressantes. Vos encouragements sont cependant encourageants. Je commençais à être frustré par les détails pour que cela fonctionne!
SixTwoOne

Réponses:

2

Vos exemples de routes ont des courbes sur les segments entre les intersections, contrairement à celles que vous avez générées. Avez-vous essayé d'ajouter plus de points de contrôle "redondants" sur vos routes?

Et si le nombre de boucles était un paramètre de génération? "Curviness" (nombre de points de contrôle redondants). Le nombre de sorties en serait un autre.

Je pense que vous pouvez également terminer des routes lorsqu'elles atteignent des intersections en leur donnant des points de contrôle doubles. Cela devrait rendre les intersections plus belles.

Osthekake
la source
Je pense que la suggestion de points de contrôle intermédiaires est bonne! L'algorithme de mise en page que j'utilise actuellement ne produit que des lignes droites, mais je pourrais placer un nœud "courbe incurvée" quelque part entre deux autres nœuds et utiliser une heuristique pour placer des points de contrôle à proximité qui le rendraient joli. Je dois certainement approfondir cette question, car cela permet également de créer des intersections plus belles.
SixTwoOne