GLSL noise: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
(Die Seite wurde neu angelegt: Die '''noise'''-Funktionen der GLSL erzeugen ein stochastisches Rauschen, das dazu benutzt werden kann, die visuelle Vielfalt zu erhöhen. Die zurückgegebenen Wert...)
 
(Workaround: Abschnitt stark verkürzt und auch shader_Zufallsgenerator verlinkt)
 
(6 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
Zeile 2: Zeile 2:
  
 
== Besonderheiten ==
 
== Besonderheiten ==
Die einzigen Treiber, die derzeit wirklich die noise-Funktionen anbieten, stammen von 3DLabs. ATI-Treiber implementieren die noise-Funktionen gar nicht, wodurch der [[Shader]] im Softwaremodus läuft. NVidia hat sie in OpenGL 2.0 zwar implementiert, jedoch geben sie nur 0.0 zurück.
+
Die einzigen Treiber, die derzeit wirklich die ''noise''-Funktionen anbieten, stammen von '''3DLabs'''.  
  
Daher empfiehlt sich zurzeit nicht nur aus Geschwindigkeitsgründen statt der Verwendung dieser Funktionen eher eine vorher erzeugte [[Techniken_und_Algorithmen#Prozeduale_Grafiken|Noisetextur]], beispielsweise per [[Perlin Noise]].
+
'''ATI'''-Treiber implementieren die ''noise''-Funktionen gar nicht, wodurch der [[Shader]] im Softwaremodus läuft.
 +
 
 +
'''NVidia''' hat sie in OpenGL 2.0 zwar implementiert, jedoch geben sie nur 0.0 zurück.
 +
 
 +
Daher empfiehlt sich zurzeit, nicht nur aus Geschwindigkeitsgründen, statt der Verwendung dieser Funktionen, eher eine vorher erzeugte [[Techniken_und_Algorithmen#Prozeduale_Grafiken|Noisetextur]] zu nutzen. Eine solche Textur könnte beispielsweise per [[Perlin Noise]] erzeugt werden. Für neuere Grafikkarten mit Shader Model 4.0 gibt es einen [[#Workaround|Workaround]] um Pseudozufallszahlen direkt im Shader zu erzeugen.
  
 
== Syntax ==
 
== Syntax ==
Zeile 11: Zeile 15:
 
  vec3 '''noise3''' (genType ''x'')
 
  vec3 '''noise3''' (genType ''x'')
 
  vec4 '''noise4''' (genType ''x'')
 
  vec4 '''noise4''' (genType ''x'')
 +
 +
Die 4 Funktionen unterscheiden sich nur in der Dimension der Rückgabewerte.
  
 
== Eigenschaften ==
 
== Eigenschaften ==
Die von der GLSL-Spezifikation 1.20.8 geforderten Eigenschaften der noise-Funktionen sind:
+
Die von der GLSL-Spezifikation 1.20.8 geforderten Eigenschaften der ''noise''-Funktionen sind:
 
* Die Rückgabewerte liegen im Intervall [-1.0,1.0] und sind mindestens in [-0.6,0.6] annähernd normalverteilt.
 
* Die Rückgabewerte liegen im Intervall [-1.0,1.0] und sind mindestens in [-0.6,0.6] annähernd normalverteilt.
 
* Die Rückgabewerte haben insgesamt den Durchschnitt 0.0.
 
* Die Rückgabewerte haben insgesamt den Durchschnitt 0.0.
 
* Sie sind reproduzierbar, indem ein bestimmter Eingabewert immer die gleichen Rückgabewerte erzeugt.
 
* Sie sind reproduzierbar, indem ein bestimmter Eingabewert immer die gleichen Rückgabewerte erzeugt.
 
* Sie sind statistisch invariant unter Rotation und Verschiebung (d. h. egal wie der Wertebereich rotiert oder verschoben wird, die Funktion hat immer das gleiche statistische Verhalten).
 
* Sie sind statistisch invariant unter Rotation und Verschiebung (d. h. egal wie der Wertebereich rotiert oder verschoben wird, die Funktion hat immer das gleiche statistische Verhalten).
* Normalerweise unterschiedliche Ergebnisse bei Verschiebung der Eingabewerte
+
* Normalerweise unterschiedliche Ergebnisse bei Verschiebung der Eingabewerte.
 
* Die Ortsfrequenz befindet sich in einem eingeengten, konzentrierten Bereich mit der Mitte zwischen 0.5 und 1.0.
 
* Die Ortsfrequenz befindet sich in einem eingeengten, konzentrierten Bereich mit der Mitte zwischen 0.5 und 1.0.
 
* Die ersten Ableitungen der Funktionen sind überall stetig.
 
* Die ersten Ableitungen der Funktionen sind überall stetig.
 +
 +
== Workaround ==
 +
Mit ShaderModel 4.0 kann man beliebig viele Pseudozufallszahlen direkt im Shader erzeugen. Dieses stellt Integer-Arithmetik im Shader bereit und man kann sich leicht einen [http://en.wikipedia.org/wiki/Linear_congruential_generator lineareren Kongruenzgenerator] konstruieren. In der [[Shadersammlung]] findet sich dazu ein [[shader_Zufallsgenerator|Beispiel]].
  
 
== Weblinks ==
 
== Weblinks ==

Aktuelle Version vom 10. Januar 2010, 14:31 Uhr

Die noise-Funktionen der GLSL erzeugen ein stochastisches Rauschen, das dazu benutzt werden kann, die visuelle Vielfalt zu erhöhen. Die zurückgegebenen Werte sehen zufällig aus, sind allerdings nicht wirklich zufällig. Bei Rauschen ("noise") handelt es sich zudem nicht nur um einfache Zufallszahlen.

Besonderheiten

Die einzigen Treiber, die derzeit wirklich die noise-Funktionen anbieten, stammen von 3DLabs.

ATI-Treiber implementieren die noise-Funktionen gar nicht, wodurch der Shader im Softwaremodus läuft.

NVidia hat sie in OpenGL 2.0 zwar implementiert, jedoch geben sie nur 0.0 zurück.

Daher empfiehlt sich zurzeit, nicht nur aus Geschwindigkeitsgründen, statt der Verwendung dieser Funktionen, eher eine vorher erzeugte Noisetextur zu nutzen. Eine solche Textur könnte beispielsweise per Perlin Noise erzeugt werden. Für neuere Grafikkarten mit Shader Model 4.0 gibt es einen Workaround um Pseudozufallszahlen direkt im Shader zu erzeugen.

Syntax

float noise1 (genType x)
vec2 noise2 (genType x)
vec3 noise3 (genType x)
vec4 noise4 (genType x)

Die 4 Funktionen unterscheiden sich nur in der Dimension der Rückgabewerte.

Eigenschaften

Die von der GLSL-Spezifikation 1.20.8 geforderten Eigenschaften der noise-Funktionen sind:

  • Die Rückgabewerte liegen im Intervall [-1.0,1.0] und sind mindestens in [-0.6,0.6] annähernd normalverteilt.
  • Die Rückgabewerte haben insgesamt den Durchschnitt 0.0.
  • Sie sind reproduzierbar, indem ein bestimmter Eingabewert immer die gleichen Rückgabewerte erzeugt.
  • Sie sind statistisch invariant unter Rotation und Verschiebung (d. h. egal wie der Wertebereich rotiert oder verschoben wird, die Funktion hat immer das gleiche statistische Verhalten).
  • Normalerweise unterschiedliche Ergebnisse bei Verschiebung der Eingabewerte.
  • Die Ortsfrequenz befindet sich in einem eingeengten, konzentrierten Bereich mit der Mitte zwischen 0.5 und 1.0.
  • Die ersten Ableitungen der Funktionen sind überall stetig.

Workaround

Mit ShaderModel 4.0 kann man beliebig viele Pseudozufallszahlen direkt im Shader erzeugen. Dieses stellt Integer-Arithmetik im Shader bereit und man kann sich leicht einen lineareren Kongruenzgenerator konstruieren. In der Shadersammlung findet sich dazu ein Beispiel.

Weblinks