夜風のMixedReality

xRと出会って変わった人生と出会った技術を書き残すためのGeekなHoloRangerの居場所

HoloLens上でリアルな物理挙動を実現するHandSmashService  その①

本日は海外の方が紹介していたHolosmashに関して調査を行います。

HoloLensのコミュニティグループは様々な場所にあります。

今回はFacebook上のHoloLensコミュニティグループ『HoloLens Developers Worldwide』でグループの管理者の一人であるJoostさんが紹介されていたツールを、オリジナルの記事を訳しながら紹介します。

〇HandSmashService

HandSmashServiceはオランダのJoostさんが開発されたHoloLens用のツールのサンプルです。

オリジナルの記事は次になります。

localjoost.github.io

 HoloLens 2ではHandTrackingが使用できるようになり、ユーザーはオブジェクトをつかんだり、押したりといったことができるようになり、初代HoloLensよりもより現実に近い自然な動作でオブジェクトとのインタラクションが可能になりました。

 これらの動作はHoloLensのHandphysicsSecviceによって実現していますが、これにはいくつかの制約があります。

Joostさんによると『ものを触っていることを検知するには非常に優れたシステムだが、実際に動かすためには低レベルである』ようです。

although it’s a great way to detect whether or not things are touched, it’s capabilities for actually manipulating stuff is limited to low speed interactions.

 実際HoloLensの開発ツールのMRTKのデモシーンを覗いてみると、押すことやつかむことに対してのデモやコンポーネントは充実していますが、投げる打つといったよりダイナミックなユーザーの動きに対しての実装は見当たりません。

microsoft.github.io

 HandSmashServiceはこのスマッシュに対する動作を実現するために開発されたようです。

 私は以前HoloLensでブロック崩しを作ろうとしたことがあるのですが、これは動画のように手でボールを叩くと球が飛んでいくようなものでしたが、すり抜け問題などがあり、一時停止していました。 

youtu.be

 HandSmashServiceを使えばより楽しいブロック崩しが作れそうです。

〇基本原理

HandSmashServiceはMRTK v2のIMixedRealityHandJointServiceを使用して手を追尾します。 追尾の際に1フレームごとの移動量を算出することで手の速度と方向を算出しています。

フレームごとの手の動きが直線的になることを仮定して次のフレームの手の方向を推測し、レイを飛ばします。

このレイがオブジェクトに当たった場合手の速度に応じて力を与えます。

これによって従来よりもリアルな物理挙動を行うことができます。

〇サンプルを動かす

早速サンプルを動かしてみます。

オリジナルの記事でも紹介されていますが、HandSmashServiceは次のGitHubリポジトリで公開されています。

今回はUnity2019.3.9f1を使用しています。(GitHubリポジトリのバージョンはUnity2019.4が使用されていますが自身の環境にはなかったのでダウングレードして動かしています。)

サンプルプロジェクトを開くとAsset/App/SceneにSampleSceneDefaultSampleSceneSmashの二つのシーンがあります。

f:id:Holomoto-Sumire:20210109203844j:plain

SampleSceneDefaultシーンはMRTKの標準、SampleSceneSmashシーンはHandSmashのシーンで二つを比較することができます。

サンプルプロジェクトでは特に設定を弄ることはなくそのままデプロイすることができます。

〇実機で動かす

手の速さでボールが動きます。

youtu.be

ゆっくり叩くとゆっくりとボールが飛び、早く叩くと早く飛んでいきます。

次回さらに詳しく見ていきます。