🎮

WebGPU — ブラウザがローカルGPUを直接使う仕組み

WebGLの後継、Vulkan/Metal/DX12レベルの低レベルGPU APIがブラウザに

WebGPUはnavigator.gpuでアクセスするブラウザ内蔵APIだ。インストール不要 — JavaScriptからローカルGPUを直接制御できる。

WebGLと何が違うか

WebGLは2011年に登場した。OpenGL ES 2.0をブラウザにラッピングしたもので、1990年代の設計ベースのためGPUの最新機能を使えなかった。コンピュートシェーダーがなく、暗黙的な状態管理によるドライバオーバーヘッドが大きい。

WebGPUは2023年から登場した次世代API。Vulkan、Metal、DirectX 12のような2015年以降の設計を基盤とする。GPUにより直接的にアクセスでき、コンピュートシェーダーをサポートし、コマンドを複数スレッドで準備できる。

ブラウザ → OS別マッピング

navigator.gpu.requestAdapter()を呼ぶとブラウザが内部的にOS別ネイティブAPIにマッピングする。

  • Windows → DirectX 12

  • macOS → Metal

  • Linux → Vulkan

開発者はこの違いを意識しない。同じJavaScript/WGSLコードが全OSで動く。

どんな作業に使われるか

  1. 映像編集 — フレームごとにGPUシェーダーでエフェクト合成(Tooscut等)
  2. 3Dゲーム/レンダリング — Three.jsもWebGPUバックエンドを追加
  3. AI推論 — ブラウザでモデル実行(ONNX Runtime Web等)
  4. 科学シミュレーション — 大規模並列演算(流体、パーティクルシミュレーション)

CPUは8〜16コアで順次処理するが、GPUは数千コアで同一演算を一度に回す。全ピクセルに同じ関数を適用する作業がまさにこのパターンで、GPU加速効果が大きい。

WebGLは死んだか

WebGLはほぼ全ブラウザで動く。WebGPUは現時点でChrome/Edge程度。SafariとFirefoxは未完成。3Dグラフィックスだけならwebglが互換性面でまだ安全だ。コンピュートシェーダーや最新GPU機能が必要ならWebGPUが唯一の選択肢。

動作フロー

1

navigator.gpu.requestAdapter() → GPUアダプター要求(ブラウザがOS別ネイティブAPIにマッピング)

2

adapter.requestDevice() → GPUデバイス(接続)取得

3

device.createShaderModule({ code: WGSL }) → WGSLシェーダーコンパイル

4

device.createRenderPipeline() → バーテックス/フラグメントシェーダー + ブレンディング設定

5

commandEncoder → renderPass → draw() → GPUが数千コアで並列実行

メリット

  • インストール不要 — navigator.gpu一行でGPUアクセス
  • コンピュートシェーダー対応 — グラフィックスだけでなく汎用GPU計算可能
  • クロスプラットフォーム — 同じWGSLコードがWindows/macOS/Linuxで動作
  • Rust/WASMと組み合わせるとネイティブアプリに近い性能

デメリット

  • Chrome/Edgeのみ完全対応 — Safari非対応、Firefox不安定
  • WebGPU 1.0仕様が最新GPU機能を全てカバーしない
  • WebGL比で学習コストが高い — パイプライン/バインドグループ等の低レベル概念が必要
  • デバイスごとのGPU性能差が大きい — 内蔵GPU vs 外部GPU

ユースケース

ブラウザ映像エディタ — フレーム単位GPUシェーダーエフェクト合成(Tooscut) 3Dゲーム/可視化 — Three.js WebGPUバックエンド、Babylon.js ブラウザAI推論 — ONNX Runtime Web、Transformers.js GPUバックエンド 科学シミュレーション — コンピュートシェーダーで流体/パーティクルシミュレーション