スポンサーサイト

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

Unityのシェーダーで距離画像を取得する

はじめに

特殊な用途かもしれませんがUnityで距離画像を取得したい時があると思います。デプスマップではなく距離マップです。デプスだとオブジェクトの前後関係が判定できるものの、物理的な距離を使いたい場合にはやや問題があります。デプスから距離に変換することも可能ですが、なかなか自分で計算するのは面倒です。(実際はLinear01Depthマクロを使えば求められるのは置いといて。)ここで求める距離はカメラの位置(視点)からの距離ではなく、カメラ座標系におけるZ座標のことです。


距離マップを取得するサンプルのUnity Packageは以下からダウンロードできます。
ファイル名をDistanceCamera.unitypackageに変更してインポートしてください。
ダウンロード


後で説明記事を追記します。たぶん。

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にはどんな機能があるか、その機能を使ってどんなものが作れるかを紹介しました。
次回からは個々の機能について紹介したいと思います。

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