13
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[UE4] 1ファイル(と関連しているアセット)だけをクックする

Last updated at Posted at 2020-06-06

アンリアルエンジンはタイトルをリリースするときにターゲットプラットフォーム上で最適に動かせる形式に実行ファイルとアセットを変換します。
この中でアセットを変換する工程をクックと呼んでいます。

公式ドキュメント

[UE4] ビルドプロセスの流れ @donbutsu17

バージョンが更新されるたびに時間は短縮されておりますが、
それでも小規模なタイトルでの数分から数十分、大きなタイトルだと数時間ほど処理に時間が掛かります。

パッケージを作成してテストしたところ問題が見つかり、「あぁ・・・この1ファイルだけクックできればいいのに・・・」と思ったことがある方もいらっしゃると思います
今回は1ファイル(とそれが参照しているアセット)だけをクックする方法を記事にしてみました。

#クック処理はどこに記述されているのか

まずクック処理を行っているコードを見てみましょう。
クック処理のコードはずばり CookCommandlet.cppで始まり、メインループのコードはCookOnTheFlyServer.cppにあります。
ここで宣言されているUCookCommandletクラスを

UnrealEngine.exe -Run=Cook [いろいろオプション]
UnrealEngine-Cmd.exe -Run=Cook [いろいろオプション]

のようなコマンドラインオプションを加えて選択し実行しています。
UAT(UnrealAutomationTool)を使ってパッケージを作成している場合はUATが上記のコマンドを使ってクッカーを呼び出しています。

UCookCommandlet::Mainというメンバ関数がエントリーポイントなのですが
この関数の先頭でコマンドラインに指定されたオプションが解析されています。
その中に

	bCookSinglePackage = Switches.Contains(TEXT("cooksinglepackage"));

という**「クック・シングル・パッケージ」**とズバリそのもののオプションがあります。
早速試してみましょう!

#cooksinglepackageをテスト
最近のCookはどのファイルをクックしたかログを出さないモードになっているのでファイルごとにログを出すようにします。
cook.displaymodeがそれです。こんな感じでDefaultEngine.iniに追記してやるといい感じです。

[ConsoleVariables]
cook.displaymode=2

UATを経由してクックする場合のコマンドはこんな感じです。
-AdditionalCookerOptions="-cooksinglepackage" AdditionalCookerOptionsを使ってクッカーにコマンドを渡すのがミソです。

e:\dev\UnrealEngine-4.25\Engine\Build\BatchFiles\RunUAT.bat -ScriptsForProject=D:/dev/UE425projects/Cook425/Cook425.uproject BuildCookRun -project=D:/dev/UE425projects/Cook425/Cook425.uproject -clientconfig=Development -serverconfig=Development -nocompile -nocompileeditor -ue4exe=E:\dev\UnrealEngine-4.25\Engine\Binaries\Win64\UE4Editor-Cmd.exe -utf8output -platform=Win64 -targetplatform=Win64 -cook -skippak -skipstage -noP4 -AdditionalCookerOptions="-cooksinglepackage"  -unversionedcookedcontent

結果は、、、ドンッ!!!

  CookResults: Warning: No files found to cook.

ファイルを指定してないんだからそりゃそうですよね!

#ファイルを指定する方法を考える
CookCommandletを眺めてみるとファイルを指定できそうなものがありません。mapなら-mapオプションで指定できそうなんですが。。。

とコードを読んでみるとmapオプションはパスとして渡されて普通にアセットとして読み込まれているのがわかります。
試しに-mapを使ってアセットを指定してあげると、、、

コマンドはこんな感じで、先ほどのコマンドに -map=/Game/Mannequin/Character/Textures/UE4_LOGO_CARD を追加しました。

e:\dev\UnrealEngine-4.25\Engine\Build\BatchFiles\RunUAT.bat -ScriptsForProject=D:/dev/UE425projects/Cook425/Cook425.uproject BuildCookRun -project=D:/dev/UE425projects/Cook425/Cook425.uproject -clientconfig=Development -serverconfig=Development -nocompile -nocompileeditor -ue4exe=E:\dev\UnrealEngine-4.25\Engine\Binaries\Win64\UE4Editor-Cmd.exe -utf8output -platform=Win64 -targetplatform=Win64 -cook -skippak -skipstage -noP4 -AdditionalCookerOptions="-cooksinglepackage" -map=/Game/Mannequin/Character/Textures/UE4_LOGO_CARD -unversionedcookedcontent

