ForgeVision Engineer Blog

フォージビジョン エンジニア ブログ

VRoid StudioのVRMモデルを使ってノンコーディングでVTuberのように動かす

こんにちは、VR事業部の石井です。

今回は人型アバターの3Dモデルを無料で簡単に作成できるVRoid Studioで出力したモデルを使って、VTuberバーチャルYouTuber)のように動かします。
VRoid Studioで出力するモデルのフォーマットはVRMという形式で、VRアプリケーション向けの人型アバターの3Dモデルを扱うためのファイルフォーマットです。
また、本記事ではプログラムを一切記述せずに実装します。

使用するソフトウェア

必要なアセット

手順

モデル作成

まずはVRoid Studioでモデルを作成します。
f:id:fv_ishii:20180827124653p:plain

髪の毛はコーポレートカラーであるオレンジ色にしました。
顔、髪、体型の調整ができたらVRMモデルとしてエクスポートします。
f:id:fv_ishii:20180827175215p:plain f:id:fv_ishii:20180827125139p:plain

Unityにアセットとモデルのインポート

Unityを起動し、新しいプロジェクトを作成します。
SteamVR Plugin、Final IK、UniVRMをインポートしてから作成したVRMモデルをインポートします。

VRMモデルのプレハブをシーンに配置して確認します。
このとき以下のようなNormalMap settingsダイアログが出ることがあります。
f:id:fv_ishii:20180827193922p:plain
これは[Fix now]を選んだほうが自然な見た目になります。
試しに両方表示してみると一目瞭然です。
f:id:fv_ishii:20180827195752p:plain

SteamVR PluginとFinal IKの設定

SteamVR>Prefabsフォルダにある[CameraRig]をシーンに配置します。
カメラは[CameraRig]内のカメラを使うので、シーンに元々あるMain Cameraは非アクティブにします。

次に頭と両手にFinal IKで使用するターゲットを追加します。
Create EmptyでGameObjectを3つ生成して以下のように配置します。
f:id:fv_ishii:20180827211752p:plain
配置後に各TargetのTransformの値をリセットしてすべて0にします。

モデルの一番の親(ここではVRoid_techblog)にVRIKコンポーネントを追加します。
その中のSolver>Spline>Head Targetに先程追加した、頭のターゲットをアタッチします。
続けてSolver>Left Arm>Targetに左手のターゲットを、Solver>Right Arm>Targetに右手のターゲットをアタッチしますると以下のようになります。
f:id:fv_ishii:20180827214017p:plain

ここで一度実行してみます。
UnityのPlayボタンを押して、VRHMDを被ってコントローラーを動かすとモデルを動かせたはいいものの上手く行っていません。
手が90度曲がっていたり、目の前に顔と髪のポリゴンが表示されて見にくかったりします。
f:id:fv_ishii:20180827213808p:plain

調整

まずは手を直します。

HTC VIVEの場合
右手のターゲットのY軸Rotationを-90に、左手のターゲットのY軸Rotationを90にします。
また、手の位置がコントローラーの持ち手よりも上にあるので、右手のターゲットと左手のターゲットのZ軸Positionを-0.12にして下げます。
f:id:fv_ishii:20180827224839p:plain

Oculus Riftの場合
右手のターゲットのX軸Rotationを-45、Z軸Rotationを-90に、左手のターゲットのX軸Rotationを-45、Z軸Rotationを90にします。
また、手の位置がコントローラーの持ち手よりも上にあるので、右手のターゲットと左手のターゲットのZ軸Positionを-0.12にして下げます。
f:id:fv_ishii:20180829143841p:plain

さらに、コントローラーの表示を消すために[CameraRig]>Controller (left)>Modelと[CameraRig]>Controller (right)>Modelを非アクティブにします。
f:id:fv_ishii:20180827220945p:plain

次に頭の位置を直します。
頭のターゲットのY軸Positionを-0.07、Z軸Positionを-0.1にします。 これでカメラの後ろに顔が位置するようになり、目の前に顔と髪のポリゴンが表示されなくなります。また、カメラとモデルの目の高さが合います。
f:id:fv_ishii:20180827222724p:plain

HMDを装着している人がモデルの身長と一致していない場合は以下の設定をします。(VRoid Studioのデフォルトのモデルの身長は約158cm)
[CameraRig]のY軸Positionを モデルの身長(m) - HMDを装着している人の身長(m) にします。
例えば、身長179cmの人が158cmのモデルを使う場合は -0.21 を入力します。 こうすることでHMDを装着している人とモデルの目線の高さが合います。
f:id:fv_ishii:20180827220935p:plain

上半身の設定は以上でOKです。
次に、がに股や不自然な歩行を改善するために以下のようにパラメーターを変えます。
f:id:fv_ishii:20180829150220p:plain
このパラメーターは以下の記事を参考にしました。
qiita.com
これで設定が完了したので動かしてみます。
主観だとわかりにくいので前方に置いたカメラの映像を録画しました。
f:id:fv_ishii:20180828121044g:plain
きちんと動いていますね!

まとめ

今回はノンコーディングVRMモデルを動かしてみました。
この状態ではハンドポーズや表情の切り替え機能はないので動画撮影や生放送は厳しいかもしれませんが、自分の動きに合わせてキャラクターが動く体験をしたい方はお試しください。