J'envisagerais simplement d'aller avec du bruit 3D et de l'évaluer à la surface de la sphère.
Pour le bruit de gradient qui est naturellement dans le domaine de la surface de la sphère, vous avez besoin d'un motif régulier de points d'échantillonnage sur la surface qui ont des informations de connectivité naturelle, avec une surface à peu près égale dans chaque cellule, afin que vous puissiez interpoler ou additionner des valeurs adjacentes. Je me demande si quelque chose comme une grille de Fibonacci pourrait fonctionner:
Je n'ai pas parcouru les mathématiques pour déterminer combien de travail il faudrait pour déterminer les indices et la distance de vos quatre voisins (je ne sais même pas si vous finissez par avoir quatre voisins bien définis dans tous les cas), et je pense que cela peut être moins efficace que de simplement utiliser du bruit 3D.
Edit: Quelqu'un d'autre a mâché les maths! Voir ce nouvel article sur la cartographie sphérique de Fibonacci . Il semble qu'il serait simple de l'adapter au bruit de la sphère.
Si vous effectuez le rendu d'une sphère, et pas seulement l'évaluation du bruit à la surface d'une sphère, et que vous êtes prêt à tesseller votre sphère à la résolution de votre réseau de bruit, vous pouvez créer une grille géodésique à la surface de la sphère (un icosaèdre subdivisé, d'habitude):
Chaque sommet de la sphère peut avoir un gradient généré de façon aléatoire pour le bruit de gradient. Pour obtenir ces informations dans le pixel shader (sauf si vous souhaitez une interpolation simple comme le bruit de valeur), vous pouvez avoir besoin d'une technique comme le rendu filaire de cet article avec les coordonnées barycentriques : effectuez un rendu non indexé, chaque sommet contenant les coordonnées barycentriques de ce sommet dans le triangle . Vous pouvez ensuite lire SV_PrimitiveID
(ou l'équivalent OpenGL) dans le pixel shader, lire les trois gradients de bruit des sommets en fonction du triangle sur lequel vous vous trouvez et utiliser le calcul de bruit que vous souhaitez en utilisant les coordonnées barycentriques interpolées.
Je pense que la partie la plus difficile de cette méthode consiste à créer un schéma pour mapper votre ID de triangle à trois échantillons afin de rechercher les valeurs de bruit à chaque sommet.
Si vous avez besoin de plusieurs octaves de bruit ou de bruit à une résolution plus fine que votre modèle de sphère, vous pouvez peut-être faire une grille géodésique grossière avec des sommets et faire quelques niveaux de subdivision dans le pixel shader. c'est-à-dire à partir des coordonnées barycentriques, déterminez dans quel triangle subdivisé vous seriez si le maillage était encore tessellé, puis déterminez ce que l'ID primitif et les coordonnées barycentriques seraient pour ce triangle.