クックとチャンキング

コンテンツをクックし、配布のために .pak ファイルをビルドします。

Windows
MacOS
Linux

リリースに向けてゲームをクックする場合や、エディタ外のプラットフォームでテストする場合、チャンキング を使ってデータをいくつかの .pak ファイルに分割してから、個別にデプロイすることができます。チャンク は独立してデプロイおよびダウンロードが可能なアセットの番号がつけられたコレクションです。最初に生成されるチャンクは番号が 0 (ゼロ) で、プロジェクトで使用されたコンテンツがデフォルトですべて含まれます。エンジンの パッケージング システムを使って、それぞれのチャンクはプラットフォーム固有のデプロイ システムへの統合が可能な、独立した .pak ファイルを作成します。チャンキングは Asset Manager に完全に統合されました。Primary Asset Labels (プライマリ アセット ラベル) または Rules Overrides (ルールのオーバーライド) を使ってセットアップすることができます。ShooterGame サンプル プロジェクトはチャンキングの最適な例です。ShooterGame では、以下の 3 つのチャンクを設定しています。Chunk 1 は "Sanctuary" マップ、Chunk 2 は "Highrise" マップ、Chunk 0 は他の全てのデータ用です。ShooterGame では、プライマリ アセット ラベルが選択されますが、両方の方法について説明します。

チャンキングの設定中に、カスタムの Asset Manager サブクラスをビルドし、任意の仮想関数をオーバーライドするのに有用です。ゲームの規模が大きい場合、特に推奨します。たとえば、SetPrimaryAssetRules 関数はゲーム固有のアセット ルールを設定するために、コンテンツを特定のチャンクに手動で割り当てるなどして、オーバーライドされる必要があります。特定のプライマリ アセット ID によって管理するアセットを判断するために呼び出される ShouldSetManager 関数もオーバーライドしておくと良いです。各プロジェクトには、個々のプロジェクト ニーズに応じてコンテンツをチャンクに割り当てる独自のカスタム ルールを指定することができます。Asset Manager は必要に応じて拡張およびカスタマイズできるようになっています。

プライマリ アセットのルール

Primary Asset Rules を使ってどのプライマリ アセットがどのセカンダリ アセットに対する管理権限を持つか、およびクック プロセス中のアセットの処理方法を決めることができます。こうしたルールは FPrimaryAssetRules 構造体によって定義され、Asset Manager によって使用されクック時のアセット処理方法を決めます。FPrimaryAssetRules 内で利用可能なオプションについての詳細情報は、その API ページ をご覧ください。EPrimaryAssetCookRule API Page で定義されているクック ルールをご覧いただくこともできます。

プライマリ アセット ラベル

Primary Asset Label は、チャンキングとクックのために他のアセットを指定するためにセットアップされる UPrimaryDataAsset クラスの最小限のオーバーライドです。これらは通常、ゲーム中はロードされませんが、クックおよびチャンキング時に使用されて、他のプロジェクトのアセットに対して独自のルール、リスト、優先順位を設定することができます。ShooterGame の場合は、ラベルが作成されて様々なチャンクに配置されるアセットを指定します。

明示的に指定したアセットの他に、[Label Assets In My Directory] オプションを使って、ディレクトリのすべてのアセットを管理するようにラベルを設定することもできます。または、[Asset Collection] フィールドを設定することで エディタ コレクション のすべてのアセットを管理できます。

HighriseLabel.png

"HighriseLabel" という名前のプライマリ アセット ラベルは、ゲームの "Highrise" マップ アセットを明示的に管理し、Chunk 2 に属することを示します。

