C言語
ゲームエンジン
WebAssembly

自作ゲームでWebAssemblyを試してみた

はじめに

私はEmscriptenを使って趣味でゲームを作っています。
WebAssemblyは興味はあったのですが、難しそうでかつあまり意味がないと思っていたのですが、思ったより簡単で明確な違いが数値で現れました。

やったこと

過去作にemccにコンパイルオプションをつけてemcc -s WASM=1にしました。

結果比較1 ホッピンパペット

ホッピンパペット(git)

普通にビルドしたらファイルサイズは以下のようになりました。

emcc .js
最適化無し 2045027
-O3 473131
-Os 394081
-Oz 391771

一方WebAssemblyオプションをつけてビルドしたらファイルサイズは以下のようになりました。

emcc -s WASM=1 .js .wasm 通常ビルドとの比較
最適化無し 246537 451004 34%
-O3 128515 247115 79%
-Os 128515 196081 82%
-Oz 128515 194180 82%

結果比較2 グルリンダッシュ

グルリンダッシュ(git)

普通にビルドしたらファイルサイズは以下のようになりました。

emcc .js
最適化無し 2117354
-O3 487930
-Os 445771
-Oz 442939

一方WebAssemblyオプションをつけてビルドしたらファイルサイズは以下のようになりました。

emcc -s WASM=1 .js .wasm 通常ビルドとの比較
最適化無し 258114 452756 34%
-O3 136099 240600 77%
-Os 136099 203777 76%
-Oz 136099 201701 76%

ファイルサイズが減った

WebAssembly化することにより2割ほどファイルサイズが減りました。
最適化無しの場合にものすごくファイルサイズが減っているのは改行やコメントなどの余計なコードの影響なのでしょうか。

速度はどうか

小規模なゲームでもともと速度も重くなく、比較のしようがありません。
ゲームの場合は描画が処理のボトルネックになることが多く、
行列演算を多用しない場合は速度的なメリットはなさそうです。

最後に

特に手こずることもなく、目に見えてファイルサイズが減りました。
最新のブラウザであればWebAssemblyに対応しているそうなのでこれからは使っていきたいと思います。
上記リンクを貼っている私のサイトで、それぞれのコンパイルオプションでビルドしたものを公開しています。触っていただけるとありがたいです。