はいぬっかメモ

キャラクターモデルをVR空間で眺めたい

VRoidでかんたん!パーフェクトシンク(3/3)BlendShape Clip追加

f:id:hinzka:20200821073625p:plain

iPhoneフェイストラッキング向けBlendShape追加 VRoid編 

<概要>Unity上でBlendShapeClipを一括コピーします。
Clipの表情を作りこみ、最終的なVRMに仕上げます。
 
 

f:id:hinzka:20200821230024p:plain


 

本解説で使用しているUnity・Blenderのバージョンは以下の通りです。

Unity:2019.4.0f1

Blender:v2.83.2

 

1.【Unity】BlendShapeClip追加

 
BlendShapeClipとは、VRMで定義されているBlendShapeのプリセットです。
モデル自身の持つBlendShapeを組み合わせて新たな表情を作ることができます。
詳しくはUniVRMのドキュメントを参照してください。

vrm.dev

 
 

BlendShapeClipの設定は、こちらで「iPhone用BlendShapeあり」となっているモデルすべて共通です。男女の区別はありません。

BlendShape文字列が共通であればVRoid以外のモデルに対してもClipのコピーが可能です。

hub.vroid.com

上記からダウンロードできるVRMファイル(前章で使用したBlenderファイルとは別のもの)から、BlendShapeClipとその設定値をコピーします。

BlendShape52点に対応したClip、およびwaidayo(https://github.com/nmchan/waidayo/wiki)に対応したClipが入っています。

f:id:hinzka:20200820211953p:plain

※BlendShape52点のClip名は下記に準じたものです

UnityEngine.XR.ARKit.ARKitBlendShapeLocation

 
前回作成したVRMと、上記の雛形VRMの両方をUnityにインポートします。

f:id:hinzka:20200820055351p:plain

モデルのInspectorの VRM Blend Shape Proxy にある Blend Shape Avatar をダブルクリックします。
または、モデル名+.BlendShapesフォルダにあるBlendShapeファイルを選択します。

f:id:hinzka:20200820060241p:plain

BlendShapeClipの一覧が表示されます。

VRoidには、デフォルトで18個のBlendShapeClipが存在します。

雛形モデルではさらに56個のBlendShapeClipを追加して全74個としています。

 また、Clipの形状を構成するBlendShapeを下部で確認できます。 

 

VRM設定複製ツールをインストールします。
インストールするとVRMのメニューに追加されます。
多機能なツールですが今回は「BlendShapeClipのみ」をコピーします。

f:id:hinzka:20200820060452p:plain

f:id:hinzka:20200820060509p:plain

Source Avatar に雛形のモデル(ここでは千駄ヶ谷渋モデル)、
Destination Avatar にコピー先のモデルをドラッグ&ドロップで登録します。
Vrm Blend Shape以外のチェックをはずしてコピー&ペースト実行します。

f:id:hinzka:20200820061347p:plain

コピー完了するとこのようになります。
 (コピー後のBlendShapeClip名には BlendShape. が自動で付加されるようです)
 

2.【Unity】BlendShapeClip調整

口の開きなどを調整して顔を仕上げます。
 
目の形状には個体差が大きく、雛形のシェイプキーをコピーしたBlendShapeでは正しく目を閉じないことがあります。
雛形のBlendShapeClipでは、まばたき・笑い目は(BlendShapeのコピー元ではなく)モデル本来のシェイプを参照するようにしています。
 
【eyeSquintLeft / eyeSquintRight】
笑いながらまばたきすると目が埋まるなどの場合は、eyeSquintのパラメータを弱めてみてください。
BlendShape名 " Fcl_EYE_Joy_L "
BlendShape名 " Fcl_EYE_Joy_R "

f:id:hinzka:20200820195841g:plain

 

【 jawOpen】

BlendShape名 " jawOpen " には、「あ」のモーフ100%が格納されています。

BlendShape名 " Fcl_MTH_A " のパラメータを追加すると、口をさらに大きく開くことができます。

f:id:hinzka:20200820200347g:plain

 

【mouthRollLower】
唇を噛む(口を引き結ぶ)と口が埋まって消えてしまう場合があります。
BlendShape名 " mouthRollLower " を弱めると口が埋まりにくくなります。
 f:id:hinzka:20200820201234g:plain
 

3.【Unity】マテリアル修正

Blenderを経由するとアウトラインが消えていたりするので修正します。
シーン上にモデルを配置し、Body, Hair, Faceの各オブジェクトのマテリアル設定を確認します。

f:id:hinzka:20200820205240p:plain

元々アウトラインが設定されていたマテリアルでは、アウトライン設定がWorldCoordinates の状態ですが、なぜかそのままでは線が表示されません。
いったん None を選択し、再度 WorldCoordinates に戻すとアウトラインが表示されます。

f:id:hinzka:20200820210209g:plain

アウトラインを表示させたいマテリアルについて、この再選択をしておきます。
 

4.【Unity】VRM出力

Hierarchy上でモデルを選択した状態でVRMエクスポートします。
こちらが最終ファイルになります。おつかれさまでした!
 
 
なお、VRMのBlendShapeClipを使ってiPhoneのフェイストラッキング(52点)をカバーするアプリは現状3つしかありません。
対応モデルが増えるとアプリも増えるかもしれないと期待しています。たのむー
 
 
 

5.VSCode

VRM IMPORTERアドオンにより、Faceオブジェクトがリネームされた影響として、VRoid Mobileで表情が動作しなくなります。


VSCodeを使うとオブジェクト名の編集ができます。

nodes以下のオブジェクト定義で ”Face.baked” を ”Face” に修正すると、VRoid Mobile上で表情が動くようになります(2箇所)。

 

qiita.com

 

 お着換えモデルへの顔移植を別エントリで解説しています。

hinzka.hatenablog.com