クック処理とチャンク化

コンテンツをクックして配布用の .pak ファイルをビルドします。

プロジェクトを クック する場合、Unreal Engine ではゲームのアセットをいくつかの チャンク に分割することができます。チャンクは DLC やパッチを含み、それぞれを個別に配布することができます。チャンクとはエンジンのアセット管理システムによって認識される番号付きのアセットのコレクションです。プロジェクトをクックする際、それぞれのチャンクが .pak ファイルを生成し、コンテンツの配信システムを介して配布することができます。

アセット マネージャ または プライマリ アセット ラベル を使用して、アセットを特定のチャンクに属するように指定することができます。どちらの方法でもチャンクはルールとメタデータのシステムを使用して作成され、クック処理中に読み込まれます。これから、それらのツールの使用方法およびエディタ内でのチャンクの操作方法について説明します。

プライマリ アセット ルールを理解する

プライマリ アセット とは、アセット マネージャで直接操作できるアセットです。一方、セカンダリ アセット はプライマリ アセットがそれらを参照する際に自動的にロードされるアセットです。プライマリ アセットは、クックおよびチャンクの処理で参照されるタイプです。

プライマリ アセット ルール を使用して、どのプライマリ アセットがどのセカンダリ アセットに対する管理権限を持つか、また、クック処理中のアセットの処理方法を決定することができます。これらのルールは FPrimaryAssetRules 構造体によって定義され、クック時のアセットの処理方法を決定するためにアセット マネージャーで使用されます。FPrimaryAssetRules 内で利用可能なオプションに関する詳細は、「API のページ」を参照してください。また、定義されているクック処理ルールについては、EPrimaryAssetCookRule EPrimaryAssetCookRuleAPI も参照してください。

プライマリ アセット ルールの機能の 1 つはチャンクの構成です。ルールを定義して チャンク ID を付与することにより、そのルールに該当するすべてのプライマリ アセットがその ID 番号を持つチャンクに分けられます。それらのプライマリ アセットが管理するすべてのセカンダリ アセットも一緒にチャンク化されます。

チャンクの構成

特定のチャンク ID を割り当てられていない、または負のチャンク ID を持つアセットは、Chunk 0 としてパッケージ化されます。これはゲームの基本データとともに配布される「デフォルト」のチャンクです。ID の値が 0 より大きなチャンクは、クック時に異なる .pak ファイルに分割されます。チャンクはプロジェクトに適した方法で構成することができます。たとえば、サンプルの ShooterGame プロジェクトにはチャンクが 3 つあります。

  • "Sanctuary" マップ用の Chunk 1

  • "Highrise" マップ用の Chunk 2

  • その他すべてのデータ用の Chunk 0

ShooterGame ではマップをプライマリ アセットとして認識します。そのため、マップで使用されるテクスチャやメッシュなどのセカンダリ アセットはそのマップが所有するチャンク ID を使用します。ただし、そのマップに権限がある場合に限ります。

別の例では、MOBA やその他の「ヒーローベース」のゲームを作成している場合、ヒーローごとにベースとなるアセットを特定のチャンクに分割し、さらに追加のコスチュームやスキンをそれぞれのチャンクに分けることにより、それらを別個に配布することができます。

プロジェクトに適したチャンクを定義する

UE では、プライマリ アセット ルールを操作したりチャンクを定義したりするためにいくつかの方法が提供されています。アセット マネージャでプライマリ アセット ルールを定義してそれらを「*Game.ini」ファイルで直接編集することも、コンテンツ ブラウザでプライマリ アセット ラベルを使用することもできます。

アセット マネージャでチャンクを定義する

手動でプロジェクトのプライマリ アセット ルールを編集するには、[Project Settings (プロジェクト設定)] を開いて [Game] > [Asset Manager (アセット マネージャ)] に移動します。

アセット マネージャの設定でプライマリ アセット ルールを編集します。クリックして画像を拡大します。

[Primary Asset Types to Scan (スキャンするプライマリ アセット タイプ)] では、アセット マネージャにプライマリ アセットとして認識させるアセットのタイプを指定します。プライマリ アセット ルール のリストでは、個々のプライマリ アセットについて 優先度チャンク ID を指定することができます。

コンフィグでルールのオーバーライドを使用してチャンクを定義する

コンフィグで ルールのオーバーライド を使用すると、特定のプライマリ アセットについて優先度とチャンク設定を確立することができます。プライマリ アセット ラベルの代わりにルールのオーバーライドを使って 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 でもある Chunk 0 に確実に入るようにします。優先度 -1 はデフォルト値に優先度を設定しますが、これは 1 になります。

プライマリ アセット ラベルを使用してチャンクを定義する

プライマリ アセット ラベル (Primary Asset Label) はクック処理とチャンク化に他のアセットを指定するデータ アセットのタイプです。これらは個別にアセットのルールを作成する場合に比べて、はるかに早く処理することができます。

An example of a Primary Asset Label in the Content Browser

コンテンツ ブラウザでのプライマリ アセット ラベルの例。

プライマリ アセット ラベルを作成するには、コンテンツ ブラウザ 内で 右クリック して、次に [Miscellaneous (その他)] > [Data Asset (データ アセット)] をクリックします。

Creating a Data Asset in the Content Browser

[Pick Data Asset Class (データ アセット クラスを選択)] メニューで、[PrimaryAssetLabel] を選択して [Select (選択)] をクリックします。

新しいデータ アセットを作成すると、[Pick Data Asset Class (データ アセット クラスを選択)] メニューがポップアップ表示されます。クリックして画像を拡大します。

新しいプライマリ アセット ラベルが コンテンツ ブラウザ に作成されます。ダブルクリック すると、データを編集することができます。

