Génération de terrain pour Platformer 2D basé sur des tuiles

15

Je travaille actuellement sur un jeu de plateforme 2D basé sur des tuiles similaire à Terraria à certains égards, bien que je rencontre des difficultés avec la génération de terrain. J'ai fait quelques bases, bien qu'elles ne soient pas utiles.

J'ai essayé quelques techniques différentes comme Perlin Noise et j'ai lu quelques autres telles que Midpoint Déplacement, bien que je ne sois pas sûr de ce qui serait le mieux, ou une combinaison de différentes techniques pour générer différentes zones. (Tels que le déplacement médian pour la forme générale du terrain et le bruit Perlin pour les grottes.)

J'ai trouvé une excellente explication de la façon dont je pourrais le superposer avec la bibliothèque de bruit accidentel , bien qu'il soit en C ++, et je ne connais pas assez de C ++ pour le compiler dans une DLL que je peux utiliser à partir de C #. J'ai essayé de copier ceci en C #, bien que je ne sache pas comment fusionner deux effets ensemble (le gradient pour la base générale, puis la fractale pour les détails).

Actuellement, j'utilise une fractale plasma et les résultats sont extrêmement variés. Par exemple, il peut générer un terrain où il n'y a pratiquement pas de surface, ou il peut générer un terrain où il n'y a aucune surface.

Un exemple de carte correcte serait mieux avec quelques améliorations supplémentaires. (Le noir est solide, le blanc est l'air):

Bonne carte

Et un exemple d'une terrible carte. (Le noir est solide, le blanc est l'air):

Carte terrible

Fondamentalement, ce que je demande, quelle serait une meilleure façon de générer le terrain, ou de le forcer à s'assurer qu'il y a une superficie raisonnable, avec un temps de génération aussi rapide que possible. Ou, alternativement, comment je serais en mesure d'obtenir le même résultat que la bibliothèque de bruit accidentel, mais en C #.

Tout exemple serait très apprécié.

Dimensions ombrées
la source
Salut, je me demandais comment tu as fait ça. J'essaie de comprendre comment générer des mondes comme celui-ci et j'aime les résultats que vous obtenez. Quel algorithme utilisez-vous car il ne ressemble pas à du bruit perlin 2D et ce n'est certainement pas du bruit perlin 1D.
G3tinmybelly

Réponses:

8

J'essaierais de m'en tenir au bruit Perlin, mais en y ajoutant un poids basé sur la hauteur, pour assurer une certaine densité moyenne à certaines altitudes. Pour citer une partie du billet de Notch sur la génération de terrain Minecraft :

J'ai donc basculé le système dans un système similaire basé sur le bruit Perlin 3D. Au lieu d'échantillonner la «hauteur du sol», j'ai traité la valeur du bruit comme la «densité», où tout ce qui est inférieur à 0 serait de l'air, et tout ce qui serait supérieur ou égal à 0 serait du sol. Pour m'assurer que la couche inférieure est solide et que la partie supérieure ne l'est pas, j'ajoute simplement la hauteur (décalée par le niveau d'eau) au résultat échantillonné.

Essentiellement, vous prenez une petite tranche de terrain Minecraft. Générez donc du bruit Perlin 2D, mais pondérez-le de sorte que tout ce qui est au-dessus d'un certain point soit susceptible d'être de l' air, et quoi que ce soit en dessous d' un certain point est susceptible d'être la terre.

Cela vous donnera un bon terrain au sol, avec quelques surplombs et caractéristiques intéressantes, ainsi que des grottes et des îles flottantes. (Si vous ne voulez pas d'îles flottantes, vous pouvez les tester et les supprimer manuellement.) Cette méthode ne vous donnera pas des choses comme des tunnels, vous aurez donc besoin d'une méthode pour les ajouter après la génération du terrain, comme un marche aléatoire .

dlras2
la source
Pas entièrement sûr que j'utilise Perlin Noise à son plein potentiel. Après avoir fait exactement ce que vous avez décrit, il a juste fait beaucoup de grottes, avec beaucoup d'îles flottantes. Aucune définition réelle du type de terrain. En utilisant un gradient pour peser les résultats, j'obtiens ce résultat .
Dimensions ombragées du
@Shaded Dimensions - Vos paramètres Perlin Noise doivent être modifiés. Vous avez un bruit très variable, alors que ce que vous voulez est un motif beaucoup plus fluide et plus large. Consultez freespace.virgin.net/hugo.elias/models/m_perlin.htm et essayez de jouer avec vos paramètres. Essayez une persistance plus faible et moins d'octaves. (Ces conditions peuvent varier, alors lisez cet article.)
dlras2
D'accord, merci pour le lien. J'ai également découvert que le poids ne fonctionnait pas comme prévu après avoir modifié quelques paramètres.
Dimensions ombragées du
D'accord, j'ai un peu modifié les paramètres et j'ai quelque chose qui est assez acceptable, pour le moment du moins. J'ai également supprimé la génération de grottes juste pour ce test, car je voulais d'abord faire le terrain réel. Ceci est le résultat final . Il suffit d'ajouter des contrôles pour supprimer ces îles flottantes. Merci encore.
Dimensions ombragées du
@Shaded Dimensions - Nice! La plupart du temps, les bons terrains proviennent simplement de réglages de paramètres et de superposition de bruit. Cela prendra un certain temps avant d'obtenir quelque chose dont vous êtes très satisfait, mais vous pouvez toujours utiliser ce que vous avez maintenant et revenir pour ajouter des ajustements de finition. Bonne chance!
dlras2