Zurück zu Presets
2D value noise built from a hash function
Polar coordinate twirl and time-based advection
Layered noise for smoke detail
Smoothstep thresholding for soft density bands

Wirbelrauch

In Wirbelrauch Volume Shader behandelt „Preset overview“ vor allem: 2D noise-based swirling smoke pattern.. Das hilft beim Einordnen von Shader-Komplexität, Browser-Grafikpfad und GPU-Stabilität.

Für reale Messungen Browser, Preset, Fenstergröße, Energiemodus und thermischen Zustand fixieren. Bei Hitze oder Hängern Komplexität senken oder stoppen.

Leistungsfaktoren

Noise layers

Für Vergleiche in Volume Shader BM müssen Browser, Preset, Fenstergröße, Energiemodus und thermischer Zustand konstant bleiben; diese Faktoren verändern FPS und Frame Time.

Coordinate warping

Für Vergleiche in Volume Shader BM müssen Browser, Preset, Fenstergröße, Energiemodus und thermischer Zustand konstant bleiben; diese Faktoren verändern FPS und Frame Time.

No ray loop

Für Vergleiche in Volume Shader BM müssen Browser, Preset, Fenstergröße, Energiemodus und thermischer Zustand konstant bleiben; diese Faktoren verändern FPS und Frame Time.

Editierbare Parameter

Twirl strength

Für Vergleiche in Volume Shader BM müssen Browser, Preset, Fenstergröße, Energiemodus und thermischer Zustand konstant bleiben; diese Faktoren verändern FPS und Frame Time.

Noise scale

Für Vergleiche in Volume Shader BM müssen Browser, Preset, Fenstergröße, Energiemodus und thermischer Zustand konstant bleiben; diese Faktoren verändern FPS und Frame Time.

Smoke threshold

Für Vergleiche in Volume Shader BM müssen Browser, Preset, Fenstergröße, Energiemodus und thermischer Zustand konstant bleiben; diese Faktoren verändern FPS und Frame Time.

#version 300 es
precision highp float;
out vec4 outColor;
in vec2 v_uv;
uniform float u_time; uniform vec2 u_resolution;

float hash(vec2 p){p=fract(p*vec2(123.34,345.45));p+=dot(p,p+34.345);return fract(p.x*p.y);}
float noise(vec2 p){ vec2 i=floor(p); vec2 f=fract(p); f=f*f*(3.0-2.0*f);
  float a=hash(i), b=hash(i+vec2(1,0)), c=hash(i+vec2(0,1)), d=hash(i+vec2(1,1));
  return mix(mix(a,b,f.x), mix(c,d,f.x), f.y);
}

void main(){
  vec2 uv = v_uv;
  vec2 p = (uv*2.0-1.0);
  p.x *= u_resolution.x/u_resolution.y;
  float r = length(p);
  float ang = atan(p.y,p.x) + 0.8*sin(u_time*0.5) + 2.5*r;
  vec2 q = vec2(cos(ang), sin(ang))*r*1.5 + 0.15*u_time;
  float n = noise(q*3.0) + 0.5*noise(q*6.0);
  float smoke = smoothstep(0.35, 0.9, n);
  vec3 col = mix(vec3(0.05,0.08,0.12), vec3(0.8,0.9,1.0), smoke);
  outColor = vec4(col,1.0);
}