VRoid素体にSiromori Eye Pointerを導入する方法~白目の軽減まで

  1. Home
  2. 読み物
  3. 副産物
  4. VRoid素体にSiromori Eye Pointerを導入する方法 ~白目の軽減まで

始めに

この記事の概要

VRoid素体へのSiromori Eye Pointerの導入

Siromori Eye Pointerをマニュアルに従って導入する

 導入手順には書かれていませんし、動作的にも問題ありませんが、赤い球の表示には「Poiyomi Shader」を使っていますので、VCCやALCOMのリポジトリに登録済みであれば、プロジェクトに導入してあげましょう。


Siromori Eye Pointerの「導入方法」に従って導入します


Siromori Eye Pointerの「導入方法」に従って導入します


Siromori Eye Pointerの「導入方法」に従って導入します

 ここまでの内容は「導入方法.txt」と全く同じ内容です。ここまでの内容については公式動画もありますのでそちらも合わせてご覧ください。

 VRC Eye Pointer v1.1 - How to apply

VRoidでも動かすための修正をする

 さて、このままではVRoid製アバターでは視線を動かすことができませんので修正を行います。基本的には「導入方法.txt」の手順に従って進めますが、ここでは画像付きで解説していきます。

1. VRCでEyePointerを起動すると、瞳孔が正常に動作しません。

a. 上記のようにAim Constraintが正しく設定されているか再確認してください。そうであれば、次のステップに進んでください。

b. アバターのアーマチュアパスとメジャーブースのアーマチュアパスが異なる場合や、EyePointerのアニメーションにEye Bonesの名前が記録されていない場合があるようです。
EyeBoneのパスがArmature/Hips/Spine/Chest/Neck/Headにない場合は、直接アニメーションを録画する必要があります
このような場合、'Toggle_On'と'Toggle_Off'と'Toggle_On_NoLook'アニメーションファイルを探し、アバターのアイボーンの位置に合わせて既存のプロパティのパス名を変更するか記録する必要があります
このドキュメントでは、Animationのパス名を変更したり記録したりする方法については説明していませんので、Unityに詳しい友人に聞いてみることをお勧めします。

 早速Animationを編集していきます。


エクスプローラーから直接開いてもいいし、Unityの画面からエクスプローラーを開いてもよい

 まずは「Toggle_Off」を編集するために、Toggle_Off.animがあるフォルダを開きます。


Toggle_Off.animがあるフォルダが開かれる

 Toggle_Off.animを「メモ帳」で開きます。
 「メモ帳」でなくとも、一般的なテキストエディッタであれば何でもいいです。私はMerryを使っていますので、以下の画像はMerryによる画像です。

 アニメーションのパスを変更します。ここで言う「パス」とは、目のボーンがある場所のことで、住所のようなものです。WEBのURLやエクスプローラーのファイルパスと同じ概念です。

普通のVRoid製アバターの場合

検索文字列: Armature/Hips/Spine/Chest/Neck/Head/Eye_R
置換文字列: Root/J_Bip_C_Hips/J_Bip_C_Spine/J_Bip_C_Chest/J_Bip_C_UpperChest/J_Bip_C_Neck/J_Bip_C_Head/J_Adj_R_FaceEye

UpperChestをBlenderやツールで削除している場合

検索文字列: Armature/Hips/Spine/Chest/Neck/Head/Eye_R
置換文字列: Root/J_Bip_C_Hips/J_Bip_C_Spine/J_Bip_C_Chest/J_Bip_C_Neck/J_Bip_C_Head/J_Adj_R_FaceEye

 メモ帳の置換ウインドウにそれぞれ入力し「すべて置換」あるいはそれに該当する機能を実行します。


ボーンのパスを変更する

 先ほどは「R」でしたので、今度は「L」を置換します。

普通のVRoid製アバターの場合

検索文字列: Armature/Hips/Spine/Chest/Neck/Head/Eye_L
置換文字列: Root/J_Bip_C_Hips/J_Bip_C_Spine/J_Bip_C_Chest/J_Bip_C_UpperChest/J_Bip_C_Neck/J_Bip_C_Head/J_Adj_L_FaceEye

