ライブ環境のステージを操作するとき、Unreal Engine (UE) のインスタンスを実行する複数のマシンが、互いに影響を及ぼして、連動します。オペレーターは LED ウォールのレンダリングにインスタンスを使用することがあります。それらは、エディタでシーンを変更するために使用されることも、合成するために使用されることもあります。ステージ モニターでは、Unreal Engine のすべてのインスタンスから異なるイベントのレポートを受け取ることができ、セットアップの軽微な問題をトラブルシューティングできます。
クリックして拡大表示します。
このページを最後まで進むと、ステージ モニターの使用と、プロジェクトへのカスタム イベントの追加について理解できます。
必要なプラグイン
ステージ モニターを開始するには、次のプラグインをプロジェクトに追加します。
プラグイン名 | 目的 |
---|---|
Stage Monitoring | データ プロバイダとステージ モニタリング ロジックを実行するメインのプラグインです。 |
Virtual Production Utilities | StageMonitor プラグインで、VirtualProduction ロールの機能を使用できるようにするものです。 |
Switchboard | スイッチボードの使用は任意ですが、ステージを操作する Unreal Engine の複数インスタンスを起動する場合に便利です。各インスタンスに割り当てるロールを構成するためにも使用できます。 |
プロジェクトでこれらのプラグインを有効にするには次のステップを実行します。
-
Unreal Editor のメインメニューで、[Edit (編集)] > [Plugins (プラグイン)] を選択します。
-
[Plugins (プラグイン)] ウィンドウで、Stage monitor プラグインを見つけ [Enabled (有効)] をオンにします。
クリックして拡大表示します。
-
確認画面で、[Yes (はい)] を選択します。
-
[Restart Now (今すぐ再起動)] をクリックしてエディタを閉じ、新しいプラグインを有効にして再起動します。
-
Virtual Production Utilities プラグインと Switchboard プラグインを有効にするために同じ手順を繰り返します。
使用する UE のバージョンによっては、これらのプラグインがデフォルトで有効になっていることがあります。いずれにしても、プラグイン メニューで有効になっていることをダブルチェックすることをお勧めします。
タイムコードをセットアップする
Unreal Engine の各インスタンスで独自のタイムコードを生成します。互いに通信する複数のマシンでは、時刻が同期されていない場合、ステージ モニターでイベントが正しい順序にならないことがあります。UE インスタンスを効率的に監視するには、モニターするすべてのインスタンスでタイムコードを有効にして、同じタイムコード プロバイダを使用します。マシン間のタイムコードの同期については、「タイムコードとゲンロック」を参照してください。
マシンにロールを割り当てる
ステージを操作するとき、各マシンは、レンダラ、エディタ、コンポジタなど異なる役割を実行できます。UE の各インスタンスに、コマンド ライン引数または Switchboard でロールを割り当て、それぞれの機能に基づいた異なるロジックを利用できます。ステージ モニターはこれらのロールを使用して、インスタンスが生成できるイベントの種類、さらにインスタンスがモニターされるかどうかを決定します。
Switchboard でロールを割り当てる
Switchboard は「VPRoles.ini」ファイルを各インスタンスのプロジェクト フォルダで探します (\Config\Tags\VPRoles.ini)。次の例では、Render、Editor、Compositor のロールが「VPRoles.ini」ファイルに追加されています。
[/Script/GameplayTags.GameplayTagsList]
GameplayTagList=(Tag="Render", DevComment="")
GameplayTagList=(Tag="Editor", DevComment="")
GameplayTagList=(Tag="Compositor", DevComment="")
Switchboard では、設定の各インスタンスに対してロールを調整できます。
クリックして拡大表示します。
コマンドラインでロールを割り当てる
コマンドライン引数で各インスタンスにロールを割り当てられます。Unreal のインスタンスを起動するとき、次の引数を追加します。 -VPRole=RoleName
ここで RoleName はマシンに割り当てるエディタなどのロールです。
ステージ モニターを開く
ステージ モニターのデータ プロバイダは、ロール フィルタリングを使用していない限り、デフォルトで開始されます。各インスタンスが起動されると、ステージ モニターを探します。見つけるとイベントの送信を開始します。定期的に、他のものを監視するインスタンスは、データ プロバイダを検出するためにメッセージをブロードキャストします。モニターを見つけると、データ プロバイダは発生しているイベントを送信することを開始します。ステージ モニターを起動し、情報が送信され、期待する順序で受け取っていることを確認します。
次の手順に従ってステージ モニターを開始します。
-
[Window (ウィンドウ)] タブから [Virtual Production] > [Stage monitor (ステージモニター)] をクリックします。
-
[Monitor Status (ステータスの監視)] のトグル スイッチでステージ モニターを有効にします。
-
有効にすると、一番上のセクションに接続されたインスタンスが表示されます。
クリックして拡大表示します。
- 有効になっていると、さらにステージ イベントの定常ストリームが下のウィンドウに表示されます。
クリックして拡大表示します。
ステージ モニターを使用する
ステージ モニターへ情報が到着し始めると、多くのことを処理できます。ここでは、注目する項目やイベント ログを管理するのに役立つヒントをいくつか紹介します。
重大ステート
Take Recorder は Critical State イベント タイプを使用して、シーンが記録される時点を指定します。レコーディングしている間は、どのようなイベントでも結果に影響を及ぼすことがあります。つまりテイクが開始されるとステージは Critical State (クリティカル ステート) になり、テイクが停止するとステージはクリティカル ステートではなくなります。クリティカル ステートはイベント タイプなので、どのシナリオでも、独自の重大ステートを設定できます。
以下の手順に従って、ステージ モニターが TakeRecorder によりクリティカル ステートに入ったことを確認します。
-
ステージ モニター を起動して、UE のすべてのインスタンスが接続され、イベントを正しくレポートしていることを確認します。
-
Take Recorder を [Window (ウィンドウ)] > [Cinematics (シネマティックス)] > [Take Recorder] で起動します。
-
[Take Recorder] で、テイクを開始する ボタンをクリックします。
-
少し間をおいて、ステージ モニターのステータス インジケーターが緑 (運用停止) から赤 (運用中) に変わり、ステージ モニターがクリティカル ステートであることがわかります。
-
クリティカル ステートである間に、イベント ログのイベントがハイライトされることがわかります。
-
Take Recorder の テイクを停止する ボタンをクリックしてテイクを止めます。
下のビデオではこのプロセスの動作を示します。
フィルタリング
時間が経つにつれてメッセージ ログは大きくなり、その中から特定のものを見つけるのが難しくなります。フィルタリング メニューで、関心のあるメッセージ タイプ、分離するデータ プロバイダに簡単にフォーカスできます。これによりステージの運用中に起きたイベントだけを表示できます。
-
ステージ モニター を [Window (ウィンドウ)] > [Virtual Production] > [Stage Monitor] で起動します。
-
イベント ログ で、[Filters (フィルタ)] ドロップダウン メニューを展開します。
-
[Message Type (メッセージタイプ)] メニューを展開し、特定のメッセージ タイプでフィルタリングします。
-
[Provider (プロバイダ)] メニューを展開し、イベント プロバイダ ごとにイベントをフィルタリングします。
-
[クリティカル ステートSource (クリティカル ステート ソース)] オプションを展開して、クリティカル ステート ソースに基づいてフィルタリングします。
-
[Critical State Source]オプションを有効にして選択し、クリティカル状態ソースに基づいてフィルタリングします。
-
イベントを時間でフィルタリングするには、[Time]オプションを有効にして選択します。
エクスポート/インポートする
セッションが完了したら、すべてのイベントとプロバイダを JSON 形式のファイルにエクスポートできます。これらのログを外部ツールや UE で直接確認できます。
-
ステージ モニター を [Window (ウィンドウ)] > [Developer Tools (デベロッパーツール)] > [Miscellaneous (その他)] > [Stage Monitor (ステージ モニター)] で起動します。
-
ステージ モニターの左上に 5 種類のボタンがあります
-
ディスク アイコン をクリックして、現在のログをエクスポートします。このボタンをクリックすると、ログを保存する場所を指定するダイアログが表示されます。
-
左にある オレンジ色の点 をクリックして、レビュー モード にします。
-
レビュー モードに入ると、[CurrentSession] の隣にレビュー中のファイル名が表示されます。
-
レビュー モードでは、フォルダ アイコン をクリックして、前にレコードしたログをロードして、レビューします。
ファイルを開いた後、同じフィルタを使って、特定イベントを抽出できます。
ステージ モニターのイベント タイプ
ステージ モニターの複数タイプのイベントが UE のベース バージョンとともにトリガーされます。新しいタイプは C++ を通じて追加できます。StageDataCore
モジュールへの依存関係を追加し、イベントの FStageProviderEventMessage を継承します。さらに、繰り返しメッセージに対して、FStageProviderPeriodicMessage を拡張できます。次によくあるイベント、含まれるファイル、目的のリストを示します。
イベント名 | ファイ | 説明 |
---|---|---|
Critical State Provider Message | StageMessages.h |
クリティカル ステートに入る、または抜けるときに送信されます。 |
Stage Provider Discovery Response Message | StageMessages.h |
モニターとプロバイダ間の検出プロトコルの一部です。 |
Stage Provider Close Message | StageMessages.h |
プロバイダがシャットダウンしているときに送信されます。 |
Frame Performance Provider Message | StageMonitorUtils.h |
プロバイダのフレーム データを更新するために定期的に送信されます。 |
Hitch Detection Message | FramePerformanceProvider.h |
フレームで許容最大時間を超えるときに送信されます。 |
Genlock State Event | GenlockWatchdog.h |
CustomTimeStep がゲンロックされ、そのステージが変更されているときに送信されます。 |
Genlock Hitch Event | GenlockWatchdog.h |
CustomTimeStep がゲンロックされたもので、ゲンロック信号 (1 フレーム) が失われたときに送信されます。 |
Timecode Provider State Event | TimecodeProviderWatchdog.h |
TimecodeProvider のステータスが変わるときに送信されます。 |
Timed Data Monitor Channel ConnectionState Event | TimecodeProviderWatchdog.h |
TimedDataMonitor プラグインが必要です。チャンネル接続状態が変わるときに送信されます。 |
Timed Data Monitor Channel Evaluation State Event | TimedDataMonitorSubsystem.h |
TimedDataMonitor プラグインが必要です。チャンネル評価状態が変わるときに送信されます。 |
イベント タイプを追加する
次の手順に従ってステージ モニターのカスタム イベント タイプを追加します。
-
エディタのメインメニューで、[File (ファイル)] > [Open Visual Studio (Visual Studio を開く)] を選択します。このオプションがない場合は、[Open C++Class... (新規C++クラス...)] を選択します。
-
Visual Studio のソリューション エクスプローラーでモジュールを見つけ、ステージ イベントを発生させる場所を「.Build.cs」ファイルに定義します。
StageDataCore
を PublicDependencyModuleNames の範囲に付加します。
PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "StageDataCore" });
- C++ ヘッダ ファイルで、ステージ イベント データ構造体を定義し、FStageProviderEventMessage または FStageProviderPeriodicMessage から継承します。次のヘッダ ファイル「MyStageEvents.h」では、FMyStageEvent が FStageProviderEventMessage から派生し、データが int32 であることを想定しています。
#include "StageMessages.h"
#include "MyStageEvents.generated.h"
USTRUCT ()
struct FMyStageEvent : public FStageProviderEventMessage
{
GENERATED_BODY ()
public:
FMyStageEvent () = default;
FMyStageEvent (int32 InMyVariable) : MyVariable (InMyVariable)
{}
public:
int32 MyVariable = 0;
}
- イベントを発生させるときはいつでも、IStageDataProvider::SendMessage<>() を使用するイベントをテンプレート パラメータとしてコードで呼び出します。例えば、前に作成したイベントは次のように呼び出します。
int32 DataToSend = 3;
IStageDataProvider::SendMessage<FMyStageEvent>(EStageMessageFlags::Reliable, DataToSend);
UE は UDP を使用してメッセージを送信するので、メッセージは失われ、ドロップし、受信されないことがあります。フラグ EStageMessageFlags::Reliable
を使用すると、ステージ モニターが必ずメッセージを受け取るようになります。
定期的なメッセージを送信している場合、EStageMessageFlags::None
を Reliable フラグの代わりに使用できます。
ステージ モニターの設定
ステージ モニターの設定は、ツール内で直接、またはプロジェクトのプロジェクト設定で確認できます。
-
Unreal Editor のステージ モニター設定にアクセスするには、[Edit (編集)] > [Project Settings (プロジェクト設定)] に移動し、「Stage」を検索します。
-
ツール内からステージ モニター設定にアクセスするには、ステージ モニター を [Window (ウィンドウ)] > [Virtual Production] > [Stage Monitor] から選択します。
-
ツールが起動したら 歯車 ボタンをクリックします。
次に最も重要な設定とその目的を示します。
設定全般