ShooterGame の HighriseLabel のプライマリ アセット ラベルの設定。クリックして画像を拡大します。

プライマリ アセット ラベルにはアセット マネージャーのプライマリ アセット ルールのように**チャンク ID優先度 の両方が含まれます。ただし、プライマリ アセット ラベルではそれらのルールを一度に複数のアセットに適用することができます。[Explicit Assets] フィールドでは、特定のアセットのリストを指定したり、このレベルに属する [Asset Collection] を指定することもできます。代わりに、[Label Assets in My Directory]** のチェックチェックボックスをオンにすると、プライマリ アセット ラベルがコンテンツ ブラウザの同じフォルダにあるすべてのアセットに影響するようになります。

チャンクをパッケージ化する

チャンク ID を定義すると、プロジェクトのパッケージ化でチャンクごとに .pak ファイルが自動的に作成されます。それらはプロジェクトの「Saved/StagedBuilds/[PlatformName]/[ProjectName]/Content/Paks」フォルダに格納されます。

The location of Pak files in StagedBuilds

パッケージ化された .pak ファイルは、「Content/Paks」ディレクトリ内のプラットフォームとプロジェクトのサブフォルダ内にある「StagedBuilds」フォルダにあります。

.pak ファイルはパッケージ化するプラットフォームに基づいて生成されます。そのため、異なるプラットフォーム間で交換することはできません。生成後は、選択した配信システムで使用できます。

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

UE4 では、チャンクを監査するためのビルトイン ツールがいくつか提供されています。これらのツールを使用することで、どのアセットがどのチャンクに割り当てられているか、どのソースがその割り当てを行っているか、またチャンク化されたアセットのサイズに関する情報を確認することができます。

Asset Audit ウィンドウ

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

クリックして画像を拡大します。

[Asset Audit (アセットの監査)] ウィンドウが表示されますが、まだ何も情報がありません。

初めて開いた時の Asset Audit (アセットの監査) ウィンドウ。クリックして画像を拡大します。

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

ShooterGame では、アセットは 3 つのチャンクに分配されています。クリックして画像を拡大します。

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

クリックして画像を拡大します。

サイズ マップ

Size Map (サイズ マップ) は、チャンク内に含まれる各アセットのタイプとサイズを視覚的に表示します。アセットは色分けされ、アイコンまたはサムネイルの付いたボックスとして表示されています。また、アセットのサイズに応じてボックスの大きさがスケーリングされています。他のボックス内にネストされているボックスは、親子の参照関係にあることを表しています。たとえば、マテリアルが参照しているテクスチャはマテリアルのボックス内に表示されます。これは、マテリアルをロードすると暗黙的にテクスチャもロードされるためです。

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

ShooterGame の Chunk 0 には独立したアセットが数多く含まれていますが、比較的小さくまとまっています。クリックして画像を拡大します。

Chunk 1 (画像を参照) と Chunk 2 にはゲームが実行される個別のマップが含まれるため、それぞれが関連するアセットによる 1 つの大きなグループとなっています。クリックして画像を拡大します。

サイズマップは、含まれるアセットが (エディタ内で) 使用するメモリ量の視覚化もサポートします。エディタ内のメモリ サイズは、出荷される製品における同じアセット グループのディスク スペース使用量とは大きく異なる場合があります。

[Memory Size (メモリサイズ)] モードで表示された Chunk 0。このモードでは、エディタ内におけるアセットのメモリ使用量に基づいてボックスの大きさがスケーリングされます。クリックして画像を拡大します。

個々のアセットを検証または編集するには、アセットのボックスを右クリックします。マウスのホイールを使用してズームインまたはズームアウトしたり、アセットをダブルクリックしてウィンドウ全体に表示させることもできます。

「ロード中の画面」のテクスチャ アセットを右クリックした状態。クリックして画像を拡大します。

参照ビューア

参照ビューア (Reference Viewer) は、アセット同士のつながり方でアセット内参照を示すグラフを生成します。チャンクと個々のアセットは、このツールを使用して検証できます。ShooterGame のサンプルで Chunk 1 を検証すると、直接接続されているアセットは"Sanctuary" マップと Chunk 1 に関連付けられた Primary Asset Label しかないことがわかります。

ShooterGame の Chunk 1 が直接参照するアセットの参照ビューアのグラフ。Sanctuary マップのアセットのノードが右クリックされています。クリックして画像を拡大します。

コンテンツ ブラウザや参照ビューアでノードを右クリックして [Re-Center Graph (グラフを再センタリング)] を選択 (または参照ビューアでノードをダブルクリック) すると、そのノードの参照が表示されます。次の画像では、Chunk 1 から "Map:/Game/Maps/Sanctuary" ノードを再センタリングしています。"Sanctuary" マップが 2 つのノード (Chunk 1 と Chunk 1 の Primary Asset Label) から参照されていることが左を見るとわかり、右を見ると "M_FFA_Wall_01" マテリアルなどの多くの子ノードを参照していることがわかります。

参照ビューアにおける ShooterGame の "Sanctuary" マップ (Chunk 1 の一部) の検証。クリックして画像を拡大します。

上のグラフは完全ではありません。参照ビューアに設定されているオプションにより制限されています。グラフの範囲を制限することにより、エンジンがグラフを作成する時間を大幅に削減することができます。これらのオプションに関する詳細は、「Reference Viewer (参照ビューア)」を参照してください。

このように参照をたどることにより、指定されたアセットが他のアセットやチャンクに関連付けされている理由を正確に把握することができます。その結果、不要なアセットの参照を見つけて削除したり、プロジェクトのニーズに合わせてチャンク化の方針を調整するのに役立ちます。

Unreal Engine のドキュメントを改善するために協力をお願いします!どのような改善を望んでいるかご意見をお聞かせください。
調査に参加する
キャンセル