お世話になっております。
Unreal Engine 5.6.1 環境で Cook/Packaging を実行した際、入力や設定が同一であるにもかかわらず、生成される成果物にバイナリ差分が発生する事象についてご相談です。
●発生している事象
同一マシン・同一設定(同一ブランチ/同一コミット・同一コマンドライン/同一ターゲット)のまま、連続して 2 回 Cook/Packaging を実行すると、Staging(および Cook 出力)内の以下のファイルに差分が出ます。
- Cooked *.uasset(この段階で既に差分を確認)
- それを入力として生成される *.pak
- I/O Store 使用時の *.utoc / *.ucas
現状 *.uasset の段階で差分が発生しているため、.pak や .utoc / .ucas で差分が出ること自体は結果として自然であり、特定のコンテナ形式に限定した問題ではなく、Cook パイプライン全体の非決定性が根本要因ではないかと考えています。
●現時点の仮説(差分要因の候補)
現在調査中ではありますが、こちらの理解では、例えば以下のような可変要素が絡むことで、同一条件でも成果物のバイナリが一致しない可能性があると想定しています。
- コード/プラグイン/モジュール構成の差異やロード順
- AssetRegistry 情報の生成内容
- PreloadDependency 等に起因する参照・並び順の変動
- NameMap の内容・配置(NameOffset / NameCount 等)が変動し得る
- Shader 生成(派生データ)に由来する差分が Cook 後工程へ波及する可能性
結果として *.uasset が一致せず、.pak や .utoc / .ucas の生成結果にも差分が伝播する、という構図を想定しています。
●相談したいこと
上記を踏まえ、以下について見解と推奨を伺いたいです。
1. UE5.6.1 において、同一条件で Cook/Packaging を行っても *.uasset / *.pak / *.utoc / *.ucas に差分が発生し得る挙動は、現設計として「想定内」でしょうか。
2.想定内である場合、差分は主にどのレイヤーで発生することが多いでしょうか。
- 例:NameMap 生成、CustomVersion、AssetRegistryData、PreloadDependency、I/O Store コンテナ生成時の並び順/シード等
3.Cook の再現性(決定性)を最大化するために、Epic として推奨している Deterministic Cooking のベストプラクティスがあれば教えてください。
- Project Settings/Cooker オプションで有効化すべき設定
- Cook パイプライン上で「非決定的になりやすい」既知のポイント(回避策があれば併せて)
- .pak/I/O Store を用いた配信における想定運用モデル(差分配信・CI 等での取り扱い)
もし本件が既知の課題・制限事項、または将来的な改善対象であれば、参考になるドキュメント/Issue/推奨バージョン(例:5.6.x 以降での改善状況)をご教示いただけますと幸いです。
本件はゲーム実行上すぐに問題化しないケースが多い一方で、CI/差分配信/検証工程の都合上、同一入力に対して同一の Cook 成果物を得たい要求があります。
成果物差分が発生する背景や設計意図を正しく理解したうえで、どのように解消するか、実運用ではどう向き合うのが望ましいかについて、見解を伺えますと幸いです。
お手数をおかけしますが、よろしくお願いいたします。
[Attachment Removed]