MRTK2 プロファイル構成ガイド
Mixed Reality Toolkit では、ツールキットを可能な限り管理するために必要な構成の多くが一元化されます (実際のランタイム "モノ" を除く)。
このガイドは、ツールキットで現在使用できる各構成プロファイル画面の簡単なチュートリアルです。
メインの Mixed Reality Toolkit 構成プロファイル
シーンの MixedRealityToolkit GameObject にアタッチされているメインの構成プロファイルにより、プロジェクトにおけるツールキットへのメイン エントリ ポイントが提供されます。
Note
Mixed Reality Toolkit は、既定の構成画面を "ロック" して、プロジェクトの共通の開始点を常に確保し、プロジェクトの進化に合わせて独自の設定の定義を開始することをお勧めします。 MRTK 構成は、再生モード中は編集できません。
Mixed Reality Toolkit のすべての "既定" プロファイルは、フォルダー Assets/MRTK/SDK/Profiles の SDK プロジェクトにあります。
重要
DefaultHoloLens2ConfigurationProfile は HoloLens 2 用に最適化されています。 詳しくは、「プロファイル」をご覧ください。
メインの Mixed Reality Toolkit 構成プロファイルを開くと、インスペクターに次の画面が表示されます。
MixedRealityToolkit をシーン内で使用せずに MixedRealityToolkitConfigurationProfile アセットを選択すると、MRTK でシーンを自動的に設定するかどうかを確認するメッセージが表示されます。 これは省略可能です。ただし、すべての構成画面にアクセスするには、シーン内にアクティブな MixedRealityToolkit オブジェクトが存在する必要があります。
これにより、プロジェクトの現在のアクティブな実行時構成が格納されます。
ここから、次のような MRTK のすべての構成プロファイルに移動できます。
- メインの Mixed Reality Toolkit 構成プロファイル
- エクスペリエンス設定
- カメラの設定
- 入力システムの設定
- 境界の視覚化の設定
- テレポート システムの選択
- 空間認識の設定
- 診断設定
- シーンのシステム設定
- その他のサービスの設定
- 入力アクションの設定
- 入力アクションの規則
- ポインターの構成
- ジェスチャの構成
- 音声コマンド
- コントローラー マッピングの構成
- コントローラーの視覚化の設定
- エディター ユーティリティ
- 実行時のプロファイルの変更
- 参照
これらの構成プロファイルについて詳しくは、以下の関連するセクションをご覧ください。
エクスペリエンス設定
Mixed Reality Toolkit のメインの構成ページにあるこの設定を使って、プロジェクトに対する Mixed reality 環境のスケールの既定の操作を定義します。
カメラの設定
カメラ設定では、Mixed Reality プロジェクトのカメラの設定方法を定義し、汎用のクリッピング、品質、透明度の設定を定義します。
入力システムの設定
Mixed Reality Project には、既定で選ばれるプロジェクトの周囲のすべての入力イベントをルーティングするための、堅牢で十分にトレーニングされた入力システムが用意されています。
MRTK によって提供される入力システムの背後には他のいくつかのシステムがあり、マルチプラットフォーム/Mixed Reality フレームワークの複雑さを抽象化するために必要な複雑な織り合いを推進および管理するのに役立ちます。
個々のプロファイルの詳細は次のとおりです。
境界の視覚化の設定
基になるプラットフォームの境界やガーディアン システムによって報告された認識された境界は、境界システムによって変換されます。 境界ビジュアライザーの構成を使うと、ユーザーの位置を基準にして、記録された境界をシーン内に自動的に表示することができます。また、境界は、ユーザーがテレポートしたシーン内の位置に基づいて、応答したり更新されたりします。
テレポート システムの選択
Mixed Reality プロジェクトには、既定で選ばれるプロジェクトでのテレポート イベントを管理するために、すべての機能を備えたテレポート システムが用意されています。
空間認識の設定
Mixed Reality プロジェクトには、既定で選ばれるプロジェクトでの空間スキャン システムを操作するため、再構築された空間認識システムが用意されています。
Mixed Reality Toolkit の空間認識構成を使用すると、アプリケーションの起動時に自動的に開始されるか、後でプログラムによって開始されるかに関係なく、システムの起動方法を調整したり、視野のエクステントを設定したりできます。
また、メッシュとサーフェスの設定を構成したり、ユーザーの周囲の環境がプロジェクトによって認識される方法をさらにカスタマイズしたりすることもできます。
これは、スキャンされた環境を提供できるデバイスにのみ適用できます。
診断設定
MRTK の省略可能で非常に便利な機能は、プラグイン診断機能です。
診断プロファイルには、プロジェクト実行中に監視を行うための簡単なシステムがいくつか用意されており、これにはシーンの表示パネルを有効または無効にするための便利なオン/オフ スイッチが含まれます。
シーンのシステム設定
MRTK は、複雑な加法シーンの読み込み/アンロードを管理するのに役立つ、このオプションのサービスを提供します。 シーン システムがプロジェクトに適しているかどうかを判断するには、シーン システムの使用開始ガイドに関する記事をご覧ください。
その他のサービスの設定
Mixed Reality Toolkit のより高度な領域の 1 つは、フレームワークへの "サービス" の登録を可能にするサービス ロケーター パターンの実装です。 これにより、フレームワークを新しい機能やシステムで簡単に拡張できるだけでなく、プロジェクトでこれらの機能を利用して独自のランタイム コンポーネントを登録することもできます。
登録されたすべてのサービスですべての Unity イベントを完全に利用でき、MonoBehaviour や扱いにくいシングルトン パターンを実装するためのオーバーヘッドやコストは発生しません。 これにより、フォアグラウンドとバックグラウンド両方のプロセス (システムの生成、ランタイム ゲーム ロジック、または実質的に他のすべてのもの) を実行するためのシーンのオーバーヘッドがない、純粋な C# コンポーネントが可能になります。
入力アクションの設定
入力アクションにより、実行時のプロジェクトからの物理的なやり取りと入力を抽象化することができます。 すべての物理入力 (コントローラー、手、マウスなどから) は、実行時のプロジェクトで使用する論理入力アクションに変換されます。 これにより、どこからの入力であっても、プロジェクトでこれらのアクションをシーン内の "行うこと" または "操作するもの" として単に実装できます。
新しい入力アクションを作成するには、[Add a new Action](新しいアクションの追加) ボタンをクリックし、それが表すもののわかりやすいテキスト名を入力します。 必要なのは、アクションが伝達される軸 (データの方)、または物理コントローラーの場合は次のようなアタッチできる物理入力の型を、選択することだけです。
軸の制約 | データ型 | 説明 | 使用例 |
---|---|---|---|
なし | データなし | 空のアクションまたはイベントに使われます | イベント トリガー |
生 (予約済み) | object | 予約済み | 該当なし |
デジタル | [bool] | オンまたはオフのブール型のデータ | コントローラー ボタン |
1 つの軸 | float | 単精度のデータ値 | 範囲入力 (トリガーなど) |
デュアル軸 | Vector2 | 複数の軸に対する 2 つの float 型データ | Dpad またはサムスティック |
3 DOF の位置 | Vector3 | 3 つの float 軸からの位置型データ | 3D 位置スタイルのみのコントローラー |
3 DOF の回転 | Quaternion | 4 つの float 軸での入力のみの回転 | 3 度スタイル コントローラー (Oculus Go コントローラーなど) |
6 DOF | Mixed Reality のポーズ (Vector3、Quaternion) | Vector3 と Quaternion の両方のコンポーネントを含む位置と回転のスタイルの入力 | モーション コントローラーまたはポインター |
入力アクションを利用するイベントは物理コントローラーに限定されず、実行時の影響で新しいアクションを生成するためにプロジェクト内で利用することもできます。
Note
入力アクションは、実行時に編集できないいくつかのコンポーネントの 1 つであり、設計時にのみ構成できます。 各アクションに対して生成される ID にフレームワーク (およびプロジェクト) が依存するため、プロジェクトの実行中にこのプロファイルをスワップアウトすることはできません。
入力アクションの規則
入力アクション規則では、1 つの入力アクションに対して発生したイベントを、そのデータ値に基づいて異なるアクションに自動的に変換する方法が提供されます。 これらはフレームワーク内でシームレスに管理され、パフォーマンス コストは発生しません。
たとえば、DPad からの単一のデュアル軸入力イベントを、対応する 4 つの "Dpad 上"、"DPad 下"、"Dpad 左"、"Dpad 右" アクションに変換します (下の図を参照)。
これは、独自のコードで行うこともできます。 ただし、これは非常に一般的なパターンであったため、これを行うメカニズムはフレームワークで "すぐに使える機能" として提供されています
入力アクション規則は、使用可能な任意の入力軸に対して構成できます。 ただし、ある軸の型からの入力アクションを、同じ軸の型の別の入力アクションに変換できます。 デュアル軸アクションを別のデュアル軸アクションにマップできますが、デジタルまたはアクションなしにはマップできません。
ポインターの構成
ポインターは、シーンでの任意の入力デバイスからの対話機能を駆動するために使われます。シーン内の (コライダーがアタッチされている、または UI コンポーネントである) 任意のオブジェクトとの方向とヒット両方のテストが行われます。 ポインターは、コントローラー、ヘッドセット (視線入力、フォーカス)、マウスとタッチ入力に対して既定で自動的に構成されます。
ポインターは、Mixed Reality Toolkit によって提供される多数のライン コンポーネントのいずれかを使用して、アクティブ なシーン内で視覚化することも、MRTK IMixedRealityPointer インターフェイスを実装している場合は独自のコンポーネントを使用して視覚化することもできます。
- [Pointing Extent](ポイントの範囲): 視線入力を含むすべてのポインターのグローバルなポイント範囲を決定します。
- [Pointing Raycast Layer Masks](ポイントのレイキャストのレイヤー マスク):どのレイヤー ポインターがレイキャストされるのか決定します。
- [Debug Draw Pointing Rays](デバッグ描画ポインティング レイ): レイキャストに使用される光線を視覚化するデバッグ ヘルパー。
- [Debug Draw Pointing Rays Colors](デバッグ描画ポインティング レイの色): 視覚化に使用する色のセット。
- [Gaze cursor prefab](視線入力カーソル プレハブ): 任意のシーンのグローバル視線入力カーソルを簡単に指定できます。
視線入力プロバイダーにすばやく移動し、必要に応じて視線入力の特定の値をオーバーライドするための、追加のヘルパー ボタンがあります。
ジェスチャの構成
ジェスチャはシステム固有の実装で、さまざまな SDK (HoloLens など) によって提供されるさまざまな "ジェスチャ" 入力方法に入力アクションを割り当てることができます。
Note
現在のジェスチャの実装は HoloLens 専用であり、今後他のシステムがツールキットに追加されたら拡張されます (期日は未定)。
音声コマンド
ジェスチャと同様に、一部のランタイム プラットフォームには、Unity プロジェクトで受信できるコマンドを生成する機能を備えた、インテリジェントな "音声テキスト変換" 機能が用意されています。 この構成プロファイルを使うと、次のことを構成できます。
- [General Settings](全般設定) - [Start Behavior](開始動作) を [Auto Start](自動開始) または [Manual Start](手動開始) に設定して、入力システムの開始時に KeywordRecognizer を初期化するか、または KeywordRecognizer を初期化するタイミングをプロジェクトに決定させるかを決定します。 [Recognition Confidence Level](認識の信頼レベル) は、Unity の KeywordRecognizer API を初期化するために使用されます
- [Speech Commands](音声コマンド) - "語句" を登録し、プロジェクトで受け取ることができる入力アクションに変換します。 必要であれば、キーボード アクションにアタッチすることもできます。
重要
現在、音声がサポートされるのはシステムが Windows 10 プラットフォーム (HoloLens や Windows 10 デスクトップなど) で実行されている場合だけであり、他のシステムは今後 MRTK に追加された時点で拡張されます (期日は未定)。
コントローラー マッピングの構成
Mixed Reality Toolkit の主要な構成画面の 1 つは、プロジェクトで使用できるさまざまな種類のコントローラーを構成してマップする機能です。
次の構成画面では、ツールキットによって現在認識されているコントローラーを構成できます。
MRTK には、次のコントローラー/システムの既定の構成が用意されています。
- マウス (3D 空間マウスのサポートを含む)
- タッチ画面
- Xbox コントローラー
- Windows Mixed Reality コントローラー
- HoloLens ジェスチャ
- HTC Vive ワンド コントローラー
- Oculus タッチ コントローラー
- Oculus リモート コントローラー
- 汎用 OpenVR デバイス (上級ユーザーのみ)
事前構築済みのコントローラー システムのイメージをクリックすると、そのすべての対応する入力に対して 1 つの入力アクションを構成できます。たとえば、下の Oculus タッチ コントローラー構成画面を参照してください。
上で示されていない他の OpenVR または Unity 入力コントローラーを構成するための高度な画面もあります。
コントローラーの視覚化の設定
コントローラーのマッピングに加えて、シーン内でのコントローラーの表示方法をカスタマイズするために、別の構成プロファイルが用意されています。
これは、"グローバル" に (特定の手に対するコントローラーのすべてのインスタンス)、または個別のコントローラーの種類と手に固有に、構成することができます。
MRTK では、Windows Mixed Realityと OpenVR のネイティブ SDK コントローラー モデルもサポートされています。 これらはシーンに GameObjects として読み込まれ、プラットフォームのコントローラー追跡を使って配置されます。
シーンでのコントローラーの表現を物理コントローラーの位置からオフセットする必要がある場合は、単にコントローラー モデルのプレハブに対してそのオフセットを設定します (例: コントローラー プレハブとオフセット位置の変換位置の設定)。
エディター ユーティリティ
次のユーティリティはエディターでのみ機能し、開発の生産性を向上させるのに役立ちます。
サービス インスペクター
サービス インスペクターは、アクティブなサービスを表すシーン内オブジェクトを生成するエディター専用の機能です。 これらのオブジェクトを選択すると表示されるインスペクターでは、ドキュメントのリンク、エディターの視覚化の制御、サービスの状態の分析情報が提供されます。
サービス インスペクターを有効にするには、構成プロファイルの [Editor Settings](エディターの設定) で [Use Service Inspectors](サービス インスペクターを使用する) をオンにします。
深度バッファー レンダラー
一部の Mixed Reality プラットフォームで深度バッファーを共有すると、ホログラムの安定化を向上させることができます。 たとえば、Windows Mixed Reality プラットフォームでは、フレームのレンダリングにかかる時間の間の微妙な頭の動きを考慮して、レンダリングされるシーンをピクセル単位で変更できます。 ただし、これらの手法を使うには、ジオメトリの位置とユーザーからの距離を把握するため、正確なデータを含む深度バッファーが必要です。
必要なすべてのデータがシーンによって深度バッファーにレンダリングされるようにするため、開発者は、構成プロファイルの [Editor Settings](エディターの設定) で [Render Depth Buffer](深度バッファーのレンダリング) 機能を切り替えることができます。 これにより、現在の深度バッファーが取得され、後処理効果 DepthBufferRenderer
をメイン カメラに適用することで、シーン ビューに色としてレンダリングされます。
シーン内の青い円柱には、ZWrite がオフになっているマテリアルがあるため、深度データが書き込まれない
実行時のプロファイルの変更
実行時にプロファイルを更新することができ、一般に、それが役に立つ 2 つの異なるシナリオとタイミングがあります。
- MRTK 初期化前プロファイル スイッチ: 起動時に、MRTK が初期化されてプロファイルがアクティブになる前に、まだ使用されていないプロファイルを置き換えて、デバイスの機能に基づいて異なる機能を有効または無効にします。 たとえば、空間マッピング ハードウェアがない VR でエクスペリエンスが実行されている場合、空間マッピング コンポーネントを有効にしても意味がない可能性があります。
- アクティブ プロファイル スイッチ: 起動後、MRTK が初期化され、プロファイルがアクティブになった後、現在使用されているプロファイルをスワップして、特定の機能の動作方法を変更します。 たとえば、遠距離ハンド ポインターを完全に削除することが望まれる特定のサブエクスペリエンスがアプリケーションに存在する場合があります。
MRTK 初期化前のプロファイルの切り替え
これを実現するには、MRTK 初期化 (つまり Awake()) の前に実行される MonoBehaviour (以下の例) をアタッチします。 スクリプト (つまり、SetProfileBeforeInitialization
の呼び出し) をスクリプト MixedRealityToolkit
より前に実行する必要があることに注意してください。これは、スクリプトの実行順序設定を設定することによって実現できます。
using Microsoft.MixedReality.Toolkit;
using UnityEngine;
/// <summary>
/// Sample MonoBehaviour that will run before the MixedRealityToolkit object, and change
/// the profile, so that when MRTK initializes it uses the profile specified below
/// rather than the one that is saved in its scene.
/// </summary>
/// <remarks>
/// Note that this script must have a higher priority in the script execution order compared
/// to that of MixedRealityToolkit.cs. See https://docs.unity3d.com/Manual/class-MonoManager.html
/// for more information on script execution order.
/// </remarks>
public class PreInitProfileSwapper : MonoBehaviour
{
[SerializeField]
private MixedRealityToolkitConfigurationProfile profileToUse = null;
private void Awake()
{
// Here you could choose any arbitrary MixedRealityToolkitConfigurationProfile (for example, you could
// add some platform checking code here to determine which profile to load).
MixedRealityToolkit.SetProfileBeforeInitialization(profileToUse);
}
}
"profileToUse" の代わりに、特定のプラットフォームに適用されるプロファイルの任意のセットを使用できます (たとえば、HoloLens 1 用に 1 つ、VR 用に 1 つ、HoloLens 2 用に 1 つなど)。 他のさまざまなインジケーター (たとえば https://docs.unity3d.com/ScriptReference/SystemInfo.html、またはカメラが不透明か透明か) を使用して、読み込むプロファイルを特定できます。
アクティブなプロファイルの切り替え
これを実現するには、MixedRealityToolkit.Instance.ActiveProfile
プロパティを新しいプロファイルに設定して、アクティブなプロファイルを置き換えます。
MixedRealityToolkit.Instance.ActiveProfile = profileToUse;
実行中に ActiveProfile
を設定すると、すべてのサービスの最後の LateUpdate() の後で現在実行中のサービスの破棄が行われ、新しいプロファイルに関連付けられているサービスのインスタンス化と初期化が、すべてのサービスの最初の Update() の前に行われることに注意してください。
このプロセスの間に、顕著なアプリケーションの遅延が発生する可能性があります。 また、新しいプロファイルが適切に設定される前に MixedRealityToolkit
、スクリプトよりも優先度が高いスクリプトは Update を入力できます。 スクリプトの優先順位について詳しくは、「Script Execution Order」をご覧ください。
プロファイルの切り替えプロセスでは、既存の UI カメラは変更されず、キャンバスを必要とする Unity UI コンポーネントは切り替え後も引き続き動作します。