Droolon Pi1 / Pimax Eyetracking Moduleを使ってVRChatでOSCアイトラする方法

はじめに

この記事はPimax Eyetracking Module (Droolon Pi1)を使ってVRChat内でアイトラッキングを行う方法を記事にしたものです
ソフトウェア・ハードウェアの詳細な導入方法は調べたらある程度存在しますが、OSCを利用したアイトラを行う方法について最新の情報(2022/9/11現在)が少なく感じたので勢いで書いたものです
(試した結果から予想して書いてる部分も多分にあります)
せっかく買って本体,Runtime,動作は問題ないのにVRCで使えない…という人向けです
参考程度にどうぞ

必要なもの・前提条件

必要なもの

Hardware
・Pimax Eyetracking Module
Software
・AseeVR 3.27.52

前提条件

AseeVR 3.27.52はPimax公式の一連のアイトラッキングソフトウェアを有志の海外の方が修正し、VRChat用のOSC送信ソフトウェアを作成し連携できるようにしたものです
・AseeVR 3.27.52はHMDに寄らず動作可能なようです。(未検証)
が、Hardwareのサイズの問題からPimaxHMD以外では取り付けは難しいと思います
・今回の記事はAseeVR 3.27.52やPitool、各種Firmwareのインストールが終了し、SteamVRHome等でDFRなどで動作確認が取れている状態から、VRC内のアバターでアイトラッキングの動作を行うまでの手順を説明するものです

動作の仕組み

A:アイトラソフトウェア本体

①:"C:\7invensun\aSeeVR_UserSDK\forward\forward.exe"
②:"C:\7invensun\aSeeVR_UserSDK\runtime\Runtime.exe

①と②がどちらも起動していないと動作しない
Pitool上から起動できる
トレイアイコンから終了操作を行えるが、
"C:\7invensun\aSeeVR_UserSDK\AseeVR_ShutDown.exe"
を起動すると一発でどちらも確実に終了できる

"C:\7invensun\aSeeVR_UserSDK\runtime\devices\Pimax\config\EyeTracking.in"
のファイルをメモ帳で開き、
Enabled=1
eyeType=1
fdimg=1
fdimgline=1
の様に設定されてればRuntime起動時に出る目のカメラ画像に、どのように判定されてるかが表示されるようになるので便利

B:アイトラキャリブレーション用ソフト

"C:\7invensun\aSeeVR_UserSDK\runtime\apps\aSeeVRUnityCalibration\AseeVR Calibration.exe"

②のトレイアイコンからキャリブレーションを行おうとすると起動するソフト
触る必要はないけどSteamVRのゲームライブラリに登録してVRライブラリにも出るようにするとそこから起動できるのでキャリブレーションが楽

C:OSC送信ソフトウェア本体

"C:\7invensun\aSeeVR_UserSDK\DroolonPi1 OSC\system\ASeeVROSC.exe"

VRChatなどでOSC経由でアイトラッキングの値を送信するためのソフトウェア本体
AseeVRRuntime起動後に手動で起動する必要がある
コンソールウィンドウのような形で起動し、キーボードのキーで以下の操作が行える
:rキー 現在の視線位置を中心としてアイトラの中心位置を再設定する
:cキー ASeeVROSC.exeを終了する

D:OSCソフトウェア設定ファイル

"C:\7invensun\aSeeVR_UserSDK\DroolonPi1 OSC\system\Config.json"

送信するアイトラッキングやまばたき用の変数の名称を変更したり、ウィンクを判定する時間を変更したりできる
メモ帳等で開いて編集・保存が可能

流れ
(Dで設定する)
>AをPitoolから起動する
>Bでキャリブレーションを行う、終了する
>Cを起動し、必要であれば中心を再設定する
>VRCを起動

OSCソフトウェア設定ファイルの説明

