Mixed Reality Toolkit (MRTK)の有用なビルディングブロック

Mixed Reality Toolkit-Unityは、Unity上でMixed Realityエクスペリエンスを構築するための基本的なコンポーネントや、共通のインタラクションや、UIコントロールを共有するオープンソースプロジェクトです。

Windows Mixed Reality devices — Microsoft HoloLens and immersive HMD by Samsung

Mixed Reality Toolkitから、私は最も頻繁に使用されるビルディングブロックとインタラクションパターンのいくつかを取り上げました。 ビルディングブロックごとに、リポジトリ内のサンプルシーンの場所とプロジェクトでの使用方法を示します。

HoloLensやImmersive Headset(イマーシブ ヘッドセット)向けのアプリケーションを作成する場合でも、コンテンツとインタラクションするためには、適切なインプットモジュール、カメラ、カーソル、またはモーションコントローラを使用してシーンを設定する必要があります。Mixed Reality Toolkitを使用することで,簡単に設定することができます。

サンプルシーン

複合現実アプリを最初に作成するとき、これらの2つのシーンから始めるのが良いです。

HoloToolkit-Examples/Input/Scenes/InputManagerTest.unity
HoloToolkit-Examples/Input/Scenes/MotionControllerTest.unity
Find technical details on the README File
InputManagerTest and MotionControllerTest scene

これらのシーンを通して、MRTKのInputManagerの使い方、モーションコントローラのボタンからのイベントを処理するデータにアクセスする方法を学ぶことができます。

MRTKを使ったシーンを自動設定

MRTKのUnityパッケージをインポートしたり、プロジェクトをGitHubリポジトリからクローンすると、Unityで新しいメニューの「Mixed Reality Toolkit」が見つかります。

Configure」メニューでは、「Apply Mixed Reality Scene Settings」メニューが表示されます。

このメニューをクリックすると、デフォルトのカメラが削除され、基本コンポーネント(InputManagerMixedRealityCameraParent、およびDefaultCursor)が追加されます。

これらはプロジェクトパネルから手動で追加することもできます。 これらのコンポーネントはプレハブとして見つけることができます。 MixedRealityCameraを検索すると、2つの異なるカメラのプレハブを見ることができます。

違いは、MixedRealityCameraはカメラのみのプレハブですが、MixedRealityCameraParentには、テレポートモーションコントローラバウンダリーなどのイマーシブヘッドセット用の追加コンポーネントが含まれていることです。

MixedRealtyCameraは、HoloLensとイマーシブ ヘッドセットの両方をサポートしています。 デバイスタイプを検出し、クリアフラグやスカイボックスなどのプロパティを最適化します。
カスタムカーソル、モーションコントローラモデル、フロアなど、カスタマイズ可能な便利なプロパティの一部を以下に示します。

HoloLensとイマーシブ ヘッドセットのデフォルト入力設定ー 視線カーソルジェスチャーモーションコントローラフロア
MRTKのInteractable Object Example シーン

インタラクテタブルオブジェクトのサンプルシーンは、オブジェクトをインタラクションできるようににする方法と、observation、targeted、pressedなどの標準入力状態に対応させる方法を示しています。 複合現実では、コーヒーカップからバルーンまで,どんなものでもボタンにできます。2Dスクリーンで使用していた平坦な長方形である必要はありません。どのオブジェクトがインタラクション可能であるかを人々が理解できるように、明確なビジュアルフィードバックを提供することが重要です。

サンプルシーン

インタラクテタブルオブジェクトの例をこのシーンで見つけることができます。

HoloToolkit-Examples/UX/Scenes/InteractableObjectExample.unity
Find technical details on the README File
インタラクティブオブジェクトの例シーン

使い方

オブジェクトをインタラクション可能にするには、CompoundButtonという一連のスクリプトを使用します。 メッシュ、テキスト、アニメーション、アイコン、サウンド、スピーチなどのさまざまなインタラクション要素のためのモジュラースクリプトです。

MRTKのCompoundButtonスクリプトシリーズ

これらのスクリプトを目的に合わせて組み合わせることができます。

Interaction states

  • Disabled: Object is inactive
  • Observation: Cursor not on the object, Hand not raised
  • Observation Targeted: Cursor on object, Hand not raised
  • Interactive: Cursor not on the object, Hand ready gesture
  • Targeted: Cursor on object, Hand ready gesture
  • Pressed: Cursor on object, Hand air-tapped gesture