UpperChestをBlenderやツールで削除している場合

検索文字列: Armature/Hips/Spine/Chest/Neck/Head/Eye_L
置換文字列: Root/J_Bip_C_Hips/J_Bip_C_Spine/J_Bip_C_Chest/J_Bip_C_Neck/J_Bip_C_Head/J_Adj_L_FaceEye


全部入力し直さなくてよい

 とても長いパスですが、よく見ると「R」が「L」になっただけですので、そこだけ書き換えて「すべて置換」でOKです。
  「Toggle_Off.anim」のRとLを置換したら上書き保存します。そして全く同じ手順で「Toggle_On.anim」と「Toggle_On_NoLook.anim」でボーンのパスを置換し、上書き保存します。

 3つとも置換して上書き保存したら、次回以降、導入を楽にするために保存しておきましょう。
 置換が終わった.animを3つとも選択して、右クリック、パッケージにエクスポートです。Unitypackageを好きな場所に保存しておきましょう。これで次回以降、Siromori Eye Pointerを導入した後に、保存したUnitypackageをプロジェクトに取り込むと、今回保存した.animに上書きされます。


毎回置換しなくてもいいようにパッケージにエクスポートしておく


エクスポート対象は今回置換した3つだけ

 ここまで来れば正常に動くようになっているはずですのでGestureManagerでSiromori Eye Pointerを起動してみましょう。


GestureManagerでSiromori Eye Pointerを起動してみましょう

 「On」を選ぶと「より目」になれば導入は完了しています。

白目を剥くのを軽減する

始めに

 この節は「煮込み豆腐」さんの記事を参考にVRoidに導入した結果をフィードバックして書き下ろした内容になっています。偉大なる先行事例に感謝。

簡易的な方法で白目を剥くのを軽減する

 「導入手順.txt」にも書いてあるとおり、ボーンの位置関係の影響でVRoid製アバターは白目を向きやすかったり、赤い球による視線誘導が強すぎるという問題があります。

3.アバターに導入後、EyePointerを有効にすると、目が反転したり、消えたり、歪んだりします。

a. これは、そのアバターのEye Boneの軸方向が適切でないために起こる問題です。
UnityのAim Constraintを使用するためには、UnityのPivot, Local基準で、該当BoneのY軸方向が垂直に上を向いていて、Z軸方向線がアバターが見ている正面方向を向いている必要があります。
そのEye Boneが正面を向いている基本状態の時、TransformコンポーネントのRotation値がX:0、Y:0、Z:0、またはこの数値に非常に近い値でなければAim Constraintが適切に動作しません。
もし、Rotation値が上記の数値から外れている場合は、以下の方法に従ってください。

b. これを修正する根本的な方法は、Blender、3DMax、Mayaなどの3D Modelingツールを使用してアイボーンの方向を適切に修正する必要があります。

(以下略)

 導入手順にもあるとおり、根本的な解決のためにはボーン構造そのものの編集が必要になります。また、「以下略」とした先にはBlenderを使わない方法が記されていますが、この方法はアバターの階層構造を変更する必要がある、すなわち、prefabのunpackが必要になり、破壊的な編集となるため、昨今流行の非破壊的編集とはなりません。

 そこで今回はより簡便な方法で白目を剥く症状を軽減します。
 なお、この方法では、白目を剥くのは大幅に改善しますが、「赤い球を見る」というよりは、「赤い球によって視線を誘導する」ぐらいになります。撮影するときはカメラのプレビューをよく確認しながら調整する必要がありますので使用する際は注意してください。

 まず 「J_Bip_C_Head」の直下に空のゲームオブジェクトを追加します。


J_Bip_C_Headを右クリックして空のゲームオブジェクトを追加する

 もしHeadの直下に空のゲームオブジェクトが追加されなかった場合は、この段階でHeadの直下に移しておきましょう。


わかりやすくリネームします

 管理しやすいように名前をつけてあげましょう。自分で把握できればなんでもかまいません。ここでは「Target2」としました。

 作成したゲームオブジェクト「Target2」の位置の「Z」の値を「1」にします。


