見出し画像

無料かつUnityだけで自分のアバターを顔トラ対応化させる方法【VRChat】


今回の手法の説明


本記事は、
「マイナーアバターでフェイシャルトラッキングをしたい」
「表情改変と同じ要領で顔トラしたい」
方々向けの記事となります。

上記の動画のフェイシャルトラッキングセットアップは2時間前後でした。
作業は既存のBlendShapeを流用する方法で、"全て無料"で作ります。

Unityだけ使用します。

またApple ARKit FaceTracking向けセットアップをベースとしています。
そのため、iPhone用いたParfectSync対応アプリに対応させやすい設計です。

つまり、顔トラ対応のVR機器を持ってなくても使い道がある、間口の広いアバターのセットアップとなります。


今回の作業は、アバターに新しい表情のBlendShapeを追加していく作業となります。

通常の表情改変では、AnimationClipを作成,編集する過程で、BlendShapeを微調整することが多いと思います。

今回はAnimationClipではなく、新しいBlendShapeとして新規登録していきます。

どちらの手法でもBlendShapeを調整するには違いないので、表情改変と同じ要領で行えると思います。

では実際に必要なBlendShapeの数はというと、PefectSync準拠の眉毛3種類,視線4種類,目3種類,頬2種類,鼻1種類,顎3種類,口15種類,舌1種類……。

合わせると合計30種類、Left/Rightなどで分かれるものもカウントすれば52個のBlendShapeを新規登録していきます。

30種類で52個ものBlendShapeを設定するの…!?途方もないじゃん!」と感じるかもしれませんが、実際にはシンプルな表情が大半なので難しくありません…。たぶん…。

下記にまとめてあります。

全てのBlendShapeが用意されてなくても動くため、必要な部分だけでも大丈夫です。
(実際、VRChatで通常利用するにはいらないので私はいつも除外してるBlendShapeもあります。)

まずは眉毛を動かすところから始めてみましょう。


作業は以下の工程となります。

1. アバターにFaceTracking用のBlendShapeを追加する
2. アバターに追加したBlendShapeを編集して表情を作る
3. アップロードの下準備してアップロード

基本的にはBlendShapeを追加したらアップロードするだけです。やっていきましょう!

使用するUnityツール


今回は以下のツールを使用します。予め全てインポートしても構いません。

1. アバターに顔トラ用BlendShapeを追加する


早速、FacialTracking用のBlendShapeを設定していきます。

トラブル防止のため、最初は改変済みではなくバニラ状態のアバターから始めるのを推奨します。
また、最初はBlendShapeが多めのアバターで試すのがオススメです。

今回私は、ちゃかぽ先生が作られたブルーアーカイブ バニーアスナに対して設定を行っていきます。

本記事では眉毛だけFacialTrackingに対応させたいと思いますので、実際にどのような表情改変をすればいいのか確認してみましょう。

眉毛は下記3種類だけです。ここではざっくり「今回はこの3種類作るんだ」ぐらいの認識で大丈夫です。

まゆげの内側だけ上げる [browInnerUp]
眉頭だけ移動して、上まぶたもちょっとだけ上に上がっているのが特徴的。
まゆげ全体を下げる [browDown](Left/Right)
眉毛全体がかなり下がり、上まぶたもちょっと下がっているのがわかる。
まゆげの外側だけ上げる [browOuterUp](Left/Right)
眉尻が上に大きく上がり、上まぶたもちょっと上に上がっているのがわかる。

3種類ではありますが、[browDown]と[brownOuterUp]に関してはLeft/Rightも必要ですので、合計5個のBlendShapeを作成することになります。

①アバターに顔トラ用のBlendShapeを一括登録する


実際に作業をやっていきましょう。
まずはフェイシャルトラッキング用のBlendShapeをアバターに一括登録します。

BlendShapeInserterをインポートしてください。
インポートが完了したら、上部メニューのToolsから起動できます。

BlendShapeInseterの画面。
①Target Skinned Mesh Rendererには顔のオブジェクトを入れてください。
②「ARkitBlendShapeList」というシートにアクセスして、その値をコピペしてください。
③最後に一番下のボタンを押します。
無事にフェイシャルトラッキング用のBlendShapeが一括登録されました。

こちらにアクセスして「ARkitBlendShapeList」というシートを画面下部から選択してください。
そこのリストをコピペして実行すると、アバターにBlendShapeが一括登録されます。

次からは、これらBlendShapeに対して編集を行っていきます。

②BlendShapeSimpleEditorでBlendShapeを編集する


次に、登録したBlendShapeを編集していきます。

BlendShapeSimpleEditorをインポートしてください。
インポートが完了したら、上部メニューのToolsから起動します。

BlendShapeSimpleEditorの画面。
①Skinned Mesh Rendererには顔のオブジェクトを入れてください。
②左のリストから編集するBlendShapeを選択します。
③右のスライダーで表情を編集します。
④Applyボタンを押すとBlendShapeの編集が完了します。
②編集したいBLendShapeを選択してから、③右側でスライダーを変更して、④Applyを押す…。
無事に表情が作成された。
作業作業を繰り返して、眉毛3種類,合計5個のBlendShapeを設定しましょう。