この時点では、"Highrise" のアセットは独自の Primary Asset ID、 "Map:/Game/Maps/Highrise"、および "HighriseLabel" の Primary Asset ID、"PrimaryAssetLabel:HighriseLabel" に関連付けられます。マップには独自の Chunk ID がないため、チャンキング プロセスでは "HighriseLabel" で見つかった Chunk ID である 2 を使用します。さらに、マップ内のすべてのセカンダリ アセットは Chunk 2 と関連付けられます。類似のセットアップを "Sanctuary" マップと Chunk 1 に対して行う必要があります。Chunk ID (or a negative Chunk ID) を持たないアセットはデフォルトの .pak ファイル、Chunk 0 に入ります。これは、プロジェクトのスタートアップ マップ、"ShooterEntry" の保存先でもあります。複数のプライマリ アセット ラベルによって参照されるセカンダリ アセットは、こうしたラベルの中でも最高の優先度に関連付けられます。最高の優先度に複数のラベルが関連付けられている場合、アセットは各ラベルに関連付けられます。

ReferenceViewer.png

参照ビューアは、プライマリ アセット ラベルとレベル マップの管理関係を示します。

Management.png

Double-clicking on "Map:/Game/Maps/Highrise" 上でダブルクリックすると、"PrimaryAssetLabel:HighriseLabel" によって管理されていることがわかります。

ルールのオーバーライド

Rules Overrides (ルールのオーバーライド) を使って特定のプライマリ アセットに対して優先度とチャンク設定を確立することができます。プライマリ アセット ラベルの代わりにルールのオーバーライドを使って ShooterGame に対して 3 つのチャンクのセットアップをビルドするには、以下のセクションを DefaultGame.ini に作成します。

[/Script/Engine.AssetManagerSettings]
+PrimaryAssetRules=(PrimaryAssetId="Map:/Game/Maps/Sanctuary",Rules=(Priority=-1,ChunkId=1,CookRule=Unknown))
+PrimaryAssetRules=(PrimaryAssetId="Map:/Game/Maps/Highrise",Rules=(Prority=-1,ChunkId=2,CookRule=Unknown))
+PrimaryAssetRules=(PrimaryAssetId="Map:/Game/Maps/ShooterEntry",Rules=(Priority=-1,ChunkId=0,CookRule=AlwaysCook))

クックとチャンキングのルールは、 DefaultGame.ini ファイルにあります。スタートアップ マップ、この例では "ShooterEntry" に対する明示的な参照を追加しました。

これは、メイン ゲーム マップを特定のチャンクに設定するだけでなく、その参照のすべてをこうしたチャンクに追加します。Chunk 0 を規定する最後のエントリは、ゲームの最初の起動時に読み込まれるマップによって参照されるものが、デフォルトのチャンクでもある Chunk 0 に確実に入るようにします。優先度 -1 はデフォルト値に優先度を設定しますが、これは 1 になります。

アセットのチャンクへの割り当てを分析する

Engine はチャンクを監視するためにいくつかのビルトイン ツールを提供しています。これらのツールを使用して、どのアセットがどのチャンクにどういう理由で割り当てられているのかを確認できます。

Asset Audit ウィンドウ

[Asset Audit (アセット監査)] ウィンドウを開くには、[Windows] ドロップダウン メニューを開き、[Developer Tools] を展開して [Asset Audit (アセット監査)] を開きます。

AssetAuditInMenu.png

AssetAuditEmpty.png

[Add Chunks (チャンクを追加)] ボタンをクリックすると、現在のプロジェクトに存在するすべてのチャンクの一覧がウィンドウに表示されます。

AssetAuditPopulated.png

ShooterGame には、アセットは 3 つのチャンクに分配されています。

個々のチャンクを調べるには、チャンクを右クリックして [Size Map (サイズ マップ)] または [Reference Viewer (参照ビューア)] を選択します。

AssetAuditRightClick.png

サイズ マップ

Size Map (サイズ マップ) では、チャンクに含まれる各アセットのタイプとサイズが視覚的に表示されます。アセットは色の付いたボックスにアイコンとサムネイルで表示され、アセットのサイズに合わせた大きさになっています。他のボックス内にネスト化しているボックスは、親子の参照関係にあることを表します。たとえば、マテリアルに参照されるテクスチャは、マテリアルの取り込みはテクスチャの取り込みが暗示的に含まれているので、マテリアルのボックス内に表示されます。

