Blender ウォッチング
VTuberモデルにウインクさせよう! 好きな表情をVRMに設定する仕組みとは?
「Blender」で設定した表情をエクスポートするVRMに反映させる方法
2021年11月12日 11:13
本連載では、無料の高機能3Dモデリングツール「Blender」の使い方や関連情報を幅広くお伝えします。
前回の解説で作成した3Dモデルを実際にVRMに出力して実際に動かしてみた方はお気づきだと思いますが、前々回からサンプルとして使用している慧ちゃんのファイルでは「ウィンク」ができません。
いい機会なので、今回はインポートされたVRMモデルがどうやって表情付けをしているのか、そしてウィンクできるようにする方法を探ってみましょう。
作業ファイルと「Blender」について
作業ファイルには、VTuberモデルの代わりの例としてプロ生ちゃんこと「暮井 慧」をサンプルファイルに使用されていただいています。許諾をいただいたPronama LLC様、VRMモデルを公開されている120様に感謝いたします。
このサンプルファイルは120様作成のVRMモデルを.blendファイル化した物に少し手を入れているため、公式の.blendファイルとは差異があります。
使用条件については下記をご覧ください。
「サンプルキャラクターモデル」のblendファイルをダウンロード
「Blender」のバージョンは前回同様「Blender 2.93LTS」を使用します。
表情付けとシェイプキー
VRMモデルでは顔の表情の切り替えとアニメーションに「Blendshape」という機能を使っています。
これは、VRMアプリで使用されている「Unity」(ゲームなどの作成環境アプリ)の機能の1つで、ボーンを使わずにある形状を変形した状態での頂点の位置を記憶しておき、それを操作できるというものです。
Blenderにも同様の「シェイプキー」という機能があり、VRMインポート時にこの機能で代替するようになっています。
シェイプキーの確認
とまあ、色々書くよりもサンプルファイルで実際に見てもらった方が早いでしょう。
ちなみにサンプルファイルではすでに「キャラクター」のオブジェクトが選択中になっており、画面も下図のようにバストショットになっています。もし皆さんの手持ちのファイルで行う場合は同様に選択とビューの調整をしておいてください。
まず、[プロパティエディター]の下方にある3つの丸が選でつながったアイコンをクリックして[オブジェクトデータプロパティ]にしておき、その中の[▼シェイプキー]パネルを見てください。
一番上の「Basis」は基本となる形状で、残りが各表情のシェイプキーです。横の数字を上げると、その表情に変形します。
マウスホイールまたは横のスクロールバーでリストをスクロールできるので、リストの中央あたりを見てみましょう。すると「ウィンク」という名前のシェイプキーがすでに存在していることがわかります。
先ほどと同じように数字を上げ、ウィンクすることを確認してみてください。「ウィンク」で右目、「ウィンク左」で左目が閉じるはずです。
確認が終わったら、図の[×](シェイプキーをクリア)ボタンで各シェイプキーの数字をリセットしておいてください。
シェイプキーとバインド
このように、すでにウィンク自体のシェイプキーは存在し、Blender内では利用可能なのに、VRMでエクスポートすると利用できなくなるのはなぜでしょうか?
それは、この「ウィンク」(とウィンク左)のシェイプキーがどの表情に対応するかを関連付ける(バインド)情報が欠けているためです。
VRMファイルのBlenderへのインポート時、アドオンが様々な設定を「JSON形式」(汎用のデータ形式)で作成し「テキストデータ」として格納します(※)。その中には、この「シェイプキー」をバインドするデータもあり、ここを修正します。
※「VRM Addon for Blender 1.13.0」にて確認。将来的にこのスクリプトや「UniVRM」のバージョンアップにより、仕様が変更される可能性があります。ご了承ください。
JSONファイルの確認
まず画面左上にある図のアイコンをクリックし、メニューから[テキストエディター]を選択します。
「テキストエディター」のメイン画面のヘッダー部分中央にある書類の形をしたアイコンをクリックし、「blendshape_group.json」を選択します。
直後は何も見えませんが、一番下の行になっているだけですので、マウスホイールで上へスクロールして文章が見えるようにします。
JSONファイルの編集
恐らくウィンクへのバインド設定は「Blink_L」と「Blink_R」で、"binds" の項目にそのデータを入れると思われるのですが、指定方法がわかりません。どうすればいいのやら……。
もう少し上を見てみると、すでに指定されている部分がありました。これを利用すればいけそうです。
まずは「"binds":」の定義部分をコピーし、「Blink_L」と「Blink_R」のそれぞれの「"binds": [],」にペーストします。
そして「"index":」の後ろの文字列をそれぞれ該当する文字列に書き換えます。
この文字列はUnicodeの表記法で、「unicode 変換」などで検索するとヒットするWeb上の変換サービスを使うと簡単に変換できます。試しに上の定義済みの部分「u305fu308cu76ee」をデコードすると「たれ目」になりました。
同様に「Blink_L」は「"u30A6u30A3u30F3u30AFu5DE6"」(ウィンク左)、「Blink_R」は「"u30A6u30A3u30F3u30AF"」(「ウィンク」)に変換して書き換えればOKです。
コピペ後は、いったん.blendファイルを保存後「VRMエクスポート」して確かめてみてください
終わりに
今回はいつもとは少し方向性が変わりましたが、表情付けのシステムとシェイプキーについて知るいい機会になったと思います。あまり機会はないかもしれませんが、同様にBlenderからエクスポートしたVRMモデルの表情がうまく動作しない場合は試してみてください。