Guide

Volume Shader BM Test — 测试方法

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

🚀 volumeshadertest
6月24日
5 分钟

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 — 最多 200 次光线步进,求解等级 8。
  • Medium — 最多 600 次光线步进,求解等级 8。
  • Heavy — 最多 1002 次光线步进,求解等级 8。
  • Extreme — 最多 1500 次光线步进,求解等级 12。

所有预设都使用界面显示的 canvas 分辨率;光线可能在达到最大步数前提前退出。

4. 指标

  • Average FPS — 整次运行的每秒帧数,但会忽略最开始的 1 秒(见 §6)。
  • Min / Max FPS — 运行过程中最差与最佳的 1 秒区间。
  • Frame time — 每帧所需的毫秒数。60 FPS ≈ 16.7 ms;30 FPS ≈ 33.3 ms。
  • Stability — 最低 1 秒 FPS 除以最高 1 秒 FPS 后得到的百分比。它描述本次运行的波动,不能单独证明发生了热降频。

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 计算与本地结果汇总都在浏览器内完成。benchmark 不上传硬件指纹、GPU ID 或分数。可选的 Google Analytics 仅在同意后加载,广告脚本目前已禁用。详情和同意控制请查看隐私政策。

运行测试

开始 Volume Shader BM 测试 →

相关

标签
测试方法透明度工作原理