Vive + Unity で VTuber を実装するための Tips


しばらく VTuber 周りのエンジニアリングをやってますが、いろいろ情報が散っていてちょっと集約しておきたくなったので Tips としてまとめておこうという記事です。
より基礎的なことについてはようてんさんの「バーチャルYouTuberのやり方1を参照してください。
基本的に Vive + Unity + SteamVR + VRIK を想定しています。
スクショがないのは筆者の不精です。

1. CameraRig の下にモデルを置かない

ようてんさんの記事からもリンクされている「Unity+Vive+MMD+VRIKで、キズナアイちゃんになりきりVR」では

まず、SteamVR > Prefabs > CameraRig の階層下に、キズナアイのキャラモデルを配置します。

と書かれているわけですがやめた方がいいです。
理由はモデルとアクターの身長合わせがやりにくくなるから。モデルを CameraRig の外においておけば、 CameraRig のスケールを変えることでアクターとモデルの身長差を補正できます2
モデルと CameraRig の親として「VROrigin」とでも名前を付けた親オブジェクトを作っておくと、まとめて移動したりするのにいいです。

2.VRIK の各パラメータの意味を知りたい。

Final IK の VRIK の Solver にある各値の説明」をどうぞ。

3.キャラモデル用のライティングを分離する

VTuber のキャラはほぼトゥーンシェーダーを使っています。つまり光はいい感じに見える向きと強さで常に当てたいわけです。そうすると背景にいろいろ照明を置いたとき、その照明がキャラに当たると色が白く飛んでしまったり、影が不本意な形になってしまったり、します。
Light の Culling Mask で、照明を適用するレイヤーを設定できるので、キャラモデルと背景オブジェクトを別レイヤーに分けてそれぞれ照明を別個に設定しましょう。
ただし Indirect lighting が Culling Mask を無視するというバグが少なくとも 2018.2 時点ではあるので lightmap を bake するときには注意です。

4.VRIKで膝の曲がり方がおかしくなるのを直す

VRIK で膝が内側に曲がってXの字になって困ることってありませんか? 私はありました。
Swivel Offset などで頑張って補正しても変にねじれてきれいにならなくて困っていたんですが、結論としては VRIK が当たる前の時点で膝を正しく軽く曲げておくと、きれいに曲がるようになります。
VRIK が関節の曲げ方向をモデルの曲がりをもとに推測するのですが、美少女の脚線美って膝が内側に入りがちになるためにそちらに向かって曲がってしまう……ということのようです。


こういうはなしもあるので、 VRIK に限らず IK 一般でそうなのかもしれません。

5.AniLipSync で Oculus Lipsync Unity (OVRLipSync) の遅延を軽減する

AniLipSyncを用いてOVRLipSyncの遅延(レイテンシ)を軽減する」をどうぞ。
バージョン上がりましたがこの通りにいきます。

6.モデルのスケールを変更する

VTuber が不思議の国のアリスよろしくスケールを変えたいことがあるのかどうかわかりませんが……でも「あいえるらいぶ #003」での TRPG とか VR らしくていいですよね。
VRIK でスケールを小さくすると大股開きになる問題を解決する」が参考になります。ただこれのスクリプト中で補正しているパラメータからは「Min Head Height」が抜けているので注意。
あと、揺れもののコライダーがスケール変更に合わせたサイズ変更に対応していない場合はそちらも補正する必要がありますね。

7.モーフを UniVRM の BlendShapeClip で制御する

モーフとかシェイプキーとかブレンドシェイプとかいろんな呼ばれ方がありますが、Unityで扱うときに何が面倒って、名前がついているにもかかわらず、インデックス番号で指定させられることですね。あと、複数のモーフを組み合わせて表情を定義したいということもよくあります。
VRM 形式ではそれを BlendShapeClip という形で管理する仕組みがあるわけですが、この仕組みは VRM でなくても使えます。便利です。
モデルに「VRMBlendShapeProxy」を付けて、定義としてアセットの「BlendShapeAvatar」を用意して適用する感じです。
設定の仕方はこのあたりとかを参考にするといいでしょう。
リップシンクはどうすればいいか? このスクリプトをどうぞ。

8.VIVE Input Utility で Vive Tracker を割り当て可能に

VIVE で全身トラッキングなどで複数トラッカーを運用しようとしたときに、トラッカーが入れ替わってひどい目にあうのはあるあるだと思います。デバイスIDで割り当てるなどいろいろ方法はありますが、「VIVE Input Utility」だと GUI で動的に割り当てが行えるようになります。
詳細は「Embedded Binding Interface」を見てください。デフォルトでは「右Shift + B」で設定GUIを呼び出せます。
ほかにもコントローラーのインプット周りがいろいろ扱いやすくなったりと、結構便利です。
欠点は公式ドキュメント含めて資料に乏しいこと3、「SteamVRのInputEventをUniRxで扱えるようにするAsset」が使えなくなること4でしょうか。


  1. 半年以上たってるのにいまだにこれ以上の記事がないんですよね。その更新版がこの同人誌のpdfではありますけれど、オープンソースに寄せていたり、でちょっと癖があるので…… 

  2. ようてんさんの記事中の時点で既に外に出してありますね…… 

  3. Example はあるのでそれを読み解くしかない。あとwiki。 

  4. もっとも素の状態での Input 周りの取り回しはよくなるのでそんなに問題はないかもしれないですが、すでに使ってしまっていると困るところです。