レべル スナップショット を使用すると、レベルの [World Outliner (アウトライナ)] の アクタ の具体的な構成を保存して、後でシーンをその状態にすばやく復元することができます。これにより、複雑なセットアップを劇的に合理化したり、さまざまなシナリオで同じレベルの複数のバリエーションの重複を予防したり、管理を回避したりできます。レベル スナップショットは、特にバーチャル プロダクションに有用です。レベル スナップショットを利用すると、テイク間で仮想環境を最初の状態にリセットすることや、ベースとなるレベルの開始点を維持しながら、ショット間で加えられた変更をショットごとに追跡することができるからです。
また、レベル スナップショットには、状況ごとに異なる固有のニーズを考慮して、特定のアクタやプロパティを選択的に復元できる柔軟性があります。例えば、レベル スナップショットからライティングだけ、または 1 つのアクタの位置だけを選んで復元できます。知識豊富なユーザーであれば、 ブループリント を使用してカスタム フィルタを作成し、非常に複雑なレベル セットアップのアクタ/プロパティの復元を管理し、一般的なプロジェクト固有のリクエストを自動化できます。
使用を開始する
レベル スナップショット機能を有効にするには、Level Snapshots プラグインをインストールする必要があります。
Unreal Editor のメインメニュから [Project Settings] を選択します。
[Project Settings] ウィンドウで、 [Plugins (プラグイン)] > [LevelSnapshots] に移動します。
[LevelSnapshots] プラグインを有効にします。
(オプション) [nDisplay Support For Level Snapshots (レベル スナップショット用 nDisplay サポート)] プラグインを有効にします。
5.Unreal Editor の再起動を求められます。
レベル スナップショットにおける nDisplay のサポートは、個別のプラグインを通じて提供されます。これは、インカメラ VFX を使用する場合に重要です。プロジェクトで nDisplay を使用していない場合は、[nDisplay Support for Level Snapshots] プラグインを有効にする必要はありません。
エンジンの再起動が完了したら、レベル スナップショットを作成できます。 メイン ツールバー のレベル スナップショット メニューにアクセスして、 [Level Snapshots (レベル スナップショット)] ウィンドウを開きます。
スナップショットを撮る
レベル スナップショットを作成する方法は 3 つあります。
メイン ツールバーの [Level Snapshot] ボタンをクリックします。
[Level Snapshot] ウィンドウで [Take Snapshot (スナップショットを撮る)] ボタンをクリックします。
拡大表示するには、画像をクリック。
- [リモート コントロール Web アプリケーション](setting-up-your-production-pipeline\scripting-and-automating-the-editor\WebControl\RemoteControlPresetsAndWebApplication\RemoteControlWebApplication)を使用して [Take Snapshot] をアクティブ化します。
これら 3 つの方法いずれを行う場合も、 [Create Level Snapshot (レベル スナップショットを作成)] ウィンドウが開きます。
デフォルトで、[Create Level Snapshot] ウィンドウに表示される新しいレベル スナップショットには、
レベル スナップショットは [Create Level Snapshot] ウィンドウの ルート ディレクトリ の下のディレクトリ (デフォルトでは LevelSnapshots という名前) にアセットとして保存されます。特定のレベル スナップショットのサブディレクトリの場所は、 マップ (レベル) 名と、そのレベル スナップショットが作成された 日付 (年-月-日) に基づきます。ルート ディレクトリと、特定のレベル スナップショットのサブディレクトリの両方を変更できます。また、新しいレベル スナップショットのデフォルトの命名パターンも変更できます。
保存前にレベル スナップショットの名前を変更する場合、他のレベル スナップショットを上書きしないように注意してください。変更するか元に戻さない限り、変更後の名前が新しいデフォルトになるからです。
レベル スナップショットを操作する
レベル スナップショットには、アウトライナに含まれるすべてのアクタのレコードと、レベル スナップショットが作成された時点のアクタのコンポーネントとプロパティの状態が含まれます。レベル スナップショットの作成時にアウトライナに表示されているかどうかにかかわらず、すべてのアクタが記録されます。そのため、レベル スナップショットを使用してレベルのシーンをセットアップする際には、アクタの可視性の確認が必要な可能性があります。同様に、アセット (マテリアルなど) の状態は記録されないので、アセットに対する変更は ソース コントロール を使用して個別に追跡する必要があります。
レベル スナップショットを 1 つ以上作成したら、そのレベル スナップショットを選択して [Restore Level Snapshot (レベル スナップショットを復元)] ボタンを選択することで、すべてのアクタを保存時の状態にリセットすることができます。
レベル スナップショットを復元すると、レベル スナップショット作成後にアクタに加えられた変更は、レベル スナップショット保存時の状態に戻ります。
スナップショット作成後に追加された新しいアクタは、レベルから削除されます。
スナップショット作成後に削除されたアクタは、レベルに追加されます。
すべてのアクタのトランスフォームは、保存時の状態に戻ります。
アクタのプロパティに対する変更は、保存時の状態に戻ります。
拡大表示するには、画像をクリック。
[Restore Level Snapshot (レベル スナップショットを復元)] 操作は、取り消すことができます。
レベル スナップショットをクリックすると、[Level Snapshot] ウィンドウの右側に、レベル スナップショット保存時の状態に戻るすべてのアクタと、アクタのコンポーネントとプロパティのリストが表示されます。
チェックボックスを使用して特定の変更を手動で適用または無視することや、カスタム フィルタを使用して適用または無視する変更を指定することができます。カスタム フィルタに関する詳細は、「カスタム フィルタの作成」を参照してください。
プロジェクトに複数のレベルが含まれる場合は、現在開いているレベルに関連付けられたレベル スナップショットのみが [Level Snapshot] ウィンドウに表示されます。他のレベルに関連付けられているレベル スナップショットは、そのレベルをエディタで開いているときにのみ表示されます。
既知の制約事項
このセクションでは、レベル スナップショットを使用する際の既知の制約事項を説明します。
以下に示すアクタとアクタのコンポーネントは、レベル スナップショットでは追跡されません。これらをレベルで使用する場合は、手動で追跡する必要があります。
ランドスケープ
USD アクタ
コンソル変数
スナップショットを作成した後にサブレベルの名前を変更した場合、レベル スナップショット システムは、既存の変更されたアクタではなく、名前が変更されたサブレベルのすべてのアクタを新規とみなします。元の状態に戻すためにアクタの削除をレベル スナップショット システムが推奨している場合に起こります。
カスタム フィルタを作成する
[Level Snapshot] ウィンドウの中央に、カスタム フィルタがあります。1 つのフィルタを使用することも、フィルタ グループを使用して AND と OR のブーリアン演算子を含んだより複雑なフィルタを作成することもできます。お気に入りのフィルタを設定したり、後で使用できるようにフィルタを保存し、ロードしたりすることもできます。
フィルタの上にマウス カーソルを置くと、左側に緑色または赤色のバー、チェックボックス、ゴミ箱が表示されます。
緑色のバーをクリックするとバーが赤色に変わります。これでそのフィルタが反転し、機能が逆になります。例えば、特定のタグを持つアクタだけを含めるフィルタがあった場合、そのフィルタをクリックすると、該当するアクタが除外され、それ以外のものが含まれるようになります。逆に、赤色のバーをクリックするとバーが緑色になり、フィルタの機能が元に戻ります。詳細については、「レベル スナップショット フィルタの反転」を参照してください。
チェックボックスをクリックするとフィルタが無効になります。フィルタがグレーアウトされ、使用されていないことが示されます。
ゴミ箱アイコンをクリックするとフィルタが削除されます。
フィルタの反転、反転の取り消し、フィルタの有効化と無効化は、フィルタのプロパティから行うこともできます。詳細については、「レベル スナップショット フィルタのリファレンス」を参照してください。
カスタム フィルタの基本
基本的なカスタム フィルタを作成するには、以下の手順に従います。
まず、 [+Filter Group (+フィルタ グループ)] ボタンをクリックして、新しい フィルタ グループ を追加します。
[Add Filter (フィルタの追加)] ドロップダウンをクリックして、一般的なフィルタのいずれかを選択するか、 [C++ Filters (C++ フィルタ)] サブメニューを展開してフィルタを選択します。ブループリントを使用したカスタム フィルタ を作成済みの場合は、 [Blueprint Filters (ブループリント フィルタ)] サブメニューからフィルタを選択できます。また、 [Search (検索)] テキスト ボックスを使用して、特定のフィルタを検索し、追加することもできます。
特定のフィルタを、フィルタ グループにすばやくドラッグできるお気に入りとして設定できます。
最も一般的に使用されるフィルタは、 [Common Filters (一般的なフィルタ)] という見出しのメニューの下に含まれています。ここには、 [Actor Changed Transform (トランスフォームを変更したアクタ)] 、 [Actor Has Tag (タグを持つアクタ)] 、 [Property Has Name (名前を持つプロパティ)] があります。
フィルタを追加したら、プロパティを変更するためにそのフィルタを選択します。ほとんどの場合、フィルタを機能させるためには、1 つ以上のプロパティを設定する必要があります。例えば、 [Actor Has Tag Filter] は、レベル スナップショットをフィルタリングするために使用するアクタ タグを指定する必要があります。詳細については、レベル スナップショット フィルタのリファレンスを参照してください。
拡大表示するには、画像をクリック。
保存したレベル スナップショットを選択して、 [Refresh Results (結果を更新)] をクリックします。レベル スナップショットに保存されたアクタは、構成したフィルタに応じてフィルタリングされます。
拡大表示するには、画像をクリック。
新しいフィルタを保存するには、 [Load/Save Filter (フィルタのロード/保存)] ドロップダウンを開いて、 [Save As (名前を付けて保存)] を選択します。新しいウィンドウが開き、フィルタの名前の指定と、フィルタをアセットとして保存する先のディレクトリの選択ができます。
拡大表示するには、画像をクリック。
[Load/Save Filter] ドロップダウンを開き、表示されたリストからロードするフィルタ アセットを選択して [Load filter (フィルタをロード)] をクリックすることでも、保存したフィルタをロードできます。保存したフィルタ数が多い場合は、 検索 バーを使用して特定のフィルタを検索できます。
高度なカスタム フィルタ
レベル スナップショット フィルタには、フィルタを複雑に組み合わせて特定の結果を実現できる高度な機能があります。この機能は、多くのアクタを含み、複数のレベル スナップショットを保存している大規模なレベルを処理するときに役立ちます。
複数のフィルタを同じフィルタ グループに追加し、AND 演算子 (& で表される) を使用してフィルタを組み合わせることができます。これにより、両方のフィルタをレベル スナップショットに適用し、すべてのフィルタ条件を満たすアクタだけを表示できます。
[+ Filter Group] ボタンを使用してフィルタ グループを追加すると、OR 演算子を使用してフィルタを組み合わせることができます。これにより、フィルタ グループのいずれかの条件を満たすアクタが表示されます。
フィルタ グループを無視するには、チェックボックスをクリックして無効にします。無視したフィルタ グループを含めるには、チェックボックスをクリックして有効にします。
フィルタ グループを削除するには、ゴミ箱アイコンをクリックします。
ほとんどのフィルタは Default Result フィルタ プロパティを使用します。このプロパティには以下の値を設定できます。
Include: フィルタの結果を含め、それ以外をすべて除外します。
Exclude: フィルタの結果を除外し、それ以外をすべて含めます。
Do Not Care: 反転設定に従ってフィルタによって直接影響を受けるアクタを含めるか除外しますが、他のアクタの状態は考慮しません。
詳細については、「レベル スナップショット フィルタのリファレンス」を参照してください。
Default Result プロパティで Exclude に設定されたフィルタを反転すると、フィルタの結果が含まれるようになります。明確に定義されたロジックをできる限り使用するようにして、フィルタの機能で混乱することがないように注意してください。詳細については、「レベル スナップショット フィルタの反転」を参照してください。
フィルタ間の相互作用は複雑になる可能性があるため、フィルタにはその機能を明確に示す名前を慎重に付けることを強くお勧めします。他のユーザーも使用するフィルタを作成する場合には特に、名前に気を遣うようにしてください。
レベル スナップショット フィルタのロジック
C++ を使用して作成されたデフォルト フィルタおよびブループリントを使用して作成されたカスタム フィルタはすべて、次の 4 つの検証チェックのいずれかに基本的に基づいています。
Is Actor Valid: アクタを復元可能かどうかを決定します。
Is Property Valid: プロパティを復元可能かどうかを決定します。
Is Deleted Actor Valid: (レベル スナップショット作成以降に) レベルから削除されたアクタが再スポーンすべきかどうかを決定します。
Is Added Actor Valid: (レベル スナップショット作成以降に) レベルに追加されたアクタが消滅すべきかどうかを決定します。
ほとんどの場合、Is Actor Valid フィルタと Is Property Valid フィルタの両方を同時に使用することはお勧めしません。有用ではない結果になることが多いからです。特に、以下に留意してください。
[Level Snapshot] ウィンドウで同じフィルタ グループで 2 つをミックスしないようにします。
フィルタを作成するときに複数の関数 (IsActorValid など) を実装しないようにします。
複数のフィルタ グループで C++ フィルタを使用して、またはカスタム ブループリント フィルタとしてこのようなフィルタを慎重に構築した方がいいユース ケースがあります。フィルタを慎重に構築すると、あるフィルタをあるレベル スナップショットの一部の設定に適用しつつ、別のフィルタを別のレベル スナップショットの別の設定に適用できます。
例えば、2 つのライト オプションと 2 つのセット ドレッシング オプションが設定されたバーチャル プロダクション セットアップを考えてください。ライトはオプション 1、セット ドレッシングはオプション 2 にしたいとします。レベル スナップショット フィルタ ブループリントを使用すると、さまざまなレベル スナップショットから適切な設定を指定して適用できるインターフェースを作成できます。このセットアップに必要なロジック全体は、[Apply Snapshot to World (ワールドにスナップショットを適用します)] ボタンを使用するだけでは構成できないので、この場合は複雑なフィルタを構築する必要があります。
レベル スナップショット フィルタを反転する
レベル スナップショット フィルタを使用するとき、1 つのフィルタに複数の目的を果たさせる方法として、フィルタの反転が便利です。一般的に、フィルタの反転には以下の効果があります。
Include が Exclude になる。
Exclude が Include になる。
Do Not Care は Do Not Care のまま。
例えば、ActorHasTag フィルタを使用して、「RestoreMe」というタグを持つアクタだけを復元したとします。このフィルタの IsActorValid 関数は、そのタグを持つアクタを返し、タグを持たないアクタは除外します。UI でこのフィルタを反転すると、フィルタの動作は逆になり、「RestoreMe」タグを持つアクタは除外され、それ以外のすべてのアクタが返されるようになります。
また、一部のデフォルト C++ フィルタには、フィルタの関数に影響する追加のプロパティがあります。それらのフィルタをレベル スナップショットに適用する際には、目的の結果を達成できるよう、慎重に反転を使用するようにしてください。
ブループリント フィルタを作成する
このセクションは、ブループリントについて既に理解していることを前提としています。詳細については、「ブループリント」のドキュメントを参照してください。
新しいレベル スナップショット ブループリント フィルタを作成するには、以下の手順に従います。
レベル スナップショット ブループリント フィルタ基本クラスを使用して、新しいブループリントを作成します。
拡大表示するには、画像をクリック。
該当するオプションで [Override Function (オーバーライド関数)] を選択します。
Is Actor Valid: アクタを復元可能かどうかを決定します。
Is Added Actor Valid: (レベル スナップショット作成以降に) レベルに追加されたアクタが消滅すべきかどうかを決定します。
Is Deleted Actor Valid: (レベル スナップショット作成以降に) レベルから削除されたアクタが再スポーンすべきかどうかを決定します。
Is Property Valid: プロパティを復元可能かどうかを決定します。
拡大表示するには、画像をクリック。
選択したオーバーライド関数 (以下の例では [Is Actor Valid]) が新しいグラフで開きます。関数には、いくつかのデフォルト ノードが設定されています。
拡大表示するには、画像をクリック。
Is Actor Valid ノードの Parameters 出力ピンをドラッグし、Break ノードを追加します。
拡大表示するには、画像をクリック。
これで、Snapshot Actor 出力または Level Actor 出力から分岐した新しいフィルタのロジックを定義できます。これは、どちらをフィルタの条件に照らし合わせて検証するのかを決定します。
この例の残りでは、Snapshot Actor がスカイライトかどうかを確認するフィルタを作成します。
デフォルトの親を削除して、検証に適切なノードを追加し、Break ノードに接続します。以下の例では、 Cast to Skylight ノードを選択し、 Object 入力ピンを Break ノードの Snapshot Actor 出力ピンに接続しました。
拡大表示するには、画像をクリック。
Is Actor Valid ノードの出力ピンを Cast To Skylight ノードの入力ピンに接続します。Return ノードを複製し、一方のノードを Cast To Skylight のメイン出力ピンに、もう一方のノードを Cast Failed 出力ピンに接続します。
Cast To Skylight ノードのメイン出力ピンに接続された Return ノードの Return Value に対して Include を選択し、 Cast Failed 出力ピンに接続されたノードの Return Value に対して Exclude を選択します。
拡大表示するには、画像をクリック。
ブループリントを 保存 して コンパイル します。最終的なフィルタは、レベル スナップショットで使用した場合、レベル スナップショット内のスカイライト アクタのみを返します。
ブループリント フィルタにインスタンス編集可能として公開している変数 ([My Blueprint (マイ ブループリント)] パネルで変数の横に開いた目のアイコンで表示) が含まれる場合、使用する際にそのレベル スナップショット フィルタのプロパティに表示されます。
Level Snapshots プラグインの設定の設定
Level Snapshots プラグインの設定には、[Level Snapshot] ウィンドウの右上隅にある歯車アイコンをクリックして直接アクセスできます。
[Plugin Settings (プラグイン設定)] ウィンドウが開き、Level Snapshots プラグインの設定が表示されます。
この設定には、パフォーマンス向上のためにレベル スナップショットをフィルタリングする際のハッシュの使用方法が含まれています。フィルタイリングではすべてのアクタをメモリにロードする必要がありますが、アクタのロードには時間がかかることがあります。Level Snapshots プラグインでは、スナップショットの作成時にアクタのハッシュを計算することでこの問題を解決するため、フィルタリングの際にワールド内のアクタを使用してハッシュを再計算できます。ハッシュが一致する場合は、保存されたアクタ データのロードを省略できます。
設定 |
説明 |
|
---|---|---|
Behavior (動作) |
||
Skipped Classes (省略されたクラス) |
Level Snapshots は、このリストに指定されたクラスとプロパティを無視します。 |
|
Float Comparison Precision (浮動小数比較精度) |
浮動小数のプロパティを比較する際に、Level Snapshots はこの有効数字を超えた変更を含む浮動小数値を無視します。 |
|
Double Comparison Precision (倍精度比較精度) |
倍精度のプロパティを比較する際に、Level Snapshots はこの有効数字を超えた変更を含む倍精度値を無視します。 |
|
Performance (パフォーマンス) の Hash Settings (ハッシュ設定) |
||
Hash Cutoff Seconds (ハッシュのカットオフ秒) |
ほとんどのアクタではハッシュの計算におよそ 600 マイクロ秒かかりますが、より時間のかかるアクタもあります。そのようなアクタの場合は、そのハッシュを計算するよりも、保存済みのアクタ データをメモリにロードしたほうが速いことがあります。そのため、ハッシュの計算に [Hash Cutoff Seconds] の設定よりも長い時間がかかる場合は、Level Snapshots プラグインによってすべてのハッシュの計算が省略され、アクタ データがロードされます。 |
|
Use Hash for Loading (ロードにハッシュを使用) |
スナップショットのロード時に、ワールド アクタとその保存済みハッシュを比較するかどうかを指定します。このオプションを有効にするとパフォーマンスが向上します。 |
|
Can Use CRC (CRC 使用可) |
これを有効にすると、Level Snapshots はスナップショットの作成および分析時に CRC32 アルゴリズムを使ってハッシュを計算します。これを無効にすると CRC32 が計算されなくなるため、スナップショットの作成がより迅速になります。また、スナップショットのロード時には、アクタが変更されているかどうかの確認に CRC32 を使用できなくなります。 |
|
Can Use MD5 (MD5 使用可) |
これを有効にすると、Level Snapshots はスナップショットの作成および分析時に MD5 アルゴリズムを使ってハッシュを計算します。これを無効にすると MD5 が計算されなくなるため、スナップショットの作成がより迅速になります。また、スナップショットのロード時には、アクタが変更されているかどうかの確認に MD5 を使用できなくなります。 |
|
Snapshot Diff Algorithm (スナップショット差分アルゴリズム) |
[Can Use CRC] と [Can Use MD5] では、スナップショットの作成時に CRC32 および MD5 を使用するかどうかをそれぞれ指定します。両方を有効にした場合は両方が計算されるため、この設定ではアセットの差分を測る際にどのアルゴリズムを使用するかを指定します。スナップショットの作成時には、Level Snapshots プラグインによって CRC32 と MD5 のハッシュの計算にかかった時間が追跡されるため、[Use Fastest (最速を使用)] オプションを選択した場合は、Level Snapshots プラグインによってスナップショットの作成時にいずれのアルゴリズムが速かったかが確認されて、より速いものが使用されます。 |
Level Snapshots Editor プライグインの設定
Level Snapshots Editor プラグインの設定は、プライグインの設定ウィンドウでカスタマイズできます。
設定 |
説明 |
|
---|---|---|
Data (データ) |
||
Root Level Snapshot Save Dir (レベル スナップショットの保存先ルート ディレクトリ) |
レベル スナップショット アセットを保存するルート ディレクトリです。デフォルトは「/Game/LevelSnapshots」です。 |
|
Level Snapshot Save Dir (レベル スナップショットの保存先ディレクトリ) |
レベル スナップショット アセットを保存するルート ディレクトリに含まれるフォルダです。デフォルトの形式は「 {map}/{year}-{month}-{day}」です。 |
|
Default Level Snapshot Name (デフォルトのレベル スナップショット名) |
レベル スナップショット アセットの名前です。デフォルトの形式は「{map}_{user}_{time}」です。 |
|
Editor (エディタ) |
||
Enable Level Snapshots Toolbar Button ([Level Snapshots] ツールバー ボタンを有効にする) |
デフォルトで有効です。 |
|
Use Creation Form (作成フォームを使用) |
デフォルトで有効です。 |
|
Click Actor Group to Select Actor in Scene (シーン内のアクタ グループをクリックしてアクタを選択) |
これが有効の場合、[Modified Actors (変更したアクタ)] の下でアクタ グループを選択すると、シーン内のアクタが選択されます。その前の選択は解除されます。デフォルトで無効です。 |
|
Preferred Creation Form Window Width (優先する作成フォームのウィンドウ幅) |
デフォルト値が 1,000 のスライダ。 |
|
Preferred Creation Form Window Height (優先する作成フォームのウィンドウ高さ) |
デフォルト値が 1,000 のスライダ。 |