スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

HoloToolKit-Unity Spatial Mappingを紹介

はじめに

HoloToolkitーUnityとはHoloLens向けのアプリを効率的に開発するための機能を含んだツールキットです(前記事)。ここではその中でも周囲の環境(表面形状)をメッシュデータとして記録する機能であるSpatial Mappingに関するものを紹介します。
HoloToolkit-Unity github

HoloToolkit-Unity SpatialMapping github

HoloToolkit-Unity SpatialMapping では何ができるの?

HoloToolkit-Unity SpatialMappingには以下のような機能を実現するためのプレハブやスクリプトが含まれています。

  1. メッシュデータの利用 :HoloLens上でのSpatial Mappingデータへの可視化とアクセス。Windows Device Portalから取得した部屋のモデルの保存と読み込み(SpatialMapping.prefab)
  2. メッシュデータの処理:メッシュデータから平面を検出、分類(壁、床、天井など)、頂点の削除、Planeへの変換(SurfacePlane.prefabs)
  3. HoloLensとUnity間の処理HoloLensからUnityにメッシュデータを転送、保存、読み込み(RemoteMapping.prefab)
上記の機能以外に使いやすそうなスクリプトとして以下のようなものがあります。
  • TapToPlace.cs:アタッチしたオブジェクトをタップでメッシュ上に配置できる。Windows HolographicのWindowの配置で利用されている操作方法
使いやすそうなシェーダーとして以下のようなものがあります。
  • occulusion.shader :メッシュデータでHologramが隠れている表現をする
StandardShader.png OcculusionShader.png
Standard Shader(左)とoculusion.shader(右)。メッシュデータで隠れている領域を透過させることで、実物体に対してHologramの物体が遮蔽される表現ができる。

HoloToolkit-Unity SpatialMapping を実行してみる

ここではSpatial Mappingのテストシーンを動画を使って紹介します。
1.PlaneFinding

 あらかじめ用意されたメッシュデータから平面を推定します。このサンプルはメインスレッドで平面推定していますが、自分でアプリを開発する際はバックグラウンドで実行しなければなりません。このサンプルではUpdate関数で毎回平面を推定しているので処理が重くなっています。
 推定した平面のパラメータはUnityEditor上でギズモとして表示されるようになっています。そのため、HoloLensで実行しても特に何も起きません。
 表示されるパラメータはArea(面積)、Bounds(平面の中心から端までの距離)、N(法線)、D(原点から平面までの距離)です。平面推定のパラメータをリアルタイムに変更して確認することができます。


2.RemoteMapping
HoloLensでスキャンしたメッシュデータをPCで実行しているアプリに転送できる。また、転送したデータは保存、読み出しできる。HoloLensからPCにデータを送るには「Send Meshes」と言う。(Nキー押下でもできるはずだがうまく動作しなかった。)。Sキーで転送したデータを保存、Lキーで保存したデータを読み出しできる。保存場所はC:/Users/ユーザー名/AppData/LocalLow/DefaultCompany/HoloToolkit-Unity\roombackup.room

3.SpatialProcessing
SurfaceMeshesとRemoveSurfaceVertixesを使ったメッシュからPlaneへの変換と頂点の削除ができます。起動して15秒くらい経つと、メッシュの平面部分が平面に変換されます。その後、その平面に相当するメッシュの頂点データが削除されます。


4.TapToPlace
AirTapによってCubeを実世界に張り付けることができます。Windows HolographicのWindowの配置で利用されている操作方法を自分で作成したアプリに取り入れることができます。



おわりに

今回はHoloToolkit-Unityの機能のうちSpatialMappingに関するものを紹介しました。HoloLensの機能の中でも現実世界とインタラクションするための非常に重要な機能です。これを使いこなすことでただオブジェクトを表示するだけではない、効果的なMRのアプリが開発できるようになるのではないかと思います。

HoloToolKitについて

はじめに

HoloToolKitとはHoloLens向けのアプリを効率的に開発するための機能を含んだツールキットです。NativeのHoloToolKitとUnity向けのHoloToolKit-Unityがあります。ここではHoloToolKit-Unityについて紹介したいと思います。
HoloToolkit-Unity github


HoloToolKit-Unityにはどんな機能があるの?

HoloToolKitは以下の6つの領域の機能を持っています。

  1. 入力 :視線、ジェスチャー、音声などの入力に関する機能
  2. 共有 :体験を共有するための共有・ネットワークに関する機能
  3. 空間マッピング(Spatial Mapping) :空間マッピングに関する機能(転送、保存、読み出しなど)
  4. 空間音響(Spatial Sound) :空間音響に関する機能
  5. Utility:様々な便利機能(テキストを音声に変換など)
  6. ビルド:HoloLens向けにビルド、デプロイするための機能
