見出し画像

Blenderで自社3Dキャラクターを配信アバター化してみた

こんにちは。シフカです。
今回は、前回Blenderで作成した「プリプリまろん」の3Dモデルを昨今流行りのVtuberやVRchatのように人の動きに合わせて動くアバターにできるか挑戦してみたお話です。

シフカのオリジナルキャラクター「プリプリまろん」や3Dモデル作成編について詳しく知りたい方はこちらの記事をどうぞ。


3Dアバターで配信する方法を調査

そもそもどのようなツールやファイルを用意する必要があるのかもサッパリ分からない段階からのスタートでした。また、自身の作業環境がMacのみなのでそれも踏まえて調べる必要がありました。

ある程度調べ進めると、3Dモデルなら「VRM形式」が一般的だということが分かってきました。VRMは「プラットフォーム非依存の3Dアバターファイルフォーマット」で、3Dアバター向け共通規格として既に業界で幅広く採用されているとのこと。

VRMを用意すれば良い事が分かったので早速ですが、今回も引き続きBlenderを使って作業開始です。


BlenderからVRMにエクスポート出来るアドオン

まず初めに、BlenderのデータをVRM用に編集やエクスポート出来るようになる以下のアドオンを用意しました。VRMは専用のアーマチュア構造が必要になるためこのアドオンでVRM用のアーマチュアを1クリックで用意することができます。アーマチュアとはボーンの集合体で骨組みのようなものです。


アーマチュアとメッシュを紐付ける

アドオンから用意したアーマチュア(骨)とメッシュ(身体)が一緒に動くよう紐付ける必要があります。まずはメッシュに重ねながらアーマチュアのボーンのバランスが身体と合うように編集モードで変形させていきます。

バランスが整ったらメッシュ→アーマチュアの順番に選択して、自動ウェイト設定をしながらの親子化を行います。

とりあえずアーマチュアの紐付けが出来たので、一旦VRM対応ソフトに持っていって確認してみることにしました。ソフトはエイベックス・テクノロジーズの『RiBLA Broadcast』を使っています。

…!
とんでもないバケモノになっちゃってました…


ウェイトをしっかり設定しよう

このままでは問題しかないので再びBlenderに戻って調整をしていきたいと思います。先程は取り急ぎ自動ウェイトですぐそのまま持っていったので腕のボーンに紐付いた顔や耳が垂れ下がっていたようです。ビビりました。

腕のボーンのウェイトが顔にかかってしまっている

あくまでも自動判定なので上手くいかない箇所は手動で直していく必要があります。ですが、手動では自然な曲がり具合を割り出して設定するのは途方もなく大変で至難の業です。なので自動ウェイトが上手く行くように事前に調整する方が無難です。

今回は顔が大きく腕に重なっており、腕の影響が顔に行かないようにしたいと思います。方法は至ってシンプルで、まずメッシュに編集モードで入り腕を選択します。選択した腕を別オブジェクトに分離させます。この状態で先程と同様に自動ウェイトを付けると部分的にやり直すことが可能です。その後、分離させたは腕を元のメッシュに結合させれば完了です。

同じ方法で身体のみも調整し直しました。一通りウェイトを修正出来たので再びRiBLAで確認してみます。

バランスが直った!

ここで腕が全然見えない事に気付きました。これは元の状態は肩幅が狭すぎるため、そのまま腕を下ろすと身体の中に隠れてしまっているためでした。アーマチュア編集に戻り肩幅をある程度広げることで解決しました。

腕が見えるようになった!


VRM用のマテリアルを設定しよう

先程の画像では触れずにいましたが、目のマテリアルが意図せず透明になっていました。原因を探ると、目だけメッシュが裏向きになっているため透明に見えていたようです。該当箇所のメッシュの向きを反転して直すことでマテリアルを表示することが出来ました。

また、VRMはBlenderの放射マテリアルは対応していないとのことで、必要に応じてマテリアルを修正する必要があります。基本的にはVRMエクスポートアドオンが用意してくれている「MToon_unversioned」等のノードグループを使用する形になると思います。BlenderのプリンシプルBSDFはそのままでも大丈夫です。

エクスポート時にアラートが出るので内容に従って修正しましょう

用意されたノードで放射を再現する方法が分からなかったため、ベタ塗り一色の画像を用意してテクスチャ画像として繋いで対応しています。もし放射のやり方が分かる人いたら教えてください。一般的なモデルでテクスチャは必須だと思うのでもしかしたらこれで正解なのかもしれませんが…

