GPU描画の世代交代は本当に来たのか?
GPUによるブラウザ描画と聞いて、あなたが真っ先に思い浮かべるのは何だろうか。
おそらく「WebGL」、あるいは「Three.js」だろう。どちらも、Webブラウザ内で本格的な3D描画を可能にする仕組みとして、10年以上前から実績を重ねてきた。
ところが2023年以降、「WebGPU」という新しい言葉が急激に存在感を増してきた。
WebGPUは、Direct3D 12、Vulkan、MetalといったネイティブGPU APIに準じた設計を持つ新世代のグラフィックスAPIである。言ってみれば、WebGLがOpenGL ESをベースにした「旧世代API」だとすれば、WebGPUはDirectX12世代のモダンAPIと同じ土俵に立っている。特にバッファやバインドグループといった低レベル構造を直接制御できる点が決定的に異なる。
でも、そんなに変わるの?
ここで一歩引いて考えてみたい。
「WebGPUってそんなにすごいの? 速いの? じゃあもうWebGLは終わり?」
…そんなふうに思ってしまう人もいるだろう。実際、WebGPUという単語だけが一人歩きし、
「WebGLはもう古い」などという表現を安直に見る機会も増えてきた。
しかし、実際のところはどうなのか?
この問いを真っ正面からぶつけてみるのが、この記事の出発点だ。
技術の進化 ≠ 実用の進化
確かに、APIとしてのWebGPUは「新しい」。
だが、新しい=優れている/速い/便利 という保証にはならない。
むしろ、新しい技術というのは常に不安定・未成熟・情報不足というリスクを抱えている。
特にWebGPUは以下のような現実的な制約を持つ:
- Safari(Apple系ブラウザ)は未対応。iOSのWebViewでも動かない
- AndroidではVulkanとの棲み分けが曖昧で、モバイルでの普及見通しは不透明
- スマホブラウザはWebGL 2.0ですらサポート状況がバラバラ。ましてやWebGPUは…
つまり、「WebGPUはすごいぞ!」という話と「自分のサービスで使えるかどうか」は完全に別の話である。
だからこそ、やってみた
この記事では、「WebGPUが本当にすごいのか?」を確かめるために、
あえて WebGLとWebGPUでまったく同じ描画をしてみて、FPS・描画品質・使用感などを比較してみた。
使ったのは超定番のThree.js。
幸いにもThree.jsは v0.150 以降で WebGPURenderer が統合されており、同じコード構造でWebGLもWebGPUも描ける環境が整ってきている。
さらに最近、Software Mansionから「TypeGPU」という WebGPU の TypeScriptラッパーまで登場し、「そろそろ始めてみる時期かな?」と思える状況が整ってきた。
本当に世代交代は来ているのか?
この記事では、単なる理論比較ではなく、実際のスクリーンショット、実測FPS、細かい描画の違いまですべて比較する。
そしてそのうえで、
- WebGPUは本当に“次のスタンダード”になれるのか?
- WebGLはまだ現役で戦えるのか?
- TypeGPUやThree.jsなど、今どこに着目すべきか?
を、開発者の視点で総ざらいしていく。
100万粒子のsinアニメでガチ対決
「本当にWebGPUは速いのか?」
それを確かめるために、筆者はWebGL版とWebGPU版の“まったく同じシーン”をTwo-Wayで実装し、挙動・描画・パフォーマンスを比較した。
検証条件:可能な限り公平なデモ
「本当にWebGPUは速いのか?」
それを確かめるために、筆者はWebGL版とWebGPU版の“まったく同じシーン”をTwo-Wayで実装し、挙動・描画・パフォーマンスを比較した。
🎯 検証条件:完全に公平なデモ
| 条目 | 内容 |
|---|---|
| 描画対象 | 100万個のパーティクル |
| 構成 | THREE.Points + BufferGeometry + PointsMaterial |
| アニメーション | 各点が sin(t + 位相) で上下に揺れる |
| 色 | vertexColors によるRGB変調 |
| レンダラー | WebGLRenderer / WebGPURenderer(Three.js) |
| 解像度 | window.innerWidth × window.innerHeight(4K環境) |
| カメラ位置 | camera.position.z = 320 で統一 |
| テスト環境 | Windows 11 / Chrome 138 / RTX 3060 |
実装には Three.js v0.158(WebGL)と v0.175(WebGPU対応)を使用。
特にWebGPU版は await renderer.init() を明示的に呼び出すことで、Three.js側の初期化ルートを通して描画を開始している。
なぜ“パーティクル100万個”なのか?
よくある「WebGPU vs WebGL 比較」は、ベンチマークツールのようなものを使って表面的なfps差だけを比べがちだ。
だが現実のアプリでは、GPUのボトルネックになるのは「描画対象数」と「アニメーション処理量」だ。
そこで、1フレームに100万個の点を描画・揺らし、GPUの帯域・データ更新・シェーダ処理の全てに負荷がかかる構成を用意した。
positions[i * 3 + 1] = Math.sin(time + phases[i]) * 20;
この sin() アニメーションは、CPUでもGPUでもコストが大きい。
さらに vertexColors で1点ごとの色情報も保持するため、データ転送量も無視できない。
結果スクリーンショット
WebGPU(Three.js v0.175)

