2016年11月9日水曜日

【HoloLens開発】ユニティちゃんとHoloLensで戯れる - 空間認識編 -

今回は表示編で予告していた、HoloLensの「Spatial Mapping(空間認識)」を実装します。


連載目次
Part 5: 【HoloLens開発】ユニティちゃんとHoloLensで戯れる - 空間認識編 - ←本記事
Part 7: 【HoloLens開発】ユニティちゃんとHoloLensで戯れる - シェアリング編 - (予定)

【Spatial Mapping】
Spatial Mappingを利用することにより、自分がいる空間(部屋)の壁や床、机などの物体をHoloLensで認識し、動画のように空間にオブジェクトを置けるようになります。


実装方法は、HoloToolkit > SpatialMapping > Prefabs からSpatialMappingをHierarchyに追加するのみです。


Spatial Mapping ManagerのSurface Materialにマテリアルを指定することで認識した空間の壁や床の表面に指定したマテリアルを表示することができます。
HoloToolkit > SpatialMapping > Materials に標準のものがあります。


Wireframeを指定すると白いラインで壁などが表現され、Occlusionを指定すると何も表示されません。開発時の確認の際にWireframeを利用し、リリース時にOcclusionに変更すればよいでしょう。


また、MainCameraのPositionが(0, 0, 0)でないと認識した空間がずれて配置されてしまうため、変更している場合は(0, 0, 0)に戻しておく必要があります。


【物理エンジンの設定】
これだけでSpatial Mappingの実装はできますが、このままではユニティちゃんは浮いたままなので重さと衝突判定を与える必要があります。

重さを与えるにはHierarchyのunitychanを選択し、Add Componentから Physics > Rigidbodyを追加します。Use Gravityにチェックを入れると重力の影響を受けるようになるのでチェックを入れます。あとは転倒しないようにConstantsのFreeze Rotationにチェックを入れます。


衝突判定を与えるには重さと同様に、Physics > Capsule Colliderを追加します。ユニティちゃんの位置に表示された緑色のカプセル状の物体が衝突判定部分となるので、これをユニティちゃんを囲うように調整します。Centerが(0, 0.8, 0)、Radiusが0.3、Heightが1.6程度でちょうどよいと思います。


実際にSurface MaterialをWireframeで表示してみると壁とテーブル部分にテクスチャが表示され、ユニティちゃんも手前にあるテーブルより奥に表示され、空間認識がしっかりできていることがわかります。


しっかりと床のテクスチャの上に立っています。


Surface MaterialをOcclusionに変更して、テクスチャ表示を消すとこんな感じになります。


空間認識ができたので次回は認識した空間の中をゲームパッドを使ってユニティちゃんを歩かせてみたいと思います。

140 180 HoloLens , Spatial Mapping , Unity , 空間認識

記載されている会社名、および商品名等は、各社の商標または登録商標です。

0 コメント:

コメントを投稿

Related Posts Plugin for WordPress, Blogger...