そろそろ何か作ってみようと思います。
チュートリアルを試してきた中で面白そうだなと思ったのが「Spatial Mapping(環境マッピング)」です。
HoloLensが自分の周りの環境を一瞬のうちにセンサーで3Dキャプチャーし、部屋の中などを3Dオブジェクト化するわけですが、この機能がHoloLensならではのものではないかと感じました。これに物理エンジンを組み合わせれば何か面白いことができるのではないかと思います。
何を作ってみるかの説明は後に回すとして、まずはどの程度のものか、原始的なやり方で試してみたいと思います。
一通りのテストの様子は以下の映像でご覧ください。
まず、落下物を吐き出すスイッチを置きます。
単純なキューブです。この中にUnity上でスクリプトを仕込んであります。
ちなみに、この「Spatial Mapping」状態を作るのは「HoloToolKit-Unity」を使えば簡単です。少しだけ面倒だったのは、チュートリアルで使っている「HoloToolKit」と最新のものは別物であること、さらには頻繁にバージョンアップしているのでメソッドなどの書き方がネットで紹介されている内容とも微妙に変わっていることです。
いずれにせよ、「Spatial Mapping」用のプレハブをシーン内に置くだけで大丈夫です。
このスイッチをエアタップすると大きなボールが連続して落下し始めます。
デスクの下にどんどんたまっていきます。
床やデスク、椅子をちゃんと検知しています。
分かりやすくするために、ワイヤー表示にしてあります。
次に、手でクリアファイルを出してみます。
しばらくはすり抜けますが、3秒くらいでちゃんと衝突するようになります。
クリアファイルを移動しても、3Dオブジェクトがそこに残っているためしばらくぶつかっています。
しばらくすると、クリアファイルの有ったところのオブジェクトが消え、椅子に直接落ちるようになりました。
この、環境の3Dスキャンの読み取り間隔はスクリプト制御できるのですが、たぶんあんまり早くするとデバイスへの負荷が大きくなって問題あるかなと想像します。
つまり、リアルタイムで動くものとの衝突を検知させるのは難しそうです。それには別な方法が必要なのでしょうね。
ちなみに、ボール形状の場合は、このくらい大きくないと床をすり抜けてしまいました。
キューブでしたらもっと小さくてもちゃんと衝突検知しましたが、そのあたりはちょっと癖がありそうです。
「Spatial Mapping」のできそうなこと、できなさそうなことは大まかに把握できたように思います。