1. 始めに
2016年2月18日にLeap Motionに新たなVRモード用のドライバ・ランタイム「Orion」(ベータ)がリリースされました。
- 公式サイト(開発者向け)
https://developer.leapmotion.com/ - Leap Motion、VR向けに最適化されたハンド・トラッキングエンジンOrionを公開
http://www.moguravr.com/leapmotion-orion/ - VRソフトウェア「Leap Motion Orion」提供開始―手だけであらゆる操作可能に
http://www.gamespark.jp/article/2016/02/20/63881.html
これまでの歴史とOrionの技術的な特徴は中村さんのブログにまとめられていますのでそちらをご覧ください。
- Leap Motion Orion(Beta)がリリースされています
http://www.naturalsoftware.jp/entry/2016/02/24/121741
Orionはランタイム・ドライバをアップデートするだけでも既存のV2系列のアプリの精度を高めることができます。ですが、せっかくなので最新のUnity環境及びOrionを用いた自作VRアプリの作成手順について説明をします。
2. 環境構築
ダウンロードとインストール
- Leap Motion Orionランタイム・ドライバのダウンロード
https://developer.leapmotion.com/get-started
ファイルをダウンロードしたらzipファイルを展開し、中にあるexeファイルを実行してください。
この記事の執筆時点における最新版は3.1.0+39495です。もしバージョンアップが上手くいかない時は、
一度既存のLeap Motionのランタイム・ドライバをアンインストールしてから新たにインストールしてください。
- Unityパッケージ
https://developer.leapmotion.com/get-started
スクロールさせて一番下の方にダウンロード用のページがあります。
ここからUnityパッケージをダウンロードしてください(LeapMotion_CoreAsset_Orion_Beta_4.0.0.unitypackage)。
ダウンロードページにも書かれていますように、PC環境は以下のようになります。
- Windows 7 64-bit or higher
- Unity 5.3 with the integrated VR support enabled
- Leap Motion Orion
- Oculus SDK 0.8.0
この資料ではこの記事の執筆時点における推奨版の「Unity5.3.3p1」を使用します。
- Recommended Unity Versions For Development
https://forums.oculus.com/viewtopic.php?f=37&t=25882 - Unity5.3.3p1
http://unity3d.com/jp/unity/qa/patch-releases
■Oculus Rift DK2について
Oculus Rift DK2(以後DK2)については別のサイトを参照して環境構築してください。
■VR Developer Mountについて
DK2の前にLeap Motionを取り付ける必要があります。公式サイトの下の方で販売しています。
- VR Developer Mount
http://store-us.leapmotion.com/products/vr-developer-mount
ですが、わざわざ公式の物を買わなくても両面テープで固定しても構いません。
またはUnofficial VR mounterもあります。
- Unofficial VR mount thread
https://community.leapmotion.com/t/unofficial-vr-mount-thread/2296
3. サンプルによる動作確認
Orionのリリースに合わせて公開されたサンプルアプリがあるので試してみましょう。
- Blocks
https://developer.leapmotion.com/gallery/blocks (右上の「Download Executable」をクリック) - Geometric
https://developer.leapmotion.com/gallery/geometric (右上の「Download Executable」をクリック) - WrenAR Leap Motion Orion DK2 Softbody Test (Oculus VR社のフォーラム)
https://forums.oculus.com/viewtopic.php?t=29977
一番下の方にあるリンクが最新版となります。rar形式なので展開ツールは別途用意してください。
4. Leap Motionパッケージのインポートとサンプルシーンの参照
まずUnityを起動し新規にプロジェクトを作成します。
「AngelaNadeNade」。そうです、あれを作ります(笑)。
新規にプロジェクトが作成で来たら先ほどダウンロードした LeapMotion_CoreAsset_Orion_Beta_4.0.0.unitypackage をダブルクリックしてインポートします。
とりあえずデモシーンを見てみましょう。今回はVRモードを利用しますので、Uniyの[Edit]-[Project Settings]-[Player]を実行し、インスペクタに表示された「Other Settings」「Rendering」「Virtual Reality Supported」をチェックします。
デモシーンは Assets/LeapMotion/Scenes/Leap_Hands_Demo_VRです。シーンファイルを開いたら、実行してみましょう。ここまで問題が無ければパススルー(赤外線を通して得られた映像)で映像が出て、DK2の前に手をかざせと手のモデルが表示されると思います。
もしパススルーが表示されない時はLeap Motionのコンフィグレーションを起動して「イメージを許可する」にチェックを入れてから再度試してみてください。
このシーンを使いまわしてもいいのですが、新規シーンを作成してLeap Motionによる手を出す方法も紹介します。
5. 新規シーンにおけるセットアップ
- 先程のプロジェクトを開いている状態から、Ctrl+Nキーを押して新規シーンを作成します。
- Assets/LeapMotion/Prefabs/の LMHeadMountedRig をシーンに配置します。
- シーンに配置したLMHeadMountedRigを展開して、LeapHandControllerを表示します(以下、単に LeapHandController と記述)。
- Assets/LeapMotion/Prefabs/HandModelsNonhuman/のCapsuleHand_LとCapsuleHand_RをLeapHandControllerの子要素として配置します。
- Assets/LeapMotion/Prefabs/HandModelsPhysical/のRigidRoundHand_LとRigidRoundHand_RをLeapHandControllerの子要素として配置します。
- LeapHandControllerをクリックしてインスペクタを表示し、Hand PoolスクリプトのLeft Graphics Model, Right Graphics Model, Left Physic Model, Right Physic Modelにそれぞれ以下のように登録します。
Left Graphics Model => CapsuleHand_L
Right Graphics Model => CapsuleHand_R
Left Physic Model => RigidRoundHand_L
Right Physic Model => RigidRoundHand_R
スクリーンショットを撮るのも面倒なので動画に撮りましたのでそちらを参照してください。
最後にパススルーモードを有効にするには、HierarchyのLMHeadMountedRig/CenterEyeAnchorにアタッチされているLeap Image Retrieverを有効化し、HierarchyのLMHeadMountedRig/CenterEyeAnchor/LeapSpace/QuadBackgroundを有効化してください。
6. MMD4Mecanimによるモデルのインポート
詳しい手順は他のサイトをご覧いただくとして、ここでは簡易的に記述します。
MMD4Mecanim_Beta_20150821.zipをダウンロードしてください。
http://stereoarts.jp/
ダウンロードしたらzipファイルを展開し、MMD4Mecanim.unitypackageをインポートします。
次にお好きなMMDモデルデータを含むフォルダをUnityの「Project」にD&Dします。
D&Dしたフォルダに「***.MMD4Mecanim」という名前のファイルができるのでそれを選択し、READMEを参照して[同意する]ボタンを押してください。次の画面で[Process]ボタンを押すとMMD(PMX)からfbxに変換されます。
変換したFBXをシーンに配置します。このとき、カメラの位置(LMHeadMountedRig)が(0,0,0)のままなので適当に調整します。
実行してみるとこんな感じです。
表情が硬いので「主婦ユニ」を読むか、こちらのmkt_さんの記事を参照しましょう。
- MMD4Mecanimで表情を作り込む
http://qiita.com/mkt_/items/82f4057f51b1657c971e
「コッチミンナ」がうまくいかない時はこちらのアセットを使ってみるのも良いでしょう。
- Head Look Controller
https://www.assetstore.unity3d.com/jp/#!/content/4
使い方はDvorakはしもとさんのサイトを参照。
- Unityでキャラクターに見つめてもらう
http://dvorak.hatenablog.com/entry/2014/08/24/230302
なおメインカメラはLMheadMountedRig/CenterEyeAnchorにあります。
またウダサンさんの記事を参照するのもよいでしょう。
- [Unity]MMD4MFaceBlink – MMD4Mecanimでまばたき
http://udasankoubou.blogspot.jp/2014/02/unitymmd4mfaceblink-mmd4mecanim.html - [Unity]MMD4MFace – MMD4Mecanimの表情制御
http://udasankoubou.blogspot.jp/2014/02/unitymmd4mface-mmd4mecanim.html
7. 髪の毛を触るには
大きく3つのステップが必要です。
- MMD4Mecanimで取り込んだモデルのPhysicsを有効にする
- 手のPhysicsモデルにMMD4MecanimRigidBody.csをアタッチする
- VR用に最適化を行う
それぞれ詳しく説明します。
7.1 MMD4Mecanimで取り込んだモデルのPhysicsを有効にする
HierarchyにあるMMD4Mecanimで変換したモデルデータを選択すると「MMD4 Mecanim Model」スクリプトがアタッチされています。[Model]タブの下にある「Physics Engine」を「None」から「Bullet Physics」変更してください。
次に[Physics]タブを開き、CollidersのGenerate Collidersの「Process」ボタンを押します。
次にBullet Physicsの「Join Local World」のチェックを外します。
次にFram Per Secondを75に変更(デフォルトの0は120fpsを意味しています)。
あとはPCの性能に応じて、Use CCDのオン/オフ(オフで処理を軽減)、Iterationsを4(処理軽減)にしてください。詳しくはMMD4Mecanim付属の「MMD4Mecanim リアルタイム版 Bullet Physics.pdf」を参照してください。
7.2. 手のPhysicsモデルにMMD4MecanimRigidBody.csをアタッチする
Leap Motionの物理モデル(RigidRoundHand_LとRigidRoundHand_R)を指の関節や掌にRigidboadyコンポーネントがアタッチされています。Rigidbodyコンポーネントがアタッチされている全てのGameObjectにMMD4Mecanim/Scripts/MMD4MecanimRigidBody.csをアタッチします。
一つ一つ手アタッチするのは大変なので、Hierarchyの上にある検索欄に「rigidbody」と入力するとシーン内でRigidbodyをアタッチしているGameObjectだけ検索されるので、それをすべて選択し、Inspectorの[Add Component]ボタンを押して「MMD4MecanimRigidBody」と入力してアタッチします。これですべてのRigidbodyコンポーネントにまとめてアタッチすることができます。
7.3. VR用に最適化を行う
物理エンジンを用いているので物理エンジンの更新間隔を最適化します。Unityの[Edit]-[Project Settings]-[Time]を起動してFixed Timestepを0.01333333に、Maximum Allowed Timestepも0.01333333に変更します。
これで完成です。プレイするとMMDモデルが目の前にいて物理設定が行われているところを手で触ると動くはずです。
おまけ
Leap Motion Orion 3.1で大幅に手の認識精度が上がり、何と手を組んでも認識されます。
Leap Motion Orion 3.1。確かに手を組んでも認識される。凄い。 pic.twitter.com/rz3C17HPjT
— ザバ(ザバイオーネ) (@z_zabaglione) March 1, 2016