デフォルトでは、Unreal Editor は使用するコンピュータの現在のシステム タイムに基づいて、独自のタイムコードを生成します。このタイムコードはデフォルトでは、30 FPS (フレーム/秒) で動作するように設定されますが、エンジンは通常、1 秒に 30 をはるかに超えるフレームをレンダリングします。したがって、出力の連続する複数フレームに、同じタイムコード値が割り当てられます。
プロレベルのビデオと連携するときに、複数の異なるビデオ フィードと信号処理デバイスの間でタイムコードを同期させることが必要な場合があります。その際に便利な方法は、Unreal Engine のタイムコードを、連携するビデオ フィードのタイムコードに一致させることです。場合により、さらに進めて、リファレンス入力を通じて入るビデオの各フレームに対して、単一のフレームだけを生成するようにエンジンをロックする必要があります。これを「genlock (ゲンロック)」と呼びます。
このページでは、独自の値を生成しないで、AJA カードで指定したポートのタイムコード値を Unreal Engine で採用する方法と、そのタイムコード信号に対して Unreal Engine をゲンロックをかける方法について説明します。
タイムコードとゲンロック管理は現在開発中の機能で、将来のバージョンで変更される可能性があります。
Unreal Editor でタイムコードを視覚化する
Unreal Editor で作業中に Unreal Engine で使用されている実際のタイムコード値を確認するには、[Timecode Provider (タイムコード プロバイダ)] パネルを使用します。このパネルを表示するには、メイン メニューから [Window (ウィンドウ)] > [Developer Tools (デベロッパー ツール)] > [Timecode Provider (タイムコード プロバイダ)] を選択します。

現在のタイムコード、タイムコード プロバイダ (タイムコード値のソース) および 1 秒以内に生成されているタイムコード フレーム数が表示されます。このパネルはメイン レベル エディタの UI のどこにでもドッキングできます。
別の方法として、次のコンソール コマンドを使用できます。
stat timecode
Unreal Editor のビューポートに HH:MM:SS:FF の形式で値が表示されます。

入力信号のタイムコードを採用する、またはビデオ信号にゲンロックするように Unreal Engine をセットアップしている場合、ゲンロックとタイムコードのソースも表示されます。例:

このコマンドで Unreal Engine が期待するレートでフレームを生成していること、および入力ビデオと同じタイムコードを使用していることを確認できます。
タイムコードとゲンロックをセットアップする
次のステップでは、AJA または Blackmagic デバイスから来る入力 SDI ビデオ フィードのタイムコード値を Unreal Engine で採用する方法、および入力の各フレームに出力フレームを 1 つだけ生成するため、対象のフィードにフレーム レートを Unreal Engine がロックする方法を説明します。
-
コンテンツ ブラウザを右クリックして、[Create Basic Asset (基本アセットの作成)] > [Blueprint Class (ブループリント クラス)] を選択します。
-
[Pick Parent Class (親クラスを選択)] ウィンドウで、[All Classes (すべてのクラス)] セクション (1) を展開します。[AjaTimecodeProvider] クラスまたは [BlackmagicTimecodeProvider] クラス (2) を検索して選択し、[Select (選択)] (3) をクリックします。
コンテンツ ブラウザに戻り、新しいアセットにわかりやすい名前、「AJA_Timecode_Port」または「Blackmagic_Timecode_Port」などと付けます。
- 新規アセットをダブルクリックしてブループリント エディタで開きます。プロパティを [Details (詳細)] パネルでセットアップします。
- 入力ビデオ ストリームからタイムコードを読み取るには、[Video Configuration (ビデオ コンフィギュレーション)] または [Media Configuration (メディア コンフィギュレーション)]** で AJA または Blackmagic カードを指定し、(該当する場合は) フィードから読み取るタイムコードのタイプ (LTC または VITC) を設定します。
- AJA カードを使用し、ビデオ ストリームからではなく、カードの参照ポートからタイムコードを読み取る必要がある場合は、[Use Reference In (参照入力の使用)] をオンにして、[Reference Configuration (参照コンフィギュレーション)] を [Video Configuration (ビデオ コンフィギュレーション)] の代わりに設定します。
- ブループリント クラスを コンパイル および *保存 *してから、ブループリント エディタを閉じます。
-
Unreal Engine をビデオ ソースにゲンロックする必要がある場合、前の手順を繰り返して、ブループリント クラスを作成しセットアップします。ただし今回は、[AjaCustomTimeStep] または [BlackmagicCustomTimeStep] を親クラスとして使用します。
-
このクラスでは、[AjaTimecodeProvider] または [BlackmagicTimecodeProvider] に対するものと同様の設定が必要です。
AJA カードの場合はさらに設定があります。詳細はツールチップを参照してください。
-
メイン メニューから [Edit (編集)] > [Project Settings (プロジェクト設定)] を選択します。
[Project Settings (プロジェクト設定)] ウィンドウで、[Engine (エンジン)] > [General Settings (一般設定)] カテゴリ (1) を開き、[Timecode (タイムコード)] セクション (2) を見つけます。[TimecodeProvider] ドロップダウン リストから、作成したタイムコード ポート アセットを選択します。 -
Unreal Engine をビデオ ソースに対してゲンロックをかける必要がある場合、上の [Framerate (フレームレート)] セクションに移動し、セクションの一番下の詳細プロパティを展開します。[Custom TimeStep (カスタム タイムステップ)] ドロップダウン リストから、作成したゲンロック ポート アセットを選択します。
- Unreal Editor を閉じて、プロジェクトを再起動します。
メディア プロファイルを使用して、プロジェクトに複数の異なるメディア コンフィギュレーションをセットアップする場合、各メディア プロファイルのタイムコードとタイムステップ プロバイダに対するデフォルトのプロジェクトレベル設定をオーバーライドすることもできます。詳細は「マルチメディア コンフィギュレーションをサポートする」を参照してください。
最終結果
タイムコード プロバイダとカスタム タイムステップ クラスに対してセットアップしたポートにビデオ入力が到着し、そのビデオの解像度とフレームレート、タイムコード形式が指定どおりである限り、Unreal Engine はビデオのタイムコードを採用し、フレーム更新周波数をロックして、各入力フレームに対して 1 つの出力フレームを生成するようにする必要があります。
機能していることを確認するには「Unreal Editor でタイムコードを視覚化する」で説明したオプションの 1 つを使用します。
タイムコード テクセル エンコーディング
デバッグ目的で、AJA および Blackmagic デバイスのメディア ソースおよびメディア出力アセットで、各フレームのタイムコードをビデオ画像に、白く光るピクセルをエンコードできます。これが便利なのは、視覚的にビデオの対象フレームが、それが付随しているタイムコード信号と実際に一致していることを確認する場合です。
タイムコードは通常 HH:MM::SS:FF の 8 桁の形式で表現されます。これらの各桁はテクスチャ出力の 1 行に画像の一番上から順に割り当てられます。各行の中で、タイムコードの桁の値を画像の左からカウントして、タイムコード値を表すピクセルを見つけます。一番左のピクセルはピクセル番号 0 です。
したがって、たとえば、タイムコード値が 12:08:44:12 である場合
- 第 1 行で、左から 2 番目のピクセルが点灯します (ピクセル番号 1)。
- 第 2 行で、左から 3 番目のピクセルが点灯します (ピクセル番号 2)。
- 第 3 行で、一番左のピクセルが点灯します (ピクセル番号 0)。
- 第 4 行で、左から 9 番目のピクセルが点灯します (ピクセル番号 8)。
- など。