Let's Enjoy Unreal Engine

Unreal Engineを使って遊んでみましょう

UE4 FASTBuildでC++やシェーダーを分散ビルドする

今回はUE5のネタではなく、UE4.27 Preview 1が出た直後なのでまたUE4ネタです。

FASTBuildというオープンソースの分散ビルドシステムがあります。

fastbuild.org

UE4では有志の方が対応した独自対応版があったりしましたが、この度4.27でExperimentalではありますが正式に使えるようになっています。正式には4.26からでも使えていましたが、バグにより正しく動作しなかったりします。

独自にエンジンをカスタムできる環境であれば、有志が作成した独自対応版を導入することで利用可能です。

Integrating FASTBuild with Unreal Engine 4 · GitHub

今回はこのFASTBuildをカスタムしていないUE4でも使えるようにする方法を解説します。

UE4.27のソースからFBのバイナリーを取得する

エンジンをカスタムする必要はありませんが、今回利用するFASTBuildのバイナリーは独自にパッチされたものを使うため、その取得のためにエンジンソースコードGitHubから取得する必要があります。

docs.unrealengine.com

GitHubからソースコードをチェックアウトし、ブランチを4.27に切り替えてください。その後はSetup.batまでを実行するでOKです。エンジンをビルドまでする必要はありません。

このようなフォルダー構造になっていればOKです。次は必要であればバイナリーファイルを普段使っているエンジンのある場所へと移動させます。

f:id:alwei:20210612223622p:plain

UE4.27に相当するエンジンであればFASTBuildが正しく動作するはずなので、Windowsであれば以下のようなパスにコピーします。

C:\Program Files\Epic Games\UE_4.27\Engine\Extras\ThirdPartyNotUE\FASTBuild

Windowsなので、Win64フォルダーだけ入っていればOKです。Macの場合は同様のフォルダーでMacのバイナリーを入れましょう。

f:id:alwei:20210612223649p:plain

これでFASTBuildがエンジンへと導入できました。次はホストネットワークマシンの構築です。

ホストネットワークマシンの構築

分散ビルドを行うためには分散のホストとなるためのPCが必要です。ホストマシンはどんなものでもいいですが、分散したい場合には常時稼動しておく必要があるので、分散ビルド用のマシンがあるとよいでしょう。

ホストマシンを同一LAN内で全員が共有する必要がありますので、Windowsのファイル共有機能を使って同じLAN内から他のマシンがアクセスできるフォルダーを作成しましょう。以下が参考となります。

navi.dropbox.jp

必要なフォルダーだけを共有するようにしておきます。FASTBuild用に1つあればひとまずOKです。他のマシンからでもホストマシンがネットワーク上から参照できるかどうかを確認しておきましょう。

次はホストマシンをFASTBuildのブローカーとして設定する環境変数の設定です。

環境変数の設定

環境変数はブローカー(ホスト)とそこに接続するクライアントマシン全てに設定が必要です。

"FASTBUILD_BROKERAGE_PATH"という環境変数を設定します。この環境変数に先程ホストマシンに設定したネットワークファイル共有可能に設定したフォルダーの場所を設定します。

設定方法は色々ありますが、コマンドプロンプトが簡単です。Windowプログラムのcmdを起動して、setxコマンドを使うことで環境変数を設定できます。詳しい方法は以下の記事を参考に。

proengineer.internous.co.jp

環境変数が設定されたことを確認したら設定は完了です。もし既にFASTBuildが起動していた場合には再起動させる必要がありますので注意してください。

FASTBuildの環境変数はこの他にも色々あります。気になる人は公式ドキュメントを確認してみてください。

fastbuild.org

FASTBuildを起動

ついにFASTBuildを起動させます。上手くパス上に配置されていればこのような3つの実行ファイルがあるはずです。

f:id:alwei:20210612225922p:plain

"FBuild.exe"が分散ビルドを処理する本体です。特に起動させなくても勝手に動くので触る必要ありません。"FBuildCoordinator.exe"はホストマシン上で各クライアントを上手く分散させてくれるプログラムのようですが、こちらも触る必要はありません。

"FBuildWorker.exe"はホストとクライアントのマシン全てで起動させる必要があります。自動化するのならスタートアップ時にこのプログラムを起動させて、常駐させておくと起動忘れがなくてよいです。

f:id:alwei:20210612230355p:plain

これで全ての準備が完了しました!

実際にコンパイルをしてみる

FBuildWorkerを同じネットワーク内の複数マシンで起動させて、C++やシェーダーをコンパイルしてみましょう。

うまくいくとこのように分散状態をStatusで確認することができます!ただFASTBuildはアプリのUIがあまりにも質素で見た目に変化がわかりづらいです。

FASTBuildのビジュアライズは2つほどオープンソースプログラムでGUIベースのアプリがありますので、こちらを利用すると可視化もわかりやすくて良いのではないでしょうか。

GitHub - hillin/FASTBuild-Dashboard: A GUI for FASTBuild

https://github.com/hillin/FASTBuild-Dashboard/blob/master/Documentations/Screenshots/FASTBuild-Dashboard.0.93.1.png?raw=true

GitHub - yass007/FASTBuildMonitor: Event monitor for FASTBuild

https://camo.githubusercontent.com/cf81f8e2d46cc74135f2502ef95ba07e672a67c64a44724e312b176d2e925ccd/687474703a2f2f6475616c736f6674696e632e636f6d2f77702d636f6e74656e742f75706c6f6164732f323031362f30392f464153544275696c644d6f6e69746f7253637265656e73686f742e706e67

今後について

FASTBuildは現状UE5 EA版では4.26版にあったバグが残っている状態ですので、UE5 EA版での利用はお薦めしません。使うのであればUE5の正式版以降、もしくはUE4.27 Preview 1以降のバージョンでの利用をお薦めします。4.27以降ではFASTBuildはWindowsMaciOS、tvOSで動作するとのことです。特にMaciOSで分散ビルド可能な唯一な仕組みでもあるので、MaciOS環境で利用している人には待望の分散ビルド機能でしょう。

IncredibuildやSN-DBSといったシステムはなかなか導入が難しいですが、今回はオープンソースかつフリーなシステムなので気軽に導入可能です。ミニマムなプロジェクトでもどんどん分散ビルドを使っていきましょう!