Vorrei solo andare con il rumore 3D e valutarlo sulla superficie della sfera.
Per il rumore gradiente che è naturalmente nel dominio della superficie della sfera, è necessario un modello regolare di punti campione sulla superficie con informazioni di connettività naturali, con un'area approssimativamente uguale in ogni cella, in modo da poter interpolare o sommare i valori adiacenti. Mi chiedo se qualcosa come una griglia di Fibonacci potrebbe funzionare:
Non ho masticato la matematica per determinare quanto lavoro sarebbe stato per capire gli indici e la distanza dai tuoi quattro vicini (non so nemmeno se finirai per avere quattro vicini ben definiti in tutti i casi), e sospetto che potrebbe essere meno efficiente del semplice utilizzo del rumore 3D.
Modifica: qualcun altro ha masticato la matematica! Vedi questo nuovo articolo sulla mappatura di Fibonacci sferici . Sembra che sarebbe semplice adattarlo al rumore della sfera.
Se stai eseguendo il rendering di una sfera, non solo valutando il rumore sulla superficie di una sfera e stai bene tassellando la sfera alla risoluzione del reticolo del rumore, puoi creare una griglia geodetica sulla superficie della sfera (un icosaedro suddiviso, generalmente):
Ogni vertice della sfera può avere un gradiente generato casualmente per il rumore gradiente. Per ottenere queste informazioni al pixel shader (a meno che non si desideri un'interpolazione semplice come il rumore di valore), potrebbe essere necessaria una tecnica come il rendering wireframe di questo articolo con coordinate baricentriche : eseguire il rendering non indicizzato, con ogni vertice contenente le coordinate baricentriche di quel vertice nel triangolo . È quindi possibile leggere SV_PrimitiveID
(o l'equivalente OpenGL) nel pixel shader, leggere i tre gradienti di rumore dai vertici in base al triangolo in cui ci si trova e utilizzare qualsiasi calcolo del rumore desiderato utilizzando le coordinate baricentriche interpolate.
Penso che la parte più difficile di questo metodo sia quella di elaborare uno schema per mappare l'ID del triangolo su tre campioni per cercare i valori di rumore in ciascun vertice.
Se hai bisogno di più ottave di rumore o rumore con una risoluzione più fine rispetto al tuo modello di sfera, potresti essere in grado di fare una griglia geodetica grossolana con vertici e fare alcuni livelli di suddivisione nel pixel shader. vale a dire dalle coordinate baricentriche, capire in quale triangolo suddiviso ci si troverebbe se la mesh fosse ulteriormente tassellata, e quindi capire quale sarebbe l'ID primitivo e le coordinate baricentriche per quel triangolo.