【VRChat】【Unity】表情改変の基礎知識(概論)(後日追記予定)
0.この記事の対象
2024.5時点の筆者のUnityバージョン
・Unity 2022.3.6f1
・VRChat SDK - Avatars 3.5.2
想定レベル:UnityのAnimatorControllerを理解して簡単なON/OFFギミックならツールに頼らずに手動で組める方向け
1.VRChatアバターの表情はどこで制御しているのか
1-1. BlendShapes
「顔」のメッシュのSkinned Mesh Rendererの中に「BlendShapes」の項目があるのでそこを開くと、0-100の幅で設定できるスライダーがある。このスライダーを動かすと、シーンに配置したアバターの表情が変わる。このBlendShapesを「この表情の時は0」「この表情の時は100」「この表情の時は0→100へ時間経過で変更」みたいなアニメーションを設定したものの集合体が表情制御になる。
1-2. VRChat公式が用意した表情制御法
VRChat公式が用意した表情制御法は、「基本的にトラッキングによって目や口パクを制御する」というもの。場所はアバターRootにあるVRC Avatar Descriptorの中。
しかし販売アバターのページを眺めると、ハンドサインによって表情が変わるようなアバターを数多く見かける(というかそれが日本アバターの現在の主流)。この説明は次項。
2. ハンドサインによって表情が変わるアバターはどこで表情制御しているのか
VRChatのアバター制御は、「複数のAnimator Controllerを連結させる」ことによりアニメーション制御を行っている(上の画像のAnimation Controllersの欄)。
アバターのAnimator Controllerの役割は大まかに上の画像の通りになっていて、このうちFX Layerはコントローラー群の中で最下層にある(TPOSE、IKPOSEは設定用に使用するレイヤーなので除外)ので、ここに表情変化のBlendShapesの変化量を定義したアニメーションを登録すると、アバターの表情変化をここの数値で上書きできる為、制御が可能になる。これをハンドサインの変数「GestureLeft」「GestureRight」と結び付けることにより、ハンドサインと表情を連動させて変化させる運用を可能にしている。
3. Gestureレイヤー流用の表情制御法とその注意点
ハンドサインと表情を連動させるため、ハンドサインの指の形を定義したレイヤー「Gestureレイヤー」のコントローラーをそのままコピーして、FXレイヤーへ転用した様なアバターが数多く存在する。
この方法だと自分でアニメーターを1から組まなくて良いので楽といえば楽だが、Gestureレイヤーは指の動きを定義したコントローラーである為、FXレイヤーへ転用する場合は指の動きを定義したアニメーション・パラメータ設定を外しておかないと不具合が発生するので要注意。また、この構造だとVRChatの仕様上避けられない不具合(顔面崩壊)がある。
4.表情制御のFXレイヤーを1から設計する
表情制御のFXレイヤーはVRChat公式が想定しているものでは無い(公式としてはトラッキングによる制御を想定している)為、言い換えるとオリジナルの表情制御法を実装することが可能。よって表情表現にこだわりたい場合、自分がVR中でどのような操作で表現をしたいか?を考え、それに従ってAnimatorを設計することになる。
・片手のみで制御
・両手で制御
・右手に表情、左手に漫符など
・右手に目の動き、左手に口の動きで別々に制御する
・まばたきの実装有無
・リップシンクとの共存
etc…
特に無言勢でアバターの動きで感情表現する人はアバターの表情は結構重要な要素なので、表情操作の仕方はこだわっておきたいポイントになる。
5.FaceEmoの処理について
最近登場したお手軽表情設定ツール「FaceEmo」だが、アバターに適用すると以下のPrefabがアバターに追加される。
「MA Merge Animator」…つまりアバターのFXレイヤーに非破壊でFaceEmo作成のFXレイヤー(FaceEmo_FX)を合成する処理を行っている。よってアバターに元々設定されていた表情変化のレイヤーをFaceEmo_FXの設定で上書き処理する方法が取られている。このFaceEmo_FXの中身はとある設計のプロの方が作成したFXレイヤーの構造になっており、まばたき干渉、リップシンク干渉などの表情崩壊系バグが起きない様に設計されている。表情設計にあまりこだわらない、という方はFaceEmoを用いて表情設定を行えば安定かと思う。
6. 表情制御を設計したい方へのテクニック集(執筆中…)
この記事が気に入ったらサポートをしてみませんか?