Volume Shader BM Test — 测试方法
说明这个 Benchmark 的底层运行方式:测试模式、指标、准确性限制,以及这项测试不能代表什么。

Volume Shader BM Test 是一个小型、透明的基准测试。本页会清楚说明它到底测量什么、四种测试模式、结果面板中的指标,以及哪些情况下你看到的数字不适合拿来公平比较。
1. 渲染架构
这个测试完全通过单个 fragment shader 在 WebGL 2.0 中运行。没有原生插件、没有辅助扩展,也没有离屏 worker。vertex shader 会绘制一个全屏三角形;fragment shader 则负责屏幕上每个像素的全部计算。
2. Shader 做了什么 — 使用 SDF 的 raymarching
fragment shader 并不是栅格化多边形,而是使用 Signed Distance Fields(SDF)进行 raymarching。对于每个像素,GPU 会从摄像机发射一条虚拟射线,并以离散步长向前推进,直到它碰到由 SDF 定义的表面,或离开场景。每一步都会评估完整的距离场,也就是一大段数学运算,会强力压榨 shader 核心。
这与我们在 WebGL 2.0 raymarching 深度解析 中详细说明的是同一种技术。
3. 测试模式
共有四种模式。它们不只是分辨率缩放,每种模式都会运行不同的 shader 工作负载,因此分数不能直接互相比对:
- Light — 步数更少、分辨率更低。设计目的是让普通移动 GPU 也能以可用 FPS 运行,用作基准值。
- Medium — 中等迭代次数,使用 canvas 原生分辨率。大致接近“正常但较吃性能”的 shader 工作负载。
- Heavy — 每个像素超过 1,000 次 shader 迭代。多数桌面 GPU 会落在 30–60 FPS 范围。
- Extreme — 负载提高到高端独立 GPU 也开始掉帧的程度。适合给顶级 GPU 排名,不适合普通随手比较。
4. 指标
- Average FPS — 整次运行的每秒帧数,但会忽略最开始的 1 秒(见 §6)。
- Min / Max FPS — 运行过程中最差与最佳的 1 秒区间。
- Frame time — 每帧所需的毫秒数。60 FPS ≈ 16.7 ms;30 FPS ≈ 33.3 ms。
- Stability — 运行过程中帧时间是否一致。较高的稳定性代表 GPU 维持了性能;较低则代表发生了降频、被系统抢占,或正在竞争资源。
FPS 结果指南 会用更日常的方式说明如何解读这些分级。
5. 测试模式不能直接比较
每个模式的内部循环预算不同。45 FPS 的 Light 分数和 45 FPS 的 Heavy 分数,并不代表相同的 GPU 工作量。比较两台设备时,请务必在两者上运行相同模式,最好也使用相同浏览器。
6. 第一次运行故意不稳定
页面第一次加载时,浏览器会将 GLSL 编译成特定驱动程序使用的二进制格式。在某些驱动上,这会花费数百毫秒,并表现为测试开始时的卡顿。请舍弃第一次结果,使用第二次结果。比较设备时,每台都运行两次。
7. 移动设备结果不只受 GPU 影响
手机基准测试同时受到散热余量和操作系统电源策略的强烈影响,并不只是 GPU 芯片本身。省电模式 / 低电量模式、屏幕亮度、保护壳材质,甚至握持方式都会改变分数。若要公平比较手机,请接上电源、关闭省电模式,并优先看 stability 而不是峰值 FPS。详情请参考手机 GPU 测试指南。
8. 这个测试不是什么
Volume Shader BM Test 测量的是合成工作负载下的 shader ALU 吞吐量。它很适合用来检查浏览器、驱动程序或设备是否丢失了一部分 GPU 计算能力。但它不是:
- 3DMark、Geekbench GPU 或 GFXBench 这类原生基准测试的替代品。
- 游戏 FPS 的预测工具。游戏通常更受 draw call 和纹理带宽影响,而不是 shader ALU。
- 内存带宽、光线追踪性能或视频解码能力的测量。
9. 隐私
所有渲染、FPS 计算与结果汇总都在你的浏览器本地完成。我们不收集硬件指纹、GPU ID 或测试结果。我们使用标准分析与广告服务,这些服务可能会设置 Cookie,但没有任何基准测试数据会离开你的设备。