FBXデータをイチからVRChat用にセットアップした【アイトラッキング】

VRChat

VRChatのアバターとして3Dモデルを使うにあたって、僕が個人的に絶対に外せないことがあります。

  • リップシンク対応済
  • ハンドサインによる表情アニメーション(カスタムオーバーライド、アニメーションオーバーライド)設定済
  • アイトラッキング対応済
  • ダイナミックボーン設定済

しかしモデルデータをVRC仕様にこの4点をセットアップするのってかなり大変なんですね。今回のことで思い知りました。

今回作業した環境は以下になります。

  • Blender 2.79a
  • Cats Blender Plugin 0.15.0
  • Unity 2017.4.28f1

ことの発端

オリジナル3Dモデル るるか - d00000000t - BOOTH

え?!?! この子かわいすぎひん!?

VRChat向けアバターとして売り出されているモデルは数多くありますが、この「るるか」はサンプル画像だけでなにか違うオーラを感じました。しかも3,000円だしお安い。

ただ、購入前から気になっていたことがありまして、だいたいのモデルデータに記載されている「アイトラッキング対応」「リップシンク対応」とかの記載がなく、その上どんな表情が使えるかも記載されていなかったんですよね。

うーん、これはどうしたものか……。ちょっと嫌な予感がしたわけです。

結局1ヶ月ほど悩んだ挙げ句購入してみました。

インポートしてすぐ感じたことなんですけど、これがなんと影の表現とかがほんと素晴らしいんですよ。普通のテクスチャはもちろん、ShadeMap(影のできかたを指定するテクスチャ)、NormalMap(細かい凹凸を表現するのに使う特殊テクスチャ) MatCap(光の影響関係なしに一部に陰影を表現するテクスチャ) 、 にくわえ、HighColorテクスチャまで作り込まれていて、Unity上でDirectional Lightを動かしてみるだけでほんとものすごかった。

ここまでシェーダーを使いこなしているモデルは初めて見ました。

セットアップに必要な要素を洗い出す

VRC_Abatar Discriptor が、しかし嫌な予感は残念ながら的中し、以下の要素が存在していなかった。

個人的に必要不可欠なのに足りていない要素一覧

Animatiotor override Controllerは登録されておらず、ハンドサインはデフォルトになっていることがわかります。 Lip Sync も最低限のあいうえおしかない。

  • 表情アニメーション
  • アイトラッキング
  • (リップシンク専用の口のシェイプキー)

なぜリップシンク専用の口のシェイプキーが必要なのかは後述します。

BlenderでモデルデータをVRC仕様にする

VRChat仕様のモデルへと作り変えていきます。

Blenderの日本語化

Blenderをダウンロード、ダブルクリックして開いたら、まずはわかりやすいように日本語化をおこないます。

File -> User Preferences... File -> User Preferences… を選択

  1. Systemタブを選択
  2. 右下にあるInternatinal Fontsにチェック
  3. DefaultからLanguageを日本語に変更
  4. IntarfaceとTooltipsをクリック

最終的にこんな感じになります。日本語化が確認できたら最後に左下にある「ユーザー設定の保存」をクリックしてください。

FBXファイルのインポート

ファイル -> インポート -> でFBX(.fbx)を選択

FBXファイルをインポート 読みこみたいモデルを選択します。

また、Blenderに初めて触る人は気をつけなければならないことがありまして、Unityと同じ感覚で操作してはいけません。右クリックを押しながら行う操作はモデルの位置などに影響が出てしまうため、基本的にプレビュー上では右クリックは押さないようにしましょう。

視点移動はこんな感じ。

  • マウスホイール → ズームイン・アウト
  • 中クリックしながらスクロール → 画面回転
  • shiftキー + 中クリックしながらスクロール → 画面縦横移動

CubeとCamera,Lampを削除 初期状態ではCubeとLamp、Cameraが用意されています。これらは今回不要になるので、削除します。(しないとモデルにくっついてくる)

CubeとCamera,Lampを削除 上記画像の文字の上で右クリックするとメニューが開き、削除を選択することで削除できます。

ボーン名やメッシュ名をVRChatにのっとった名前に変更

VRChatでアイトラッキングをするためには、以下の条件を満たす必要があります。

  • モデルのルートから目のボーンまでがVRChat側が指定しているボーン名になっていること
  • 顔のメッシュ名が「Body」であること

