みなさんはVRMアバター、持っていますか?
VRM形式のアバターファイルを持っておくと、さまざまなプラットフォームやアプリで利用ができ、とても便利です!
参考:「VRMファイルが使えるアプリケーションは?」VRMドキュメント
https://vrm.dev/vrm/vrm_applications.html
私も最近、「Virtual Face」というVRM対応アプリで遊んでいたのですが、
パーフェクトシンク対応VRMを使うことで、もっと自然な顔の動きを反映できるらしいとのこと。
通常のVRMは既に作っていましたが、パーフェクトシンク対応のものは作ったことが無かったので、今回調べて分かったことなどをまとめていきます。
そもそもパーフェクトシンクってなに?
一応解説しておくと、
もともとはiOS向けのAR機能である「Apple ARKit」が存在し、これをVRMに流用して使えるようにした仕組みを「パーフェクトシンク」というようです。
こちらにより詳しい解説があります。
VRChat向けアバターからVRMに変換
私はよくVRChat向けアバターにお世話になっているので、度々VRMに変換する作業をしています。
VRChat向けアバターからVRMに変換する方法はいろいろとありますが、有志の方の記事やツールなどでほぼほぼ確立されつつあるので、今回は割愛させていただきます。
パーフェクトシンク用BlendShapeを追加
VRMをパーフェクトシンク対応にするためには、Apple ARKitに対応する52個のBlendShapeを追加する必要があります。
アプリ側がパーフェクトシンク用BlendShapeを自動で読み込んでくれるので、VRM側では指定された名称の52個のBlendShapeを追加するだけでいい、ということですね。
各BlendShapeについての名称および詳細はこちらの記事が参考になります。
作業開始
それでは、さっそくUnity上での作業に移ります。
状況としては、VRMへの変換作業を終え、生成されたVRMをScene上に配置したタイミングです。
BlendShape作成
VRMのBlendShape設定から、「Create BlendShapeClip」から新しいBlendShapeを作ります。
52個のBlendShapeの名称は以下の通りです。
- BrowInnerUp
- BrowDownLeft
- BrowDownRight
- BrowOuterUpLeft
- BrowOuterUpRight
- EyeLookUpLeft
- EyeLookUpRight
- EyeLookDownLeft
- EyeLookDownRight
- EyeLookInLeft
- EyeLookInRight
- EyeLookOutLeft
- EyeLookOutRight
- EyeBlinkLeft
- EyeBlinkRight
- EyeSquintLeft
- EyeSquintRight
- EyeWideLeft
- EyeWideRight
- CheekPuff
- CheekSquintLeft
- CheekSquintRight
- NoseSneerLeft
- NoseSneerRight
- JawOpen
- JawForward
- JawLeft
- JawRight
- MouthFunnel
- MouthPucker
- MouthLeft
- MouthRight
- MouthRollUpper
- MouthRollLower
- MouthShrugUpper
- MouthShrugLower
- MouthClose
- MouthSmileLeft
- MouthSmileRight
- MouthFrownLeft
- MouthFrownRight
- MouthDimpleLeft
- MouthDimpleRight
- MouthUpperUpLeft
- MouthUpperUpRight
- MouthLowerDownLeft
- MouthLowerDownRight
- MouthPressLeft
- MouthPressRight
- MouthStretchLeft
- MouthStretchRight
- TongueOut
使用アバターは「トラスとウェッジ」のトラスちゃんです。
とてもかわいいですね!
アバター側Shapeキーのウェイト設定
先ほど設定したBlendShapeに対応する表情を設定します。
基本的にはアバター側Shapeキーのウェイトを100にすることで設定できるかと思います。
各BlendShapeに対応する表情の詳細は、はいぬっかさん作成のメモが参考になります。
このとき注意してほしいのですが、
パーフェクトシンク非対応のアバターですべてのBlendShapeを設定することは非常に難しいことが予測されます。
というのも、パーフェクトシンク用のBlendShapeには細かい仕様の指定があり、非対応のアバターでそれらに対応することはBlenderなどのモデリングツールを利用して自分で新しく作らない限り難しいからです。
(例として、BrowInnerUpは「眉の内側を上げる」「眉尻は動かさない」という指定があります。)
既存のShapeキーを無理やり当てはめることも可能ですが、アプリなどでの利用時に表情が崩れてしまう可能性もあり、お勧めできません。
そのため、最低限これだけ設定しておけばよい、というBlendShapeをいくつか列挙します。
-
EyeSquintRight, EyeSquintLeft, EyeBlinkLeft, EyeBlinkRight, EyeWideLeft, EyeWideRight
目の動きに関係するBlendShapeです。特に、EyeBlinkLeft, EyeBlinkRightは瞬きを再現するために必要です。 -
JawOpen, MouthFunnel, MouthPucker
JawOpenは「あ」の口, MouthFunnelは「う」の口で、口の開閉を再現するために重要なBlendShapeです。口の横幅を狭めるMouthPuckerもあると口の動きが豊かになります。
これ以外でも設定が可能なBlendShapeがあれば設定しておきましょう。
動作確認
「Virtual Face」で作ったVRMを動かしてみました。
瞬きや口の開閉だけでも、かなり自然な動きを再現できていますね!
まとめ
今回は、VRChat向けアバターからパーフェクトシンク対応VRMを作る方法として、
「愚直にパーフェクトシンク用BlendShapeを追加する」 というやり方を実践しました!
もう少し賢い方法もあるとは思いますが、とりあえず手っ取り早くVRChat向けアバターからパーフェクトシンク対応VRMを作りたい場合はこの方法で十分でしょう。
今回の趣旨からは逸れますが、VRoidのパーフェクトシンク対応には「HANA_APP」という有料のツールも使えるようなので、興味がある方は詳しく調べてみることをおすすめします。
最後に、
VRMは3Dアバターのファイル形式としてとても便利なので、
みなさんも自分のVRMを作って遊んじゃいましょう!
という一言を添えておきます。