Ich würde in Betracht ziehen, einfach mit 3D-Rauschen umzugehen und es auf der Oberfläche der Kugel auszuwerten.
Für Gradientenrauschen, das sich von Natur aus im Bereich der Kugeloberfläche befindet, benötigen Sie ein regelmäßiges Muster von Abtastpunkten auf der Oberfläche, die über natürliche Konnektivitätsinformationen mit ungefähr gleicher Fläche in jeder Zelle verfügen, sodass Sie benachbarte Werte interpolieren oder summieren können. Ich frage mich, ob so etwas wie ein Fibonacci-Gitter funktionieren könnte:
Ich habe die Mathematik noch nicht durchgearbeitet, um herauszufinden, wie viel Arbeit es bedeuten würde, die Indizes und die Entfernung zu Ihren vier Nachbarn zu bestimmen (ich weiß nicht einmal, ob Sie in jedem Fall vier gut definierte Nachbarn haben). und ich vermute, es ist möglicherweise weniger effizient als nur die Verwendung von 3D-Rauschen.
Edit: Jemand anderes hat durch die Mathematik gekaut! Siehe dieses neue Papier über sphärische Fibonacci-Kartierung . Es scheint einfach zu sein, es an das Kugelrauschen anzupassen.
Wenn Sie eine Kugel rendern, aber nicht nur das Rauschen auf der Oberfläche einer Kugel bewerten, sondern auch Ihre Kugel anhand der Auflösung Ihres Rauschgitters tessellieren können, können Sie ein geodätisches Gitter auf der Oberfläche der Kugel erstellen (ein unterteiltes Ikosaeder, in der Regel):
Jeder Scheitelpunkt der Kugel kann einen zufällig erzeugten Gradienten für Gradientenrauschen haben. Um diese Informationen an den Pixel-Shader weiterzuleiten (es sei denn, Sie möchten eine direkte Interpolation wie z. B. Wertrauschen ), benötigen Sie möglicherweise eine Technik wie das Wireframe-Rendering dieses Artikels mit Schwerpunktkoordinaten . Anschließend können Sie SV_PrimitiveID
im Pixel-Shader aus (oder dem OpenGL-Äquivalent) lesen, die drei Rauschgradienten anhand des Dreiecks, auf dem Sie sich befinden, von den Scheitelpunkten ablesen und mit den interpolierten Schwerpunktkoordinaten eine beliebige Rauschberechnung durchführen.
Ich denke, der schwierigste Teil dieser Methode besteht darin, ein Schema zu entwickeln, um Ihre Dreieck-ID auf drei Samples abzubilden, um die Rauschwerte an jedem Vertex nachzuschlagen.
Wenn Sie mehrere Oktaven Rauschen oder Rauschen mit einer feineren Auflösung als Ihr Kugelmodell benötigen, können Sie möglicherweise ein grobes geodätisches Gitter mit Scheitelpunkten erstellen und im Pixel-Shader einige Unterteilungsebenen ausführen. dh aus den Schwerpunktkoordinaten herausfinden, in welchem unterteilten Dreieck Sie sich befinden würden , wenn das Netz weiter tesselliert würde, und dann herausfinden, wie die primitive ID und die Schwerpunktkoordinaten für dieses Dreieck lauten würden.