バーチャルスタジオは、AJA Video Systems 社や Blackmagic Design 社のプロフェッショナル品質のビデオ カードと統合する Unreal Engine の各種機能を確認できるショーケースです。サポート対象カードをお持ちの場合は、このプロジェクトを使用して、ビデオ プロダクション パイプラインへの Unreal Engine の統合を開始できます。
このショーケースでは、仮想防音スタジオ内で仮想デスクの背後に現実のプレゼンターをそのまま合成する機能のセットアップを紹介します。同じ考え方とセットアップを利用すれば、ライブ ビデオを Unreal Engine レベルに取り込み、キャプチャしたレンダリング結果を出力フィードに送るための他のユース ケースをサポートすることもできます。
このショーケースでセットアップするビデオ コンフィギュレーションの背景情報については、AJA Video と Blackmagic Design、さらにSupporting Multiple Media Configurations のページを参照してください。
ビデオ I/O セットアップ入門
バーチャルスタジオ ショーケースは、3 つの異なるメディア コンフィギュレーションでセットアップされます。各メディア コンフィギュレーションは、個別のメディア プロファイル アセットで定義されます。
- AJAMediaProfile_24fps_10bit は SDI 入力ビデオ フィードと出力キャプチャを AJA Video Systems のデバイスとの間で交換します。
デフォルトでは、Corvid 44 カードのポート 1 と 2 から、24 フレーム/秒 (FPS) で 10 ビット ストリームを使用して入力を受け付けるようにセットアップします。 - BlackmagicMediaProfile_24fps_10bit は SDI 入力ビデオ フィードと出力キャプチャを Blackmagic Design のデバイスとの間で交換します。
デフォルトでは、DeckLink Duo 2 カードのポート 1 と 2 から、24 FPS で10 ビット ストリームを使用して入力を受け付けるようにセットアップします。 - FileMediaProfile はディスクにある .mp4 ファイルからデフォルトで入力を受け付けるようにセットアップします。
これはデフォルト コンフィギュレーションで、プロジェクトの開始時にアクティブになります。そのため、サポート対象の AJA や Blackmagic カードが取り付けられていない場合でも、ビデオのプレイをすぐに確認できます。
このコンフィギュレーションは Unreal Engine や Unreal Editor からビデオをキャプチャするようにセットアップされていません。メディア出力も設定されていません。したがって、このコンフィギュレーションがアクティブである間、ビデオ フィードはレベルに取り込まれますが、出力はありません。
これらの異なるコンフィギュレーションの間で切り替えるには、ツールバーで選択されているメディア プロファイルの隣にある、下向き矢印をクリックして、ドロップダウン メニューから [Select Profile (プロファイルの選択)] を選択してから、アクティブにするメディア プロファイルを選択します。
デフォルトのポート割り当てやメディア設定 (FPS、画像解像度、色深度など) を変更し、使用するコンピュータで作業するメディア セットアップに一致させる必要がある場合は、これらの Media Profile アセットをダブルクリックして開き、そのプロパティを編集します。「VirtualSet」/「MediaProfiles」フォルダにメディア プロファイル アセットがあります。
メディア プロファイルのしくみの詳細は、「複数のメディア コンフィギュレーションのサポート」 を参照してください。
メディア ソースと再生
バーチャルスタジオ ショーケースは 2 つのメディア バンドルを使用して、入力ビデオ フィードを取り込み、レベル ビューポートに表示します。
- デフォルトでは 1 つの画面だけを表示するようにセットアップされます。このフィードはプレゼンターのデスクの背後でシーンに合成されて表示されます。
-
2 番目のビデオ フィードは Unreal Editor で非表示です。したがって、[Media Capture (メディア キャプチャ)] パネルまたは実行時のオンスクリーン キャプチャ コントロールを使用して、カメラを切り替えるまでデフォルトでは見えません。詳細は オンスクリーン キャプチャ コントロール を見てください。Unreal Editor のビューポートで 2 番目のフィードを表示させるには
- VirtualSetMediaInput2 アクタを [World Outliner (ワールド アウトライナー)] で選択します。
- [Details (詳細)] パネルで、[Plate (プレート)] > [Show Plate in Editor (エディタにプレートを表示)] をオンにします。
この 2 番目のフィードもプレゼンターのデスクの背後で合成されますが、カメラのアングルはプレゼンターの右に表示するようになっています。
- VirtualSetMediaInput2 アクタを [World Outliner (ワールド アウトライナー)] で選択します。
メディア バンドル セットアップ
プレゼンター デスクの後ろにある 2 つのビデオ入力面を、メディア バンドル VirtualSet/Media/VideoBundle_01 と VirtualSet/Media/VideoBundle_02 を使用してセットアップします。これらの各バンドルは対応するフォルダがあり、_InnerAssets サフィックスが名前に付いたメディア フレームワーク アセットが保持されます。
メディア バンドルを最初からセットアップする方法を習得するには、「AJA Video I/O クイック スタート ガイド」 または 「Blackmagic Video I/O クイック スタート ガイド」 を参照してください。
バーチャルスタジオ ショーケースのメディア バンドルで留意すべきことは、多くのメディア バンドル アセットで使用されるデフォルト ブループリント クラスを使用しないことです。
一般に、メディア バンドル アセットをレベルにドロップすると、レベルの 3D 空間でビデオを表現する、新しい BP_MediaBundle_Plane_16-9 アクタが自動的にスポーンされます。このデフォルト ブループリントには平面コンポーネントが含まれます。これはバンドルの「_InnerAssets」フォルダに作成されるメディア テクスチャを指します。これには、関連メディア ソースからのオーディオの再生を処理する MediaSound コンポーネントも含まれます。
一方、バーチャルスタジオでは、メディア バンドル アセットは、レベルで BP_MediaBundle_Plane_16-9 ブループリント アクタのカスタム サブクラス VirtualSet/Blueprints/VirtualSetMediaInput により表現されます。このサブクラスの動作は親と同じですが、異なるのは、[World Outliner (ワールド アウトライナー)] で子として特定のカメラ アクタを割り当てることが想定される点です。レベルの 2 つのビデオ平面に子としてカメラがあることがわかります。
このカスタム VirtualSetMediaInput サブクラスにより、エディタ ビューポートでのプレートの表示/非表示を切り替え、プレートと割り当てカメラの距離を設定する機能が追加されます。VirtualSetMediaInput1 または VirtualSetMediaInput2 アクタを選択すると、[Details (詳細)] パネルの [Plate (プレート)] カテゴリにあるこれらのオプションを設定できます。
これらの設定がどのように実装されているのか確認する場合は、ブループリント クラスをダブルクリックして、コンストラクション スクリプトと他の関数を表示します。
プロキシ メディア ソース
レベルにある 2 つのメディア バンドルは異なるプロキシ メディア ソース アセットからビデオ フィードを取り込むように設定されています。例えば、VideoBundle_01 をダブルクリックすると、MediaProxySource_01 アセットをソースとして使用するようにセットアップされているのがわかります。
同様に、VideoBundle_02 は MediaProxySource_02 アセットをソースとして使用するようにセット アップされています。
[Project Settings (プロジェクト設定)] パネル (メイン メニューの [Edit (編集)] > [Project Settings (プロジェクト設定)]) を開くと、[Plugins (プラグイン)] > [Media Profile (メディア プロファイル)] セクションで、2 つのプロキシ メディア ソースが、[Media Source Proxy (メディア ソース プロキシ)] リストで参照されていることもわかります。
このリストでのスロット順はその時点のメディア プロファイルでのスロット順に対応します。例えば、BlackmagicMediaProfile_24fps_10bit は 2 つのメディア ソースでセットアップされています。スロット 0 はカードのポート 1 から入力フィードを読み取り、スロット 1 はカードのポート 2 から入力フィードを読み取ります。
このコンフィギュレーションの結果は、Blackmagic メディア プロファイルがアクティブである間、VideoBundle_01 は 1 つのプロキシを経由して、カードのポート 1 から入力フィードを受け取り、一方、VideoBundle_02 は、異なるプロキシを経由してカードのポート 2 から入力フィードを取り込みます。メディア プロファイルを変更するとき、これらのプロキシは自動的に、新しいメディア プロファイルで定義された最初の 2 つの入力ソースに入力フィードを再マップします。レベルに表示されるビデオ フィードが即座に変わります。
メディア プロファイルのしくみの詳細は、「複数のメディア コンフィギュレーションのサポート」 を参照してください。
キーイングとコンポジティング
メディア バンドルはバーチャル 3D レベルに着席したプレゼンターを表示するため中央のデスクの背後に配置されます。このエフェクトを動作させるために、入力ビデオ ストリームからプレゼンターの背後の部分を取り除く必要があります。これを実行するには、一般にグリーン スクリーン (またはブルー スクリーン) の前に着席したプレゼンターを録画して、クロマキーイングや輝度フィルタリングで背景を取り除く必要があります。
このショーケースで使用されているような、メディア バンドルは自動的に、Unreal Engine でのライブのためにクロマキーイングや輝度フィルタリングを実行できるメディア インスタンスを使用するようにセットアップされます。
設定方法
- コンテンツ ブラウザ で、セットアップするメディア バンドルを検索して開きます
- メディア バンドル エディタのツールバーで、[Open Material Editor (マテリアル エディタを開く)] ボタンをクリックして、メディア バンドルがレベルのオブジェクトにビデオ フィードを取り込むために使用するメディア インスタンスを編集します。
- マテリアル インスタンス エディタの [Details (詳細)] パネルで [Keyer_00 - Setup] セクションを見つけ、[EnableKeyer] をオンにします。
- EnableKeyer プロパティが有効であると、マテリアル インスタンスの [Details (詳細)] パネルにある他の [Keyer] セクションで新しいプロパティが表示されます。これらのプロパティを使用してビデオ ストリームから取り除く色を設定でき、ピクセルの輝度に基づいてストリームをフィルタリング、切り取り、ストリームの色補正を実行できます。
出力ビデオをキャプチャする
このセクションの手順に従って Unreal Engine からビデオをキャプチャするには、AJA Video Systems 社または Blackmagic Design 社のサポート SDI カードが必要です。
Unreal Editor から AJA または Blackmagic カードにビデオを送信するには
- メイン メニューから [Window (ウィンドウ)] > [Media Capture (メディア キャプチャ)] を選択します。このウィンドウの各ツールを使用して、Unreal Engine から出力を受け取るメディア出力の対象を特定できます。これらの出力にビデオを送信する、レンダリング ターゲットやレベルのカメラを個別に指定することもできます。
次の画面のとおり、[Media Capture (メディア キャプチャ)] ウィンドウはレベルの 2 台のカメラから MediaOutput_01 プロキシ メディア出力アセットにブロードキャストするようにセットアップします。
バーチャルスタジオのプロジェクト設定は MediaOutput_01 に送信するビデオをアクティブなメディア プロファイルで構成されている最初の出力ソースにリダイレクトするようにセットアップされています。AjaMediaProfile_24fps_10bit または BlackmagicMediaProfile_24fps_10bit メディア プロファイルを使用している場合、カードの第 4 ポートに出力が送信されることになります。 - ウィンドウの一番上にある [Capture (キャプチャ)] アイコンをクリックして、キャプチャを開始します。
- ウィンドウの一番下に、Locked Camera Actors リストの第 1 カメラの視点でプレビューが表示されますカードの第 4 ポートにビデオ デバイスが取り付けられている場合、そのポートに対して同じビデオが送信されていることがわかります。
[Media Capture (メディア キャプチャ)] ウィンドウには、Locked Camera Actors リストに載っている各カメラのプレビューの上にボタンが配置されます。これらのボタンを使用して、異なる視点の間で出力を切り替えます。
このショーケースでは、オンスクリーン コントロール UI を使用して、実行時にビデオ カードにキャプチャを送信するようにもセットアップします。
- メイン ツールバーの [Play (プレイ)] ボタンの隣にある矢印をクリックし、[New Editor Window (PIE) (新規エディタ ウィンドウ (PIE))] または [Standalone Game (スタンドアロン ゲーム)] オプションを選択します。
New Editor Window (PIE) または Standalone Game でプロジェクトをプレイするときのみ、エディタからビデオ キャプチャが動作します。デフォルトの Selected Viewport モード、または Simulate モードでは機能しません。
さらに、プロジェクトのビューポート解像度 (つまり、Unreal Engine が各フレームを生成するレンダリング画像のサイズ) は、これが出力ビデオ フィードの適切なサイズになるように、アクティブなメディア プロファイルの出力解像度に一致する必要があります。 - 初めにプレゼンター デスクの正面ビュー、左上にいくつかコントロール、レベルの各カメラのサムネイル画像が表示されます。
- 現在のカメラ ビューを変更するには、カメラ サムネイルをクリックするか、[Next Camera (次のカメラ)] ボタン (1) をクリックしてカメラを順に切り替えます。
- [Enable Video Output (ビデオ出力の有効化)] チェックボックス (2) をオン/オフして、現在のビューポートでビデオ カードへの送信の開始と停止を切り替えます。
また、オンスクリーン ランタイム キャプチャ コントロールは選択したカメラ フィードを MediaOutputProxy_01 アセットに送信するようにセットアップします。このアセットのプロジェクト設定は、現在のメディア プロファイルで設定された第 1 出力に転送します。このセットアップ方法の詳細は、以下の「オンスクリーン キャプチャ コントロール」 セクションを参照してください。
オンスクリーン キャプチャ コントロール
「Virtual Set」/「Blueprints」 フォルダにオンスクリーン カメラ コントロール UI のアセットがあります。
- CameraSwitcherUI UMG ウィジェットには、[Next Camera (次のカメラ)] ボタンと現在のビューのキャプチャを切り替えるチェックボックスを含むメイン オンスクリーン要素があります。
-
シーンの背後で、UI をクリックしたときに発生するすべてのイベントは、CameraSwitcher ブループリント クラスにより処理されます。すべてのカメラ スイッチング ロジックの実装をイベント グラフで確認できます。ビデオ キャプチャの開始と停止に関連するロジックは 2 つのメインの場所にあります。
- [Event Graph (イベント グラフ)] で、Create Media Capture ノードは VideoOutputSettings 変数にセットアップされている MediaOutputProxy_01 アセットから新しいメディア キャプチャ オブジェクトを作成し、Media Capture という変数に格納します。
- Enable Video Output 関数で、Media Capture 変数がビューポートのキャプチャの開始と停止に使用されます。
- [Event Graph (イベント グラフ)] で、Create Media Capture ノードは VideoOutputSettings 変数にセットアップされている MediaOutputProxy_01 アセットから新しいメディア キャプチャ オブジェクトを作成し、Media Capture という変数に格納します。
- CameraSwitcher は UI で管理する必要がある、すべての VirtualSetMediaInput オブジェクトのリストでセットアップする必要があります。
CameraSwitcher ブループリント クラスの 1 つのインスタンスがレベルに追加されます。このアクタをビューポートまたは [World Outliner (ワールド アウトライナー)] で選択すると、 [Details (詳細)] パネルの設定を使用して動作をコントロールできます。
プロパティ | 説明 |
---|---|
Video Output | |
Enable Output by Default | この設定を有効にすると、プロジェクトを実行するときに、CameraSwitcher が、ビデオ出力のキャプチャをすぐに開始し、Video Output Settings に設定されたメディア出力に送信します。 |
Video Output Settings | CameraSwitcher が使用してメディア キャプチャを作成し、SDI デバイスにビデオ出力を送信する、メディア出力アセットを設定します。このアセットの設定は、キャプチャしたビデオ ストリームを受け取る、対象デバイス、そのデバイスでの対象ポートを決定します。デフォルトでは、これは VirtualSet/Media/MediaOutputProxy_01 アセットを使用します。このアセットはプロジェクト設定でセットアップして、アクティブなメディア プロファイルが存在する場合は、そこで定義されている最初の出力ポートに出力を送信します。 |
Cameras | |
Camera List | CameraSwitcher が実行時に管理できる、すべての VirtualSetMediaInput アクタをリストします。 ビデオ ウォール プレゼンターの左にある大きなビデオ ウォールは、どのメディア プロファイルからの入力にも依存しません。このビデオ ウォールの大半の部分は、メディア フレームワークで提供される基本構成部品を使用して構築されています。 「Virtual_Studio_Kit/Textures/Video」フォルダでビデオ ウォールに使用されるメディア フレームワーク アセットを見つけます。
Modular Studio KitVirtual Studio サンプルには、スタティックメッシュ、マテリアル、テクスチャなどを含むモジュラー アセットのライブラリが含まれています。このアセットを使って、前のセクションで説明したデフォルト レベルにあるような自分だけのスタジオのレイアウトを作成することができます。 このアセット ライブラリはコンテンツ ブラウザの「Virtual_Studio_Kit」フォルダにあります。 「Maps」フォルダには、プレビルドされたスタジを含むレベルもあります。 Unreal Editor でこれらを開いて、キットのアセットのみを使用して構築することができるバーチャルスタジオのレイアウトの種類の例を確認してください。 Virtual Studio サンプルで作業すると開くデフォルトの TrackerlessStudio レベルとは異なり、「Maps」フォルダの他のスタジオ レベルのサンプルは、デフォルトではカメラとメディア プレートで設定されていません。SDI ビデオフィードをこれらのサンプルのいずれかに入れるには、新しい CineCamera アクタと VirtualSetMediaInput アクタで設定しなければなりません。前のセクションでデフォルト レベルの設定方法を理解し、それを適用して自分だけのレベルに適用するモデルとして利用してください。 |
User Interface | |
Show UI | プロジェクトを実行したときに、オンスクリーン CameraSwitcher UI を表示するかどうかを決定します。 |
ビデオ ウォール
プレゼンターの左にある大きなビデオ ウォールは、どのメディア プロファイルからの入力にも依存しません。このビデオ ウォールの大半の部分は、メディア フレームワークで提供される基本構成部品を使用して構築されています。
「Virtual_Studio_Kit/Textures/Video」フォルダでビデオ ウォールに使用されるメディア フレームワーク アセットを見つけます。
- EngineFeatures はファイル メディア ソースで、プロジェクトの「Movies」フォルダにある .mp4 ファイルからビデオを読み込むようにセットアップします。WallMediaPlayer は EngineFeatures ファイル ソースからのビデオ再生をコントロールします。この WallMediaPlayer アセットが作成されたとき、対応する MediaTexture アセット T_WallMediaPlayer が自動的に作成され、ビデオ ソースからフレーム読み取りを受け取ります。
独自のビデオ ファイルを再生するためにこの種のアセットを作成するステップ ガイドについては、「レベル内でビデオをプレイする」 を参照してください。 - M_WallVideoPlayer マテリアルは T_WallMediaPlayer メディア テクスチャからピクセルをサンプリングし、Emissive 出力に送信します。これにより画面にレンダリングしたときに、ビデオに若干の輝きが加えられます。
- 最後に、WallPlayerSetup はブループリントで、そのコンストラクション スクリプトはビデオ ウォールのループ再生を開始します。このクラスのインスタンスはすでにレベルに配置され、レベルがロードされ、クラスがスポーンされるたびに壁でビデオの再生が開始されます。このようにして、ビデオ ウォールが常に背景で再生されます。Unreal Editor で作業しているのか、プロジェクトを実行しているのかには依存しません。
Modular Studio Kit
Virtual Studio サンプルには、スタティックメッシュ、マテリアル、テクスチャなどを含むモジュラー アセットのライブラリが含まれています。このアセットを使って、前のセクションで説明したデフォルト レベルにあるような自分だけのスタジオのレイアウトを作成することができます。
このアセット ライブラリはコンテンツ ブラウザの「Virtual_Studio_Kit」フォルダにあります。
「Maps」フォルダには、プレビルドされたスタジを含むレベルもあります。
Unreal Editor でこれらを開いて、キットのアセットのみを使用して構築することができるバーチャルスタジオのレイアウトの種類の例を確認してください。
Virtual Studio サンプルで作業すると開くデフォルトの TrackerlessStudio レベルとは異なり、「Maps」フォルダの他のスタジオ レベルのサンプルは、デフォルトではカメラとメディア プレートで設定されていません。SDI ビデオフィードをこれらのサンプルのいずれかに入れるには、新しい CineCamera アクタと VirtualSetMediaInput アクタで設定しなければなりません。前のセクションでデフォルト レベルの設定方法を理解し、それを適用して自分だけのレベルに適用するモデルとして利用してください。