開発者向けの Mixed Reality キャプチャ (DirectX)
注:
HoloLens 2の新しい MRC 機能に関するガイダンスについては、以下の「PV カメラからのレンダリング」を参照してください。
ここで作業を開始する前に、 Mixed Reality キャプチャの概要 に関する記事を参照することをお勧めします。
PV カメラからのレンダリング (オプトイン)
HoloLens 2は、Mixed Reality キャプチャの実行中に、イマーシブ アプリが PV カメラからレンダリングされる機能を追加します。 アプリで追加のレンダリングが正しくサポートされるようにするには、アプリでこの機能をオプトインする必要があります。
PV カメラからのレンダリングでは、既定の MRC エクスペリエンスに対して次の機能強化が提供されます。
- 物理的な環境と近い相互作用に対する手へのホログラムの配置は、すべての距離で正確である必要があります。 既定の MRC に表示される場合と同様に、フォーカス ポイント以外の距離でオフセットを設定することは避けてください。
- ヘッドセットの右目は、MRC 出力のホログラムのレンダリングに使用されないため、侵害されません。
PV カメラからのレンダリングを有効にするには、次の 3 つの手順があります。
- PhotoVideoCamera HolographicViewConfiguration を有効にする
- 追加の HolographicCamera レンダリングを処理する
- この追加の HolographicCamera からシェーダーとコードが正しくレンダリングされていることを確認する
DirectX で PhotoVideoCamera HolographicViewConfiguration を有効にする
PV カメラからのレンダリングをオプトインするには、アプリで PhotoVideoCamera の HolographicViewConfiguration を有効にするだけです。
var display = Windows.Graphics.Holographic.HolographicDisplay.GetDefault();
var view = display.TryGetViewConfiguration(Windows.Graphics.Holographic.HolographicViewConfigurationKind.PhotoVideoCamera);
if (view != null)
{
view.IsEnabled = true;
}
DirectX で追加の HolographicCamera レンダリングを処理する
アプリが PV カメラからレンダリングすることをオプトインすると、Mixed Reality キャプチャが開始されます。
- HolographicSpace の CameraAdded イベントが発生します。 このイベントは、アプリが現時点でカメラを処理できない場合に延期できます。
- 未処理の遅延なしでイベントが完了すると、HolographicCamera は次の HolographicFrame の AddedCameras リストに表示されます。
Mixed Reality キャプチャが停止した場合 (または、Mixed Reality キャプチャの実行中にアプリがビュー構成を無効にした場合): HolographicCamera は次の HolographicFrame の RemovedCameras リストに表示され、HolographicSpace の CameraRemoved イベントが発生します。
カメラが属する構成を識別するために、 ViewConfiguration プロパティが HolographicCamera に追加されました。
シェーダーとコードで追加のカメラがサポートされていることを確認する
Mixed Reality キャプチャを実行し、通常とは異なる配置、コンテンツの欠落、またはパフォーマンスの問題に対してチェックします。 必要に応じてシェーダーとコードを更新します。
追加のカメラへのレンダリングをサポートできない特定のシーンがある場合は、PhotoVideoCamera の HolographicViewConfiguration を無効にすることができます。
アプリで MRC を無効にする
2D アプリ
2D アプリは、Mixed Reality キャプチャが実行されているときにビジュアル コンテンツを隠すことができます。
- DXGI_PRESENT_RESTRICT_TO_OUTPUT フラグを表示する
- DXGI_SWAP_CHAIN_FLAG_HW_PROTECTED フラグを使用してアプリのスワップ チェーンを作成する
- Windows 10 May 2019 Updateを使用して、ApplicationView の IsScreenCaptureEnabled を設定します
イマーシブ アプリ
イマーシブ アプリは、次の方法で、ビジュアル コンテンツを Mixed Reality キャプチャから除外することを選択できます。
- HolographicCameraRenderingParameter の IsContentProtectionEnabled を設定して、関連するフレームの Mixed Reality キャプチャを無効にする
- HolographicCamera の IsHardwareContentProtectionEnabled を設定して、関連するホログラフィック カメラの Mixed Reality キャプチャを無効にする
パスワード キーボード
Windows 10 May 2019 Updateでは、パスワードまたはピン キーボードが表示されると、ビジュアル コンテンツは Mixed Reality キャプチャから自動的に除外されます。
MRC がアクティブなタイミングを把握する
AppCapture クラスは、(オーディオまたはビデオの場合) システム Mixed Reality キャプチャが実行されているタイミングを知るために、アプリで使用できます。
注:
デバイスで Mixed Reality キャプチャを使用できない場合、AppCapture の GetForCurrentView API は null を返すことができます。 また、アプリが中断されたときに CapturingChanged イベントを登録解除することも重要です。そうしないと、MRC がブロック状態になる可能性があります。
アプリ内からの MRC 機能の統合
Mixed Reality アプリは、アプリ内から MRC 写真またはビデオキャプチャを開始でき、キャプチャされたコンテンツはデバイスの "カメラ ロール" に保存されずにアプリで使用できるようになります。カスタム MRC レコーダーを作成することも、組み込みのカメラ キャプチャ UI を利用することもできます。
カメラ UI が組み込まれた MRC
開発者は 、カメラ キャプチャ UI API を使用して、数行のコードだけでユーザーがキャプチャした Mixed Reality の写真またはビデオを取得できます。
この API は、ユーザーが写真やビデオを撮影し、結果のキャプチャをアプリに返す組み込みの MRC カメラ UI を起動します。 ストリームをキャプチャするために独自のカメラ UI または下位レベルのアクセスを追加する必要がある場合は、カスタム Mixed Realityキャプチャ レコーダーを作成できます。
画面キャプチャを使用した MRC
2021 年 5 月HoloLens 2更新プログラム (Windows Holographic バージョン 21H1 ビルド 20346.1002) では、開発者はスクリーン キャプチャ API を使用して Mixed Reality ビデオ フレームのストリームを要求できます。
カスタム MRC レコーダーの作成
ユーザーは、システム MRC キャプチャ サービスを使用して常に写真またはビデオをトリガーできますが、アプリケーションでは、MRC と同じようにカメラ ストリームにホログラムを含むカスタム カメラ アプリを構築できます。 これにより、アプリケーションはユーザー入力からのキャプチャを開始したり、カスタム記録 UI を構築したり、MRC 設定をカスタマイズしていくつかの例を挙げることができます。
HoloStudio は、MRC 効果を使用してカスタム MRC カメラを追加します
他のアプリケーションでは、 Windows Media Capture API を 使用してカメラを制御し、MRC ビデオとオーディオ効果を追加して仮想ホログラムとアプリケーション オーディオを静止画やビデオに含めることでこれを行うことができます。
アプリケーションには、効果を追加する 2 つのオプションがあります。
- 以前の API: Windows.Media.Capture.MediaCapture.AddEffectAsync()
- 新しい Microsoft 推奨 API (オブジェクトを返し、動的プロパティを操作できるようにする): Windows.Media.Capture.MediaCapture.AddVideoEffectAsync() / Windows.Media.Capture.MediaCapture.AddAudioEffectAsync() アプリで IVideoEffectDefinition と IAudioEffectDefinition の独自の実装を作成する必要があります。 例については、 MRC サンプル アプリ を参照してください。
注:
Windows.Media.MixedRealityCapture 名前空間は Visual Studio では認識されませんが、文字列は引き続き有効です。
MRC ビデオ 効果 (Windows.Media.MixedRealityCapture.MixedRealityCaptureVideoEffect)
プロパティ名 | 型 | 既定値 | 説明 |
---|---|---|---|
StreamType | UINT32 (MediaStreamType) | 1 (VideoRecord) | この効果が使用されるキャプチャ ストリームについて説明します。 オーディオは使用できません。 |
ホログラムCompositionEnabled | ブール値 | TRUE | ビデオ キャプチャでホログラムを有効または無効にするフラグ。 |
RecordingIndicatorEnabled | ブール値 | TRUE | ホログラムキャプチャ中に画面上の記録インジケーターを有効または無効にするフラグ。 |
VideoStabilizationEnabled | ブール値 | FALSE | HoloLens トラッカーを使用してビデオの手ブレ補正を有効または無効にするフラグ。 |
VideoStabilizationBufferLength | UINT32 | 0 | ビデオの安定化に使用される履歴フレームの数を設定します。 0 は 0 待機時間で、電力とパフォーマンスの観点からはほぼ "無料" です。 最高の品質には 15 を推奨します (待機時間とメモリの 15 フレームを要します)。 |
GlobalOpacityCoefficient | 浮動小数点数 | 0.9 (HoloLens) 1.0 (イマーシブ ヘッドセット) | ホログラムのグローバル不透明度係数を 0.0 (完全に透明) から 1.0 (完全に不透明) の範囲に設定します。 |
BlankOnProtectedContent | ブール値 | FALSE | 保護されたコンテンツを示す 2d UWP アプリがある場合に、空のフレームを返すを有効または無効にするフラグ。 このフラグが false で、2d UWP アプリに保護されたコンテンツが表示されている場合、2d UWP アプリはヘッドセットと Mixed Reality キャプチャの両方で保護されたコンテンツ テクスチャに置き換えられます。 |
ShowHiddenMesh | ブール値 | FALSE | ホログラフィック カメラの非表示領域メッシュと隣接するコンテンツの表示を有効または無効にするフラグ。 |
OutputSize | Size | 0, 0 | ビデオ安定化のためにトリミング後に目的の出力サイズを設定します。 既定のトリミング サイズは、0 または無効な出力サイズが指定されている場合に選択されます。 |
OutputSubtype | String | Nv12 | ホログラム合成やビデオ手ブレ補正の後に、目的の出力サブタイプを設定します。 Nv12 および Argb32MediaEncodingSubtypes をサポートします。 |
PreferredHologramPerspective | UINT32 | Windows デバイス ポータルの [カメラからのレンダリング] 設定 | どのホログラフィック カメラ ビュー構成をキャプチャするかを示すために使用される列挙型: 0 (表示) は、アプリが写真/ビデオ カメラからレンダリングするように求められないことを意味します。1 (PhotoVideoCamera) は、アプリに写真/ビデオ カメラからレンダリングするように求められます (アプリがサポートしている場合)。 HoloLens 2でのみサポートされます |
注:
Windows デバイス ポータルで PreferredHologramPerspective の既定値を変更するには、[Mixed Reality キャプチャ] ページに移動し、[カメラからレンダリング] をオフにします。 設定の既定値は 1 (PhotoVideoCamera) ですが、オフにすると 0 (表示) に設定できます。
PreferredHologramPerspective の既定値は、2020 年 6 月の更新プログラム (Windows Holographic バージョン 19041.1106 および Windows Holographic バージョン 1903 ビルド 18362.1064) より前の 0 (表示) でした。
OutputSubtype のサポートは、2021 年 5 月の更新プログラム (Windows Holographic バージョン 21H1 ビルド 20346.1002) で追加されました。
MRC オーディオ エフェクト (Windows.Media.MixedRealityCapture.MixedRealityCaptureAudioEffect)
プロパティ名 | 型 | 既定値 | 説明 |
---|---|---|---|
MixerMode | UINT32 | 2 (マイクとシステム オーディオ) | 使用するオーディオ ソースを示すために使用する列挙型: 0 (マイク オーディオのみ)、1 (システム オーディオのみ)、2 (マイクとシステム オーディオ) |
ループバックGain | 浮動小数点数 | Windows デバイス ポータルでの App Audio Gain 設定 | システムオーディオボリュームに適用するゲイン。 範囲は 0.0 ~ 5.0 です。 HoloLens 2でのみサポートされます |
MicrophoneGain | 浮動小数点数 | Windows デバイス ポータルのマイク オーディオ ゲイン設定 | マイクボリュームに適用するゲイン。 範囲は 0.0 ~ 5.0 です。 HoloLens 2でのみサポートされます |
注:
Windows デバイス ポータルで LoopbackGain または MicrophoneGain の既定値を変更するには、[Mixed Reality キャプチャ] ページに移動し、それぞれの設定の横にあるスライダーを調整します。 どちらの設定も既定値は 1.0 ですが、0.0 ~ 5.0 の任意の値に設定できます。
Windows デバイス ポータルを使用して、2020 年 6 月の更新プログラム (Windows Holographic、バージョン 2004 ビルド 19041.1106、Windows Holographic バージョン 1903 ビルド 18362.1064) で既定のゲイン値を構成しました。
MRC の同時制限
複数のアプリが同時に MRC にアクセスする場合は、特定の制限事項に注意する必要があります。
写真/ビデオ カメラへのアクセス
HoloLens 1 では、プロセスがビデオの記録中または写真の撮影中に、MRC は写真のキャプチャやビデオのキャプチャに失敗します。 逆の場合も当てはまります。MRC が実行されている場合、アプリケーションはカメラにアクセスできません。
HoloLens 2を使用すると、カメラへのアクセスを共有できます。 解像度またはフレーム レートを直接制御する必要がない場合は、SharedReadOnly で SharedMode プロパティ を使用して MediaCapture を初期化できます。
組み込みの MRC 写真とビデオ カメラへのアクセス
Windows 10に組み込まれている MRC 機能 (Cortana、スタート メニュー、ハードウェア ショートカット、Miracast、Windows デバイス ポータル経由):
- 既定では ExclusiveControl で実行されます
ただし、共有モードで動作するためのサポートが MRC サブシステムに追加されました。
- アプリが写真/ビデオ カメラへの ExclusiveControl アクセスを要求した場合、組み込みの MRC は写真/ビデオ カメラの使用を自動的に停止し、アプリの要求が成功します
- アプリに ExclusiveControl がある間に MRC の組み込みが開始された場合、組み込みの MRC は SharedReadOnly モードで実行されます
この共有モード機能には、次の制限があります。
- Cortana、ハードウェア ショートカット、またはスタート メニューを使用した写真: 2018 年 4 月の更新プログラム (またはそれ以降) Windows 10が必要です
- Cortana、ハードウェア ショートカット、またはスタート メニューを使用したビデオ: 2018 年 4 月の更新プログラム (またはそれ以降) Windows 10が必要です
- Miracast での MRC のストリーミング: Windows 10 October 2018 Update (以降) が必要です
- Windows デバイス ポータルまたは HoloLens コンパニオン アプリを介した MRC のストリーミング: HoloLens 2が必要です
注:
別のアプリが写真/ビデオ カメラを使用している場合、組み込みの MRC カメラ UI の解像度とフレーム レートが通常の値から低下する可能性があります。
開発者向けの MRC アクセス
MRC を使用する場合は、常にカメラの排他制御を要求することをお勧めします。 これにより、上記の制限事項を認識している限り、アプリケーションでカメラの設定を完全に制御できるようになります。
- 初期化設定を使用してメディア キャプチャ オブジェクトを作成する
- SharingMode プロパティを exclusive に設定する
注意
続行する前に、 SharingMode の備考をよく お読みください。
- 目的の方法でカメラを設定する
- アプリを起動し、スタート API でビデオ フレームをキャプチャし、MRC を有効にする
注意
アプリを起動する前に MRC を起動した場合、この機能が期待どおりに動作することを保証することはできません。
上記のプロセスの完全なサンプルは、 ホログラフィック顔追跡サンプルにあります。
注:
2018 年 4 月の更新Windows 10前は、アプリのカスタム MRC レコーダーがシステム MRC と相互に排他的でした (写真のキャプチャ、ビデオのキャプチャ、Windows デバイス ポータルからのストリーミング)。