volumeshader_bm 是什么?毒蘑菇测试的原理与参数详解

volumeshader_bm(也写作 volumeshader-bm / volume shader benchmark)是一款在浏览器里运行的体积着色器基准测试,因渲染出翻滚的「毒蘑菇云」而被玩家称作毒蘑菇测试。这篇把它的原理、参数和常见误解一次讲清楚。

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;本站在线版把它做成了可视化滑块,改完即时重编译、立刻生效。参数对性能的影响见下表:

参数默认值作用对负载的影响
分形迭代次数 iter5距离场内 Mandelbulb 迭代轮数,决定细节层级越高越重(约线性增长)
分形幂次 power8.0迭代中的指数幂,改变分形花瓣形态轻微
角度倍数 ang8.0方位角/极角乘数,决定“花瓣”数量轻微
求解精度 SOLVER8二分求根轮数,越高交点越精确越高越重
配色频率 color10按距离做正弦调色的频率几乎无
渲染分辨率1024实际渲染像素边长像素数按平方增长,最“吃”参数
自动旋转速度0.010相机自动环绕速度几乎无

横向对比跑分时请保持参数一致——分辨率从 1024 提到 2048,像素数是原来的 4 倍,帧率通常会掉一大截,但这不代表 GPU 变差了。

volumeshader_bm 和 3DMark、甜甜圈有什么区别?

  • 运行环境:3DMark、FurMark 是装在本地的原生程序,覆盖大量 GPU 特性;volumeshader_bm 是纯浏览器 WebGL 测试,不装任何东西,手机也能跑。
  • 负载性质:它集中在片元(像素)着色器的密集数值计算上,恰好能把移动端 GPU 与核显压满,和“烤机”类工具类似。
  • 互补关系:想看整机游戏性能用 3DMark/游戏实测,想快速验证“这块显卡满载稳不稳、热不热”用毒蘑菇测试这类压测更方便。

常见误解先帮你排掉

  • “volumeshader_bm 伤手机吗?” 正常跑 30 秒安全,发热是满载的正常现象,详见伤手机吗 · 安全解读。
  • “是不是病毒?” 不是。它是纯网页渲染测试,不下载安装、不申请权限,详见常见问题 FAQ。
  • “跑分偏低是不是手机坏了?” 更可能是没关后台、散热不佳、浏览器差异或首次编译着色器的开销,建议完整跑完 30 秒再看平均分。
想直接测?回首页在线工具开始 30 秒跑分;手机用户建议先看手机毒蘑菇测试指南。

原理看懂了,上手跑一次?

打开首页工具,把迭代次数从 5 拉到 8、分辨率调到 1536,你会立刻感受到帧率的变化——这就是参数与 GPU 负载的关系。

开始跑分 查看调参教程