それぞれの機能にはテストのためのシーンが用意されており、実際にHoloLensやUnity Editor上で動かすことで動作確認をすることができます。(ビルド機能を除く)

HoloToolKit-Unityで何ができるの?

HoloToolKit-Unityには上記で紹介した6つの機能を使ってどのようなアプリが開発できるのかを示す3つのサンプルシーンがあります。
  1. ColorPicker :視線とジェスチャー(AirTap)を使って色を選択できるカラーピッカー
  2. GazeRuler :視線とジェスチャー(AirTap)とスキャンした表面形状を使って、距離を計測するルーラー
  3. SpatialMappingComponent :ジェスチャー(AirTap)とスキャンした表面形状を使って、Cubeを現実世界と干渉させるサンプル
以下では、それぞれのサンプルシーンを動画を上げて説明します。

1.ColorPicker
視線とジェスチャー(AirTap)を使って色を選択できるカラーピッカーです。視線によりピックアップする色(右側の四角)を選択します。選択した色を実際にピックアップするにはAirTapジェスチャーを行います。ピックアップされた色は左側の四角に格納されます。
入力機能が使用されています。



2.GazeRuler
視線とジェスチャー(AirTap)とスキャンした表面形状を使って、距離を計測するルーラーです。2点間の距離を計測することができます。
視線で計測したい2点のうち1点を選択し、Airタップをします。次に残りの1点をAirTapします。すると、2点間が線で結ばれ、2点間の距離が空間上に表示されます。複数の距離を計測することができます。白い線はHoloLensによってスキャンされた形状の頂点を結んだ線です。
入力、空間マッピングの機能が使用されています。


3.SpatialMappingComponent 
ジェスチャー(AirTap)とスキャンした表面形状を使って、Cubeを現実世界と干渉させるサンプルです。
赤や緑の線がスキャンした空間のメッシュデータを表しています。AirTapすると上からCubeが落ちてきます。
落ちてきたCubeはスキャンした空間データと衝突判定をすることができるので、実空間の床とぶつかっているように見えます。
入力、空間マッピングの機能が使用されています。


おわりに


今回はHoloToolKit-Unityにはどんな機能があるか、その機能を使ってどんなものが作れるかを紹介しました。
次回からは個々の機能について紹介したいと思います。

Microsoft HoloLensで使用されているWindows Holographicドキュメントの覚書

はじめに

Microsoft HoloLensが届きました!届く前にHoloLensで使用されているプラットフォームであるWindows Holographicに関するドキュメントを読みながら気になるところをまとめていました。せっかくなので公開しておこうと思います。自分で読むことを想定してまとめていたため、読みづらいかもしれませんがご承知ください。
 HoloLens.jpg

ドキュメント覚書

Understanding HoloLens

Hologram

  • Hologramは光と音から成る
  • HoloLensは光を追加できるが、消すことはできない。
  • 黒の表示はできず、黒の表示は透過する
  • 音は耳の上のスピーカーから出力する。外の音にHologramの音を追加できる
  • horogram persistance:ホログラムを配置したら、他の部屋に行って戻ってきても、デバイスの電源を切ってもずっと同じ場所にある

ハードウェア情報

  • バッテリの持ちは2-3時間(active use)

ホログラフのアプリビュー

  • Holographic appが1つでも描画されているときは、他のアプリは同時に描画できない。シェルも同様。

Developing for HoloLens

パフォーマンスの推奨

  • 60fpsで遅延は1フレーム。

Building blocks of Holographic apps

HoloLensの基本構成ブロック

  • 世界座標系、視線入力、ジェスチャー入力、音声入力、立体音響、空間マッピング
  • 座標データは共有できる。座標はメートル単位。空間座標系は右手座標系(X軸正:右、Y軸正:上、Z軸正:後ろ)
  • spacial anchorを使ってホログラムを空間に固定する。アンカーはトラッキングし続けるべき重要な点で、それぞれのアンカーに対する相対的な座標系を持つ.
  • アンカーを使うことでドリフトを低減することができる。1つの座標系のみでは、デバイスの位置に最適化されたような座標系しか作ることができない
  • HoloLensで取得する環境の形状は常にアップデートされるため、1つのリジッドな座標系ではない
  • 1つのリジッドな座標系では途中でオブジェクト間の距離がアップデートされたときに修正できなくなってしまう
  • HoloLensではアンカーを使って周辺の重要な点をマークすることで解決している。アンカー近くにホログラムを置けば、安定して表示できる

