ステージ モニター

ステージ モニターは Unreal Engine の複数インスタンスからイベントをレポートします。

Windows
MacOS
Linux

ライブ環境のステージを操作するとき、Unreal Engine (UE) のインスタンスを実行する複数のマシンが、互いに影響を及ぼして、連動します。オペレーターは LED ウォールのレンダリングにインスタンスを使用することがあります。それらは、エディタでシーンを変更するために使用されることも、合成するために使用されることもあります。ステージ モニターでは、Unreal Engine のすべてのインスタンスから異なるイベントのレポートを受け取ることができ、セットアップの軽微な問題をトラブルシューティングできます。

Stage_StageMonitorWindow_RAW.PNG

このページを最後まで進むと、ステージ モニターの使用と、プロジェクトへのカスタム イベントの追加について理解できます。

必要なプラグイン

ステージ モニターを開始するには、次のプラグインをプロジェクトに追加します。

プラグイン名

目的

Stage Monitoring

データ プロバイダとステージ モニタリング ロジックを実行するメインのプラグインです。

Virtual Production Utilities

StageMonitor プラグインで、VirtualProduction ロールの機能を使用できるようにするものです。

Switchboard

スイッチボードの使用は任意ですが、ステージを操作する Unreal Engine の複数インスタンスを起動する場合に便利です。各インスタンスに割り当てるロールを構成するためにも使用できます。

プロジェクトでこれらのプラグインを有効にするには次のステップを実行します。

  1. Unreal Editor のメインメニューで、[Edit (編集)] > [Plugins (プラグイン)] を選択します。

    Stage_PluginsMenu.png

  2. [Plugins (プラグイン)] ウィンドウで、Stage monitor プラグインを見つけ [Enabled (有効)] をオンにします。

    Stage_PluginsFindStage.png

  3. 確認画面で、[Yes (はい)] を選択します。

    Stage_BetaOptIn.png

  4. [Restart Now (今すぐ再起動)] をクリックしてエディタを閉じ、新しいプラグインを有効にして再起動します。

    Stage_PluginReset_RAW.PNG

  5. 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 では、設定の各インスタンスに対してロールを調整できます。

Stage_SwitchboardSettings.png

コマンドラインでロールを割り当てる

コマンドライン引数で各インスタンスにロールを割り当てられます。Unreal のインスタンスを起動するとき、次の引数を追加します。 -VPRole=RoleName ここで RoleName はマシンに割り当てるエディタなどのロールです。

ステージ モニターを開く

ステージ モニターのデータ プロバイダは、ロール フィルタリングを使用していない限り、デフォルトで開始されます。各インスタンスが起動されると、ステージ モニターを探します。見つけるとイベントの送信を開始します。定期的に、他のものを監視するインスタンスは、データ プロバイダを検出するためにメッセージをブロードキャストします。モニターを見つけると、データ プロバイダは発生しているイベントを送信することを開始します。ステージ モニターを起動し、情報が送信され、期待する順序で受け取っていることを確認します。

次の手順に従ってステージ モニターを開始します。

  1. [Window (ウィンドウ)] タブから [General (一般)] > [Developer Tools (デベロッパーツール)] を展開し、[Stage monitor (ステージモニター)] をクリックします。

    Stage_WindowTab_RAW.PNG

  2. [Monitor Status (ステータスの監視)] のトグル スイッチでステージ モニターを有効にします。

    Stage_StageMonitorActivation_RAW.PNG

  3. 有効にすると、一番上のセクションに接続されたインスタンスが表示されます。

    Stage_StageMonitorWindowInstances.png

  4. 有効になっていると、さらにステージ イベントの定常ストリームが下のウィンドウに表示されます。

    Stage_StageMonitorWindowEvents.png

ステージ モニターを使用する

ステージ モニターへ情報が到着し始めると、多くのことを処理できます。ここでは、注目する項目やイベント ログを管理するのに役立つヒントをいくつか紹介します。

重大ステート

[Take Recorder](AnimatingObjects/Sequencer/Workflow/TakeRecorder)
は Critical State イベント タイプを使用して、シーンが記録される時点を指定します。レコーディングしている間は、どのようなイベントでも結果に影響を及ぼすことがあります。つまりテイクが開始されるとステージは Critical State (クリティカル ステート) になり、テイクが停止するとステージはクリティカル ステートではなくなります。クリティカル ステートはイベント タイプなので、どのシナリオでも、独自の重大ステートを設定できます。

