らいちのヒミツ基地

公然のひみつ基地です

MENU

【VRChat SDK3.0】ジェスチャー(ハンドサイン)でアバターに表情を付ける方法

VRChatの自作アバターに、ジェスチャー(ハンドサイン)で表情を切り替える設定を行いました。blenderのシェイプキーに切り替えたい表情を作成しておき、Unityでハンドサインにシェイプキーを割り当てる作業になります。手順を解説します。

複数の表情を仕込みましたが、今回は「左手をhands_open(手をパーにした状態)のジェスチャーで頭から汗が出る」という表情で解説します。
VRChat SDK3.0を使用しています。


blenderのシェイプキーを設定

「Basis」で頭の中に小さくした汗を仕込みました。


ここでは「h_ase」のシェイプキーで汗のパーツが巨大化する設定を入れます。


仕込んだ表情パーツも頂点ウエイトは全てHead 1.00にするのを忘れずに。
パーツ含めた頭らへんを選択してSHIFTキー押したまま頂点を二回選択すると頂点ウエイトを数値入力できます。
1.00になってたらCopy。

これを忘れると仕込んだパーツが顔面あたりに浮きます。


テクスチャを作り直しにならないよう、UVマップを作成する前に作りたい表情のパーツを作っておくことをオススメします。

シェイプキーを仕込んだらアーマチュアとメッシュのfbxを書き出します。

これでblender作業は完了につき、保存して終了。

Unityでハンドサインに表情を割り当て

Unity起動します。VRChat SDKは2022/04/21版からPhys Bone(フィズボーン)に正式対応したので、最新版を入れておくと良いです。
Unityのバージョンやインストール方法については下記記事を参照のこと。

www.secret-base.org


リップシンクはVRC Avatar DescriptorのLipSyncからシェイプキーを割り当てるだけで設定できます。

が、ハンドサインに表情を割り当てるのはそう簡単ではありません。

手順は下記になります。

  1. 表情の切替アニメーションを作成する
  2. 表情コントローラーを設定する
  3. 表情コントローラーをアップロード用アバターにセットする
  4. 複製前のアバターをアップロード

一つずつ解説します。

表情の切替アニメーションを作成する

Window>Animation>Animation からAnimationウインドウを開きます。

Createを押してアニメーションのクリップを作成。


二つめの表情以降はCreate New Clip… から表情毎のクリップを作ります。
ここではazu_ase.anim という名前で作成しました。

ここ「▼」を押しても反応せず、文字のところを押さないとダメなことがあるので注意。


デフォルトではプレビューウインドウにUnity Modelのおじさんが表示されます。


Hierarchyからアップロード用のアバターをこのウインドウにドラッグアンドドロップすると自分のアバターになります。




AnimationウインドウのAdd Propertyを押して、body>Skinned Mesh Render から割り当てたい表情のシェイプキーを選びます。

編集したいアバターを選択した状態でAnimationウインドウを編集しないとAdd Propertyを押せません。
プロパティを追加しても即時反映されなかったりとか、Animation編集はクセが強いですがあれこれいじって頑張ってください。


不要なキーフレームは選択して右クリックしてDeleteしておきます。

propertyの値を100にすると、blenderで設定した表情に切り替わることがわかります。


表情の数だけ、アニメーションクリップの作成を繰り返します。
この繰り返しが存外手間がかかるのでサクッと作る方法を後述します。

表情リセット用のクリップを作成しておく

手をidleに戻したときに全ての表情も戻る様に、自作した表情のブレンドシェイプ全てにゼロでキーを打ったクリップも作成しておきます。
ここではクリップ名を「az_idle」としました。

先にこのクリップを作成して、このクリップを複製してそれぞれのpropertyの値を100にしたクリップを作る方が楽です。

表情コントローラーを設定する

まずはハンドサインセットの元をコピーします。

Assets>VRCSDK>Exanples3>Animation>Controllers

にある「vrc_AvatarV3HandsLayer」をoptionキー(Windowsではaltキー)を押しながらAssets直下に移動して複製を作ります。


自分でわかりやすいようにリネームします。ここでは「faceLayer」としました。
ダブルクリックして開き、Left Handを選択するとフロー図が表示されます。


Openを選択して、InspectorのMotionを先ほど作成したazu_aseのアニメーションクリップをセットします。

仕込みたいハンドサインの数だけ、アニメーションクリップのセットを繰り返します。

表情リセット用のレイヤーを追加

Layersパネルの「+」ボタンを押してレイヤーを増やし「faceDefault」などとレイヤー名を書き換え、Left Handの上に移動します。


歯車ボタンを押してWeightを1にします。


表情リセット用のクリップ「az_idle」をレイヤーのフロー図内にドラッグアンドドロップすると、オレンジのステートが表示されます。


ステートを選択してインスペクターからWrite Defaultのチェックを外します。


FXレイヤーのアバターマスクをnoneに

このままだと表情が動くのに手が動かなくなる場合があります。
ここの三箇所のFXレイヤーの歯車マークをクリックして「Mask」のところを「None」に設定しておきます。


以上で表情コントローラの設定は完了です。

表情コントローラーをアップロード用アバターにセットする

InspectorのPlayable Layerを開き、BaseのFXを先ほど作成したfaceLayerに設定します。

複製前のアバターをアップロード

VRChat SDK のウインドウのBuilderを開き、複製前のアバターを選択して「Build & Publish for Android」。
アップロードが済んだら
「Switch Build Target to Windows」を押して
「Build & Publish for Windows」からアップロード。

二回アップロードすることで、PCとQuest両方対応したアバターになります。
PCだけアップロードしてもQuestユーザーからはfallBackが表示されてしまいます。耳ブラシとかホットドッグとか。

まとめ

VRChat SDK3.0での表情設定方法の文献や動画は乏しく、トライアンドエラーを繰り返しつつ何度か挫折しかけましたが、フレンド様達の励ましによりなんとか表情設定ができました。
これからVRChatで自作アバターを作りたい人の参考になれば幸いです。

それではまた…さよならいち・∀・)ノ