ここの段階で、前述の3種類5個の眉毛の表情を作成してください。

少々時間がかかるかと思いますが、前述の見本の眉毛を見返しながら、なるべく同じような表情を目指して一つづつ作っていきましょう。

「BlendShapeの種類が足りなくて見本通りに再現できないんだけど…」という場合は、後述に対策方法を記載しています。

ひとまず未完成のままアップロードして制作の流れを先に体験するのを推奨します。

2. アップロードの準備をする


もうアップロードするだけです…!

ここまでで眉毛の表情の改変が完了したら、早速アップロード…といきたいところですが、1つチェックポイントがあります。

パラメーターです。

①VRC Expression Parametersを95以下にする


これから使用するVRCFT - Jerrry's Templatesはエクスプレッションメニューのパラメーターを161も使用します。

VRChatは256が上限であるため、既存のパラメーターを最低でも95パラメータ以下にする必要があります。

Exメニューのパラメーターに関しては話が長くなるので割愛しますが、減らしてもアバターの使用に問題がないパラメーターを探して減らしましょう。

パラメーターを確認するには…
①アバターを選択
②InspectorからParametersをダブルクリック
95以下ならOKですが、95を超える場合はパラメーターを減らさないといけません。
今回使用するアバターはデフォルトで216もあるので、けっこうキツイ。
エクスプレッションメニューに関する項目なので、名前からなんのボタンと連動してるのか推測可能かと思います。
たぶん不要なそうなパラメーターを見つけたらSyncedのチェックを外せばOK。
チェックを外して問題が発生したらその時またチェックを戻せば良いと思います。

②アバターにVRCFT - Jerrry's Templatesを追加する


パラメーターの確認が完了したら、アバターに顔トラのセットアップを自動的にやってくれるVRCFT - Jerrry's Templatesをインポートします。

また、そのためにはVRCFuryが必要なので、こちらも事前にインポートしましょう。

2つのツールのインポートが完了したら「VRCFury - Face Tracking - ARKit Blendshapes」を探します。

場所はPackages >VRCFT - Jerrry's Templates > Prefabsにあります。
文字検索してもいいでしょう。

VRCFury - Face Tracking - ARKit Blendshapesをみつけたら…
ModularAvatarの服と同様にアバターに入れます。

3. 完成!アップロード!


終わったら早速アップロードしていきましょう。

アップロードの際に、以下の画像の表示が出る場合があります。

Write Defaults関係の表示。もしアバターに問題が生じた場合はAuto-fIxしよう。

VRCFuryのWrite Defaultsに関する表示です。
とりあえずSkipして、もしアバターに問題が生じた場合はAuto-fIxしましょう。

実際にアップロードしてQuetProで眉毛の動作を確認しました。

片目隠れのキャラにしてしまったので、もう片方の眉毛が確認できません😭ですが、眉毛がちゃんと動いているのがわかります。

同じ要領で全てのBlendShapeの設定を行ったのが下記の動画となります。

もしVR機器やVRCFTのフェイシャルトラッキングのセットアップが完了していなかったらそちらを行ってください。

表情アニメーションが干渉する場合


表情アニメーションと干渉したり、コントローラ操作の表情と乗算されてしまう場合などがあります。

その場合はFXのウェイトを消すなどの対応をしてしまうのが手っ取り早いです。

①アバターを選択
②inspectorからFXをダブルクリック
①問題になってそうなレイヤーを見つけたら歯車マークを押す。
②Weightを0にすることで、それに関連したアニメーションが再生されなくなる。


---------------ここからおまけ------------------


BlendShapeの種類を増やす方法


本noteの手法は既存のBlendShapeを流用する方法であるため、既存のBlendShapeの種類が少ないほど設定が難しくなっていきます。

冒頭で紹介したonigasimaさんのNORANEKOSEVEN(2020年発売)は、表情のBlendShapeの総数が74個です。
対して、例えばROKO SHOPさんの墨惺(2024年発売)は311個であり、当然ながらBlendShapeの種類が少ない方が難易度は高くなります。

そこで、BlendShapeの種類を増やす方法をここに紹介します。

といっても、メッシュの頂点を選択して動かす…となるともはやモデラーの作業です。

ここでは、あくまで既存のBlendShapeを高度に編集することで種類を増やす方法となります。

左右分割が必要なBlendShapeの対策方法


BlendShapeによっては、Left/Rightが用意されておらず、左右両方同時にしか動かせないものがあります…。

アバターによってはBlendShapeが左右に分かれていないものもあります。
今回のアバターの場合、eye_lookingDownがL/Rに分かれておらず両目同時にしか動かせません。
このBlendShapeを左右に分割して使いたいと思います。

この場合はBlendShapeEditorを使用すれば分割可能です(Simpleの方ではない)

インポートしたら、上部メニューの"Tool"から開けます。(Toolsではない)

