読者です 読者をやめる 読者になる 読者になる

凹みTips

C++、JavaScript、Unity、ガジェット等の Tips について雑多に書いています。

HoloLens でタッチパネルを使ったインタラクションを色々作ってみた

はじめに

HoloLens でのインタラクションや UI の見せ方として、直接ハードウェアに重畳するヤツをやってみたかったのでやってみました。

デモ

記事掲載

MoguraVR さんで紹介していただきました。

www.moguravr.com

コード / アセット

HoloToolkit-Unity をインポートしてビルドすれば動くと思います。興味がありましたら試してみてください。プロトタイプ用コードやアセットなので構成の綺麗さは期待しないでください。

内容

立体的な UI

f:id:hecomi:20170415135115g:plain

UI の見た目を 3 次元にするヤツです。

音ゲーっぽいもの

f:id:hecomi:20170415135129g:plain

上から落ちてきてタイミング良く押すヤツです。

浮き出るお絵かき

f:id:hecomi:20170415135131g:plain

描いたものが直接浮き出て動くヤツです。

構成

通信

iPad と HoloLens の間のやりとりは、通信部や UI、操作を作るのが面倒だったので、TouchOSC を利用しています。UI のパターンは色々用意されているのですが、モデルを作るのが簡単な「Simple」にしました。

TouchOSC からはその名の通り OSC を使ってデータが HoloLens へ送られてきます。OSC の Unity での受け口としては、毎度お借りしている keijiro さん製の unity-osc を利用しています。

HoloLens 上での UDP 通信の仕方については、別途エントリを書きます。

追記(2017/04/19)

まとめました。

tips.hecomi.com

モデル

次に原寸大の iPad のモデルを作成し、そのスクリーン部分にキャプチャした TouchOSC の UI を貼り付け、UI 部分のモデルを作成します。

f:id:hecomi:20170415153258p:plain

アクション付

最後に、Unity でインポートして、各パーツに来たイベントに応じてアクションを割り当てていきます。アクションした際のリアクションのエフェクトやモデルは、元のモデルのバウンディングボックスを取得して大きさを調べ、同じ幅・奥行きになるようにしています。

f:id:hecomi:20170415155555p:plain

位置合わせ

位置合わせは特に特別なことはしていません。HandDraggable で適当に位置を決めて実際の iPad の位置を手で動かして微調整しているだけです。

ただ、ワールドアンカーも付けたのですが絶妙に位置が合いません。横から見てぴったり併せても正面から見るとズレてたり、逆に正面から見て合わせたら横から見ると浮いてたりします。。ピッタリサイズが合うようにモデルを作ったつもりが合わず、少しスケールした関係でおそらくズレが生じてしまい、それが前回の記事でも触れたようにピントの問題などと相まって絶妙に合わないみたいな状態になってしまっていたものかと考えています。また、HoloLens の被る位置をちょっとずらすと像がズレる関係上、自分の目で合っていても撮影した動画では合っていない、みたいな状況も起きています。

前者に関しては改善できると思うので、もう少しスケールや位置調整のキャリブレーションの仕組みを作って調査したいと思います。

考察

今回はタッチパネルを用いましたが、キーボードや楽器など直接叩いたり捻ったり出来る UI と連動しても良いと思います。こちらは以前、Ovrvision x キーボードで作成したデモと同様です。

tips.hecomi.com

以前の構成と今回の構成を比較したメリットはやっぱり目で見える現実と重なる点。デメリットは、手のオクルージョンが再現できない点と視野角の狭さです。このあたりは次世代で改善されるのを期待したいですね。

また、オブジェクトトラッキング(ハードウェアを持って動かしても UI がそこにピッタリくっつく)を本当はやりたかったのですが、未だ技術的に不可能なので次世代に期待しつつ、出来る範囲で実験していきたいです。以前、VR の方で Ovrvision x iPad でタッチ座標送信 & AR マーカ表示という系でやったときは、トラッキング範囲が狭すぎて体験として微妙でしたが、Vive Tracker を使ってハードウェアをトラッキングして直接 HoloLens へ位置・姿勢データを送るようにすれば、少し遅延はあるとは思うのですが、工夫次第で体験としては面白いものが作れるかもしれません。

おわりに

物理的なボタンやダイヤルをもったハードウェアでも試してみたいと思います。