お世話になっております。
UBAを使用するためのBuildConfiguration.xmlですが、AppDataやプロジェクト(もしくはエンジン)のSavedディレクトリに配置することになっていると思います。
https://dev.epicgames.com/documentation/unreal\-engine/horde\-unreal\-build\-accelerator\-and\-remote\-compilation\-tutorial\-for\-unreal\-engine?application\_version\=5\.8\#steps
現状は雛形のBuildConfiguration.xmlをコピーしているのですが、もう少しセットアップを自動化したいと考えています。
AutoSDKなどではこのセットアップ手順が自動的に挟まったりするのでしょうか?
質問①
プロジェクトの環境セットアップ時にBuildConfiguration.xmlを最初に設定する推奨の手順はどういった形になりますか?
現状は以下のファイルたちが参照されていると思います(ログより)。
No project directory provided for project scope BuildConfiguration.xml resolution.
No config file at
(1) E:\UE5\Engine\Restricted\NotForLicensees\Programs\UnrealBuildTool\BuildConfiguration.xml
(2) No config file at C:\ProgramData\Unreal Engine\UnrealBuildTool\BuildConfiguration.xml
(3) No config file at C:\Users\user**\AppData\Local\Unreal Engine\UnrealBuildTool\BuildConfiguration.xml
(4) No config file at C:\Users\user**\Documents\Unreal Engine\UnrealBuildTool\BuildConfiguration.xml
Configuration will be read from:
(5) E:\UE5\Engine\Saved\UnrealBuildTool\BuildConfiguration.xml
(6) C:\Users\user**\AppData\Roaming\Unreal Engine\UnrealBuildTool\BuildConfiguration.xml
(2)~(4)のローカル環境の設定がセットアップフローの中でユーザーによって設定されるなどでもよいかなと思うのですが、UBTのセットアップはユーザーは意識的には行っていないのでセットアップを行うタイミングがないように思っています。
(1)のエンジン側に配置は同じエンジンで複数のプロジェクト環境が作られる可能性があるので配置したくないです。
(5)のSavedディレクトリに配置するBuildConfiguration.xmlをソースコントロールに登録することも考えたのですが、(1)と同じ複数の環境に対応できなくなるのと、Savedを気軽に消せなくなるので他の手段を探しています。
質問②
シェーダーの分散ビルドを行うには[Uba.Provider.Horde]の設定が必要かと思いますが、
- C++の分散ビルド設定はBuildConfiguration.xml
- シェーダーの分散ビルド設定は[Uba.Provider.Horde]
という振り分けと思って問題ないでしょうか?
どこかで[Uba.Provider.Horde]のみでC++の分散ビルドも可能という記事を見かけたのですが、UE5.8で確認した感じでは[Uba.Provider.Horde]だけではC++分散ビルドは行われないような感じでした。
Platformの実行ファイルビルド時はiniファイルを参照されている場合があると思いますが、エディターのビルド時にそのような設定が可能だったりするのでしょうか?
[Attachment Removed]
お世話になっております。UE5.8 のソースを確認しましたので、以下回答となります。
質問①
まず AutoSDK ですが、こちらは SDK のセットアップのみを行うもので、BuildConfiguration.xml の配置には関与していません。
ご要望の形に一番近いのは、プロジェクトの Config/DefaultEngine.ini かと思います。UBA/Horde の設定は xml だけでなく Engine の ini 階層からも読まれるようになっています(UnrealBuildAcceleratorHordeConfig.cs)。
[Uba.Provider.Horde] ServerUrl=“http://your-horde-server:13340” Pool=Win-UE5 Enabled=True
ただし、UBT がプロジェクトの ini を読むのは .uproject がコマンドラインに渡っている場合のみです。ログ1行目の No project directory provided … がまさにその状態ですね。
ファイルを置くこと自体を避けたい場合は、環境変数でもいけます。UnrealBuildTool_カテゴリ__項目名(アンダースコア2個)という形式のものを、UBT が起動時に xml 化して、他のすべてより後に適用します。
setx UnrealBuildTool_Horde__Server “http://your-horde-server:13340”
マシン共通で置くなら C:\ProgramData\Unreal Engine\UnrealBuildTool\BuildConfiguration.xml(ログの (2))になります。
読み込み順(後勝ち)は、NotForLicensees → Engine/Saved → ProgramData → AppData → LocalAppData → Documents → ProjectDir/Saved(5.8 で追加)→ 環境変数、です。(5)(6) だけが読み込み対象に出ているのは、この2箇所だけ空の既定ファイルが自動生成されるためです。
質問②
実はその分け方にはなっておらず、両方が両方を見にいきます。UBT は ini → xml → コマンドライン、エディター側は xml → ini → コマンドラインの順で上書きされるので、xml と ini の優先順位が逆になっています。なので ini だけで C++ の分散も成立しますし、記事の内容は正しいです。
動かなかった原因としては、このあたりが考えられます。
- ini 側のキー名は ServerUrl です。xml の Server につられて Server= と書くと読まれません
- プロジェクトの ini に書いている場合、.uproject が渡っていないと読まれません(ログ1行目の状態)
- [UbaController] の +Providers に別セクションを足していると、そちらを見にいきます
あと既定の挙動が両者で違っていて、UBT 側は bAllowUBAExecutor が既定 true なので ServerUrl が通れば分散されますが、シェーダー側は既定が Disabled で、ini の Enabled=True がないと有効になりません。こちらは xml からは有効化できない点にご注意ください。
エディタービルド時も ini は参照されます。切り分けには、エディターのログに出る UBA/Horde Configuration [Uba.Provider.Horde]: の行が使えます。取得元が XML / INI / CMD / Default で表示されるので分かりやすいかと思います。
よろしくお願いします!
[Attachment Removed]
詳細な情報ありがとうございます!
iniファイルだけですべて完結できるならそれがいいですね。
一旦いただいた情報を元にいろいろ試してみたいと思います。
[Attachment Removed]
お世話になっております。
iniファイル設定のみでC++のビルドが行われるか改めて試したところ、うまく動いていました。
確認不足でした、申し訳ございません。
; DefaultEngine.ini
[Uba.Provider.Horde.MyPJ]
Enabled=True
ServerUrl=http://mypj_horde:1234/
UbaPool=Win-UE5
UbaCluster=default
[UbaController]
Providers=Uba.Provider.Horde.MyPJ
こちらの対応でプロジェクト側に分散ビルド設定を一元化できたのでうまく運用できそうです。
- エンジンのビルド時はiniファイルの設定は参照されないこと(プロジェクト側の設定のため)
- UBTとエディターでxmlとiniファイルの参照順が違う
- 「UnrealBuildTool_カテゴリ__項目名」環境変数でも設定可能
などの情報もありがとうございました!
[Attachment Removed]