VRChat側でしているボーン順序というのは、ルートからみて

Armature -> Hips -> Spine -> Chest -> Neck -> Head

という順序です。

ボーンをVRChat仕様にのっとった名前へ変更する たとえばるるかちゃんの場合、腰のボーンがHipsではなくWaistという名前になっているため、ダブルクリックしてHipsに変更します。他にもVRChat仕様になっていないボーンがあれば確認して修正してください。

(画像でBonesとなっているところはArmatureとなっている必要があるのですが、今後の操作で勝手に変わるので無視します)

次に、顔のメッシュを「Body」という名前に変更します。

顔のメッシュ名をBodyに変更 るるかちゃんの場合、体のメッシュが「Body」となっており、このままだとBodyに変更することができないので、先に体のメッシュの名前を「BodyAll」というテキトーな名前に変えてから顔のメッシュ名を「Body」に変更しました。

Cats Blender Pluginを使ってアイトラッキングの設定をおこなう

アイトラッキングのセットアップをするためには、BlenderにCats Blender Pluginを導入する必要があります。

まず以下のサイトからCats Blender Pluginをダウンロードします。

Releases · GiveMeAllYourCats/cats-blender-plugin Cats Blender Pluginをダウンロード

cats-blender-plugin-x-xx-x.zip をクリックしてダウンロードします。解凍はしなくてよいです。

ファイル -> ユーザー設定 を開きます。

ファイルからアドオンをインストール アドオンタブを選択、下にある「ファイルからアドオンをインストール…」をクリック

先ほどダウンロードしたzipファイルを選択します。

その後に出る画面で左上の検索欄に「Cats Blender Plugin」を入力してチェックマークを入れます。

すると左側のサイドバーにCATSという項目が追加されますので、それを開きます。Eye Trackingという項目があるので、クリックします。

アイトラッキングに使うシェイプを設定 メッシュが本文となってしまっていますが、これは「Body」のことです。 ここまで手順通り進めてきている方は本文で大丈夫。

気になる場合は日本語化した際に選択した「インターフェイス」をクリックしてみてください。英語に戻ります。

Eye Tracking の設定にて、該当のシェイプキーをプルダウンから選択します。

項目選ぶシェイプキー
Blink Left左目閉じ
Blink Right右目閉じ
Lowerlid Lieft左ジト目っぽいもの
Lowerlid Right右ジト目っぽいもの

Lowerlid は顔が下を向いたときに使用されます。いわゆる上目遣いみたいな状態。本来はそれ用のシェイプキーがあったほうがいいのですが、今回はジト目で妥協します。

設定を済ませたら「Create Eye Tracking」をクリック。

アイトラッキング用のシェイプキー

Body のメッシュを選択、逆三角形みたいなアイコンをクリックするとシェイプキーが確認できます。 ここにこの順番通りにシェイプキーが並んでいればアイトラッキングの設定が済んでいます。 アイトラッキングはこのシェイプの「順番」がとても重要です。 実はアイトラッキングを設定した瞬間、シェイプキーの順序がめちゃくちゃになってしまうのですが、整理するときは上5つの順序だけは変えないようにしましょう。

ユーザのトランスフォームをクリア(全て) モードを「ポーズモード」に変更し、Armatureを選んだ状態でWキーを押してスペシャルメニューの「ユーザートランスフォームをクリア(全て)」をクリックします。

回転と拡縮を適用 オブジェクトモードに戻して、Ctrl+Aキーを押して現れるメニューで「回転と拡縮」をクリック。

編集モードに変更する このあと、モードを「編集モード」に変更し、目のボーンのロール(回転)を0にします。

目ボーンのロールを0にする Armature から ボーンをたどってLeftEye、RightEye を選択後、骨の小さいアイコンをクリックして、トランスフォームの項目のロールを0に編集します。

アイトラッキングはゼロを基準に動くので、これができていないとアイトラッキングが動作しても白目になったりします。

ちなみに Create Eye Tracking を押したタイミングで「Bones」の名前がArmatureに変わり、 LeftEye や RightEye というボーンが自動的に生成されました。

VRC向けのリップシンク専用口シェイプキーを作る

表情アニメーションだけならUnity上で完結するのですが、実は「リップシンクで使われるはずのシェイプキーを他のアニメーションに使ってしまうとリップシンクが動作しなくなる」という問題があります。

