Varjo XR-3を使ってハンドトラッキングを試してみる(Ultraleap Plugin for Unity編)

こんにちは!
Synamonでエンジニアをしている黒岩(@kro96_xr)です。
前回「Varjo Unity XR SDKを使ってパススルーを試す」という記事を投稿させていただきましたが、今回はハンドトラッキングについて試していきたいと思います。

前回の記事はこちら
synamon.hatenablog.com

はじめに

この記事をご覧になる皆さんにとっては今更かもしれませんが、Varjo XR-3はUltraleap(旧Leapmotion)の第5世代ハンドトラッキングプラットフォーム(通称Gemini)を搭載しており、Ultraleapのリファレンスを参考にすることで比較的簡単にハンドトラッキングを実装することができます。
Geminiについてはこちら > Gemini: Fifth-generation hand tracking platform | Ultraleap

また、Microsoftが提供しているMixed Reality Tool Kit(MRTK)がUltraleapに対応しているため、空間操作や入力システムに関連する一連のコンポーネントを活用することもできます。
今回は前者のUltraleap Plugin for Unityを使用したハンドトラッキングを、次回の記事ではMRTKを使用したハンドトラッキングについて試してみたいと思います。

(追記)
この記事を書いている最中にGemini正式リリースのリリースがありました。トラッキング精度が向上したとのことなので楽しみですね!
www.moguravr.com

環境

今回の環境は以下の通りです。

  • Unity2020.3.19f
  • VarjoUnityXRPlugin 2.1.1
  • Varjo XR-3 & VR-3 Ultraleap SDK for Unity 3.0.0

VarjoUnityXRPluginのインポートとプロジェクト設定の変更は前回記事と同様なので割愛します。
以降のカメラ設定についても前回記事を参考に適宜変更していただければと思います。

導入手順

共通手順

  • Varjo公式githubからVarjo XR-3 & VR-3 Ultraleap SDK for UnityをClone
  • CloneしたフォルダからのAssets/Pluginsをコピーしプロジェクトに追加
  • パススルー機能を使う場合はパススルーでのレンダリングを開始するように下記スクリプトを用意してシーンに追加しておく
 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 using Varjo.XR;
 
 public class Sample : MonoBehaviour
 {
     private void Start()
     {
         VarjoRendering.SetOpaque(false);
         VarjoMixedReality.StartRender();
     }
 }

Moduleに同梱されているサンプルを動かす場合

  • Assets > Plugin > LeapMotion > Core > Example内のシーンを開く
  • 各種シェーダーを使用しているレンダリングパイプラインに合わせて変更
    基本これだけでハンドトラッキング自体は動くはずです。

f:id:krocks96:20211027201707p:plain

手動でハンドトラッキングを追加する場合

  • MainCamereの下に空のオブジェクトを追加して、オフセットの値を設定
    f:id:krocks96:20211027204117p:plain
    f:id:krocks96:20211027204139p:plain
  • MainCameraに"Leap Service Provider"をアタッチしてオフセット用オブジェクトを指定
    f:id:krocks96:20211027204042p:plain
  • シーンに空のオブジェクトを追加して"HandTrackingManager"をアタッチ
  • 上記オブジェクトの下にAssets > Plugin > LeapMotion > Core > Preafabs > HandModelsNonHuman内のプレハブを追加
    f:id:krocks96:20211027204626p:plain
  • HandModelManagerのModel Poolに上記で追加したプレハブのオブジェクトを追加、IsEnabledをONにする
    f:id:krocks96:20211027204656p:plain

以上でハンドトラッキングが追加できるかと思います。

躓きポイント

Ultraleapが提供しているLeap Motion's Unity Modulesを使用すると"Leap Service not connected; attempting to reconnect"のワーニングが出てハンドトラッキングができませんでした。
XR-3で使用する場合はVarjoがgithubで公開しているModuleを使用するようにしてください。
ちなみにLeapMotionを使う際にVarjoが公開しているModuleを使うと同様のワーニングが出ました。
公式リファレンスに従わないとこういうところで躓くので気をつけましょう。(基本こんなことしないと思いますが…)

おわりに

以上でハンドトラッキングの設定は完了です。動かすだけであれば意外と簡単に出来ますね。
上記と同様の方法でInteractionのテストもしてみましたが、キューブに触ることもできました。 f:id:krocks96:20211027202024p:plain

ただ、細かいUI等を一から開発することを考慮するとMRTKを導入した方がスムーズに開発を進められそうです。
次回の記事ではMRTKの設定方法について書きたいと思いますので、そちらも読んでくださると嬉しいです!

お知らせ

Synamonは、Unity / C#エンジニア、テックリードを中心に新しい仲間を募集中です。
「XRが当たり前の世界をつくる」というミッションに共感したメンバーが、切磋琢磨しながら日々挑戦しています!カジュアル面談も実施中なので、ご興味ある方、お気軽にご連絡ください。
カジュアル面談でご来社いただきXR-3を体験することなども可能ですよ!

カジュアル面談はMeetyから▼
meety.net

エントリーはこちら▼
herp.careers

また、本テックブログやnote記事のお知らせは、Synamon公式Twitterでも発信もしています。
弊社の取り組みに興味を持っていただけたら、ぜひフォローお願いいたします!
twitter.com