Je travaille sur un jeu de style Worms et je souhaite générer du terrain de manière procédurale. J'ai déjà beaucoup travaillé sur le bruit de fond avec Perlin, et c'est ce que j'ai commencé à utiliser pour ce jeu. Le seul problème avec ça, c'est que c'est trop simple et ennuyeux, ce qui me donne quelques collines mais pas la complexité que je veux. J'aimerais avoir des caractéristiques telles que des grottes et des montagnes suspendues et cela ne me dérange pas des îles flottantes et autres. Quelque chose comme ça, mais encore plus fou serait ok:
J'ai d'abord pensé à générer le terrain à l'aide du bruit perlin classique, puis à retirer des éléments pour créer des cavernes, mais ce n'est pas le cas, mais je ne parviens pas à guider le retrait de ces éléments. Existe-t-il des alternatives pour générer un tel terrain?
Réponses:
Je vous suggérerais de commencer par le bruit 2D Perlin. Quelque chose comme ça:
Appliquez ensuite un seuil sur l'image, de manière à obtenir plusieurs îles isolées, comme illustré ci-dessous:
J'ai choisi un seuil de 0,04, tout ce qui se trouve au-dessus du seuil serait coloré en bleu. Le reste restant noir. Ensuite, il est temps de déterminer quelles "îles" conserver et lesquelles jeter.
Une approche possible consisterait à parcourir l'image de gauche à droite à différentes hauteurs et à sélectionner des "îles" se croisant en fonction d'une certaine probabilité. Dans l'exemple de l'image, la ligne la plus basse a une probabilité de 100%. Ainsi, chaque île traversée sera sélectionnée (remplie en blanc). La deuxième ligne a une probabilité de 50% et la dernière ligne a une probabilité de 10%.
Une fois que vous avez vos îles marquées comme ça, vous pouvez combler les écarts en appliquant une opération morphologique ( dilater )
Et il y a un paysage possible.
La "granularité" du bruit va déterminer la taille des détails dans votre monde. Il est donc probablement préférable d'essayer ces valeurs.
De plus, où et avec quelles probabilités vos "lignes de sélection" sont positionnées, le résultat sera très différent. Si vous avez une ligne avec une forte probabilité de "sélectionner" une île près du haut de l'image, vous pouvez alors créer une sorte de paysage de grottes, etc.
la source
24
pourbaseX
etbaseY
, 1 octave et j'ai choisi de produire du bruit en niveaux de gris et de désactiver "fractal". Dans quelle langue implémentez-vous cela?Je commencerais par un bruit perlin, filtré avec soin. Vous termineriez avec quelque chose comme dans l'image jointe à la question, avec des îles flottantes. Retirez ensuite les îlots flottants en utilisant un algorithme de comptage comme ceux présentés ici.
la source
J'ai effectivement mis en œuvre cette réponse à partir de bummzack excellente.
Voici les étapes que j'ai fini avec:
Et voici un exemple de résultat:
J'ai écrit un article détaillé sur l'ensemble du processus ici et le code (JavaScript) est open source, vérifiez-le si vous voulez quelque chose de prêt à utiliser;)
la source