Zurück zu Presets
Procedural 3D value noise
Front-to-back ray marching
Density thresholding with smoothstep
Time-based cloud drift

Wolkenschicht

In Wolkenschicht Volume Shader behandelt „Preset overview“ vor allem: Low-iteration 3D noise cloud accumulation.. 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

3D noise

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.

Loop count

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.

Fill rate

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

Step count

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.

Density 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.

Noise drift speed

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(vec3 p){ p = fract(p*0.3183099 + 0.1); p *= 17.0; return fract(p.x*p.y*p.z*(p.x+p.y+p.z)); }
float noise(vec3 x){ vec3 p=floor(x); vec3 f=fract(x); f=f*f*(3.0-2.0*f);
  float n = mix(mix(mix(hash(p+vec3(0,0,0)), hash(p+vec3(1,0,0)), f.x),
                    mix(hash(p+vec3(0,1,0)), hash(p+vec3(1,1,0)), f.x), f.y),
                mix(mix(hash(p+vec3(0,0,1)), hash(p+vec3(1,0,1)), f.x),
                    mix(hash(p+vec3(0,1,1)), hash(p+vec3(1,1,1)), f.x), f.y), f.z);
  return n;
}

void main(){
  vec2 uv=v_uv*2.0-1.0; uv.x*=u_resolution.x/u_resolution.y;
  vec3 ro=vec3(0.0,0.0,-1.8); vec3 rd=normalize(vec3(uv,1.0));
  float t=0.0, dens=0.0; vec3 col=vec3(0.0);
  for(int i=0;i<64;i++){
    vec3 p=ro+rd*t; float h = noise(p*1.5 + vec3(0.0,0.0,u_time*0.15));
    dens += smoothstep(0.55, 0.9, h)*0.03; t+=0.03; if(t>3.0) break;
  }
  col = mix(vec3(0.05,0.07,0.11), vec3(0.9), clamp(dens,0.0,1.0));
  outColor = vec4(col,1.0);
}