インタラクションレシーバ:イベントを1か所で処理する

インタラクションレシーバは、複数のオブジェクトからのイベントを1か所で処理できる便利なビルディングブロックです。

このダイアグラムでわかるように、インタラクションレシーバはオブジェクトのリストを保存でき、イベントを受け取ると、トリガされたオブジェクトに基づいて何かを行うことができます。

使い方

Bounding Box and App Bar example scene in MRTK

バウンディングボックスは、Windows Mixed Realityでオブジェクトを操作するための標準インターフェイスです。 これはHoloLensシェルとイマーシブ ヘッドセットのMixed Reality ポータルで見つけることができます。 この単一のUIを使用することで、オブジェクトを移動、回転、および拡大縮小できます。 AppBarは、オブジェクトにコンテキストボタンを表示するために使用されます。 デフォルトでは、Hide, Adjust、およびRemoveボタンが表示されます。 Adjustボタンは操作のためのギズモを表示し、Removeボタンはオブジェクトを削除します。 AppBarプレハブにカスタムボタンを追加することもできます。

サンプルシーン

このシーンでは、BoundingBoxとAppBarの例を見つけることができます

HoloToolkit-Examples/UX/Scenes/BoundingBoxGizmoExample.unity
Find technical details on the README File
BoundingBoxGizmoExample scene

使い方

BoundingBoxRigスクリプトを任意のオブジェクトに割り当てるだけです。 青い線を可視化するには、BoundingBoxBasicプレハブが必要です。

TwoHandManipulatableスクリプトはオプションです。 これにより、両手で移動、回転、および拡大縮小ができます。 デフォルトでは、バウンディングボックスはオブジェクトを移動しません。

カスタムボタンをAppBarに追加することもできます。 プロジェクトパネルでAppBarプレハブを検索し、インスペクタパネルでボタンプロパティを検索します。 ボタンの数を調整してカスタムボタンを定義することができます。

AppBarにカスタムボタンを追加する
Two Hand Manipulation Example scene in MRTK

Two Hand Manipulationによって、両手でオブジェクトを操作できます。 両手を動かしたりして、拡大縮小、回転、移動ができます。 これは、 2018年4月に公開されたUpdate(RS4)におけるHoloLensと、イマーシブ ヘッドセットのcliff houseで紹介されたものと同じインタラクション動作です。これはモーションコントローラでも機能します。これは、空間内のオブジェクトを操作する直感的な方法です。

サンプルシーン

このシーンでは、Two Hand Manipulationの例を見つけることができます

HoloToolkit-Examples/Input/Scenes/TwoHandManipulationTest.unity
Find technical details on the README File
TwoHandManipulationTest scene

使い方

TwoHandManipulatableスクリプトを任意のオブジェクトに割り当てるだけです。

Object Collection Example scene in MRTK

Object Collectionを使用すると、3D空間内のオブジェクトの配列を簡単にレイアウトできます。 サーフェスタイプ、行、半径、セル幅/高さ、および向きオプションを指定できます。 これらのさまざまなオプションを使用すると、迅速に3次元グリッドシステムを構築できます。

サンプルシーン

このシーンのオブジェクトコレクションの例を見つけることができます

HoloToolkit-Examples/UX/Scenes/ObjectCollectionExample.unity
Find technical details on the README File

使い方

HolographicButtonプレハブとObjectCollectionでグリッドレイアウトUIを作成する例

Holographic Button + Object Collection
Example of Tag-Along + Constant View Size + Surface Magnetism on Start menu

ソルバーを使用すると、さまざまなオブジェクトの配置動作を組み合わせて、それらを順番に実行できます。 スタートメニューは、 Tag-along, Billboard, Constant View sizeなどの複数の動作を示す良い例です。 一定の範囲内を移動し、他のオブジェクトサーフェスと衝突した場合は、サーフェスをたどり、自動的にサイズを縮小または上げてサイズを維持します。

Solverスクリプトシリーズは、以下のオブジェクト配置動作を提供します。

  • Tag-along
  • Billboarding
  • Radial view
  • Body lock
  • Surface magnetism
  • Constant view size

