見出し画像

bHaptics系のベスト[ Tactot DK3 / TactSuit X40 (X16) ]をVRChatで使う方法

初めての記事作成です。
長すぎるのでnote記事にしてみました。

更新履歴
ー2022/5/9
・X16の動作確認報告とContactsギミックに関する記述を追加
ー2022/07/21
・bHapticsOSCのReleseリンクの修正
ー2022/07/27
・bHapticsOSC Integration ComponentのパラメータとShowMesh時の挙動に関する説明を追加
・[躓きQ&A]にギミックのやり直し方法に関する説明([5] Vestの設定をやり直したい/ギミックを消去したい)を追加
・Devices.cfgとbHapticsPlayerによる強度変化に関する説明を追加
・bHapticsOSCのアバター用SDKの更新によるCustomタグ消去とCustom Collision Tags項目に関する説明を追加


はじめに

筆者は最近旧モデルのデバイスであるTactot DK3 (振動モーター数40個)を手に入れたので、VRChatで使う方法を試していました。
そんな中でAvatar DynamicsがVRChatへ追加され、その中のギミックとOSCを使ってbHaptics系のベストを使うソフトウェアが海外の有志の方によって作られていたのを発見しました。
試したところいい感じに安定して動作したので、その辺を説明や覚書程度に書いてみました。

振動触覚ベストについては、現在TactSuit X40 / X16 がbHaptics社から購入可能だと思います。(2022/5/4)
デバイスの購入方法についてはここでは説明しません。

なお X40 / X16 はそれぞれ振動モーター数 40 / 16 個のモデルであり、X16ではここに書かれた方法だとうまくいかない場合があるかもしれないことをご了承ください。

追記(2022/5/9)
この記事を参考にした方から、TactSuit X16 モデルでVRChat上での動作ができたとの報告がありました!
振動するポイント数の違いはありますが、X16モデルでも使用可能なようです!



必要なもの

ベストのペアリングはbluetoothを使うので、PCとデバイスをペアリングできる環境を整えておいてください。

  1. bHaptics系のデバイス(※)
    振動ベスト / 触覚スーツ デバイス本体

  2. bHaptics Player
    振動ベスト用アプリ
    bHaptics社ダウンロードページ

  3. bHapticsOSC
    OSC送信ソフト&Avatarセットアップ用SDK
    GitHub Release branch (link)
    [ bHapticsOSC_v~.zip : OSC送信ソフト本体の入ったzip ]
    [ bHapticsOSC_v~_VRCSDK.unitypackage : Avatarセットアップ用SDK ]

  4. av3-animator-as-code
    Animatorレイヤーを生成するUnityEditor機能
    GitHub Master branch (link)
    [ Code > Download Zipでダウンロード ]

※bHapticsのデバイスには他にも以下の種類があります。
-Tactal (顔:額)
-Tactosy for Arms(腕)/ Hands (手) / Feet  (足)
(未確認ですが)後述するコンポーネントのデバイス選択画面を見る限り、おそらく今回の方法で使えると思います。

追記(2022/07/21)
bHapticsOSCのReleseリンクがver2.0.0のみのリンクになっていたのを修正


VRChat用Avatar の Unity Project セットアップ方法

ベストへ対応させるアバターはPBに対応したverのVRCSDK3.0をimport済みであることを確認してください。
セットアップ方法はbHapticsOSC GithubページのWiki内、Custom Avatar Integration -i , -ii , -iii に記載されています。

bHapticsOSC Github Master ページ
>Wiki
>VRChat
>Custom Avatar Integration
- i. Importing Animator As Code
-
ii. Importing the SDK
-
iii. Applying Integration

画面で見た感じについてはそのページにお任せしつつ、補足説明チックですが以下の①~④に書いていきます。

① av3-animator-as-codeのインポート