以下の手順に従って、ステージ モニターが TakeRecorder によりクリティカル ステートに入ったことを確認します。

  1. ステージ モニター を起動して、UE のすべてのインスタンスが接続され、イベントを正しくレポートしていることを確認します。

  2. Take Recorder[Window (ウィンドウ)] > [Cinematics (シネマティックス)] > [Take Recorder] で起動します。

    Stage_LaunchTakeRecorder_RAW.PNG

  3. [Take Recorder] で、テイクを開始する ボタンをクリックします。

    Stage_StartTake.png

  4. 少し間をおいて、ステージ モニターのステータス インジケーターが緑 (運用停止) から赤 (運用中) に変わり、ステージ モニターがクリティカル ステートであることがわかります。

    Stage_StatusChange.png

  5. クリティカル ステートである間に、イベント ログのイベントがハイライトされることがわかります。

    Stage_CriticalEvents.png

  6. Take Recorderテイクを停止する ボタンをクリックしてテイクを止めます。

    Stage_StopTake.png

下のビデオではこのプロセスの動作を示します。

フィルタリング

時間が経つにつれてメッセージ ログは大きくなり、その中から特定のものを見つけるのが難しくなります。フィルタリング メニューで、関心のあるメッセージ タイプ、分離するデータ プロバイダに簡単にフォーカスできます。これによりステージの運用中に起きたイベントだけを表示できます。

  1. ステージ モニター[Window (ウィンドウ)] > [Developer Tools (デベロッパーツール)] > [Miscellaneous (その他)] で起動します。

    Stage_WindowTab_RAW.PNG

  2. イベント ログ で、[Filters (フィルタ)] ドロップダウン メニューを展開します。

    Stage_FiltersMenu.png

  3. [Message Type (メッセージタイプ)] メニューを展開し、特定のメッセージ タイプでフィルタリングします。

    Stage_FilterMessageType_RAW.PNG

  4. [Provider (プロバイダ)] メニューを展開し、イベント プロバイダ ごとにイベントをフィルタリングします。

    Stage_FilterProvider_RAW.PNG

  5. [クリティカル ステートSource (クリティカル ステート ソース)] オプションを展開して、クリティカル ステート ソースに基づいてフィルタリングします。

    Stage_FilterCriticalSource_RAW.PNG

エクスポート/インポートする

セッションが完了したら、すべてのイベントとプロバイダを JSON 形式のファイルにエクスポートできます。これらのログを外部ツールや UE で直接確認できます。

  1. ステージ モニター[Window (ウィンドウ)] > [Developer Tools (デベロッパーツール)] > [Miscellaneous (その他)] > [Stage Monitor (ステージ モニター)] で起動します。

    Stage_WindowTab_RAW.PNG

  2. ステージ モニターの左上に 5 種類のボタンがあります

    Stage_AllButtons.png

  3. ディスク アイコン をクリックして、現在のログをエクスポートします。このボタンをクリックすると、ログを保存する場所を指定するダイアログが表示されます。

    Stage_ExportButton.png

  4. 左にある オレンジ色の点 をクリックして、レビュー モード にします。

    Stage_ReviewModeButton.png

  5. レビュー モードに入ると、[CurrentSession] の隣にレビュー中のファイル名が表示されます。

    Stage_SessionStatusChange.png

  6. レビュー モードでは、フォルダ アイコン をクリックして、前にレコードしたログをロードして、レビューします。

    Stage_ReviewModeFolder.png

    Stage_LoadingLog_RAW.PNG

ファイルを開いた後、同じフィルタを使って、特定イベントを抽出できます。

ステージ モニターのイベント タイプ

ステージ モニターの複数タイプのイベントが 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 プラグインが必要です。チャンネル評価状態が変わるときに送信されます。

イベント タイプを追加する

次の手順に従ってステージ モニターのカスタム イベント タイプを追加します。

  1. エディタのメインメニューで、[File (ファイル)] > [Open Visual Studio (Visual Studio を開く)] を選択します。このオプションがない場合は、[Open C++Class... (新規C++クラス...)] を選択します。

  2. Visual Studio のソリューション エクスプローラーでモジュールを見つけ、ステージ イベントを発生させる場所を「.Build.cs」ファイルに定義します。StageDataCore を PublicDependencyModuleNames の範囲に付加します。

    PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "StageDataCore" });

  3. 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;
    }
  4. イベントを発生させるときはいつでも、IStageDataProvider::SendMessage<>() を使用するイベントをテンプレート パラメータとしてコードで呼び出します。例えば、前に作成したイベントは次のように呼び出します。

    int32 DataToSend = 3;
    IStageDataProvider::SendMessage<FMyStageEvent>(EStageMessageFlags::Reliable, DataToSend);