MRTKには単純なTag-alongスクリプトがありますが、Tag-alongやSurfaceMagnetismなどの複数の位置決めメカニズムを組み合わせたい場合はSolverが優れています。

サンプルシーン

このシーンのオブジェクトコレクションの例を見つけることができます

HoloToolkit-Examples/Utilities/Scenes/SolverExamples.unity
Find technical details on the README File

使い方

Solver Radial View example
Solver Body Lock example

Solver Surface Magnetism + Spatial Processing

Solver Surface Magnetism + Spatial Processing

コンテンツを物理的な表面に合わせる。
Find example scene and README on https://bit.ly/2wJGykz
*This is on my personal GitHub repository. I’ll submit Pull Request soon.

音声入力は、複合現実でオブジェクトとインタラクションする自然な方法です。 ユーザーは時間を短縮し、労力を最小限に抑えることができます。 Windows Mixed Realityシェルは、 “Select”、 “Close”、 “Move This”、 “Face Me”などのシステムレベルのコマンドを提供します。

MRTKを使用すると、簡単に音声コマンドを追加できます。

*現在日本語での音声認識に対応していません

サンプルシーン

このシーンでは、音声入力の例を見つけることができます

HoloToolkit-Examples/Input/Scenes/SpeechInputSource.unity

使い方

Spatial Understanding Example scene in MRTK

空間認識は、HoloLensで最もエキサイティングな機能の1つです。 空間 認識を使用すると、環境を分析して、床、天井、壁、プラットフォームなどの物理サーフェスのタイプを識別できます。 これらの物理的なサーフェスを活用すると、実際の環境とやり取りする現実的なホログラムを作成できます。

サンプルシーン

MRTKには、3つの例があります。 空間マッピング、空間プロセシング、および空間認識。

Examples/SpatialMapping/Scenes/SpatialMappingExample.unity
Examples/SpatialMapping/Scenes/SpatialProcessing.unity
Examples/SpatialUnderstanding/Scenes/SpatialUnderstandingExample
Find technical details on the README File — Spatial Mapping & Processing
Find technical details on the README File — Spatial Understanding

空間マッピング(Spatial Mapping)

SpatialMappingプレハブをドラッグ&ドロップすれば、このようなメッシュの環境を得ることができます。 これは少し荒いですが、アプリを環境と相互作用するためのすばやく簡単な方法です。

空間プロセシング(Spatial Processing)

よりきれいなサーフェスを利用したい場合は、空間処理を使用できます。 空間処理は、頂点をマージすることによってメッシュを平面に変換します。 これにより、壁、テーブル、フロアのきれいな面を得ることができます。

空間認識 (Spatial Understanding)

シーン例では部屋のスキャンの経験が示され、識別されたサーフェスが表示されます。 この手法を使用すると、コンテンツを特定のサーフェスタイプに配置できます。

Spatial Processing Example scene in MRTK

モーションコントローラを使用してイマーシブ ヘッドセットの体験を作る場合は、AttachToControllerを使用して任意のオブジェクトやUIをコントローラに取り付けることができます。

サンプルシーン

Mixed Reality Academyチュートリアル — モーションコントローラで例が見つかります。

https://docs.microsoft.com/en-us/windows/mixed-reality/mixed-reality-213
HoloToolkit/Input/Scripts/Utilities/AttachToController.cs
Mixed Reality Academy — モーションコントローラチュートリアル
Mixed Reality Academy —モーションコントローラチュートリアル

使い方

Mixed Reality Toolkit Standard Shader example scene

MRTK / StandardShaderは、光沢のある境界線、ハイライト、アニメーションのプロパティなど、さまざまな種類のエフェクトを提供する新しいシェーダです。 このシェーダを使用すると、light, depth, materialなどのFluent Design Systemの要素を簡単に実現できます。 HoloLensのパフォーマンスが60fpsで動作するように最適化されています。

サンプルシーン

MRTK / Standard Shaderに基づいたマテリアルの例です。

HoloToolkit-Examples/StandardShader/Scenes/MaterialGallery.unity
You can easily achieve near plane fade with MRTK/Standard Shader

次のステップ

MRTKに有用なビルディングブロックのいくつかを紹介しました。 これがあなたの複合現実の旅に役立つことを願っています!

Mixed Reality Toolkit (GitHub)

Mixed Reality Academy Tutorials

Windows Dev Centerのガイドライン

English version

My other stories on Medium