Eu consideraria apenas ir com o ruído 3D e avaliá-lo na superfície da esfera.
Para ruído de gradiente que está naturalmente no domínio da superfície da esfera, é necessário um padrão regular de pontos de amostra na superfície que possuam informações de conectividade natural, com área aproximadamente igual em cada célula, para que você possa interpolar ou somar valores adjacentes. Gostaria de saber se algo como uma grade de Fibonacci pode funcionar:
Não analisei a matemática para determinar quanto trabalho seria descobrir os índices e a distância de seus quatro vizinhos (nem sei se você acaba tendo quatro vizinhos bem definidos em todos os casos), e suspeito que possa ser menos eficiente do que simplesmente usar ruído 3D.
Edit: Alguém mais mastigou a matemática! Veja este novo artigo sobre Mapeamento de Fibonacci Esférico . Parece que seria fácil adaptá-lo ao ruído da esfera.
Se você estiver renderizando uma esfera, não apenas avaliando o ruído na superfície de uma esfera, e está bem em classificar sua esfera com a resolução da sua estrutura de ruído, é possível criar uma grade geodésica na superfície da esfera (um icosaedro subdividido, usualmente):
Cada vértice da esfera pode ter um gradiente gerado aleatoriamente para ruído de gradiente. Para obter essas informações no sombreador de pixels (a menos que você queira uma interpolação direta como ruído de valor), você pode precisar de uma técnica como a renderização em estrutura de arame deste artigo com coordenadas baricêntricas : faça renderização não indexada, com cada vértice que contém as coordenadas bentêntricas desse vértice no triângulo . Você pode então ler SV_PrimitiveID
(ou o equivalente do OpenGL) no sombreador de pixels, ler os três gradientes de ruído dos vértices com base em qual triângulo você está e usar o cálculo de ruído que desejar usando as coordenadas barricêntricas interpoladas.
Acho que a parte mais difícil desse método é criar um esquema para mapear sua identificação do triângulo para três amostras, a fim de procurar os valores de ruído em cada vértice.
Se você precisar de várias oitavas de ruído ou ruído em uma resolução mais fina que o modelo de esfera, poderá criar uma grade geodésica grossa com vértices e fazer alguns níveis de subdivisão no sombreador de pixels. ou seja, a partir das coordenadas baricêntricas, descubra em que triângulo subdividido você estaria se a malha fosse ainda mais com mosaicos e, em seguida, descubra qual seria o ID primitivo e as coordenadas barricêntricas desse triângulo.