[Projet C#] Parlons Bruit de Perlin
Carpi Il y a 2 ans Premium Pro - Adhésion à vie4

Bonjour,

Il existe une multitude de façons d’aborder la génération procédurale de cartes en fonction du résultat que l’on souhaite obtenir. J’ai eu envie de regarder un peu ce que l’on peu obtenir avec le bruit de Perlin.

 

Pour commencer celui-ci est assez populaire, on trouve donc beaucoup de littérature sur le sujet dans de nombreux langages.

Pour ce qui est du C#, on trouve pléthore de références… uniquement pour Unity… Pourquoi ? Simplement car unity intègre une fonction Mathf.Perlin() qui simplifie beaucoup les choses puisque qu’il ne reste plus qu’à faire une petite fonction de génération de carte dont le principe va être une double boucle lignes/colonnes pour attribuer à chaque coordonnée une valeur de bruit de Perlin.

Une noise map c’est en fait une carte de hauteurs : à chaque point correspond une altitude. Avec le bruit de Perlin cette altitude est une valeur entre 0 et 1. Dans mon cas je travaille en 2D, je transforme donc simplement cette altitude, par tranche de valeur, en id de tuile.

Le bruit de Perlin ressemble un peu à une onde sonore (quelque soit le nombre de dimensions dans lequel on se place) avec une fréquence et une amplitude.

Pour avoir des cartes intéressantes, on va en fait superposer plusieurs niveaux de détails : on va ajouter une troisième boucle pour additionner plusieurs bruits de Perlin avec à chaque itération une fréquence plus forte mais une amplitude plus basse.

Si vous souhaitez creuser plus en profondeur ce sujet je vous conseille les 3-4 premières vidéos de Sébastien Lague : https://www.youtube.com/watch?v=wbpMiKiSKm8&list=PLFt_AvWsXl0eBW2EiBtl_sxmDtSgZBxB3

 

C’est bien tout ça, mais moi je veux utiliser le bruit de Perlin avec Monogame !

C’est-à-dire, comment générer un bruit de Perlin de qualité (il y a du bon mais aussi du moins bon) j’ai longtemps cherché quelque chose d’exploitable avant de trouver une petite perle de Stefan Gustavson : https://github.com/kev009/craftd/blob/master/plugins/survival/mapgen/noise/noise1234.c

Etant donné que je travaille seulement en 2D, je n’ai repris qu’une seule des fonctions mais dans ce lien vous trouverez 8 fonctions pour 1D, 2D, 3D et 4D version périodique ou non périodique. C’est facile à adapter, je me tais donc et vous donne quelques exemples avec de simples tuiles unies :

Au final, une partie sans grande difficulté mais très intéressante. A suivre…

Comments (4)

Je me suis passionné pour la génération procédurale au début de la formation ! Si tu as envie d’aller plus loin, je te recommande d’aller jeter un œil au fractal Brownian Motion, qui est une façon de répéter un bruit par couche successives pour le rendre nettement plus intéressant. C’est ce que fait Sebastian Lague avec les octaves, la persistance et la lacunarité.

Ensuite, si tu veux encore aller plus loin, il y a 3 autres approches qui sont très utilisées dans le procédural en général et dans le jeu vidéo en particulier: l’automate cellulaire, ou cellular automata pour google (le fameux « jeu de la vie »), le mid-point displacement (ou diamond-square algorithm) et enfin le très puissant diagramme de Voronoï !

Il y en a surement d’autres, mais c’est ceux auxquels j’ai été confronté jusqu’à maintenant !

En espérant que ça te donne des pistes,

Bon code !

Merci Padawan pour ce retour et ces pistes pour le futur. J’ai accumulé pas mal de liens sur Voronoï mais je n’ai pas encore creusé cette voie. Je vais aussi rechercher des infos sur les autres.
Je suis en train de travailler sur un peu de gameplay mais je suis certain d’y revenir car ce que je cherche toujours dans les jeux vidéos c’est la rejouabilité et la génération procédurale en est souvent le principal pilier.

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.