Hologram stability

  • 240HZ(RGBG)で各色を表示する。全体として60Hzで表示されている。この表示方法では色分離(Color separation)の問題がある
  • 像がディスプレイに表示される時の頭の位置を予測している。HoloLensには予測と実際の頭の動きのずれを調整するハードウェア的な仕組みがある.ただし、motion pallaraxのように完全に修正できないこともある
  • 時々の駒落ちに対応するアルゴリズムが実装されている
  • Mixed Reality capture時には30fpsになる
  • パフォーマンス解析に使えるツール:GPU View, Visual Studio Graphics Debugger, Profilers built int 3D engines such as Unity
  • Stabilization plane
  • Hologramの表示位置
    • 最も快適に見える距離は2m、それより離れても近づいても不快度は増す。だが遠い方がまだ見やすい
    • HoloLensの像がはっきり見えるのは調節が2mにあっているとき。光学的に大体2mになっている。輻輳は像の位置で調整が可能
    • ディスプレイの重なりも2mで最大になるように設計されている

Spacial mapping

  • Spacial mapping design:Sapacial mappingの質が何に影響するか。ユーザーにどうやってスキャンさせるか。メッシュの処理について
  • オブジェクトタイプ
    •  Spacial Surface Observer ・・・ Spacial mappingデータの取得領域を持っている
    •  Spacial Surface ・・・ 現実の表面情報をWorld-locked座標系における三角で表現する
  • 一般的な使用シナリオ
    •  Occulution
      • オクルージョンは距離感の視覚的フィードバックになる。同じ物理空間にいる感覚を与える
      • 物体の裏にあるホログラムを表示することもできる。その場合は通常とホログラムの表示方法を変えるとよい(暗くするなど)
    •  Visualization
      • 表面(メッシュ)も表示できる。ユーザーがホログラムを配置するときに便利。
      • 表面メッシュは可視化するにはきれいではない。ライティングはうまくいかないが、テクスチャを張るのはよい。ただし、Mesh処理をレンダリング前に行うこと
    •  Placement
      • 3D(空間上の点)から2D(表面上の点)にマッピングすることでホログラムを表面に配置できる
      • 表面の推定ミスのせいでRaycastの距離がおかしくなるかもしれないので、何本か周辺にRaycastして集計するとよい(外れ値を除外すること)
      • メッシュの全面は現実世界から見ている側で、頂点は時計回りの順
      • 自動でホログラムを配置できるとよいが、なかなか難しそう(ユーザーが届かない位置にスイッチを配置してしまうなど)
    •  Physics
      • Physicsにより、ホログラムのプレゼンスが強化される
      • リアルなPhysicsを使うにはMesh処理(穴埋め、飛島除去、スムージング)を行う必要がある
      • Scanning Experience
        1. スキャン済みの世界の端までボールが転がったらどうする?
        2. 更新されていく環境の変化にどう対応する?
    •  Navigation
      • ホログラフのキャラクタに現実世界を案内させることができる
      • 一度マップを作製すれば、その場所に詳しくないユーザーに案内表示できる
      • 技術的なチャレンジは、人が歩ける表面を検出する機能の実装(人はテーブルの上を歩けない!、閉じたドアは通れない。環境の変化)
      • UnityのNavMeshは使えない(起動時にマップが必要だから?)
      • Spacial mappingシステムは遠くの評価情報を提供しないため、広いエリアを扱いたいときは自分で覚えておかなければならない
  • Surface Observerを使う
    • Spacialmappingのプログラムのフロー
      1. Surface Observerオブジェクトを作成
        • Spatial mappingデータを取得する領域を球やボックスで指定する
        • World-locked座標系を使用
      2. 表面情報のポーリング・通知を使う
        • いつでも空間表演のステータスを取得(poll) できる
        • "surfaces changed"イベントを登録することもできる
        • 動的にSpatial volumeを変えられる(View flustrumによって変えるなど)
        • 静的なSpatial volumeであれば、"surfaces change"イベントを登録しておくのが良い(1部屋をカバーする立方体など)
      3. 表面の変化を処理する
      4. 非同期のメッシュリクエストを処理
  • MeshCashing

Designing holograms


ホログラフィックアプリの種類

  • Enhanced Environment Apps
    • ノートパッド、TV、クッキングアプリ、透視(X-ray Vision)、アノテーション、オフィスの道案内、テーブル上の体験(ボードゲームタイプ)、スカイプのようなコミュニケーション
  • Blended Environment Apps
    • インテリアデザインアプリ(壁や机などを別の色やパターンで塗る)、車のデザイン変更、現実の物体を別のモノで覆ってしまう、現実の壁にホログラムの穴をあける魔法の世界
  • Virtual Environment Apps
    • 宇宙や有名な美術館など、全く別の場所を旅行するアプリ、オーケストラなどのイベントに没入するアプリ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。