volumeshader_bm:一个浏览器里的 GPU 压力测试
volumeshader_bm 最初是国外开发者公开的 WebGL 基准测试项目:它把一段体积着色器(volume shader)塞进 fragment shader,对三维分形做实时光线步进(ray marching)。名字里的 "bm" 是 benchmark(基准测试) 的缩写,因此你也常看到 volumeshader-bm、volumeshader_bm 测试等写法,指的是同一个东西。
它渲染的对象叫 Mandelbulb——把经典 Mandelbrot 分形推广到三维后的形态,表面拥有无限细分的花椰菜状细节。为了让这些细节“长”出来,GPU 每帧都要沿每条视线做上千次距离场求值,计算量非常夸张,因此特别适合用来检验 GPU 的真实图形算力与散热稳定性。
因为渲染画面酷似一团色彩诡谲、缓缓翻滚的毒蘑菇云,国内玩家给它起了「毒蘑菇测试」的绰号,并习惯把它当成手机/电脑通用的一项快速压测工具。本站即其官方在线版入口:点击这里直接开始 30 秒跑分。
它是怎么“烤”显卡的:原理一句话版
毒蘑菇测试的核心思路很简单:沿每一条视线,一小步一小步地采样分形距离场,直到撞上“蘑菇表面”;再在附近用二分求根把撞击点磨精确,最后用相邻点的差值估算法线并上色。 拆开看有四个关键环节:
- 距离场(kernal):对每个空间点做若干轮 Mandelbulb 迭代,返回一个带符号的距离值——正数在表面外、负数在表面内。
- 光线步进:默认沿视线以 0.002 的比例步长前进,最多 1000 步,逐点检测是否跨越表面。
- 黄金分割搜索:当出现“先负后正”的极值段时,用黄金分割法在 8 轮内逼近局部极值,用于捕捉细碎表面。
- 二分求根:SOLVER 次二分把交叉点收敛到高精度,交点距离还决定后续的透视深度与法线采样。
简单说:迭代越多、步进越密、求根越细,画面细节越丰富,GPU 需要算的次数也越多——这正是它能把手机芯片和中低端显卡瞬间压满的原因。
七个可调参数分别控制什么?
原版 volumeshader_bm 想要改参数得手写 GLSL;本站在线版把它做成了可视化滑块,改完即时重编译、立刻生效。参数对性能的影响见下表:
| 参数 | 默认值 | 作用 | 对负载的影响 |
|---|---|---|---|
| 分形迭代次数 iter | 5 | 距离场内 Mandelbulb 迭代轮数,决定细节层级 | 越高越重(约线性增长) |
| 分形幂次 power | 8.0 | 迭代中的指数幂,改变分形花瓣形态 | 轻微 |
| 角度倍数 ang | 8.0 | 方位角/极角乘数,决定“花瓣”数量 | 轻微 |
| 求解精度 SOLVER | 8 | 二分求根轮数,越高交点越精确 | 越高越重 |
| 配色频率 color | 10 | 按距离做正弦调色的频率 | 几乎无 |
| 渲染分辨率 | 1024 | 实际渲染像素边长 | 像素数按平方增长,最“吃”参数 |
| 自动旋转速度 | 0.010 | 相机自动环绕速度 | 几乎无 |
横向对比跑分时请保持参数一致——分辨率从 1024 提到 2048,像素数是原来的 4 倍,帧率通常会掉一大截,但这不代表 GPU 变差了。
volumeshader_bm 和 3DMark、甜甜圈有什么区别?
- 运行环境:3DMark、FurMark 是装在本地的原生程序,覆盖大量 GPU 特性;volumeshader_bm 是纯浏览器 WebGL 测试,不装任何东西,手机也能跑。
- 负载性质:它集中在片元(像素)着色器的密集数值计算上,恰好能把移动端 GPU 与核显压满,和“烤机”类工具类似。
- 互补关系:想看整机游戏性能用 3DMark/游戏实测,想快速验证“这块显卡满载稳不稳、热不热”用毒蘑菇测试这类压测更方便。
常见误解先帮你排掉
- “volumeshader_bm 伤手机吗?” 正常跑 30 秒安全,发热是满载的正常现象,详见伤手机吗 · 安全解读。
- “是不是病毒?” 不是。它是纯网页渲染测试,不下载安装、不申请权限,详见常见问题 FAQ。
- “跑分偏低是不是手机坏了?” 更可能是没关后台、散热不佳、浏览器差异或首次编译着色器的开销,建议完整跑完 30 秒再看平均分。