ダウンロードしたzip [ 必要なもの : 4 ] を解凍し、中の"av3-animator-as-code-main "フォルダをコピーします。
アバターのunityプロジェクトをエクスプローラーで開きAssetsフォルダ直下へ"av3-animator-as-code-main "フォルダを入れます。
※unity projectを開いて直接フォルダをインポートしても動きますが、たぶんエクスプローラーからの方が安全です。

 Avatarセットアップ用SDKのインポート

①を行ったアバターのunityプロジェクトを開いてbHapticsOSC_v~_VRCSDK.unitypackage [必要なもの : 3] をimportしてください。

 bHapticsOSC Integration Component の適用


前置き
※この作業で接触判定をしているVRC の Contacts を含む ObjectをAvatarに追加します。
また判定するためのParameterをFX Controllerに追加したものが複製され、新しくAvatar Descriptorにセットされます。
特にギミックへの影響はないとは思いますが、あとでFX Controllerをカスタムしようと考えている人は気を付けてください。

判定するためのParameter付きでFX Controllerが複製されるだけで、Expresstion parameterには変化はないので、以下の利点があります。

・FXを使ったギミックに影響しない
・Expresstion Parameterの枠を消費しない

追記(2022/07/27)
判定するためのParameterはBool型なので、接触した/してないの判定のみを取る形です。

bHapticsOSC Integration ComponentでShowMeshオプション(Vestの3Dモデルと接触判定のローカルでの可視化)をONにしている場合、接触判定のアニメーションが自動生成されます。
この場合もギミックの作動はそれぞれのローカルでの実行になるので、同期はされませんがExpresstion parameterには変化はありません。


(1)コンポーネントの追加 
Avatar DescriptorのあるObject(大体はアバター名)を選択し、InspectorからAdd componentで"bHapticsOSC Integration"コンポーネントを追加します。

(2)使用デバイスの決定
"bHapticsOSC Integration"コンポーネントに人がデバイスを付けている画面が表示されていることが分かると思います。
初期設定でVestが選択されているので+ADD DEVICEすると、アバターのChest boneにContactが付いたVestが追加され、アバターがVestを着た状態になります。
※他の部位の振動デバイスを持っている人は、ここで該当のデバイスをクリックするとそれらのADD DEVICE&セットアップもできると思います。

(3)Vestモデルの可視化設定とPosition Rotation Scale調整
Vestの3Dモデルは"bHapticsOSC Integration"コンポーネントShow Meshのチェックを外すと消せます。
同コンポーネントのPosition Rotation Scaleをアバターに合わせて調節してください。

コンポーネントの適用
コンポーネントのAPPLY INTEGRATIONを押すと、コンポーネントが消えて判定用のbool parameterが追加されたFX controllerが生成されます。
また生成されたFX controllerがAvatar Descriptorにセットされます。
アバターをアップロードして終了です。


[躓きQ&A]

[1] Vestの3DモデルのScaleがおかしい/表示されない
"bHapticsOSC Integration"コンポーネントのScaleのxyzを100か0.01にしてみてください。
Avatarや服のFBX出力時のスケールによってはScaleのxyzが1でもVestの3Dモデル大きくなったり小さくなってるので、コンポーネントのScaleを変更してみると良いです。

[2] VeryPoorになる
ContactのVeryPoor上限は32個です。
判定用のContactは80個あるのでアバターのperformanceランクはVeryPoor確定になります。

[3] Questで動かない
[2]の条件があるので、Quest用アバターに対してセットアップ
>アバターのperformanceランクがVeryPoorになる
>VeryPoorになることによりアバターがアップロード不可/Contactギミックが消されます
よってQuest単体では動かないと思います。
(bHapticsデバイス自体は対応ゲームであればQuest単体でも動かせるが、現在のVRChatの仕様上の問題があり、今回の方法では使えない)

[4] PC版アバターのQuest対応はできない?
できます。

  • PC版アバター
    ギミックをセットアップしアップロード

  • Quest版アバター
    ギミックをセットアップしてない状態の同アバターをアップロード

とすれば、着る側がPCVRならQuestユーザーの接触判定もきちんととれます。
APPLY INTEGRATIONしたアバターのunity projectを複製してQuest対応させたい場合は、アバターのChest bone内のVest Objectを消去すれば大丈夫だと思います。

