Guide

Volume Shader BM Test — 测试方法

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

🚀 volumeshadertest
昨天
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 — 步数更少、分辨率更低。设计目的是让普通移动 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,但没有任何基准测试数据会离开你的设备。

运行测试

开始 Volume Shader BM 测试 →

相关

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