godotのwasmのファイルサイズを減らす方法


諸々のデプロイ先をcloudflareに移行することにした。
(移行した際の記事はこちら)

その際、cloudflareのFreeプランでは25MBまでしかデプロイできないが、netlifyにデプロイしていたDualSenseのアダプティブトリガーのサンプル のwasmファイルのサイズが35MB以上になっており、デプロイできなかった。

色々試すことで25MB以下まで削減できたため、方法を記載する。

godotのWebテンプレートのwasmを削減する

Webエクスポートの際に使用するカスタムテンプレートを、サイズが小さいものにすることで、数MBの節約ができる。

カスタムテンプレートファイルを作成方法は以下の手順である。

  1. python, emscripten, Scons をインストールする。
  2. godotのソースコード を取得する。
  3. godotのソースコードのフォルダで、scons platform=web target=(template_release|template_debug) を実行する

sconsの実行により bin/ 内にzipファイルができるので、そのzipファイルをwebエクスポートの設定画面のオプションにあるカスタムテンプレートに target で設定したファイルを指定するとカスタムテンプレートを使用できる。

wasmサイズの少ないテンプレートを作成するには、VRなどの必要のない機能を使わない設定にして、sconsを実行すると良い。

wasmの最適化を行う

binaryenwasm-opt を使うことにより、wasmファイルのサイズを削減できる。

binaryen をソースコードからビルドすると、bin/内に wasm-optファイルが生成されるので、そのwasm-optを用いて、

wasm-opt <original.wasm> -o <optimized.wasm> -all --post-emscripten -Oz

を実行することで、最適化されたwasmを生成できる。
これをwebエクスポート後のwasmに対して用いることで、wasmサイズを削減できる。
このとき、Webエクスポート時に生成されたhtmlファイル内のwasmサイズも最適化されたwasmのサイズに修正した方が良いと思われる。

参考サイト