FPS:45fps
粒子がやや拡散気味に描画され、上下方向に広がりを持つ
明度にムラがあり、少し「もや感」
WebGL(Three.js v0.158)
FPS:45fps
粒子は帯状に収束し、視認性が高く感じられる
色分布がシャープでコントラストが強め

FPSは? → 実はほぼ同等
最初は「WebGPUの方が速いだろう」と予想していたが、実際にはどちらも45fps前後で拮抗していた。
RTX 3060というそこそこのGPUを使っても、描画だけでWebGPUが圧倒的に速くなる、ということはなかった。
見た目に差が出た理由
画数・配置・色設定・カメラ位置は完全一致しているにもかかわらず、見た目には明確な差が出た。
WebGPUの拡散傾向の原因(推定):
geometry.attributes.position.needsUpdate = trueの適用タイミング差(WebGPUでは反映が遅い可能性あり)PointsMaterialの内部シェーダ処理がまだ未最適化(WebGPU側は進化中)setPixelRatio()の影響で粒の大きさ・アンチエイリアス効果に違いが出ている- カメラZが同じでも、描画の精度処理が違えばパースに差が出る
結果的に、WebGPUは自然で柔らかい表現、WebGLは密度のあるくっきり描画となった。
見栄えか性能か、それが問題だ
もしあなたがWebサイトの装飾や視覚効果、UIパーツとしての“粒子”を使いたいなら、WebGLの方が安定して「見たまま作れる」という印象を持つだろう。
一方でWebGPUは、将来的にコンピュート処理や変形メッシュ、大規模パーティクルに進化する余地を持つ。
「今すぐにWebGPUで大勝利!」とはならなかったが、見えない部分での“地ならし”は着実に進んでいると感じられる結果となった。
パフォーマンス神話を斬る:WebGPUは万能じゃない
WebGPUの名前を聞くと、「とにかく速い」「もうWebGLには戻れない」といった期待を抱く人も多い。
確かに、それはある面では正しい。だが、少なくとも描画パフォーマンスにおいては、WebGPUはまだ「無条件で優位」とは言い切れない。
描画だけならWebGLと大差ない理由
実際の開発で、WebGPUがWebGLとほぼ同等のパフォーマンスになる理由を以下にまとめよう。
| 比較軸 | WebGL | WebGPU |
|---|
| 描画効率 | 十分高い(GPUパスに乗る) | より細かく制御できるが、冗長な設定も必要 |
| ドライバ最適化 | 10年以上の蓄積がある | 各ブラウザ実装がまだ発展途上 |
| 利用ライブラリ | Three.jsなどで超成熟 | 対応ライブラリはようやく整い始めた |
| コンピュート用途 | 不可 | 可能(ここが最大の武器) |
つまり、「単なる描画」「ただのエフェクト」であれば、WebGLでも十分戦えるどころか、手軽で扱いやすいという現実がある。
むしろWebGLは今が最終進化形?
WebGLはOpenGL ES 2.0/3.0ベースであるため、確かに最新のGPU制御能力には限界がある。
だが、それが逆に“こなれた技術”としての安定性・互換性の高さ”に繋がっている。
- iOS・Android・Chrome・Firefox・Edge あらゆる環境で高い動作実績
- 企業サイトやインタラクティブ広告など、信頼性重視の場面でWebGLが選ばれ続けている
- Three.jsやPixiJSなど、WebGLをベースにしたエコシステムは今なお拡張中
特に、ちょっと動くお洒落なWeb装飾を求めるだけなら、WebGLで十分すぎる。
WebGPUの真価は「描画」ではなく「計算」にある
WebGPUの真骨頂は、描画だけではない。
Compute Shader(コンピュートシェーダ) を使って、GPUで直接データ処理を行う機能がWeb上でも正式解禁されたことこそが最大の革命なのだ。
WebGPUならできることの例:
- 物理エンジンの衝突判定をGPUで並列処理
- 数百万体のパーティクルに「相互作用」を持たせる
- 動的な地形変形(リアルタイム頂点生成)
- スキンメッシュの骨格アニメーションをGPUオフロード
- AIモデルの推論処理(ONNXランタイムなど)
つまり、“GPUを使ってリアルタイムにガチ処理したい”層にとっては、WebGPUはまさに希望の星となる。
それでも注意点は多い
ただし、WebGPUを触ってみて分かったのは「簡単に触れるようで、奥が深すぎる」という点だ。
- ドキュメントが少ない(W3C仕様がややこしい)
- 各ブラウザのサポート状況が異なる
- Apple(Safari)はMetal推し → WebGPU対応は極めて不透明
- モバイル(Android)はVulkanベースだが、実装にバラツキ
- 低レベルAPIゆえに、ラップライブラリがなければハードルが高い
結果、せっかくWebGPUを使っても、WebGLより遅くなることも珍しくない。
結論:使い分けが大事
WebGPUは決して「WebGLの完全上位互換」ではない。
むしろ、目的が明確にハマる領域(高負荷なデータ処理)でこそ、その力を発揮する。
「見せる」ならWebGL、「計算する」ならWebGPU
その棲み分けが、今後ますます重要になっていく。
じゃあWebGPUはいつ使うのか?実戦ユースケースと限界
WebGPUの「使いどころ」を見極める
ここまでの話を踏まえると、「WebGPUって結局、どこで使えばいいの?」という疑問にぶつかる。
答えはシンプル。
WebGPUが「刺さる」ユースケース
① GPUによる並列計算がボトルネックになる場面
- 流体シミュレーション
- 群集行動AI(Boids系)
- ソフトボディ物理演算
- GPUレイトレーシング(Path Tracer系)
GPUの「1万コアが一斉に動く」力を使って初めて意味があるような処理は、WebGPUでこそ威力を発揮する。
② 大規模な粒子・頂点処理
- 10万点を超える点群やパーティクルの動き
- GLSLでは表現しきれない複雑な相互作用
- Compute→Vertex変換での頂点座標更新など
今回制作したThree.jsベースのWebGPUパーティクルデモはまさにこの応用の第一歩。
WebGLでも同じことはできるが、拡張性・演算密度ではWebGPUに軍配が上がる。
③ AI推論処理やリアルタイム画像処理
- ONNX Runtime WebGPU backend
- Style Transfer、画像分類、顔認識のローカル実行
- GPGPUベースのフィルター適用(高速ブラー、エッジ検出など)
今後、AI + WebUIの組み合わせは爆発的に増える。そこにWebGPUが不可欠となる。
実際に作ってみた感想:「地力が求められる」
WebGPUはとにかく低レベル。
昔のOpenGLと同じで、バッファもパイプラインも全部自分で構成する必要がある。
- 頂点バッファ生成
- シェーダーコード記述(WGSL)
- バインドグループ設計
- 描画ループの制御
- シェーダーで使う構造体の設計まで明示的に指定
たとえThree.jsを使ったとしても、内部的にかなりの知識が求められる。
「かじってすぐにリッチな表現!」とはいかない。
むしろ「踏み込んでこそ面白い」領域。
WebGPUの「限界」も忘れずに
❌Apple環境の足並みの悪さ
- SafariのWebGPU実装は未完成
- Metalベースで独自路線を推進
- iOS/iPadOS系の対応は今後も不透明
❌ モバイル端末での実行が不安定
- Android Chrome はVulkanベースだが、端末差が大きい
- 消費電力、サーマルスロットリングの懸念
- モバイル用途での継続描画・リアルタイム処理はまだ過酷
❌ ブラウザ依存が強く、最適化は手探り
- FirefoxはそもそもまだWebGPU対応が弱い
- 仕様自体が更新中 → 将来的に非互換リスクあり
とはいえ「遊べる技術」ではある
特筆すべきは、WebGPUでもThree.jsが使えるという事実。
これにより、GLSLに慣れたクリエイターが比較的軽い負担でWebGPU表現に踏み込める。
MITライセンスで商用利用も可能、今後の主力技術への布石としては十分すぎる素材だ。
WebGPUの未来と『TypeGPU』の可能性
WebGPUは、非常にパワフルなAPIでありながら、開発者にとっては決して敷居の低いものではない。
その複雑さと低レベルさは、まさに「プロ向け」の道具である。
そこで登場したのが TypeGPU──
GitHub+13typegpu.com+13GitHub+13
TypeGPUとは何者か?
TypeGPUは、WebGPUの持つ複雑なAPI構造をラップし、より直感的かつ型安全に利用できるようにしたライブラリだ。
正式にはまだ開発途上だが、その思想と設計は非常に先進的である。
特長として以下が挙げられる:
- TypeScriptフル対応:強力な型システムによる安全な記述が可能
- 宣言的なレンダーパイプライン定義:シェーダーやバッファの構成をモジュール的に扱える
- モダンなフロントエンドとの親和性:Next.jsやViteなどとの連携を意識した設計
公式ドキュメントでは「next-generation WebGPU library」と謳っており、
従来のImperativeなAPI呼び出しからの脱却を目指している。
WebGPUが「選ばれにくい」理由を潰す試み
現状のWebGPUが敬遠される理由は明確だ。
- セットアップが煩雑
- 記述が冗長で習得コストが高い
- デバッグが困難で、動かない理由が分かりづらい
TypeGPUは、こうした問題を「構文の抽象化」によって吸収しようとしている。
- 高度な処理は背後で動かし、記述は簡潔に
- シェーダーやレンダーパスの管理を構造化された形式で記述
- WebGPUの知識が浅くても、構文と型だけで正しく書ける世界を目指している
これはまさに「React以前のJavaScriptに戻れない」という現象に似ている。
TypeGPUがそのような存在になる可能性を秘めているのだ。
どんな開発をラクにしてくれるのか?
✔ 型エラーをビルド時に検出
たとえば、{ position: vec3f; } というシェーダー構造体に対し、TypeScript上でも同じ型定義で扱えるため、
const buf = root.createBuffer(d.vec3f);
buf.write([1,2,3]);
とすれば buf に誤った形状のデータを書き込む心配が強く減る。
✔ bindGroupの型チェック
シェーダー側で @binding(0) に uniform が必要なのに、JSコードで間違った bindGroup を作成すると、コンパイルエラーで即検出できる 。
✔ WebGPU資産との共存
既存のGPUバッファを取り込んで TgpuBuffer として扱うことも可能で、既存コードベースに段階導入しやすい構成だ 。
③ 他にもある実用例
- typegpu-confetti:React Native向けにGPUで演算する紙吹雪アニメーションコンポーネント
- React Native用Workletsと統合し、UIスレッドの滑らかなアニメーションを可能にする仕組みも動き出している
さらに、公式にMNIST推論などのサンプルも公開されており、AI向けの用途にも広がり始めている 。
④ 「Three.js+TypeGPU」の相性
- WebGPUへの初歩的な導入は Three.jsの
WebGPURendererだけで実現可能 - しかし高度な用途ではWGSLやbindGroup周りの制御は複雑になる
- そんなときTypeGPUで型保証付きに書き換えてしまえば、メンテ性もUP
- 「バイブコーディング×Pure JS」 な開発体験にも自然に馴染む選択肢です
⑤ 結論:今こそTypeGPUに“触れてみる時期”
TypeGPUは未成熟ながらも:
- MITライセンスで商用利用できる
- 型安全な開発スタイルを保証する
- JS/WGSLの齟齬を減らす
- 既存プロジェクトにも統合可能
という点で非常に魅力的です。
「まず試してみる」価値は十分あり、この先WebGPUを本気で使うならTypeGPUは“覚えておいて損はない”ツールになるでしょう。
Three.jsは頼りになる味方
Three.jsの現在地
Three.js は、2010年代初頭から続く老舗の3Dグラフィックスライブラリであり、現在も現役バリバリだ。
その理由は、以下のような柔軟性と実用性のバランスの良さにある。
- WebGLとWebGPUの両方をサポートしている(
WebGLRenderer/WebGPURenderer) - 数行のコードでシーン/カメラ/オブジェクト/ライティングが整う
- コミュニティが大きく、豊富なサンプルと拡張ライブラリが揃っている
- MITライセンスのため、商用プロジェクトにも安心して使える
加えて、GLSLやWGSLを直接書かずとも、シェーダー風の表現が手軽に実現できる点も大きい。
WebGPUへの進化を自然に体験できる
Three.js の最新バージョン(v0.150〜)では、WebGPURenderer が統合されている。
これにより、次のような移行フェーズでの負担を大幅に軽減できる。
- 既存のThree.jsコードを一部書き換えるだけで WebGPU が試せる
- カメラやマテリアルなどの基本構成は従来と同じ
- WebGPU 対応の環境が限定的な場合でも、条件付きで WebGL にフォールバックできる
たとえば以下のような初期化コードで、両対応を実現できる。
const useWebGPU = isWebGPUSupported();
const renderer = useWebGPU ? new WebGPURenderer() : new WebGLRenderer();
このように、Three.js はWebGL世代からWebGPU世代への橋渡し役として最適な存在となっている。
難しい部分はライブラリが吸収してくれる
本来 WebGPU では、以下のような手間のかかる手続きが必要となる。
- GPUバッファの生成とメモリマッピング
- WGSL(WebGPU Shading Language)による明示的なシェーダー記述
- bindGroup や pipelineLayout の詳細な指定
これらは非常にパワフルではあるが、アプリ開発の視点では“面倒”な作業ともいえる。
Three.js や TypeGPU のようなラッパーライブラリを利用すれば、これらの複雑性を吸収しつつ、パフォーマンスの恩恵を享受することが可能だ。
④ バイブコーディングにも相性よし
昨今話題となっている「バイブコーディング(Vibe Coding)」──
これは、AIと対話しながら雰囲気で作る新しいスタイルのコーディングだ。
Three.js はその代表格として最適である。
- 試しにオブジェクトを1個描画 → 反応を見て調整
- カメラの位置、ライティングの強さ、色味などをノリで即変更
- 「雰囲気で動かす」ことと「結果を即座に確認できる」ことが一致する
バイブコーディングは、“完成を急がず、流れに乗る”開発スタイルだ。
Three.js の即時性・柔軟性・視覚性は、このムーブメントと極めて相性が良い。
まとめ:Three.jsがいる限り、WebGLもWebGPUも怖くない
- Three.jsは、WebGLとWebGPUの両方を跨ぐ“次世代向け汎用エンジン”である
- 難しいことはお任せして、本質的な表現や演出に集中できる
- TypeGPUなどとの組み合わせにより、型安全な新世代開発体験も可能
- そして、バイブコーディングとの融合で、誰もが気軽に“創造”に手を伸ばせる時代になった
まとめ:描画技術は「使い分け」の時代へ
WebGL vs WebGPU──この比較は、あたかも「古い vs 新しい」「遅い vs 速い」という単純な図式で語られがちだ。
だが現実は、そんな単純な話ではない。
WebGLは今も現役、死んでいない
確かに、WebGPUは最新のAPIであり、今後の本命と言われている。
だがそれは「全てにおいて優れている」という意味ではない。
むしろ、一般的なUI装飾や軽い3D表現なら、WebGLで十分という場面は多い。
対応ブラウザも広く、開発者も多い。リソースや知見の蓄積が段違いである。
WebGLは、“枯れた技術”として信頼できる選択肢であり、まだまだ第一線で戦える。
WebGPUは使い所を見極めてこそ
一方で、WebGPUは構造的に優れたアーキテクチャを持つ。
本格的にGPUを使いたいなら、これ以上ない選択肢だ。
- 数万、数十万の粒子の並列計算を伴う表現
- コンピュートシェーダーによる物理演算やAI推論
- ポストプロセスやレイトレーシングの最適化処理
こういった領域では、WebGLではそもそも表現しきれない。
ただし、開発のハードルは高い。環境も限られ、対応ブラウザ・OSにも差がある。
「誰でも手軽に触れるもの」では、まだないのが現状だ。
今は“二刀流”の時代
WebGLとWebGPU。どちらが正しいか?ではない。
どちらも目的によって使い分ける時代に入っている。
Three.js などのライブラリを使えば、どちらも同じコードベースで試せる。
WebGPU未対応環境ではWebGLにフォールバックすればよい。
- サイトの装飾やインタラクション → WebGL
- データビジュアライゼーションやリアルタイム演算 → WebGPU
このような技術の最適配置が、今の開発者に求められている視点だ。
TypeGPUや新世代ライブラリで、未来はさらに手軽に
そして、TypeGPU のような新たな抽象化ライブラリが登場したことで、
WebGPUの敷居は大きく下がる可能性が出てきた。
- 型安全・モジュール指向・フレームワーク統合など
- 複雑なWebGPU APIを隠蔽し、直感的な構成で使える未来が近づいている
- そして「バイブコーディング」のような、創造と即応が融合する時代に突入しつつある
これまで「GPUを触るのは職人芸」とされていたが、
今後は 誰もが感覚的にGPUパワーを利用できる世界がやってくる。
結論:次世代Web開発は、“心地よさ”と“爆速”の二兎を追え
- 手軽に、楽しく、ノリで作るなら WebGL × Three.js × バイブコーディング
- ハードな処理・本格演算なら WebGPU × TypeGPU × モダン構成
そのどちらにも、確かな活路がある。
描画技術の世代交代は、単なる“置き換え”ではなく、
多様性と選択肢の拡充として私たちの手元にやってきている。

