Question

J'étudiait le bruit de Perlin à travers quelques exemples @ http://dindinx.net /OpenGL/index.php?menu=exemples&submenu=shaders et ne pouvait pas l'aide à l'avis que son make3DNoiseTexture() dans les utilisations perlin.c noise3(ni) au lieu de PerlinNoise3D(...)

Maintenant, pourquoi est-ce? Ne Perlin est bruit censé être une sommation de différentes fréquences de bruit et des amplitudes?

Qestion 2 est ce qui fait stand ni, inci, incj, inck pour? Pourquoi utiliser ni au lieu de coordonnées x, y? Pourquoi est-ni avec
incrémentée ni[0]+=inci;
inci = 1.0 / (Noise3DTexSize / frequency);
Je vois Hugo Elias a créé sa Perlin2D avec coordonnées x, y, et le fait PerlinNoise3D (...).

Merci à l'avance:)

Était-ce utile?

La solution

Je comprends maintenant pourquoi et je vais répondre à ma propre question dans l'espoir que cela aide les autres.

Le bruit de Perlin est en fait une synthèse des bruits de gradient. Dans son processus de production, il faut calculer le produit scalaire d'un vecteur pointant de l'un des coins revêtements de sol du point d'entrée au point d'entrée lui-même avec le vecteur gradient généré au hasard.

Maintenant, si le point d'entrée était un nombre entier, comme les coordonnées xyz d'une texture que vous voulez créer, le produit scalaire retournerait toujours 0, ce qui vous donnerait un bruit plat. Ainsi, au lieu, nous utilisons inci, incj, inck comme un autre indice. Oui, juste un indice, rien d'autre.

Revenons maintenant à la question 1, il existe deux méthodes pour mettre en œuvre le bruit de Perlin:
1.Calculate les valeurs de bruit séparément et de les stocker dans les fentes RGBA dans la texture
2.Synthesize les bruits avant la main et de les stocker dans une des fentes RGBA dans la texture

noise3(ni) est la mise en oeuvre effective du procédé 1, tandis que PerlinNoise3D(...) suggère ce dernier.

A mon avis, la méthode 1 est beaucoup mieux parce que vous avez beaucoup plus de flexibilité sur la façon dont vous utilisez chaque octave dans vos shaders.

Autres conseils

Je pense à la raison d'utiliser noise3(ni) dans make3DNoiseTexture() au lieu si PerlinNoise3D(...) est que lorsque vous utilisez cette texture de bruit dans votre shaders que vous voulez être en mesure de reproduire et modifier la fonctionnalité de PerlinNoise3D(...) directement dans le shader.

Je pense que la motivation derrière ni, inci, incj, inck est que l'utilisation de x, y, z du volume directement ne donne pas un bon résultat si en escaladant le bruit avec la fréquence au lieu, il est possible de régler la résolution du bruit indépendamment à partir de la taille du volume.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top