つまり表情のアニメーションオーバーライドに口の割り当てをするとリップシンクが動かなくなってしまい、どちらかを諦める必要が出てきます。

そんなことにならないようにリップシンク専用のシェイプキーを作っていきます。

シェイプキーを追加 一旦モードをオブジェクトモードに戻し、Bodyのメッシュを選択、シェイプキーの項目でプラスマークをクリックします。

するとシェイプキーが新たに追加されるのでリップシンク用の名前に変更します。今回は「vrc.v_sil」にします。 この状態では「vrc.v_sil」には何も設定されていません。

るるかちゃんには「あいうえお」のシェイプキーが存在していたので、リップシンクの作成にはコピーを駆使します。

再度編集モードにして、Aキーを押してBodyメッシュを選択状態にします。

シェイプキーの形からブレンド Wキーを押し、スペシャルメニューを表示します。メニュー内にある「任意のシェイプキーを選択部に合成」をクリックします。

左下にこのようなメニューが表示されるので、右側の シェイプキーの「vrc.v_sil」が選択されていることを確認 し、プルダウンからBasisを選択して 「追加」のチェックを外します。
すると「vrc.v_sil」に「Basisの0.99」がコピーされます。

(silは無表情のリップシンクなので本来basisと同じなのですが、Unity上で正しく認識されないため、少しだけ変えています。)

今度は同様にオブジェクトモードで「vrc.v_aa」を追加し、「あ」の音に該当する口シェイプキーをコピーします。

同じ形で問題ないのでブレンドは1にしました。

この要領でVRC向けのリップシンクを追加していきます。リップシンクを追加するにあたって、僕は以下のサイトを参考にしました。

リップシンク – yagura Lab.

VRC用のシェイプキー一覧 完成。

FBXとしてエクスポート

最後にアイトラッキングとリップシンクをセットアップしたモデルデータをFBXファイルとして出力します。

FBXファイルを出力します ファイル -> エクスポートからFBX(.fbx)を選択します。

FBXをエクスポート エクスポートしたい場所を開き、FBXをエクスポートをクリックすることでエクスポートが完了します。

エクスポートしたモデルデータをVRChat向けにセットアップする

すでにセットアップ済みのものを購入していた場合でも、一度Blenderを通すとダイナミックボーンやRigのマッピングなどの設定が外れてしまいますので、設定し直していきます。

HumanoidとしてRigをマッピング

FBXのInspectorからRigを選択し、Configureをクリックします。

HumanoidでMapping 基本的に自動的に登録してくれます。なのでたいていは何もせずにApply -> Doneで済むのですが、僕の場合Hipsが登録されていなかったり、あごに髪の毛が登録されていたりしたので手動で修正しApply -> Doneしました。

その後、性別を設定したりview positionやリップシンクを登録していってこんな感じに。 見た目は何も変わっていませんがとても長かった気がします……。

ちなみに、アイトラッキングはview positionを参考に動きますので、「なんか下向きがちだなぁ」と感じたらview positionをほんの少しだけ上に持っていったりするといいです。

表情アニメーションオーバーライドによるまばたき干渉をふせぐ

表情アニメーションのセットアップはもういろいろなところで解説されているので割愛します。

NoBlinkSetter V2 - 元怒の扉 - BOOTH

表情アニメーションとまばたきアニメーションを設定し終わったら、NoBlinkSetterをダウンロード・インポートします。

NoBlinkSetter すると上部のVRC SDKなどが並んでいるメニューにVRCDeveroperToolが追加されますので、そこからNoBlinkSetterを選択。

画像のような小窓が表示されるので、Avatarにまばたきアニメーションと表情のアニメーションオーバーライド設定済みのアバターをアタッチ、EyeTracking対応アバターにチェックを入れて「Set NoBlink」のボタンを押します。

NoBlinkSetterで生成されたアバター アバター名_blink resetというアバターができあがるので、これをアップロードすれば完了です。お疲れさまでした。

ジト目とFingerPointを使った表情 ジト目とFingerPointを使った表情 アイトラッキングも動いてます アイトラッキングも動いてます

広告

関連記事

新着記事

広告

タームスラッグからタームIDを取得したい
ログインが必要なページからjsoupでスクレイピングする方法【Java】