返回预设库
Signed distance field density source
Fixed upper-bound ray-marching loop
Adaptive step size based on local density
Camera-space aspect correction with u_resolution

雾球

雾球 Volume Shader 中的「Preset overview」重点说明:Orbiting fog around a sphere via simple raymarch. 这部分适合用来判断 shader 复杂度、浏览器图形路径和 GPU 稳定性。

实际测试时,请固定浏览器、预设、窗口大小、电源模式和热状态;如果页面变得卡顿或设备发热明显,应降低复杂度或停止运行。

性能因素

Ray steps

比较 Volume Shader BM 结果时,应固定浏览器、预设、窗口大小、电源模式和热状态;这些条件变化会直接影响 FPS 与 frame time。

Adaptive stepping

比较 Volume Shader BM 结果时,应固定浏览器、预设、窗口大小、电源模式和热状态;这些条件变化会直接影响 FPS 与 frame time。

Resolution

比较 Volume Shader BM 结果时,应固定浏览器、预设、窗口大小、电源模式和热状态;这些条件变化会直接影响 FPS 与 frame time。

可编辑参数

Sphere radius

比较 Volume Shader BM 结果时,应固定浏览器、预设、窗口大小、电源模式和热状态;这些条件变化会直接影响 FPS 与 frame time。

Density multiplier

比较 Volume Shader BM 结果时,应固定浏览器、预设、窗口大小、电源模式和热状态;这些条件变化会直接影响 FPS 与 frame time。

Step distance

比较 Volume Shader BM 结果时,应固定浏览器、预设、窗口大小、电源模式和热状态;这些条件变化会直接影响 FPS 与 frame time。

#version 300 es
precision highp float;

out vec4 outColor;
in vec2 v_uv;

uniform float u_time;
uniform vec2 u_resolution;

// Simple fake volumetric fog via raymarch toward a sphere
float sdSphere(vec3 p, float r) { return length(p) - r; }

float map(vec3 p) {
  // Central sphere as density source
  float d = sdSphere(p, 0.7);
  return d;
}

vec3 rayDir(vec2 uv, float fov) {
  vec2 xy = uv * 2.0 - 1.0;
  xy.x *= u_resolution.x / u_resolution.y;
  float z = 1.0 / tan(radians(fov) * 0.5);
  return normalize(vec3(xy, z));
}