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,但沒有任何基準測試資料會離開你的裝置。