たぶんいじると思うのはこの辺、他も名前に応じた変化がでるが、変更する必要性はあまりないと思われる
ウィンク判定
"WinkTime": 200, 
→たぶん単位はms 片目を閉じてからどれくらいで片目閉じを反映するかを設定している
あんまり短くするとまばたき動作に支障が出そうな気がする
視線パラメータ設定
各パラメータをアバターのExparameterに設定された[X]という名称のパラメータに送信する
変更して保存すると任意のパラメータに値を送信できる

"EyeXLeftAddress": "/avatar/parameters/[X]",
"EyeXRightAddress": "/avatar/parameters/[X]",
→水平方向のL/R視線位置

"EyeYAddress": "/avatar/parameters/[X]",
→垂直方向のL/Rを統合した視線位置

"EyeYRightAddress": "/avatar/parameters/[X]",
"EyeYLeftAddress": "/avatar/parameters/[X]",
→(おそらく)垂直方向のL/R視線位置、筆者の環境では名称変更に関わらずこれのみ動作しなかった

"EyeLidLeftAddress": "/avatar/parameters/[X]",
"EyeLidRightAddress": "/avatar/parameters/[X]",
→まばたき用パラメータでこれのみbool型かつ、0が閉じ/1が開き

アバター設定

こちらの別のアイトラッキングソフトウェア用の設定と互換性があるらしいので、これのアバターセットアップを参照。

アバター設定における注意点(参考)

上記リンク先にも記載があるが、重要なものや気づきにくいものを羅列
細かなStateやTransitionの設定は上記記事を参照

アイトラ
・EyeBornをAnimatorで動かして実現します
・EyeBornはHumanoidであるので、アニメーションはTransformアニメーションではなくAnimatorで行う必要がある。
・BlendTreeを片目づつ使用することになるが、最小構成であれば以下のような構成で足りる
(※画像はDroonlon Pi1 OSC 非対応ソフトウェア用の自動セットアップツールを利用した後、改変を行って動作可能にしたものであることを留意)

Gesture(あるいはAdditive)コントローラ内にBlendtreeを作成して動作
・blendtree:2D Simple Directional
・blendtreeのparameterの左に水平、右に垂直用パラメータを設定
・animatorによる上/下/左/右/中心の5つのeye bornアニメーション
・上記アニメーションはRigのmuscleで調整していない限り値+-6~9程度にしないと、動作が小さくなる。
※送信パラメータのMax,Minの絶対値は動作上1ではなく0.5~0.3程度になるため
・動作確認は設定したコントローラをAvatarのAnimetorコンポーネントに入れてUnityで再生すれば、画像内にあるblendtreeのスライダーでパラメーター動作時の確認ができる
・たまにEyeBoneの可動域をConstraintコンポーネント等で制限しているアバターがあるので、EyeBoneの状態を確認したほうが良い

・片目しか動作しない場合は左目のWeightを1、右目のWeightを0.5の様に片方のWeightを半分にすると動作する

右目用Blendtree

※あるいは1つのBlendtreeで完結させる

全体
右目
左目

まばたき
FXコントローラのレイヤーにBlendShapeアニメーションを作成して動かします
・EXparameterはBoolでまばたき用の変数を設定する必要があるが、FX側を同名称のFloatとして変数を設定し、MotionTimeに登録して動作させると設定が楽です

左目まばたきアニメーション
MotionTime設定

VRC内での動作確認

各種名称設定
OSCデバックメニュー

このようにデバックメニューが灰色で動作していれば成功です。
不具合があればアバターのアニメーション回りの修正やVRC内でOSCをリセット・アバターをリセットしたり、Runtimeソフトウェアがきちんと起動しているかを確認してみるのが良いでしょう。

おわり

お疲れさまでした
だいぶテキトーですが、あとは記事のリンクや転がっている情報を調べて貰ったりすれば動くと思います…
(たぶん大体はアイトラが動くまでで苦労しそうですが…)

いいなと思ったら応援しよう!