Dans ce post RPG.SE, une page perdue depuis longtemps avec plusieurs générateurs en ligne est mentionnée.
Je suis particulièrement curieux de savoir comment les villes ont été générées. Prenez cette image par exemple:
Bien que beaucoup de choses puissent être améliorées au niveau graphique, c'était très bon compte tenu des outils disponibles à l'époque (du milieu à la fin des années 90):
- Le tracé de la route semble assez organique (même si toutes les routes sont placées de manière orthogonale).
- Toutes les routes ne sont pas nécessairement connectées, mais cela semble bien .
- Les bâtiments sont placés dans des endroits crédibles .
- Même les arbres semblent être placés dans des endroits logiques .
Je pense que ce serait amusant de l'essayer et de l'essayer moi-même. D'autant plus que mes précédentes tentatives ont été trop "blocées":
Vous remarquerez que je décris de nombreuses qualités avec des adjectifs pas tout à fait mesurables ( semble , se sent , crédible , etc.), donc j'ai du mal à les traduire en instructions et, finalement, en algorithme.
Existe-t-il des algorithmes éprouvés pour la génération de villes?
Je comprends que cela semble être trop large, alors considérez ceci: si je demandais un algorithme pour générer des cartes des masses continentales, j'obtiendrais immédiatement des références à Perlin et à d'autres algorithmes de bruit; suivi de près par Voronoi.
J'ai vu des questions comme celle-ci, mais elles semblent avoir déjà une idée plus concrète en tête (par exemple: maisons 2x2, nombre fixe de maisons, restrictions de placement des canaux et des routes).
Ce que j'aimerais avoir, c'est quelque chose de moins contraint. Sauf peut-être pour la disposition de la grille, qui devrait être beaucoup plus facile pour une première tentative que, par exemple, le système L.
Réponses:
Introversion Software a créé un générateur de ville vraiment impressionnant pour leur projet
annuléindéfiniment suspendu Subversion :L'algorithme est conçu pour générer de grandes métropoles modernes. Mais les mêmes techniques peuvent être utilisées pour générer plus d'établissements ruraux.
Il s'agit d'un algorithme descendant qui génère d'abord les grandes lignes puis génère de plus en plus de détails pour s'y adapter (pour l'approche ascendante opposée à la génération procédurale, vérifiez la réponse de uliwitness). Voici une vidéo qui visualise l'algorithme en cours .
L'algorithme semble fonctionner comme suit (légèrement simplifié):
Concernant le placement des arbres: Ma première approche serait d'intégrer ceux dans l'algorithme de génération de bâtiment. Un bâtiment n'a pas besoin de remplir complètement son terrain. Vous pouvez remplir l'espace libre avec des objets décoratifs appropriés.
Le problème avec l'approche descendante est que même si elle peut générer une ville plausible, elle peut ne pas générer une ville plausible avec tout ce que vous voulez . Disons que chaque ville de votre jeu a besoin d'un magasin d'armes, d'un magasin d'armures, d'un magasin de potions et d'une auberge. L'algorithme ci-dessus sélectionne les bâtiments en fonction des exigences du lot, vous pourriez donc vous retrouver avec 12 magasins d'armures mais pas une seule auberge. J'aborderais ce problème dans la phase de génération du bâtiment. Avant de commencer à générer des bâtiments au hasard, parcourez votre liste de bâtiments incontournables et sélectionnez le lot le plus approprié pour chacun d'eux. Remplissez ensuite les lots restants avec des bâtiments randomisés.
J'ai hâte d'explorer les villes générées de manière procédurale dans votre jeu.
la source
Obtenez des contraintes de la vie réelle
Souvent, la réponse sur la façon de trouver le bon algorithme commence par regarder comment ces choses se produisent dans la vie réelle. Avez-vous examiné cela? Du haut de ma tête, je peux penser à ce qui suit:
Appliquez-les à votre topographie
Une fois que vous avez ces contraintes, vous pouvez essayer de construire un algorithme autour de lui. Par exemple, générez votre topographie et répartissez les ressources nécessaires sur la carte (en gardant peut-être un œil sur le placement de petits gisements des ressources les plus importantes dans la zone de départ, puis sur des gisements plus importants plus éloignés et les uns des autres). C'est là que les besoins et la mécanique de votre jeu entrent en jeu, bien sûr, mais vous ajouterez probablement également un élément aléatoire.
Construisez ensuite des entreprises (et leurs immeubles résidentiels) à proximité des ressources qui les utilisent. Par exemple, une carrière à côté d'une grande montagne. Ajoutez ensuite l'infrastructure dont ils ont besoin. Par exemple, un poste de traite avec bureau de poste et taverne où ils peuvent faire des affaires et vendre leur produit, une forge pour fournir des outils, etc.
Pour décider de ce qui va où, divisez la carte en tuiles où vous calculez un nombre pour chaque tuile combien il est souhaitable pour un certain but, en utilisant une fonction de pondération. Mettez les bâtiments dans les tuiles les plus souhaitables pour ce type de bâtiment. Ajoutez des règles comme «un poste de traite peut gérer 50 entreprises ou 100 maisons», ce qui augmente la probabilité d'ajouter un autre poste de traite si une ville atteint une certaine taille.
Une fois que vous avez cela, vous devriez obtenir des cartes assez décentes. Si vous remarquez que toutes les cartes se retrouvent sous des formes non naturelles, ajoutez des pénalités à vos fonctions de pondération pour ces formes, comme "si ma rue se retrouve juste à côté d'une autre rue, -100 désirable", ou "si ma rue se croise, -100 désirabilité "etc. Vous pouvez toujours ajouter un élément aléatoire pour permettre une sensation plus originale, ou ajouter d'autres mécanismes comme" si un croisement a plus de N bâtiments connectés à ses routes, transformez-le en un rond-point ".
Vous pouvez même utiliser ces contraintes pour donner à différentes cartes une sensation différente, comme faire en sorte qu'un certain pays ait plus de montagnes dans sa topographie, ou qu'une certaine culture construise plus de routes sinueuses, et une autre préfère les routes droites, etc. Tout simplement en modifiant l'une de vos fonctions de pondération.
Simplifier
Bien sûr, cette approche est trop complexe pour les jeux qui ne sont pas des simulations commerciales, mais travaillez quand même et voyez quels types de bâtiments conviennent à votre jeu et éliminez ceux qui ne sont pas nécessaires. Puis venez avec des règles simplifiées comme "placer les villes près d'une rivière, d'une montagne ou d'un bon sol. 1 bâtiment pour 100 ressources, entreprises basées sur le type de ressource, 10 bâtiments résidentiels pour chaque ensemble complet de ressources alimentaires / artisanales ... ou tout simplement" 1m de rivière / 1m2 de sol peut supporter 10 bâtiments résidentiels ... tout ce qui a du sens pour un jeu. Pourtant, une fois que vous savez quelle superficie vous avez (par exemple, pas de bâtiments sur les flancs des montagnes escarpés) et combien de bâtiments la zone peut supporter, placez simplement des ensembles de bâtiments dans cette zone jusqu'à ce qu'elle soit pleine (comme, 1 immeuble commercial, 10 résidentiel , 3 infrastructures ou autre) et les relier aux routes.
la source
Have you looked into that?
J'ai. Eh bien, en quelque sorte (je ne pouvais pas penser à beaucoup de "règles de la vie réelle"). Mais c'est une révélation par rapport à mes tentatives précédentes: je n'arrivais pas à reconnaître les ressources que je ne pourrais pas dessiner (c'est-à-dire qu'il y a une forêt à l'est ... que je la dessine ou non).