Comment puis-je générer du bruit Perlin sur une surface sphérique?
j'essaie de générer du terrain en utilisant le bruit de Perlin. Je comprends comment le générer en utilisant des coordonnées cartésiennes, mais je ne peux pas vraiment comprendre comment ça fonctionnerait sur une sphère. Je sais que vous pouvez projeter des surfaces 2D sur des sphères, mais la distorsion ne gâcherait-elle pas la distribution du bruit? La meilleure idée que je puisse trouver pour générer un bruit uniforme à la surface d'une sphère est de cartographier le point sur la sphère à une coordonnée cartésienne 3D et d'utiliser une fonction de bruit 3D. (Fondamentalement, pour générer un cube de bruit et" raser " les Coins pour le faire rond, pour ainsi dire. Y a-t-il une meilleure méthode que je ne vois pas?
2 réponses
le vrai casse-tête voici comment modifier les fonctions de base du bruit Perlin (appelées octaves?), qui sont définis en utilisant la fréquence et l'amplitude de sorte qu'ils sont au-dessus d'une sphère au lieu d'un plan n-dimensionnel.
il faut donc avoir un ensemble de fonctions de base (direction, fréquence et amplitude données) définies sur la sphère. La Direction est un point avec, disons, valeur zéro. Pour tout point sur la sphère, vous mesurez la distance angulaire par rapport au vecteur de direction. Vous divisez le la distance angulaire par la fréquence, et calculer le péché de cet angle. Enfin, vous dimensionnez par l'amplitude.
vous pouvez faire quelque chose d'un peu plus fantaisiste si vous voulez que vos fonctions de base varient différemment en deux dimensions, mais vous aurez besoin d'un second paramètre de direction pour orienter la projection. Vous aurez également besoin de calculer deux distances angulaires. Il serait peut-être exagéré. Si vous avez un tas de fonctions de base, les motifs circulaires de l'algorithme ci-dessus peut complètement flouter les uns les autres, donc je voudrais essayer la solution facile d'abord.
en utilisant ces fonctions de base de bruit de Perlin, vous pouvez maintenant évaluer votre bruit de Perlin au-dessus de la sphère comme la somme d'un tas de ceux-ci. Si vous décidez de tesseler la sphère et d'évaluer les coins du sommet est à vous. C'est ce que je ferais.
je crois que l'approche consiste en fait à utiliser un champ de bruit tridimensionnel (chaque point dans un espace 3D a une valeur de bruit scalaire) par opposition à un champ tridimensionnel (chaque point sur un plan 2D a une valeur de bruit).
lorsque vous utilisez une fonction de bruit 2D pour générer une carte de hauteur, vous décalez la valeur de z en fonction de la valeur de bruit.
lors de l'utilisation D'un champ 3D, vous échantillonnez le bruit à des points sur la surface d'une sphère, puis utilisez la valeur de bruit pour décaler chaque point radialement loin de ou vers le centre de la sphère.
le bruit 3D est plus difficile et plus lent à produire évidemment, mais vous n'avez pas à faire face aux complications de l'enroulement d'une surface autour de la sphère, et parce que la fonction de bruit est continue, il n'y a pas de coutures.
cela peut évidemment s'appliquer à n'importe quelle forme arbitraire.