※追記(2022/07/27)
[5] Vestの設定をやり直したい/ギミックを消去したい
・設定を間違えて適用した
・振動ギミックを削除したい
・FXを変更したいが、管理の観点からオリジナルのFXを変更してからFXを複製してやり直したい
(コピーされたFXを変更するとギミックを削除したいときなどに煩わしいため)
ときに有効なやり方です

①生成された
FXコントローラーを削除
②元のFXコントローラをAvatar DescriptorのFXに設定
"bHapticsOSC Integration"コンポーネントを再度アバターへ追加
④現在付けているデバイスの適用時の設定がそのまま表示される
⑤-A 設定のやり直しの場合
そのまま設定を変更してAPPLY INTEGRATIONすることで設定をやり直せます
⑤-B ギミックを削除の場合
Remove Deviceをすればギミックは消えます
※①を行うことでFXをコピー元から再生成できます


bHaptics Playerとベストの使い方

早速VRChatに入ってベストを試しましょう…と行きたいですが、bHapticsのソフトウェアとかデバイスの使い方、調整とか一切してないのでそこらへん説明します。

①bHaptics Playerをインストールして起動します

[ 必要なもの : 2 ]でダウンロードしたexeを実行します。
Steamストアからでもインストールできた気がします。

②bHaptics Playerの日本語化

bHaptics Player画面と設定ウィンドウ

bHaptics Playerを起動すると右下の小さな画面が出てきます。
右上の歯車マークをクリックすると画像上の大きな設定ウィンドウが出てきます。
設定ウィンドウからSETTING>Langageで日本語が選べるので便利です。
変更すると”再起動して”と言われるのでRestart Nowを押しましょう。

③デバイスのペアリングと各種設定

ペアリング時

DK3の場合ですが書いていきます。

まずPCにBluetoothアンテナがあることを確認してください。
無ければBluetoothドングルを買ってください。

ただしWindows11の場合、一部のBluetooth4.0ドングルはドライバが上手く動いてくれないので注意です。

bHaptics Playerを起動後、ベストの電源ボタンを押してください。
ベストのランプが点滅すると、bHaptics Playerに灰色のベストのアイコンが点滅して現れます
bHaptics Player右上の鎖アイコンをクリックすると、しばらくしてベストがペアリングされます。
設定windowからベストの振動強度・自動終了する待機時間などが設定できて、ベストのファームウェアもここで更新できます。

ペアリング解除をしたい場合は鎖アイコンの右のアイコンを押してください。ベストはもう一度ボタンを押せば電源が切れます。

bHapticsOSCの使い方

VRChatから信号を拾ってくるOSCソフトの使い方を書きます。

公式のアプリケーションではないのでセキュリティ警告などを許容する必要がありますが、その辺は自己責任でお願いします。

①セキュリティ許可

bHapticsOSC_v~.zip [ 必要なもの : 3 ] を解凍します。
解凍後のファイル内のbHapticsOSC.exebOscLib.dllのプロパティを開いて、"セキュリティ:許可する"にチェックを入れ適応を押します。

※ここら辺は自己責任で許可を押してください。そのままだとセキュリティソフトにファイルを消されたり、WindowsDefenderに阻まれたりで動かなかったので許可しました。

②信号強度の設定やデバイスの有効化

※Devices.cfgがきちんと動いているかはよく分かりませんが、参考までに書いておきます。

追記(2022/07/27)
Devices.cfgをいじらずともbHaptics Player側の振動強度の倍率を変更した所、振動の強さが変わったのでいじる必要はないかもしれません。

解凍したbHapticsOSCファイル内にDevices.cfgというconfigファイルがあります。
メモ帳で開くと、デバイスの有効無効やIntensityが調整できるように見えます…?
bHaptics PlayerとどっちのIntensityが有効になっているのかはよくわかりませんが、筆者は[Vest]のEnabled=True を確認してIntensityの値をbHaptics Playerの値と合わせて保存して使っています。
Intensityは20~40くらいが適度だと思います。

