Frage

Ich habe interessiert (als Bastler) in pseudo-zufälligen Rauscherzeugung, insbesondere die Perlin und Simplex-Algorithmen. Der Vorteil Simplex ist Geschwindigkeit (besonders bei höheren Dimensionen), aber Perlin kann relativ leicht mit Ziegeln gedeckt werden. Ich habe mich gefragt, ob jemand bewusst einen Kacheln Simplex-Algorithmus war? Fest Dimension ist in Ordnung, generisch ist besser; Pseudo-Code ist in Ordnung, c / c ++ ist besser.

War es hilfreich?

Lösung 3

Es scheint, diese Frage einigermaßen gelöst wurde hier mit einer detaillierten Beschreibung der Idee hinter der Arbeitslösung

Andere Tipps

Just Fliese Ihres Lärm auf die gleiche Weise in Perlin, es erst nach dem Skew tun würde. Sie können dies tun, indem Sie den Teil zu modifizieren, dass die Permutationen bekommt die mod 256 zu tun (oder & 255, was auch immer Sie verwenden) nach (statt vorher) Sie Offsets zu den anderen Ecken von der Basis Ecke erhalten hinzuzufügen. Dies ist das modifizierte Bit Code in HLSL:

uint3 iIdx0 = p0SI % 256;
uint3 iIdx1 = (p0SI + pI1) % 256;
uint3 iIdx2 = (p0SI + pI2) % 256;
uint3 iIdx3 = (p0SI + 1.0f) % 256;
uint iGI0 = gPerm[ iIdx0.x + gPerm[ iIdx0.y + gPerm[ iIdx0.z ] ] ] % 12;
uint iGI1 = gPerm[ iIdx1.x + gPerm[ iIdx1.y + gPerm[ iIdx1.z ] ] ] % 12;
uint iGI2 = gPerm[ iIdx2.x + gPerm[ iIdx2.y + gPerm[ iIdx2.z ] ] ] % 12;
uint iGI3 = gPerm[ iIdx3.x + gPerm[ iIdx3.y + gPerm[ iIdx3.z ] ] ] % 12;

p0SI ist die Ecke 0 und Punkt Pi2 und PI2 sind Vektoren, die eine Ecke und 2 in der üblichen Weise berechnet Ecke. Man beachte, dass in HLSL Skalare auf Vektoren automatisch in gemischten operatons fördern, so beispielsweise 1.0f tatsächlich ist (1.0,1.0,1.0). Ich dachte nur diese Fliesen stuf, aber apprently funktioniert es. Wenn Sie einen großen Planeten oder etwas Scheiße zu Schatten brauchen, aber nur mit einfacher Genauigkeit auf Ihrer Karte gibt es ein paar mehr Schritte sind. Hit me up.

Edit: Sie wissen, nachdem darüber nachzudenken etwas mehr Ich glaube nicht, dass Sie etwas ändern müssen. Ich denke, es Fliesen auf 256 Einheiten autmatically als umgesetzt.

Auch wenn wenige Jahre vergangen, ist diese Frage noch unter die besten Ergebnisse bei Google.

In simplex Rauschen, x und y von einem geraden (ortonormal) Gittern verzerrt erhalten die simplex zu finden ist der Punkt in (ein Dreieck in 2D), so mit gemeinsamen Fliesen Techniken (% 255 oder was auch immer), tut es Fliesen, aber Fliesen auf schrägen Koordinaten, dh es Fliesen „diagonal“, was ziemlich nutzlos ist.

Eine einfache Lösung, die ich gefunden habe, ist zu „un-Skew“ das Ergebnis, so dass ursprünglich X und Y werden zunächst schräg „nach links“, dann wird der Algorithmus sie Skew „nach rechts“, und den endgültigen Ergebnis wird auf ein nicht verzerrten Gitter neu ausgerichtet werden.

Wenn zum Beispiel Ihrer simplex-Implementierung SimplexNoise.java ähnlich ist, können Sie überall im Netz finden, es verzerrt das Raster mit:

var F2 = 0.5*(Math.sqrt(3.0)-1.0);
var s = (xin+yin)*F2; // Hairy factor for 2D
var i = Math.floor(xin+s);
var j = Math.floor(yin+s);

Sie können einfach „pre-Skew“ es in der entgegengesetzten Richtung am Eintrittspunkt des Verfahrens:

var G2 = (3.0-Math.sqrt(3.0))/6.0;
var t = (xin+yin)*G2;
xin-=t;
yin-=t;

Leider erzeugt es einen irgendwie seltsam anmutenden Effekt (das heißt, es sieht ein wenig schief: D), die in der Regel nicht ein Problem, sondern hängt davon ab, was Sie brauchen, dass Lärm für

.

Da es ein Problem für mich war, habe ich versucht, diese „inverse-Schrägstellung“ die Anwendung nur auf ein paar Oktaven, die das Gewicht mehr in der endgültigen Ausgabe, und statt Interpolation für „leichtere“ Oktaven verwendet. Diese Lösung hat mir zufriedenstellend Kacheln basierend auf simplex Perlin Geräusch, Ursache Interpolation auf alle Oktaven würde zu viel Dämpfung auf Fliese Grenzen produzieren, und wenn mehrere Oktaven ohne künstliche hinzugefügt werden schief ausgegeben den strage aussehenden Effekt wird unter dem zusätzlichen Lärm begraben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top