VRChat 向けのアバターをフェイシャルトラッキングで動かすために改変するためのツールを公開しました. このページはその使い方を説明したページです.
ダウンロードは Booth からどうぞ.VRCFacialOSCAvatarTool - AZW: 荏苒社 - BOOTH
このツールは,私が別途公開した AkaneFacialOSC からの OSC データに対応しています.
なお,アバタを配布する際にはこのスクリプトは不要で,上記の AkaneFacialOSC があれば使用できます.
このツールでできること
- アバターのブレンドシェイプやボーンからアニメーションを作成し,フェイシャルトラッキングで動かすためのパラメータやアニメーションの設定をします
- 基本的には AkaneFacialOSC の信号に準拠していますが,このソフトで使用しているキーの名称は原則としてトラッカのライブラリで使われている名称をそのまま利用しているため,他のアプリでもある程度は動作すると思います
- トラッキング中は自動で動作するリップシンクや瞬きを停止し,重複しないようにします
- ハンドサインジェスチャ等はそのままです
- トラッキングのオンオフを切り替えるスイッチを Expression Menu に追加します
注意事項
- 口を動かす場合
- このツールで口の動きを追加する場合,アバタにあらかじめブレンドシェイプが入っていることが必要です
- フェイストラッカに対応したブレンドシェイプが入っていないアバタには基本的に対応していません
- 「口を閉じたまま口角を上げる」「口を閉じたまま口をすぼめる」など,特殊な動きが必要です
- フェイストラッカに対応したブレンドシェイプがない場合でも,顎の動きを「あ」のリップシンクのためのブレンドシェイプを使うなどで代用することが可能な場合がありますが,意図した動きにならなかったり,動きが限定的になることがあります
- いわゆるパーフェクトシンクに対応しているアバタの場合は必要なブレンドシェイプがおおよそそろっています
- 目を動かす場合
- このツールで視線を動かす場合,目にボーンが入っている必要があります
- まばたきの動きはブレンドシェイプで作成されている必要があります
- その他の注意事項
- アバタにあらかじめ追加されているアニメーションによっては,そのアニメーションに上書きされて上手く動作しない場合があります
- この場合,他のアニメーションを調整したり,削除する必要があります
- 基本的に,アバタの制作者を想定したツールということを考慮して使用してください
- VRCExpressionParameter の空き容量を大量に使用します.すでにパラメータが多く入っているアバタの場合,削除する必要があることがあります
- 1 つのパラメータで 8 消費します
- アイトラッキングの場合,両目のデータを統合して消費を減らした場合でも,「水平方向」「垂直方向」「まばたき」の 3 つ必要なため,3 × 8 = 24 のメモリを最低限消費します
- Write Defaults をオフにすることを推奨します
- ツールの設定でオンにすることもできますが,フェイストラッキングのオンオフ切り替え時を中心に意図しない動きが発生することがあります
- アバタにあらかじめ追加されているアニメーションによっては,そのアニメーションに上書きされて上手く動作しない場合があります
口のブレンドシェイプの例.上: 初期状態,中: Mouth_Pout,下: Jaw_Left
使い方
概要(大まかな流れ)
- Unitypackage からこのツールを追加(インポート)します.
- VRCSDK3 があらかじめインポートされていないとエラーが発生します(後から SDK をインポートしても問題ありません)
- [Tools]→[OSC]→[VRCFacialOSCAvatarTool] をクリックして開きます
- 適用するアバタを選択します
- シーンに入っていてアクティブになっているアバタが自動的に選択されています
- 複数のアバタがシーンにある場合は,目的のアバタが選択されていることを確認してください
- 設定の項目で自分の好みに合わせて設定します
- ブレンドシェイプを設定します
- チェックボックスをいれた項目が追加されます
- トラッキングに対応するブレンドシェイプを設定してください
- 目のまばたきもここで設定します
- フェイストラッカがない場合は
一括設定変更
からフェイストラッカ向けの設定をすべてオフにできます - アイトラッカがない場合は
一括設定変更
からアイトラッカ向けの設定をすべてオフにできます
- 視線トラッキングを設定します
- アイボーンの動きを設定するためのアニメーションレイヤを変更したい場合は設定します
- デフォルトでは Additive になっています
- 視線をどのぐらい大きく動かすかをスライダで調整できます(アバタが Humanoid の場合のみ)
- アバタが Humanoid でない場合は座標軸で設定できます
- アイトラッカがない場合は
一括設定変更
からアイトラッカ向けの設定をすべてオフにできます
- アイボーンの動きを設定するためのアニメーションレイヤを変更したい場合は設定します
- 実行します
- 完了のメッセージが表示されたら終わりです.
- アバタをアップロードします
- AkaneFacialOSC を起動して実行します
- Vive Pro Eye や Vive Facial Tracker を利用する場合は,Vive SRanipal Runtime のインストールが必要です.Vive の説明書に従って,公式サイトからダウンロードしてください.
設定方法
1. 準備
アバタの作業を行っている Unity プロジェクトにインポートします.
ファイルは Assets\AZW\FacialOSC\Editor
と Assets\AZW\FacialOSC\Textures
に保存されます.
アンインストールしたり,再インポートする際はこのフォルダを削除してください.
Unity 画面上部の [Tools]→[AZW]]→[VRCFacialOSCAvatarTool] をクリックしてツールを開きます.
VRCFacialOSCAvatarTool の位置
ツールのウィンドウ
必要に応じて言語設定を切り替えてください.コンピュータが日本語の場合は日本語,韓国語の場合は韓国語が表示されます(v1.3.0 時点).それ以外の言語では英語が表示されます. この言語設定は,Expression Menu に登録する際の表記にも反映されます.
シーンの中のアクティブなアバタが自動で選択されます. もし複数のアバタがシーンにある場合は,目的のアバタが正しく選択されていることを確認してください. もしも違うアバタが選択されている場合は,シーンの Hierarchy からドラッグして入れてください.
2. ツールの設定
ツールの設定部分
一番上には,VRCExpressionParameter
の使用容量と空き容量が表示されています.
VRChat の制約により,メモリを 128 以下にする必要があります.
図のように「メモリが足りない」といったエラーが表示されている場合は,不要なパラメータを削除してください.
VRCExpressionParameter の位置VRCExpressionParameter
はアバタに設定されている VRCAvatarDescription
の下の方にある Expression
の Parameter
です.
- アニメーションの ‘Write Defaults’ をオンにする
- 登録するアニメーションの
Write Defaults
をオンにします - オンにした場合,トラッキングのオン・オフを切り替えたときに VRChat による目の動きや口のリップシンクが残って見て目がおかしくなる場合があります
- 基本的にオフの時に上手く動くように設定されていますが,他のアニメーションとの関係で必要な場合にオンにするようにしてください
- 登録するアニメーションの
- 新しいファイルを作成して保存
- このツールがアバタに使用されているアセット(ファイル)を変更する際,直接元のファイルを変更せずに,別のファイルにコピーしてから変更します
- オフになっている場合は上書き保存します.他のアバタが同じファイルを共有しているときに,そのアバタにも影響が及ぶため注意してください
- トラッキング時リップシンク無効化
- 口のトラッキングを有効化しているときに,リップシンクを無効化します
- オフの場合でリップシンクが有効な場合,トラッキングしている際にしゃべると口が余計に開いてしまいます
- リップシンクをオフにする動作は
VRCTrackingControl
で行っています- この設定は実に持続して適用される設定ではなく,アニメーションが切り替わった瞬間にリップシンクの設定も切り替わる,という動き形をします
- つまり,ハンドサインのジェスチャや,別で設定したアニメーション等でここの設定を切り替えているばあい,本ツールによる設定が上書きされてしまいます
- この場合,以下の対策が考えられます
- このツール以外のアニメーションから VRCTrackingControl を削除する
- 後述する「トラッキングを切り替えるためのパラメータ」を使って,トラッキングが有効な場合は VRCTrackingControl の値を切り替えないようにする
- トラッキングの間はそのアニメーションを再生しない,ハンドサインジェスチャをオフにする
- デフォルトのパラメータを追加
- アバタに Expression Parameter が入っていないとき,VRChat デフォルトのパラメータを追加します
- Expression がすでに登録されているアバタには影響しません.
VRCEmote
,VRCFaceBlendH
,VRCFaceBlendV
を追加します.追加で 24 のメモリを消費します
- トラッキングを切り替えるためのパラメータを追加
- トラッキングのオン・オフを切り替えるためのパラメータを VRCExpressionParameter に追加します
- アイトラッキングとフェイストラッキングそれぞれ 1 のメモリを消費します
- パラメータのみの追加です.Expression Menu に追加するには下にある
Expression Menu に追加
を有効にする必要があります
- デフォルトでトラッキングを ON
- 上で作成したパラメータのデフォルト値を ON にします
- ワールドに入った際に自動でトラッキングがオンになります
- ワールドに入った際にアバタが読み込まれるタイミングによっては,アイトラッキングを有効化する設定が上手く動作しない場合があるかもしません
- その場合はこの設定をオフにするか
- VRChat で OSC のトラッキングをオンオフしてください
- この設定は VRCExpressionParameter の
default
の設定を変えることで,後からでも変更可能です
- トラッキング切り替え用メニューを Expression Menu に追加
- Expression Menu にトラッキング切り替え用メニューを追加します
- Expression Menu の一番上の階層(VRCAvatarDestcription に登録されているメニュー)に空きが必要です
- アイトラッキングとフェイストラッキングそれぞれに空きが必要です
VRCExpressionParameter のデフォルト値
3. ブレンドシェイプの設定
登録するブレンドシェイプを設定してきます.
ブレンドシェイプは,アバタの下にあるメッシュのうち,それらしい名前(Facial Tracker のキーと同じ値や,ARKit (いわゆるパーフェクトシンク) 向けの設定のうち一部)があった場合は自動で選択されています. 大量のブレンドシェイプがヒットした場合は,メモリが足りなくなる場合があります. メモリが足りない場合は一括設定変更から「主要な項目以外オフにする」を使うなどして不要な項目をオフにしてください.
Mouth_Smile
と Mouth_Sad_Smile
のように,重複した値を使ってるブレンドシェイプが同時に選択されていると挙動がおかしくなります.
トラッキング信号とブレンドシェイプがどのような動きをするかは,AkaneFacialOSC のドキュメント にすべて記載してあります. また,HTC Vive の SRanipal SDK のドキュメントにも画像付きで記載があるので,併せて参考にしてください.
以下は主要なものの抜粋と,その値に関する私の主観です.
主要なブレンドシェイプの項目について
項目 | 説明 |
---|---|
Eye_Left_Blink , Eye_Right_Blink | 目の瞬きです.アイトラッキング時は必須です.ウインクをしない場合,Eye_Blink でよいです |
Eye_Blink | 両目のまばたきです.Eye_Left_Blink と Eye_Right_Blink を設定しない場合必須です |
Jaw_Left_Right | あごを左右に動かす動きです.あまり使う場面がありませ |
Jaw_Open | 口を開く動きなのでほぼ必須です.vrc.v_ah とほぼ同じ動きです |
Mouth_Pout | 口を閉じたまますぼめる動きです.これがないと話したときに常に「イ」の口になってしまうため不自然です.vrc.v_ou でも代用可能ですが,口の開き方に影響が出る可能性があります |
Mouth_Smile | 口角を上げる動きです.笑顔の再現には必要なのであった方がよいです.Smile 系の表情があれば使用できる可能性があります.口を開けずに口角だけを上に上げているものが適切です.Mouth_Sad_Smile とは同時に設定しないでください |
Mouth_Sad | 口角を下げる動きです.Facial Tracker であまり反応しにくい印象です.Mouth_Sad_Smile とは同時に設定しないでください |
Mouth_Sad_Smile | Mouth_Sad とMouth_Smile をまとめて設定してパラメータのメモリを節約するときに使います |
Mouth_Upper_Inside_Overturn | 上唇を下の歯でかむような動きです.あまりこういう表情はしないと思います. |
Mouth_Lower_Inside_Overturn | 下唇を上の歯でかむような動きです.トゥーン系の見た目ではわかりづらいような気もしますが,出したい表現によっては便利だと思います. |
Cheek_Puff | 頬に息を入れて膨らませる動きです |
Cheek_Suck | 頬を吸ってへこませる動きです |
Mouth_Upper_Up | 口を閉じたまま上唇を上に上げる動きです.通常はあまりかわいい表情には使わないと思います. |
Mouth_Lower_Down | 口を閉じたまま下唇を下に下げる動きです.ウゲーっとした顔には便利です |
Tongue_LongStep1 | 下を前に突き出す動きです.th の発音のときぐらいです.似たような値で,思いっきり舌を出すときの値に Tongue_LongStep2 があります.舌の位置によっては前歯に当たる可能性があります. |
Tongue_Left_Right | 舌の先を左右に動かす動きです.舌を綺麗に動かしたい場合は入れると楽しいです. |
Tongue_Down_Up | 舌の先を上下に動かす動きです.舌を綺麗に動かしたい場合は入れると楽しいです. |
このツールでは,Blendshape 用のアニメーションに BlendTree を使っていません.これは,motion が設定されていない stateや,write defaults の設定等によっては,BlendTree の動きに合わせて他のアニメーションで設定されているパラメータが反応してしまうなど,アバタの設定によっては不安定なことがあったためです.
4. 目のボーンの動きを追加(視線の設定)
視線トラッキングを使用
のチェックボックスを入れると,アイトラッキング用のデータが追加されます.
一番上の選択肢は,ボーンの動きのアニメーションを登録するレイヤーです. デフォルトでは Additive が選択されています. このレイヤーで問題ないと思いますが,アバターの Animator の構成によっては変える必要があるかもしれません. その場合は追加したいレイヤーを指定してください.
なお,VRCAvatarDescripter の Playable Layers の設定に同じ物が二つあるなど,通常と異なる状態になっている場合は上手く動作しないことがあります.
左:本来のレイヤ構成,右:設定がおかしくなっている Playable Layers.ここでは FX が二つあるのがおかしい
左右の目で独立したアイトラッキングを使用
すると,左右でそれぞれ別のデータを送信するため倍のメモリを使用します.最大で 16 メモリだけ余分に使用することになります.
ただし,これを使うと目の輻輳(寄り目)が表現できます.
垂直方向の目の動きをトラッキング
は,アニメ調のアバタの場合目の水平移動の動きの方が目立つので,メモリが足りない場合で許容できる場合はオフにしても良いかもしれません.
水平方向の目の動きをトラッキング
は通常必須です.
アバタが Humanoid の場合,Humanoid の目のボーンとして設定されているものが使われます.Humanoid 以外の場合は目のボーンを指定する必要があります.
Humanoid の場合,目の動きの範囲(角度,どのぐらい大きく動くか)は Humanoid の muscle の設定に準拠します. アバタによっては大きく動きすぎる・動きが小さすぎる等の場合があります. スライダで調整することで倍率を変化させることができます. このほかに,Humanoid の設定を直接変更することでも調整可能です(この場合,ツールアニメーションを作成した後でも調整可能ですが,他のアニメーションの動きにも影響を与えます)
なお,ボーンの動きをアニメーションで表現するには,リップシンク無効化同様 VRCTrackingControl
を使って Eye を Animation に設定する必要があります.
本ツールでもこの設定をしていますが,この設定は他のアニメーションが再生された際に上書きされます.
この設定が上書きされると,視線が動かなくなりデフォルトの動きが上書きしてしまいます.
トラッキングしている間はこの設定を変化させないような Animator の設定を別途するか,VRChat 内でハンドサインのジェスチャを無効化する必要があります.
5. 実行
ツールを実行します. アバタの設定を変更するため,念のため Unity プロジェクトのバックアップを取ってから実行すると安全です.
トラッキング対応のアバタの配布をする場合は,ここまでの作業を終わらせてから配布する必要があります.
以降の作業では本ツールを使用しません.したがって,配布アバタにはこのツールを入れる必要はありません.
6. アップロード
以降の作業は,アバタをアップロードして導入するユーザが全員行う必要があります.
アバタをアップロードします.ここは通常のアバタと同様です.
アップロードをしたら,OSC の機能をオンにします.
Expression Menu から [Expression Menu]→[Options]→[OSC]→[Enabled]
をオンにします.
上書きアップロード(既存のアバタとしてアップロード)した場合,VRChat 側の制約により上書きしたアバタでは VRChat を再起動するまで OSC が動作しません (2022 年 3 月 13 日の時点).この場合,VRChat の再起動が必要です.
また,使用するトラッキングの項目を変更した場合, OSC の機能のリセットが必要です.
Expression Menu から [Expression Menu]→[Options]→[OSC]→[Reset Config]
を実行します.
VRChat の OSC 設定
7. Tracker の準備
Vive のトラッカを利用する場合,(使用する osc のソフトに関係なく)SRanipal Runtime
のインストールが必要です.
ダウンロードは HTC Vive の Developer Resources からダウンロードできます
(https://developer-express.vive.com/resources/vive-sense/eye-and-facial-tracking-sdk/download/).
ここの Latest
(最新版)をインストールしてください.
SRanipal Runtime はこの下側のソフトです
Pimax の Droolon Pi1 を使用する場合,aSee VR Runtime が必要です.Pitools からダウンロードしてください.
8. AkaneFacialOSC
ここからは VRChat でトラッキングを使うたびに毎回行う必要があります.
AkaneFacialOSC (https://booth.pm/ja/items/3686598) を使ってトラッカのデータを OSC で VRChat のアプリケーションに送ります.
このソフトをダウンロードして Zip ファイルを解凍し,FacialOSC.exe
を実行してください.
初回起動時には Windows Defender ファイアウォールの警告が表示されることがあります.
この場合,プライベート ネットワークでのアクセスを許可
してください.
これは,OSC は「ネットワークの通信に使われる機能を用いてデータをやりとりする」という仕組みのためです.
このアプリは PC の外にはデータを送りませんが,このアプリが走っている PC の中で「このアプリ→VRChat のソフト」の間でデータのやりとりをします.(VRChat のソフトから VRChat のサーバへは,アニメーションの変化・切り替えとして扱われるはずです)
AkaneFacialOSC 初回起動時のファイアウォールのメッセージ
起動したら,フェイストラッキングを使用・アイトラッキングを使用をクリックして,トラッキングを開始します.
起動時に アプリがデバイスに変更を加えることを許可しますか
といったメッセージが SRanipal Runtime から出ますので,「はい」を押して許可してください.
表示が 実行中
になるまで待ちます.
送信している値が表示されます.視線データ以外は 0~1
,視線データは -1~1
です.値の変化が不足している場合・大きすぎる場合は 値の調整
から調整することができます.
注意
- 複数回実行した場合は,このツールで前回追加した項目は VRCExpressionParameter 以外上書きされます
- また,設定を外してなくなった項目については削除されます
[FacialOSC]
が頭についている項目が対象です- ツールを使わずにこれらに対して行った変更は上書きされます
- 削除してから登録する,という動作をしています
- パラメータは削除されません.手動で消してください
- OSC のキーに使用するパラメータがすでに存在していた場合,その値をそのまま使うことになります.
- この値が別の用途でアニメーションに使われていたばあい,予期しないアニメーションになることがあります
トラブルシューティング
随時更新します
目が動かない
- 目のボーンの動きが小さい
- Humanoid の設定によっては目の動きが小さく設定されていることがあります
- この場合,ツールのスライダーで値を大きくして調整してください
- OSC のデータが来ていない
- AkaneFacialOSC のデバッグモードを有効にすると,トラッキングの値にかかわらず常にダミーのデータを送信します
[Expression Menu]→[Optoins]→[OSC]→[Debug]
で OSC からの信号を見ることができます(AkaneFacialOSC 側で送信するデータの数を減らした方が見やすいかもしれません)- ここの値が変化していない場合,OSC のデータが受信できていません
[Expression Menu]→[Optoins]→[OSC]→[Enabled]
をオンにして,[Expression Menu]→[Optoins]→[OSC]→[Reset Config]
を実行してみてください
- OSC のデータは来ているが,アニメーションの値が変化していない
- 上書きアップロード(既存のアバタとしてアップロード)した場合,VRChat 側の制約により上書きしたアバタでは VRChat を再起動するまで OSC が動作しません (2022 年 3 月 13 日の時点)
- VRChat を再起動してください
- VRChat の
Eye Look
のアニメーションによって,アイトラッキングの動きが上書きされている (Tracking Control)[Expression Menu]→[Optoins]→[Config]→[Debug]
を表示して,中央上側のTracking Control
のうち,Eye & Eyelid
がAnimation
になっていることを確認します- なっていない場合,一度 Expression Menu からトラッキングをオフにして,再度オンにすると有効になります
- これは,他のアニメーションで Tracking Control の設定が上書きされてしまっていることが原因です
- 特に,ハンドサインのジェスチャで使用されていることが多いです
- アバタの視線の動きが小さい
- アバタのボーンの構成や Humanoid の設定によっては,目の動きがわずかにしか動かないことがあります
- 横には動くけれども上下には動かないように見える場合この可能性があります
- ツールでアニメーションを設定する際に目の動きの数値を大きく設定するか,アバタの Humanoid の Muscle で設定を変えてください
左:Tracking Control が Animation になっており,目のトラッキングと口のトラッキングが優先されている状態.右:目のトラッキングが上書きされ,リップシンクの動きも残ってしまっている状態