Volver a 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

Humo en espiral

En Humo en espiral Volume Shader, la sección “Preset overview” se centra en: 2D noise-based swirling smoke pattern.. Sirve para entender complejidad de shader, ruta gráfica del navegador y estabilidad GPU.

En pruebas reales, fija navegador, preset, tamaño de ventana, energía y estado térmico. Si el equipo se calienta o se bloquea, baja la complejidad o detén la prueba.

Factores de rendimiento

Noise layers

Para comparar resultados de Volume Shader BM, fija navegador, preset, tamaño de ventana, modo de energía y estado térmico; esos factores cambian FPS y frame time.

Coordinate warping

Para comparar resultados de Volume Shader BM, fija navegador, preset, tamaño de ventana, modo de energía y estado térmico; esos factores cambian FPS y frame time.

No ray loop

Para comparar resultados de Volume Shader BM, fija navegador, preset, tamaño de ventana, modo de energía y estado térmico; esos factores cambian FPS y frame time.

Parámetros editables

Twirl strength

Para comparar resultados de Volume Shader BM, fija navegador, preset, tamaño de ventana, modo de energía y estado térmico; esos factores cambian FPS y frame time.

Noise scale

Para comparar resultados de Volume Shader BM, fija navegador, preset, tamaño de ventana, modo de energía y estado térmico; esos factores cambian FPS y frame time.

Smoke threshold

Para comparar resultados de Volume Shader BM, fija navegador, preset, tamaño de ventana, modo de energía y estado térmico; esos factores cambian FPS y 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);
}