CrossRoad

XRを中心とした技術ブログ。 Check also "English" category.

Babylon.jsのWebGPUを最小構成で使ってみよう

Babylon.jsではv5.0以降でWebGPUのサポートが開始しました。
WebGPUについては公式ドキュメントに色々と記載があります。今回は、最小構成で記述する方法を紹介します。

1. WebGPUとは

こちらの記事がわかりやすいので引用させていただきました。

WebGPUは、ウェブブラウザ向けの次世代のグラフィックスおよび計算APIです。現在、ウェブの3D表現や高パフォーマンスを求める2D表現では、多くのコンテンツでWebGLが使われていますが、WebGPUはWebGLの後継となりうる技術です。WebGLをより効率的かつパワフルに置き換えることを目的として、現在W3Cによって策定が進められています。
WebGPUは、Direct3D 12(Windows)、Metal(macOS、iOS)、Vulkanヴァルカン(Android)といったモダンでよりGPUのネイティブに近い3D APIに直接アクセスすることで、高いパフォーマンスと効率を実現します。

引用:WebGPUがついに利用可能に - WebGL以上の高速な描画と、計算処理への可能性 - ICS MEDIA

その他、こちらの記事もお勧めです。なぜWebGL (OpenGLベース) からWebGPUが求められているかをわかりやすく解説されています。

qiita.com

2. WebGPUを使うには

WebGPUに対応したブラウザが必須です。2023年5月現在ではPCのChromeとEdgeの最新版であれば対応しています。

Can I use for WebGPU as of 2023/5

また、WebGPUを使った描画をするには、少なくとも2種類の方法があります。

(1) W3Cが規定するWebGPU APIの仕様に沿って記述する

APIの仕様はこちらにあります。
developer.mozilla.org

(2) Babylon.js、three.jsなどのフレームワークに沿って記述する

フレームワークがWebGPUに対応していれば可能です。Babylon.jsではv5よりfull supportを表明しており、three.jsもサポートが進んでいるようです。

3. Babylon.jsでWebGPUを使った記述をするには

Babylon.jsで最初にengineを指定する箇所があるのですが、ここをWebGPUEngineに変えるだけです。(もちろん、細かく制御すると差分が増えますが、今回はそこは考えないことにします)

以下のコードは、全く同じgltf形式の3DモデルをWebGL、WebGPUで表現するソースコードの差分です。

Diff code of WebGL and WebGPU

この画像では他の行にも差分が表示されていますが、それはtitleタグの表示内容変更など、本質的ではない箇所でした。

最小構成の記述を記載します。動作しない場合、Babylon.jsのライブラリ ( <script> タグなどで読み込むもの)が最新版であることを確認してください。

gist.github.com

4. Babylon.jsでのWebGLとWebGPUのパフォーマンス比較

WebGPUはGPUを使うため、CPUベースのWebGLよりもパフォーマンス向上が見込めます。わかりやすい比較をしたソースコードがあったので実行しました。

以下は、10,000本のtree meshを表示時のfpsとCPUの実行時間です。

10,000 tree meshes on WebGL & Babylon.js

10,000 tree meshes on WebGPU & Babylon.js

WebGPUの方がfpsが格段に高いのと、CPUの実行時間をほぼ使っていないことがわかります。

なお、CPUの実行時間はこのような記述で測定されています。
gist.github.com

実際に確認したい場合、こちらのリポジトリにあるforestWebGL.htmlとforestWebGPU.htmlを実行してください。
Website/build/Demos/WebGPU at master · BabylonJS/Website · GitHub

5. おわりに

Babylon.jsのDocumentationにはlimitationについても言及されています。現時点でWebGPUで何でもできるわけではありませんが、今回示した範囲の描画は可能です。

WebGPUについてまた調べたら追記します。


追記:
別の記事で書いたSnapshot renderingにより、静的シーンの描画パフォーマンス向上が見込めます。ただ、今回紹介したforestサンプルはすでにSnapshot renderingのfast modeを実行済みでした。

www.crossroad-tech.com