結果

********** COOK COMMAND STARTED **********
HasMapsToCook /Game/Mannequin/Character/Textures/UE4_LOGO_CARD
Params.HasMapsToCook /Game/Mannequin/Character/Textures/UE4_LOGO_CARD
...(略)
  LogCook: Display: Max memory allowance for cook 16384mb min free memory 0mb
  LogCook: Display: Mobile HDR setting 1
  LogCook: Display: Creating asset registry
  LogCook: Display: Discovering localized assets for cultures: en
  LogCook: Display: Clearing all cooked content for platform WindowsNoEditor
  LogCook: Display: Sandbox cleanup took 0.055 seconds for platforms WindowsNoEditor
  LogCook: Display: Cooking /Game/Mannequin/Character/Textures/UE4_LOGO_CARD -> D:/dev/UE425projects/Cook425/Saved/Cooked/WindowsNoEditor/Cook425/Content/Mannequin/Character/Textures/UE4_LOGO_CARD.uasset
  LogCook: Display: Cooking /Engine/Animation/DefaultAnimCurveCompressionSettings -> D:/dev/UE425projects/Cook425/Saved/Cooked/WindowsNoEditor/Engine/Content/Animation/DefaultAnimCurveCompressionSettings.uasset
  LogCook: Display: Cooking /Engine/EditorResources/S_Actor -> D:/dev/UE425projects/Cook425/Saved/Cooked/WindowsNoEditor/Engine/Content/EditorResources/S_Actor.uasset
  LogCook: Display: Cooking /Engine/EngineResources/WhiteSquareTexture -> D:/dev/UE425projects/Cook425/Saved/Cooked/WindowsNoEditor/Engine/Content/EngineResources/WhiteSquareTexture.uasset
  LogCook: Display: Cooking /Engine/EngineResources/GradientTexture0 -> D:/dev/UE425projects/Cook425/Saved/Cooked/WindowsNoEditor/Engine/Content/EngineResources/GradientTexture0.uasset
  LogCook: Display: Cooking /Engine/EngineResources/Black -> D:/dev/UE425projects/Cook425/Saved/Cooked/WindowsNoEditor/Engine/Content/EngineResources/Black.uasset
  LogCook: Display: Cooking /Engine/EngineMeshes/Sphere -> D:/dev/UE425projects/Cook425/Saved/Cooked/WindowsNoEditor/Engine/Content/EngineMeshes/Sphere.uasset
  LogCook: Display: Cooking /Engine/EngineSounds/Master -> D:/dev/UE425projects/Cook425/Saved/Cooked/WindowsNoEditor/Engine/Content/EngineSounds/Master.uasset
  LogCook: Display: Cooking /Engine/EditorMaterials/MatineeGroCook/MAT_GroCook_Float -> D:/dev/UE425projects/Cook425/Saved/Cooked/WindowsNoEditor/Engine/Content/EditorMaterials/MatineeGroCook/MAT_GroCook_Float.uasset
  LogCook: Display: Cooking /Engine/EditorMaterials/MatineeGroCook/MAT_GroCook_Anim -> D:/dev/UE425projects/Cook425/Saved/Cooked/WindowsNoEditor/Engine/Content/EditorMaterials/MatineeGroCook/MAT_GroCook_Anim.uasset
  LogCook: Display: Cooking /Engine/EditorMaterials/MatineeGroCook/MAT_GroCook_AudioMaster -> D:/dev/UE425projects/Cook425/Saved/Cooked/WindowsNoEditor/Engine/Content/EditorMaterials/MatineeGroCook/MAT_GroCook_AudioMaster.uasset
  LogCook: Display: Cooking /Engine/EditorMaterials/MatineeGroCook/MAT_ColorTrack -> D:/dev/UE425projects/Cook425/Saved/Cooked/WindowsNoEditor/Engine/Content/EditorMaterials/MatineeGroCook/MAT_ColorTrack.uasset

このアセットに関連しているアセットは読み出してしまうので完全にシングルというわけにはいきませんが、マップなどは読まれていません!

#まとめ

単体でアセットをクックしなおしてパッケージを作り直したい場合は-cooksinglepackageを使います。
UATを介してコマンドをクッカーに渡すためには-AdditionalCookerOptionsを使います。
アセットの指定は-mapを使います。-mapと書いてありますがアセットも指定可能です。

13
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?