Je cherche à générer du bruit qui ressemble à ceci:
(images gracieuseté de Understanding Perlin Noise )
Je recherche essentiellement du bruit avec plein de petites "ondulations". Ce qui suit n'est pas souhaitable:
Existe-t-il des moyens simples de procéder? Je regarde Perlin et Simplex depuis une semaine maintenant et je n'arrive jamais à le faire fonctionner en JavaScript, ou quand je le fais, je n'ai pas les paramètres corrects pour générer de telles images, ou c'est atrocement lent.
Je comprends que les 3 images que j'ai postées pourraient probablement être obtenues par le même algorithme mais à une échelle différente, mais je n'ai pas besoin de cet algorithme. J'ai juste besoin d'un algorithme très simple pour réaliser quelque chose comme dans la première image idéalement. Peut-être qu'une sorte de flou ferait l'affaire, mais je n'arrive pas à obtenir des résultats.
Je développe cela en JavaScript mais tout type de code ou même une explication simple et détaillée fonctionnera.
Réponses:
Bien que les réponses existantes fournissent un bon moyen de réaliser ce que les images de la question montrent, les commentaires ont révélé que l'objectif est de générer une image comme indiqué ci-dessous:
Ce type de bruit est très différent du bruit montré dans les images de la question, car il forme des taches isolées proches.
Il s'avère que ce type de bruit est appelé turbulence qui (selon cet article CPU Gems ) est implémenté comme suit (où
noise
est votre fonction Perlin-noise renvoyant des valeurs de -1..1):La fusion de cette implémentation JavaScript Perlin-noise avec la fonction de turbulence décrite ci-dessus génère un bruit assez similaire à l'image ci-dessus:
Le code JavaScript qui a été utilisé pour générer l'image ci-dessus se trouve dans ce jsFiddle .
la source
return Math.abs(this.noise(x,y,z)*2)-.5
.Vos images d'exemple ressemblent beaucoup à du bruit rose. Il est généré comme ceci:
Tout d'abord, nous avons une sorte de bruit aléatoire lisse. Habituellement, cela est réalisé en calculant des valeurs pseudo-aléatoires à des points avec des coordonnées entières et en interpolant ces valeurs d'une manière ou d'une autre. Le résultat à ce stade ressemble à ceci:
Ensuite, nous prenons ce bruit et le «pressons», en augmentant sa fréquence. La formule la plus simple pour cela est n2 (x, y) = n1 (x f, y f). De cette façon, le motif de bruit est pressé f fois dans les deux directons. De meilleurs algorithmes de bruit tournent et / ou traduisent également le modèle de bruit à cette étape, afin de briser les régularités.
Ensuite, ce motif compressé est multiplié par une valeur (inférieure à 1) et ajouté au premier motif. En effet, nous ajoutons une petite variation de fréquence plus élevée au sommet du modèle de basse fréquence. Le résultat ressemble un peu à ceci:
Les étapes 2 et 3 peuvent être répétées plusieurs fois, en ajoutant des détails de plus en plus fins. le résultat net ressemble généralement à votre exemple avec la croix rouge. Cependant, notez que nous avons 3 paramètres dans notre algorithme pour jouer avec:
Voici quelques exemples:
Haute persistance:
Haute lacunarité:
Faible lacunarité:
Jouer avec ces paramètres n'est pas la seule chose que vous puissiez faire. Une bonne technique qui peut ajouter du caractère aux modèles de bruit consiste à utiliser la perturbation , c'est-à-dire ajouter du bruit aux coordonnées d'entrée de votre fonction de bruit.
Par exemple, supposons que vous avez une fonction qui génère du bruit coordonnées données et des semences au hasard:
Noise(x,y, seed)
. Que vous pouvez utiliser quelque chose commeNoise(x+Noise(x,y,234), y+Noise(x,y,6544), seed)
pour obtenir une valeur perturbée. Cela peut conduire à des motifs comme celui-ci (la perturbation est appliquée au motif circulaire ici, pas au bruit):Si vous voulez en savoir plus, je vous suggère de jeter un œil à libnoise (C ++) ou CoherentNoise (C #). Malheureusement, je ne connais aucune bibliothèque de génération de bruit Javascript.
la source
Le code est commenté. Le mérite revient à Sean McCullough. http://staffwww.itn.liu.se/~stegu/simplexnoise/simplexnoise.pdf
De plus, si vous utilisez un PRNG avec lequel vous pouvez facilement obtenir des résultats facilement ré-instables
la source
Utilisez des textures pré-générées ou placez un générateur de texture de bruit perlin sur un serveur et interrogez-le pour des images de bruit perlin.
la source