Multimodale-Visualisierung

3D Perlin Noise Texturen

Perlin Noise als prozedurale Beschreibung einer Rausch-Funktion.

Einfaches Basis-Rauschen mit einer Trägerfrequenz:

$noise(x,y,z)$
images by Ken Perlin

Das Perlin Basis-Rauschen verwendet zufällig variierende Gradienten. Der Einfachheit halber verwenden wir im Folgenden variierende Absolutwerte nach einem Schema von Hugo Elias:

Generierung von Basis-Rauschen einer Trägerfrequenz durch Interpolation von zufälligen Datenpunkten im Abstand einer halben Periode.

Zwischen den einzelnen Datenpunkten wird interpoliert. Es stehen folgende Interpolationsarten zur Auswahl zwischen zwei Datenpunkten a und b auf dem Bereich $x\in[0,1]$.

Lineare Interpolation:
graphs by Hugo Elias

double linear_interpolate(double a, double b, double x)
{
   return(a*(1-x) + b*x);
}

Cosinus Interpolation:

double cosine_interpolate(double a, double b, double x)
{
   double ft = x*3.1415927;
   f = (1 - cos(ft)) * 0.5;

   return(a*(1-f) + b*f);
}

Kubische Interpolation mit dem Polynom $p(x)=ax^3+bx^2+cx+d$:

// v0 = the point before a
// v1 = the point a
// v2 = the point b
// v3 = the point after b
double cubic_interpolate(double v0, double v1, double v2, double v3, double x)
{
   double a = (v3 - v2) - (v0 - v1);
   double b = (v0 - v1) - a;
   double c = v2 - v0;
   double d = v1;

   return(d+(c+(b+a*x)*x)*x);
}

Perlin Noise ist die Summe von Noise-Funktionen mit zunehmender Trägerfrequenz und abnehmender Amplitude. Typischerweise wird die Frequenz verdoppelt und die Amplitude halbiert. Auch bekannt unter der sogenannten Turbulenzfunktion (turbulence).

$f(x,y,z) = \sum \frac1f noise(x,y,z)$


3D Perlin Noise:
blender.org

3D Fractal-Textur als Betrag von Perlin Noise:

$\sum \frac1f |noise(x,y,z)|$

3D Marmor-Textur als Sinus von Perlin Noise:

$sin(x + \sum \frac1f noise(x,y,z))


Options: