Rauschen ist in der Computergrafik eine wesentliche Voraussetzung zur Darstellung von u.a.:
Alle Bilder sind gemeinfrei
Wie kommen wir vom Rauschen (Noise) zu komplexen prozeduralen Texturen?
Alle Bilder sind gemeinfrei
Value noise
🤔
?
Foto: Inigo Quilez
Frequenz
Amplitude
Live Demo
Wir nutzen noise() anstelle von sin()
Wir addieren Rauschmuster mit sukzessive (über mehrere Oktaven) variierenden Frequenzen und Amplituden:
f*1.0
A*1.0
f*2.0
A*0.5
f*4.0
A*0.25
f*8.0
A*0.125
// Eigenschaften
const int octaves = 5;
float lacunarity = 2.0;
float gain = 0.5;
//
// Initiale Werte
float amplitude = 0.5;
float frequency = 1.0;
// Schleife über Oktaven
for (int i = 0; i < octaves; i++) {
y += amplitude * noise(frequency*x);
frequency *= lacunarity;
amplitude *= gain;
}= Anzahl Rausch-Ebenen
= "Lückenhaftigkeit"
= Verstärkungsfaktor
= Initiales Rausch-Muster
= Frequenz wird erhöht ⬆️
= Amplitude wird verringert ⬇️
10 Min
Live
coding
Erweitern Sie Ihren Code dahingehend, dass sich die Wolken am Himmel bewegen.
10 Min
Beispiel
Bild: Patricio Gonzalez Vivo
Simplex Noise
FBM
// Eigenschaften
const int octaves = 5;
float lacunarity = 2.0;
float gain = 0.5;
//
// Initiale Werte
float amplitude = 0.5;
float frequency = 1.0;
// Schleife über Oktaven
for (int i = 0; i < octaves; i++) {
y += amplitude * abs(snoise(frequency*x));
frequency *= lacunarity;
amplitude *= gain;
}= absolute Werte
Bild: Patricio Gonzalez Vivo
= Simplex-Noise
= Ergebnis
Live
coding
Bilder: Inigo Quiles
float dmWarping(vec2 p)
{
vec2 q = vec2( fbm( p + vec2(0.0,0.0) ),
fbm( p + vec2(5.2,1.3) ) );
vec2 r = vec2( fbm( p + 4.0*q + vec2(1.7,9.2) ),
fbm( p + 4.0*q + vec2(8.3,2.8) ) );
return fbm( p + 4.0*r );
}Bild: Inigo Quiles
Source code (Inigo Quilez): https://www.shadertoy.com/view/4ttSWf
FBM