ShooterGame では、Chunk 0 はゲームのメニューを表示し、マッチに参加するために必要なアセットを含み、Chunk 1 と Chunk 2 はゲームのプレイ可能なマップに使用されます。結果として、Chunk 0 は他のチャンクより小さく、アセット タイプの種類が豊富です。ここで、Chunk 0 と Chunk 1 のアセットの詳細とシッピング ディスク サイズの合計を確認することができます。

SizeMapChunk0DiskSize.png

ShooterGame の Chunk 0 は独立したアセットを多く含みますが、サイズは比較的小さいです。

SizeMapChunk1.png

Chunk 1 (写真) と Chunk 2 はゲームが行われる個別のマップを含むので、この 2 つはアセットが連結した 1 つの大きなグループとなります。

Size Map は含まれているアセットの (エディタにおける) メモリ使用の視覚化もサポートします。インエディタのメモリ サイズは、シップされるプロダクトの同じアセット グループに対するディスク使用量によって大きく異なります。

SizeMapChunk0MemorySize.png

Chunk 0 は Memory Size モードで表示されます。このモードは、エディタのアセットのメモリ使用量に基づいてボックスのサイズが変わります。

個々のアセットは、アセットのボックスを右クリックすると、検証または編集ができます。マウス ホイールでズームインまたはズームアウトできます。また、アセットをダブルクリックするとウィンドウ一杯に拡張できます。

SizeMapChunk0RightClick.png

「loading screen」テクスチャ アセットの右クリック メニュー

Reference Viewer (参照ビューア)

Reference Viewer は、アセット同士のつながり方でアセット内参照を示すグラフを生成します。チャンクと個々のアセットをこのツールで調べることができます。ShooterGame のサンプルでは、Chunk 1 を調べると直接つながっているアセットが 2 つだけであることが分かります。"Sanctuary" マップとプライマリ アセット ラベルが Chunk 1 につながっています。

ReferenceViewerChunk1.png

参照ビューアのアセットのグラフは ShooterGame の Chunk 1 から直接参照されています。Sancturary Map のアセット ノードを右クリックしたところです。

コンテンツ ブラウザまたは参照ビューアでノードを右クリックし "Re-Center Graph" を選択 (または参照ビューアでノードをダブルクリック) するとノードの参照が表示されます。下図では、Chunk 1 から "Map:/Game/Maps/Sanctuary" ノードへ位置をずらすと、"Sanctuary" Map を参照している 2 つのノード (Chunk 1 と Chunk 1 のプライマリ アセット ラベル) が左側に、数多くの子ノード ("M_FFA_Wall_01" マテリアルなど) が右側に表示されます。

ReferenceViewerChunk1Map.png

参照ビューアで ShooterGame の "Sanctuary" Map (Chunk 1 の 1 部) を調査しているところ

上のグラフは完全ではありません。参照ビューアのオプション セットで制限されています。グラフの範囲を制限すると、エンジンがビルドする時間を大幅に短縮できます。参照ビューアの詳細については、Reference Viewer (参照ビューア) を参照してください。

このように参照をたどることによって、あるアセットが別のアセットやチャンクと関連づいている正確な理由を確認できます。必要のないアセット参照の検知や削除、あるいはチャンクの戦略の調整など、プロジェクトのニーズに合わせて調整することができます。

Select Skin
Light
Dark

新しい Unreal Engine 4 ドキュメントサイトへようこそ!

あなたの声を私たちに伝えるフィードバックシステムを含め、様々な新機能について開発をおこなっています。まだ広く使える状態にはなっていないので、準備ができるまでは、ドキュメントフィードバックフォーラムで、このページについて、もしくは遭遇した問題について教えていただけると助かります。

新しいシステムが稼働した際にお知らせします。

フィードバックを送信