UE は UDP を使用してメッセージを送信するので、メッセージは失われ、ドロップし、受信されないことがあります。フラグ EStageMessageFlags::Reliable を使用すると、ステージ モニターが必ずメッセージを受け取るようになります。

定期的なメッセージを送信している場合、EStageMessageFlags::None を Reliable フラグの代わりに使用できます。

ステージ モニターの設定

ステージ モニターの設定は、ツール内で直接、またはプロジェクトのプロジェクト設定で確認できます。

  1. Unreal Editor のステージ モニター設定にアクセスするには、[Edit (編集)] > [Project Settings (プロジェクト設定)] に移動し、「Stage」を検索します。

    Stage_OpenProjectSettings_RAW.PNG

    Stage_SearchProjectSettings.png

  2. ツール内からステージ モニター設定にアクセスするには、ステージ モニター[Window (ウィンドウ)] > [Developer Tools (デベロッパーツール)] > [Miscellaneous (その他)] から選択します。

    Stage_WindowTab_RAW.PNG

  3. ツールが起動したら 歯車 ボタンをクリックします。

    Stage_SettingsButton.png

次に最も重要な設定とその目的を示します。

設定全般

Stage_PluginGeneralSettings.png

設定名

説明

Use Session ID

sessionId を使用して、同じネットワークで操作している 2 つのステージを区別できます。コマンドラインで sessionId を、-StageSessionId= に指定して各インスタンスに渡します。

Timeout Interval

プロバイダでモニターが切断されたとみなすのに必要な時間、さらにプロバイダが切断されたとモニターでみなす時間です。

Monitor Settings (モニター設定)

Stage_PluginMonitorSettings.png

設定名

説明

Supported Roles

インスタンスに特定ロールがあるときにだけ使用されるように、モニタリング ロジックをフィルタリングするために使用します。自動開始モニタリングを使用するときに便利ですが、例えばレンダリング ノードで使用されません。

Auto Start

デフォルトで、モニタリング ロジックは自動で開始されません。モニター パネルで開始できますが、インスタンスが起動されたときに開始する場合は、この設定をオンにします。ロール フィルタリングを使用しない場合、どのインスタンスもモニタリングされますが、複数のインスタンスが使用されている場合にネットワーク トラフィックが大幅に増加します。

Provider Settings (プロバイダ設定)

Stage_PluginProviderSettings.png

設定名

説明

Supported Roles

インスタンスにリストのロールがあるとき、データ プロバイダ ロジックだけを有効にします。

Message Type Role Exclusion

デフォルトでは、どのデータ プロバイダもトリガーされるイベントを発生します。ヒッチ検出が有効であるときは特に、モニタリング ログが大量で分かりにくくなります。例えば、エディタを使用しているとき、ユーザーがメニューに移動すると、ヒッチが確実にトリガーされます。これをフィルタリングするには、この設定を対象イベント タイプの特定ロールに割り当て、そのイベントをトリガーできるインスタンスの種類をフィルタリングできます。

Update Interval

UE は定期的にこのメッセージをすべてのデータ プロバイダから送信します。フレームのタイミングに関する情報が含まれ、ハートビートとして使用されます。モニター パネルで、使用するすべてのプロバイダがどのように動作しているのかの情報がすばやくわかります。この設定では UE がこれらのメッセージを送信する頻度をコントロールします。

Enable Hitch Detection

基本ヒッチ検出ロジックを有効にします。これは統計スレッドで使用され、メッセージはレンダリング ノードを含む、ビューポートで描画されます。これを避けるには、-ExecCmds="DisableAllScreenMessages" を付けて起動する必要があります。

Minimum Frame Rate

レンダリング、ゲーム スレッドでフレーム レート インターバルを超えるとき、ヒッチ イベントがトリガーされます。

Export Settings (エクスポート設定)

Stage_PluginExportSettings.png

設定名

説明

Keep Only Last Period Message

JSON にエクスポートするとき、イベントのすべての期間タイプに対して最後のメッセージだけをエクスポートします。これはファイル サイズを減らすために使用されます。

Exclude Message Types

JSON にエクスポートするとき、除外するメッセージ タイプを追加します。

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