位置「Z」に「1」と入力する

 空のゲームオブジェクトが真正面に移動します。このままではHeadの起点(首のすぐ上)の高さのままなので、目の位置に高さを合わせます。
 具体的には目のボーンの位置「Y」をコピーして、空のゲームオブジェクト(Target2)の「Y」に貼りつけます。


目のボーンから「Y」の値をコピーして


作成した空のゲームオブジェクト(Target2)のYの値に貼りつける

 これで空のゲームオブジェクト(Target2)が目のボーンと同じ高さになりました。

 続いて、左右の目のボーンを選択して、Siromori Eye Pointerを導入したときに設定した「Aim Constraint」コンポーネントの「ソース」をひとつ追加してふたつにします。


両目同時に編集するのを忘れないこと

 追加したソースに、空のゲームオブジェクト(Target2)をドラッグ&ドロップして登録します。


ソースに空のゲームオブジェクトを追加する

 Aim Constraintのソースの配分を変更します。
 私の場合は、Targetを0.12、空のゲームオブジェクトを0.88としています。


ソースの割合を変更する

 これによって、自分で操作するTargetと、頭の向きに固定されているTarget2を12:88の比率で目のボーンの動きに反映させることになります。

 ここまで来れば作業は終了です。早速アップロードして試してみましょう。

パターン別の問題解決策

もっと丁寧に調整したい。あるいは解説されている方法でも目が動き過ぎる(XAvatarとか)

  1. 両目共通の追加Targetではなく、右目専用、左目専用の追加Targetを追加する。Zの値は1、Yの値は0とする。
  2. 目のボーンに追加したAim Constraintのソースは、右目にはTargetと右目専用の追加Target、左目にはTargetと左目専用のTargetを登録し、ソースの割合は記事のままにしておく(0.12:0.88)。
    ※左右共通のTargetは使わないので削除
  3. 左目のボーンに追加したAim Constraintの「有効にする」をオフにして、GestureManagerを起動し、Siromori Eye Pointerを起動する。
  4. 右目だけ動くので、右目専用のTargetを動かしながら、左目と左右対称になるように位置を調整する。
  5. Transformの値をコピーして、プレイモードを終了する。
  6. 右目専用のTargetにTransformの値を貼りつけ、左目専用のTargetにもTransformの値を貼りつけ、Xの値をマイナスにする。
  7. 左目のボーンのAim Constraintを「有効」に戻す

もっと細かく調整する方法の実践編

 最初に紹介した、追加のターゲットをひとつだけ設置する方法は、Siromori Eye Pointerを起動すると寄り目になる事からも分かるとおり、右を向いたときは左目がより内側に、左を向いたときは右目がより内側に入る傾向にあります。ここで紹介する方法では起動しても目の位置がほとんど変わらない(正面から始まる)ので、左右に振ったときも、反対側の目がより内側に入るのを予防する効果があります。

ギミックを導入したら表情が動かなくなった(手が動かなくなった)

 大体はWrite Defaultsの設定が混在していることに起因していると思います。
 Write Defaultsの設定が混在していないか確認するか、VRCFuryを導入してFix Write Defaultsコンポーネントを追加する方法が考えられます。ただし、VRCFuryはNDMF(MA)のような非破壊編集機能ですが、NDMFと連係はしていないので、時々相性問題が起こりますので注意してください。(少し古いバージョンのものを導入すると安定します(NDMFの方がVRCFuryの方に合わせてくれているようなので))

 次の記事がわかりやすいと思います(私もよく参考にしています)
VRCFuryを使いこなす

余談

VRoidのボーン

そのEye Boneが正面を向いている基本状態の時、TransformコンポーネントのRotation値がX:0、Y:0、Z:0、またはこの数値に非常に近い値でなければAim Constraintが適切に動作しません。

 導入手順にも書いてあるとおり、瞳の真後ろにボーンの起点がある必要がありますが、VRoidのボーンはそのようになっていません。ツールをつかって可視化して上げると、ボーンの起点が瞳の真後ろにないことがよくわかります。


ボーンを可視化するとわかりやすい

視線移動を使った写真の作例


アバターの設定で視線移動を切っていてもSiromori Eye Pointerで操作できる

Misskeyにノート

Fediverseに共有