③bHapticsOSC.exeを起動

bHaptics Playerを起動し、ベストをペアリングしておいてください。

bHapticsOSC.exeを起動します。
起動するとbHapticsOSCのウィンドウが表示され、コンソールのような画面が表示されると思います。
"bHaptics Playerと接続済み"とbHaptics Playerの画面に緑帯で表示されると思うので、その状態で起動成功です。


VRChatで対応アバターを着て振動触覚を楽しむ

お疲れさまでした!!
早速VRChatに入ってベストを試しましょう!!

[躓きQ&A その2]

[1]対応アバターを着て触られても振動が来ない

VRChatのActionメニューから
Options>Config>Avatar Overlay >Contacts
を選択します。
すると振動判定用のContactの青い球が見えるはずです。
アバターの標準コライダーにContactの球が接触すると、振動判定がなされてベストが振動します。
見えてない場合は何らかの理由できちんとアバターセットアップができてないので、Projectのセットアップ方法&[躓きQ&A]を見直してやり直してみてください。

見えているにも関わらず動かない場合は以下を試すと改善するかもしれません。

  • Actionメニュー>Options>OSC>Reset Config

  • Actionメニュー>Expresstions>Reset Avatar

  • VRChatやbHapticsOSCを再起動

[2]自分が触っても振動が来ない

クイックメニュー>Settings>Self Interactがバツになっていると、自分で触っても反応しません
逆にメニュー操作時に反応してしまって振動が煩わしい場合はバツにして置くと良いです。

[3]アバターコライダー以外のコライダーに反応しない

基本的にアバターの標準コライダーに反応するので、自前で追加した武器のコライダーやワールドのコライダーには反応しないようです。
Contactのタグ次第とは聞いているのですが…(筆者がその辺の設定を理解できていない)
VRChatのContactの仕様を確認すると良いかもしれません。

追記(2022/5/9)
Contactについて少しわかってきたのでメモ程度ですが追記しておきます。
表現が分かりにくいですが、今までの単語を以下のように読み替えるとわかると思います。
----
標準コライダー -> 標準VRC Contact Sender (何と呼べばいいか分からない…、VRChat上でアバターに標準で設定される)
Contact ->VRC Contact Receiver 
----
共通名称のCollision TagをもつVRC Contact Sender / VRC Contact Receiver コンポーネントがある状態で、SenderがReceiverに触れたとき、接触判定がなされるようです。
まずセットアップで判定用Receiver コンポーネントのついたVestオブジェクトが追加されるのが確認できたと思います。
このときbHaprics OSC のsdkによるデフォルトの設定で、他人が触るときの
判定用Receiver(Others Object の子にあるもの) にはHead/Torso/Hand/Foot/Fingerの名称がCollision Tagsに設定されています。
(これらはアバターの標準VRC Contact SenderのCollision Tagsのようです)
同様にCustomタグとしてWorldが設定されています。
よってワールドオブジェクトやその他のオブジェクトに判定させたい場合は、以下の2つの方法が考えられると思います。

・判定させたいObject側にCustomタグとしてWorldを設定したSenderを付ける
・判定させたいObject側SenderのCollision Tagと同じ名前のCollision Tagを判定用Receiver コンポーネントへ追加する

追記(2022/07/27)
現在時点での最新版のbHapticsOSCのアバター用SDKではCustomタグとしてのWorldは設定されなくなりました
代わりにbHapticsOSC Integration Component に任意のCollision Tagを一括で設定できる項目が増えました(Custom Collision Tags)。
アバターへのComponent適用時に任意のTagを付けることができます。


おわりに

私も深い仕組みについてはよくできていませんが、躓きポイント含めてできるだけわかりやすく詳細に書いてみました。
Avatar Dynamicsが追加されて新しくなったVRChatでbHapticsの振動触覚が使える!!楽しい!!ということが広まれば幸いです。
長い文章でしたが,読んでいただきありがとうございました!


この記事が気に入ったらサポートをしてみませんか?