BlendShapeEditorの画面。
①Skinned Mesh Rendererには顔のオブジェクトを入れてください。
②Separateを選択。
③編集したいBlendShapeを選択。
④SmoothRangeは0.01(デフォルトは0.001)。
⑤最後にSeparateボタンを押す。
元々は左右同時に動くBlendShapeだったが、L/Rに分かれた。すごすぎる!

BlendShapeを逆方向に動作させたい時の対策方法


既存のBLendShapeによっては、動かしたい方法とは逆のBlendShapeしか用意されていないことがあります。

今回私が直面したのは上まぶたです。
上方向に上げたいのに、用意されているBlendShapeは100%で下方向に下げるものしかありませんでした。

eye_angry_Lのスライダーを動かしている様子。
100%にするとまぶたが下方向に下がる仕組みです。
しかし、私が欲しいのは上方向に上がるBlendShapeです。

そこで、前述でも利用したBlendShapeEditorのinverse機能で対応できます。

①Skinned Mesh Rendererには顔のオブジェクトを入れてください。
②Blendを選択します。
③元となるBlendShapeを選択します。
④新しく生成されるBlendShapeの名前を入力します。
⑤Inverseボタンを押します。
元々は下方向に下がるBlendShapeでしたが、逆に上方向に上がるBlendShapeが作成されました。便利すぎる!

BlendShapeEditorのさらに詳しい使い方は下記にまとめています。

さらに効率よく作業するために


私の作業フローではありますが一部ご紹介します。

説明の都合で最初から表情を変更していきましたが、私の場合は、本当は最初から表情をいじり出すのではなく、必要なBlendShapeの値を全てメモしていきます。

メモをしながら、必要なBLendShapeには分割やInverseの編集を行い、全てのメモが揃ったらアバターへの実装を開始します。

表情をチェックしてメモする段階では、私はFaceEmoを使用しています。

他のツールなども一通り利用しましたが、編集エディタの使い勝手がとても良く、FaceEmoでBlendShapeの値をメモしていきます。

[browInnerUp]用に作成した表情
私が作成した本作業用のGoogleスプレッドシートです。
1行目はカテゴリ、2~3行目にはBlendShape名が記載されています。
BlendShapeの値を記載するメモ帳の代わりにします。
スプレッドシートには、このようにメモを取っていました。

スプレッドシートは下記に公開しますので、よろしければお使いください。

必ず、パーソナルストレージにコピーしてから利用してください。

必ず、パーソナルストレージにコピーしてから利用してください。

一番時間がかかるのは、やはり表情のメモの段階で、セットアップにはだいたい2時間前後にかかる想定です。

デフォルトのBlendShapeの種類が少ないアバターほど時間がかかる傾向にあります。

既存のBlendShapeの数が非常に少なかったり、出来がどうしても満足いかない場合


本記事の方法は既存の表情BlendShapeを流用する方法であるため、BlendShapeが非常に少ないアバターでは厳しめです。

その場合は、メッシュを指定して完全新規のBlendShapeを作るHaï's FaceTra Shape Creator(有料)をオススメします。

私は使用していませんが、このツールでは顔トラ用のBlendShapeを新規作成する都合上、既存の表情を流用する本記事の方法より極めればクオリティも高いはずです。

以下の記事が参考になります。

ちょっとだけ解説


VRCFTでは、認識するBlendShapeの名前が決まっています。

以下のリンクがその名称一覧です。

認識するBlendShape名があれば、VRCFTはそれを使用して表情を変えています。

今回は上記の命名規則ではなく、Appleが策定したARKit,ParfectSyncの命名規則を使用しています。
理由はBlendShapeの設定項目が少なめに抑えることができ、かつ個人的にはQuestProで十分に動く上に、PerfectSync対応のソフトウェアでも流用できるからです。

PefectSync対応なら、本noteの作り方で作成したアバターをVRMに変換して、iPhoneをカメラに流用してVtuberのような使い方にも流用できます。

ARKit,PerfectSync用BlendShapeがある3Dモデルを作成したら、VRCFT - Jerrry's TemplatesでVRCFT用に変換、VRChatで使用できる形にしてもらいます。これだけでVRChatで使用できるようになります。
ここの処理に関しては非破壊です。

QuestPro,PerfectSync,VRCFTで用いるBlendShapeの名前の違いと設定項目の数の違いは以下のスプレッドシートに乗っています。

VRCFT - Jerrry's Templatesは、PerfectSyncでもQuestProで用いるなら問題ない程度に変換してくれます。

終わりに


最後までお読みいただきありがとうございました。

余談ですが、BlendShapeExporter & ImpoterというBlendShapeだけをやり取りできるツールがあります。

メッシュからBlendShapeの値をだけを抽出するため、同じアバター所有者同士でないと復元できないはずです。

マイナーアバターを使用してるフレンドに本noteで作成したFaceTracking用のBlendShapeSettingを配布する用途にもご活用できると思います。

もしこの記事が役に立ったらいいねボタンで反応してくれると嬉しいです。(Noteに未登録でもできるらしいです。)

いいなと思ったら応援しよう!