最初は身体のマテリアルをプリンシプルBSDFで陰影のある感じにしていましたが、ソフトごとにライティングの向きが違ったり、ライティングが動かせないソフトでは印象がかなり変わってしまうので基本的に全て放射マテリアルにしました。今回元の絵がベタ塗りなので問題ないですが、そうでない場合はテクスチャ画像にこだわったりまた別の調整が必要だとは思います。

左:RiBLA Broadcast  右:VCam


シェイプキーでまばたきや口パクを付けよう

身体は出来たのでカメラと連携して動けるようになりました!ですがまだ何か物足りません。喋っても口が動かないので無機物感がすごかったです。VRMでは決められたパターンの口パクや表情をあらかじめ設定出来るので作成していきましょう。

シェイプキーの作り方を簡単に説明すると、オブジェクトデータプロパティのシェイプキーの+から必要な表情を作成していきます。あいうえおの口パクなどを用意出来たら、アドオンのパネルからどのシェイプキーがVRMでの表情なのかを全て紐付けましょう。FBXのエクスポート時などはわざわざ紐付ける工程がないため、自分は最初この設定に気付かずシェイプキーのエクスポートが出来ていませんでした。

また、VRMにはモディファイア効果はエクスポート出来ないので事前にメッシュに適用する必要があります。ところがBlenderの仕様上でシェイプキーを作成してしまっていると適用できないため、忘却野さんのアドオン『Lazy Shapekeys』を使用してモディファイアを適用しました。

さらに今回は、目の輪郭線をスキンモディファイアを使って厚みの無い辺をチューブ状に肉付けしていたのですが、シェイプキーで目を閉じた前後でモディファイア後の頂点の数が違ってしまうので先程のアドオンでも対処不可能なパターンでした。

ここでかなり悩んだのですが、最終的には目の輪郭の辺を一周増やして肌を塗り分けて線として描き、まつ毛だけ立体というハイブリッドな落とし所となりました。

一回試しにソフト上で動かしてみたところ、口の中に謎の白いメッシュが映ってしまっていました。これが何故出てしまうのか特定に少し時間がかかりましたが、あいうえおのシェイプキー単体では綺麗な状態でも、トラッキング側でミックスして表示された場合にはみ出しているのが原因でした。

トラッキング出来るソフト上で見た口のスクショ
UとOの口をミックスすると崩れてしまう図

ですのでBlenderにてシェイプキーを作成する際に、複数の表情をミックスしても破綻がないか確認しながらの調整をおすすめします。自分はこれは結構盲点だったので参考になれば。


VRMをツールに読み込んで完成!

任意のツールにVRMをインポートしたら完成です。ベタ塗りの身体なので分かりづらいですが腕もある程度動かせてます。まばたきと口が動くようになったので生きている感が増しました。また、ツールによってトラッキングの性能が少し違うので重視したい要素で使い分けるとよさそうです。

『RiBLA Broadcast』
まばたきの精度は高めだが、手と口パクの精度が少し低め
『Kalidoface 3D』
後述する方法で使用するツールです
まばたきがほぼ反応しないが、手と口パクの精度が高い


社内の会議にキャラクターで参加してみよう

動くものが完成したので社内のミーティングに3Dアバターで出てみることにしました。社内ではGoogle meetをメインで使用しているのでmeetでの配信方法を調査。OBSで仮想カメラを作成したりするのは大変そうだなと身構えていたのですが、すごく簡単な方法が確立されていました。

使用ツールはこちら
『Screen Capture Virtual Camera』
Google MeetでPCの画面やChromeのタブを仮想カメラとして表示できる様になる拡張機能です。

『Kalidoface 3D』
VRMモデルをブラウザ上でトラッキング出来るウェブアプリです。自作のVRMモデルも使えます。

手順は非常に簡単で、Kalidoface 3Dを起動し、meetのカメラをScreen Capture Virtual CameraにしてKalidoface 3Dのタブを選ぶだけでした!

ミーティングにアバターで出てみた感想ですが、思ったよりヌルっと受け入れられたのと身体と連動してしっかり動けるのでかなり楽しかったです。

今回はまばたきと口パクだけでしたが目線や喜怒哀楽の表情も追加出来たらもっと楽しそうだなと感じました。VRM化については想像よりも手軽にアバター化して配信まですることが出来たので気になっている方は是非試してみてください。

この記事が気に入ったらサポートをしてみませんか?