設定名 | 説明 |
---|---|
Use Session ID | sessionId を使用して、同じネットワークで操作している 2 つのステージを区別できます。コマンドラインで sessionId を、-StageSessionId= に指定して各インスタンスに渡します。 |
Timeout Interval | プロバイダでモニターが切断されたとみなすのに必要な時間、さらにプロバイダが切断されたとモニターでみなす時間です。 |
Monitor Settings (モニター設定)

設定名 | 説明 |
---|---|
Supported Roles | インスタンスに特定ロールがあるときにだけ使用されるように、モニタリング ロジックをフィルタリングするために使用します。自動開始モニタリングを使用するときに便利ですが、例えばレンダリング ノードで使用されません。 |
Auto Start | デフォルトで、モニタリング ロジックは自動で開始されません。モニター パネルで開始できますが、インスタンスが起動されたときに開始する場合は、この設定をオンにします。ロール フィルタリングを使用しない場合、どのインスタンスもモニタリングされますが、複数のインスタンスが使用されている場合にネットワーク トラフィックが大幅に増加します。 |
Provider Settings (プロバイダ設定)

設定名 | 説明 |
---|---|
Supported Roles | インスタンスにリストのロールがあるとき、データ プロバイダ ロジックだけを有効にします。 |
Message Type Role Exclusion | デフォルトでは、どのデータ プロバイダもトリガーされるイベントを発生します。ヒッチ検出が有効であるときは特に、モニタリング ログが大量で分かりにくくなります。例えば、エディタを使用しているとき、ユーザーがメニューに移動すると、ヒッチが確実にトリガーされます。これをフィルタリングするには、この設定を対象イベント タイプの特定ロールに割り当て、そのイベントをトリガーできるインスタンスの種類をフィルタリングできます。 |
Update Interval | UE は定期的にこのメッセージをすべてのデータ プロバイダから送信します。フレームのタイミングに関する情報が含まれ、ハートビートとして使用されます。モニター パネルで、使用するすべてのプロバイダがどのように動作しているのかの情報がすばやくわかります。この設定では UE がこれらのメッセージを送信する頻度をコントロールします。 |
Enable Hitch Detection | 基本ヒッチ検出ロジックを有効にします。これは統計スレッドで使用され、メッセージはレンダリング ノードを含む、ビューポートで描画されます。これを避けるには、-ExecCmds="DisableAllScreenMessages" を付けて起動する必要があります。 |
Minimum Frame Rate | レンダリング、ゲーム スレッドでフレーム レート インターバルを超えるとき、ヒッチ イベントがトリガーされます。 |
Export Settings (エクスポート設定)

設定名 | 説明 |
---|---|
Keep Only Last Period Message | JSON にエクスポートするとき、イベントのすべての期間タイプに対して最後のメッセージだけをエクスポートします。これはファイル サイズを減らすために使用されます。 |
Exclude Message Types | JSON にエクスポートするとき、除外するメッセージ タイプを追加します。 |