Warum ist es doppelt so teuer, eine Rauschfunktion zu erstellen, die gekachelt werden kann?

12

Ich habe an mehreren Stellen gesehen, dass es für die nahtlose Erstellung einer Perlin-Rauschschleife erforderlich ist, sie zweimal auf leicht unterschiedliche Weise zu berechnen und die beiden Ergebnisse zu summieren.

Diese Perlin Noise Math FAQ enthält eine Formel:

FlÖÖp(x,y,z)=(t-z)F(x,y,z)+zF(x,y,z-t)t

FzFF

Ich verstehe, dass dies eine nahtlose Verbindung zwischen Kacheln ergibt, die nicht nur kontinuierlich, sondern auch kontinuierlich differenzierbar ist, aber ich gehe intuitiv davon aus, dass dies der Fall ist, wenn die Rauschfunktion einfach einmal mit Rasterpunkten bewertet wird, die modulo auf die erforderliche Kachelgröße reduziert wurden. Wenn die Rauschfunktion immer nur auf den unmittelbar umgebenden Gitterpunkten basiert (4 für 2D-Rauschen, 8 für 3D-Rauschen), ergibt die Verwendung der ganz linken Gitterpunkte, wenn der zu berechnende Punkt den rechten Rand der Kachel überschreitet, mit Sicherheit den gleiche Rauschqualität wie zwischen anderen Gitterpunkten?

Da ich diesen Mehrfachberechnungsansatz an mehreren Stellen gesehen habe, gehe ich davon aus, dass er einen Vorteil haben muss, aber ich habe Schwierigkeiten, den Nachteil zu erkennen, wenn ich die Rasterpunkte einfach wieder an den Anfang setze, wenn sie zu groß werden. Was vermisse ich?

Trichoplax
quelle

Antworten:

18

Es ist bedauerlich, dass die Leute dies allgemein empfehlen. Das Mischen von zwei (oder vier usw.) übersetzten Kopien einer Rauschfunktion auf diese Weise ist eine ziemlich schlechte Idee. Es ist nicht nur teuer, sondern liefert auch keine korrekt aussehenden Ergebnisse!

Perlin-Geräusch Gemischtes Perlin-Rauschen

Auf der linken Seite ist etwas Perlin-Rauschen zu hören. Auf der rechten Seite befinden sich zwei Instanzen von Perlin-Rauschen, die von links nach rechts gestapelt und gemischt werden.

Der Unterschied ist subtil, aber Sie können sehen, dass das zweite Bild in einer vertikalen Spalte in der Mitte einen geringeren Kontrast aufweist. Hier ist es eine 50% ige Mischung zwischen zwei verschiedenen Instanzen der Rauschfunktion. Eine solche Mischung sieht nicht wie die ursprüngliche Geräuschfunktion aus: Sie sieht nur wie ein schmutziges Durcheinander aus.

OK, es ist also nicht ganz so schlimm, nur das rohe Rauschen zu betrachten ... aber wenn Sie dann nichtlineare Transformationen am Bild vornehmen, kann der ungleichmäßige Kontrast zu Problemen führen. Zum Beispiel sind hier diese Bilder auf 60% begrenzt. (Denken Sie zum Beispiel daran, Inseln in einem Ozean zu erzeugen.)

Perlin-Rauschschwelle Eingeschränktes Perlin-Mischrauschen

Jetzt können Sie deutlich sehen, dass das Bild rechts weniger, kleinere weiße Bereiche in der Mitte hat.

Wie Sie bereits erwähnt haben, ist es für gitterbasiertes Rauschen wie Perlin besser, die Pseudozufallsverläufe an den Gitterpunkten zu kacheln. Dies ist einfach und kostengünstig. Anschließend können Sie den Interpolationsalgorithmus wie gewohnt auf die Farbverläufe anwenden (ähnlich wie bei der bilinearen Interpolation einer Kacheltextur). Dies erzeugt Kachelrauschen ohne seltsame Artefakte, da es mit dem zugrunde liegenden Rauschalgorithmus arbeitet und nicht darüber liegt. Sie können eine ähnliche Strategie für Worley-Rauschen (zellulares Rauschen) anwenden, indem Sie die zufälligen Feature-Punkte, die als Grundlage dienen, nebeneinander anordnen.

Bei mehreren Oktaven Rauschen ist dies jedoch nicht immer so einfach. Wenn die relative Skala zwischen den Oktaven (auch als "Lakunarität" bezeichnet) keine Ganzzahl oder einfache rationale Zahl ist, können Sie möglicherweise keinen geeigneten Kachelungspunkt finden, an dem alle Oktavengitter übereinstimmen. Sie könnten jede Oktave einzeln kacheln, aber das gesamte Rauschen wäre in diesem Fall immer noch nicht kachelbar.

Nathan Reed
quelle
4
Nebeneinander liegende Bilder machen wirklich einen Unterschied, da sie ein intuitives Gefühl für die Erklärung vermitteln. Ich werde dies bei meinen eigenen Antworten berücksichtigen.
Trichoplax