はいぬっかメモ

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

クリックで実装!パーフェクトシンク BY HANA Tool

f:id:hinzka:20201012214535p:plain



概要

【2021年11月22日 追記】
HANA_Tool_v3_0_1およびHANA_App_v1_5(VRoid Studio正式版パーフェクトシンク用データ同梱)のリリースにあわせて記述を修正しました。
 
niku:kuniyanさん  によるUnityアセット『HANA Tool』は、共通のメッシュを持つ任意のオブジェクト間でBlendShapeを転送するツールです。
VRoid向けのパーフェクトシンク用データセットが同梱されています。
 
Unity上にVRoidモデルを読み込み、ツールのコピーボタンをクリックするだけで、
 ①「パーフェクトシンクに必要なBlendShape52個+αをコピー」します。
さらに同様の操作で
 ②「パーフェクトシンクに必要なBlendShapeClip52個を追加」すれば、
これだけでパーフェクトシンク対応モデルの完成です。
 ※このあと、モデルにあわせて各Clipパラメータの手動調整が必要となります。
 
    Untiy不要のアプリ版もリリースされています。
    iFacialMocapと連携してリアルタイムに表情調整が可能です。
    (対応するVRoid StudioバージョンはHANA_Toolと異なる場合があります。)
 
 
パーフェクトシンクについての説明はこちら
 
パーフェクトシンクそのものは上記事のとおりiPhoneがないと動作しません
ツールで追加されるシェイプキーは、他のフェイストラッキング環境や表情調整で活用できます。
 
 
 

1. VRMモデル出力

パーフェクトシンク対応させたいモデルファイルを用意します。
 
対象のVRoid StudioバージョンはHANA_Toolのリリースノートでご確認ください。
対象以外のバージョンから出力したVRMでは、コピー後にBlendShapeを動かしたときメッシュが崩れます。
 
また、VRMエクスポートの際、
「透明メッシュを削除する」を選択しないようにしてください。

f:id:hinzka:20201011235323p:plain f:id:hinzka:20211122172715p:plain

髪の毛メッシュのポリゴン削減、マテリアルの削減については選択しても問題ありません。

 

2. BlendShapeのコピー(Unity)

2-1. 準備

PC端末にUnity環境を準備します。
各推奨バージョンはHANA_Tool同梱のドキュメントを参照してください。
HANA_Tool_v3_0_1記載の推奨動作環境:
・Unity2019.4.31f1(64bit)
・UniVRM0.88.0
・Windows10Home
 
Unityをインストールします。
UniVRMをインポートします。
 
VRMモデルファイルをインポートします。
プロジェクト上にVRMファイルをドラッグ&ドロップするだけで自動的にファイルやフォルダが展開されます。
(Assetsフォルダの下に別途フォルダを作成しておき、その中にドラッグ&ドロップすると散らからないのでおすすめです)
 
HANA Toolをインポートします。
VRM向けとそれ以外とで2種類のアセットが同梱されています。
VRM向けのアセットには、Clipのコピーツール(ClipBuilder)が含まれています。

f:id:hinzka:20211122174322p:plain

VRM向けのパッケージをインポートします。
 

2-2. HANA Tool Reader

Scene上にVRMモデルを置きます。

f:id:hinzka:20201012002835p:plain

Scene上にモデルをドラッグ&ドロップします。
左端の▶をクリックすると階層が展開されます。「Face」があることを確認してください。
・右端の > をクリックすると「プレハブモード」になってしまい、ツールが動作しないので注意
・Sceneに置かずに、Projectのアセット上でダブルクリックした場合も「プレハブモード」になってしまいます

 

HANA ToolのメニューからReaderウインドウを開きます。

f:id:hinzka:20201012002151p:plain f:id:hinzka:20211122181004p:plain

 

f:id:hinzka:20201012003148p:plainf:id:hinzka:20211122181712p:plain


モデルの「Face」オブジェクトをReaderウインドウにセットします。

(このときウインドウ最下部の「ReadBlendShapes」ボタンがアクティブになります)

ラジオボタンでデータファイルを選択します。

モデルを出力したVRoidStudioのバージョンに従ってファイルを選択してください。

 

【VRoid Studio β版】

Femaleが女性用、Maleが男性用です。

f:id:hinzka:20201109075357p:plain

 

【VRoid Studio 正式版】

男女で頂点データが共通になりました。どちらのデータからでもコピーができます。

顔の形状によって選んでください。

・顔が丸い、目が丸い、口が小さい⇒女性データ

・顔が縦長、目が横長、口が大きい⇒男性データ

f:id:hinzka:20211122182141p:plain



画面下部にモードの選択項目があります。

ExchangeではなくAddを選択します。

※同梱のデータセットには追加用のBlendShapeしか入っていないため、Exchangeを選択すると標準のBlendShapeが消えてしまいます。

 

①コピー元データの性別がVRMと同じであること、
②Addが選択されている(グレー表示になっている)こと
を確認し、
Read BlendShapesボタンをクリックします。
 
コピーは一瞬で完了します。

f:id:hinzka:20201012003804p:plain

Faceオブジェクトを選択し、Inspectorを見ると、標準のBlendShapeの下にBlendShapeが追加されていることが確認できます。

f:id:hinzka:20201012004330p:plain
 
この段階ではBlendShapeClipが未登録のため、パーフェクトシンク対応アプリでは認識できません。Clipの登録作業が必要です。
 
BlendShapeClipとは
 
 

3. BlendShapeClipのコピー(Unity)

3-1. HANA Tool  ClipBuilder

HANA ToolのClipBuilder機能で対応のClipを登録します。

お手元のVRoidモデルに、初めてパーフェクトシンク対応させる際に必須となります。

Clipに登録される設定値は基本的に100となります。

 

f:id:hinzka:20210117152328p:plainf:id:hinzka:20211122182751p:plain

HANA_ToolのメニューからClipBuilderを選択します。

ClipBuilderウインドウが開きます。

f:id:hinzka:20210120110238p:plain

アバター本体」にHierarchy上のモデルをドラッグ&ドロップすると「ClipBuild」ボタンが有効になります。

f:id:hinzka:20210120110942p:plainf:id:hinzka:20211122183118p:plain

 

「ClipBuild」をクリックするとClipの設定が完了します。

f:id:hinzka:20201012012519p:plain

各Clipの設定値は、データセットを作成した元モデル(千駄ヶ谷渋、HairSampleMaleなど)に対応した値となっています。

コピー先の個々のモデルで最適な数値に調整する必要があります。

 

 

3-2. HANA Tool  CopyShapesAndClips

既存のパーフェクトシンク対応VRMから、BlendShape一式とBlendShapeClipおよびその設定値をほかのモデルにコピーします。
すでにパーフェクトシンクのClip調整が済んだモデルが手元にある状態で、
「独自にくふうした組み合わせの表情付けを他のモデルにコピーしたい」
「同じ設定の表情を、VRoidStudioから出力した衣装違いモデルにコピーしたい」
などの場合におすすめです。
 

f:id:hinzka:20210117153943p:plain

HANA_ToolのメニューからCopyShapesAndClipsを選択します。

CopyShapesAndClipsウインドウが開きます。

f:id:hinzka:20210117154343p:plain

「コピー先アバター」(あたらしいモデル)

「コピー元アバター」(パーフェクトシンク調整済のモデル)

にそれぞれHierarchy上のモデルをドラッグ&ドロップすると「Copy Shapes and Clips」ボタンが有効になります。

f:id:hinzka:20210117154605p:plain


「Copy Shapes and Clips」をクリックするとコピー処理が完了します。
f:id:hinzka:20201012012519p:plain

 
 

4. BlendShapeClipの調整(Unity)

BlendShapeProxyの画面で表情を調整します。

 f:id:hinzka:20210117162258p:plain

 Clipを選択し、BlendShapeタブの▶をクリックすると、モデルが備え持つBlendShapeの一覧が展開されます。

 各BlendShapeのスライダを調整することで、Clipに対応した表情を作成できます。

f:id:hinzka:20210117162325p:plain

Clipを選択すると表情のプレビューが表示されます(最小化されて表示されていない場合は「BlendShapes」と書かれたバーをダブルクリックしてください)。

f:id:hinzka:20210117162346p:plain

プレビュー表示は、マウスドラッグやホイールスクロールで回転・拡大縮小することができます。

 

さらに、『VRMClipEditSupporter』と『iFacialmocap』を使うことで、パーフェクトシンクの表情をリアルタイムでUnity上に表示しながらClipを編集してパラメータ調整することができます。

kuniyan.booth.pm

 

 

 52のBlendShapeClipの想定する形状は、AppleのARKitで規定されています。

個々の動きがGIFアニメーションでわかる一覧資料を作成しました。

各シェイプの役割、および他シェイプと組み合わせたときの動き等について解説しています。

hinzka.hatenablog.com

 

 

表情調整の詳細については以下で解説しています。

hinzka.hatenablog.com

English version

hinzka.hatenablog.com

 

 

 

-----------------------

以下はHANA_Tool旧バージョンでの内容になります 履歴として残します

 

▶EyeBlink(Left・Right)

f:id:hinzka:20210117161331p:plain f:id:hinzka:20210117160510p:plain

追加したシェイプの「eyeBrinkLeft」「eyeBlinkRight」は雛形モデル(千駄ヶ谷渋・HairSampleモデル)のものであるため、正しく目を閉じることができない場合があります(目の大きいモデルだと閉じ切れず、目の小さいモデルだと閉じすぎる)

いったんこれを0に戻します。

f:id:hinzka:20210117161218p:plain f:id:hinzka:20210117161128p:plain

上記のかわりに、ご自分のモデルのデフォルト「EYE_Close_L」「EYE_Close_R」を指定しなおしてください。

f:id:hinzka:20210117160759p:plain f:id:hinzka:20210117160814p:plain

 

また、目を閉じかけるとハイライトが隠れてしまって目がいきいきしなくなってしまうことがあります。

この対策として、瞳とハイライトを縦につぶすシェイプキー「EyeIrisCompress」を用意しています。

これをまばたき時に追加することにより、閉じかけた状態でも瞳のディテールを維持することができます。

f:id:hinzka:20210117174336p:plainf:id:hinzka:20210117174349p:plain

 

 

▶JawOpen


f:id:hinzka:20210117160437p:plain

・口を開いたときの形状を指定します。

ツールで追加したシェイプの「jawOpen」は雛形モデル(千駄ヶ谷渋・HairSampleモデル)のものであるため、モデル自身の表情と異なっています。

元モデルのAの口を指定するのがおすすめです。

f:id:hinzka:20210117155912p:plain

・歯が目立たないよう隠すことができます。

  Teeth_Upper_Up で上の歯を上に上げます。

 Teeeth_Lower_Down で下の歯を下に下げます。プレビューを確認しながらお好みで調整してください。

f:id:hinzka:20210117155934p:plain

 

 ▶MouthPucker

口の横幅を狭め、唇を前に突き出す形状です。口の横幅が閉じないときはこれを強めます。

 強めすぎると口角が破綻するので注意してください。

JawOpenとMouthPuckerを合成したとき、なるべく口がまるくなるように設定します。

(JawOpenで設定したのと同じ数値をいったん設定した状態でPuckerの調整を行い、望ましい結果になったらJawOpenのパラメータを0に戻すという作業です。0に戻すのをわすれないでね) 

 

▶MouthClose

唇を閉じた状態で顎をひらいたとき、口が開かないようにするシェイプキーです。

「口を閉じた状態で顎を開くとき口があいてしまう」場合、MouthCloseが弱すぎる可能性が高いです。

逆に、JawOpenに対してMouthCloseが強すぎると口が埋もれます。

JawOpenと合成したとき、なるべく口がきちんと閉じるように設定します。

 

▶EyeSquint(Left・Right)

笑い目です。

閉じ目と同様、追加したシェイプの「eyeSquintLeft」「eyeSquintRight」は雛形モデル(千駄ヶ谷渋・HairSampleモデル)のJoy目となっています。まずはモデルのJoy目のシェイプキーに設定しなおしてください。

 

まばたきと重なったとき閉じすぎて破綻してしまう場合はこれを弱めます。

さらに、がんばってもうまく笑い目にできない場合、上まぶたより下まぶたを強めに変化させることで、くっきりした笑い目にすることができます。

 

目の表情を左右の上まぶたと下まぶたに分け、Eyelid(まぶた)シェイプキーとして用意しています。

笑い目のほか、眉の動きに付加すると更に豊かな表情を演出できます。ご活用ください。

 

【上まぶた】

f:id:hinzka:20210117165619p:plain

・Eyelid_Upper_Angry :怒り目の上まぶた

・Eyelid_Upper_Close :閉じ目の上まぶた

・Eyelid_Upper_Joy :Joy目の上まぶた

・Eyelid_Upper_Sorrow :悲しみ目の上まぶた

・Eyelid_Upper_Wide :びっくり目の上まぶた

 

【下まぶた】

f:id:hinzka:20210117164221p:plain

・Eyelid_Lower_Smile :fun目の下まぶた

・Eyelid_Lower_Joy :Joy目の下まぶた

・Eyelid_Lower_OutsideUp (Joy目の下まぶたを外側にだけ適用)※ツリ目のモデルでJoy目にしたとき、目尻側の下まぶたが閉じ切れず余ります これを補うためのものです

 

 

眉シリーズ

▶BrowInnerUp

両眉の中央(眉頭)を上げるシェイプキーです。

VRoidでは各モデルの眉頭がどこにあるかわからないので(テクスチャなので…)なんとなく内側を上げています。

BrowDownなど、ほかの眉と加算された表情となります。合成したときの眉の角度を確認してください。

たとえば同時に「EyeLid_Upper_Wide」を入れることで、驚いた目のニュアンスを追加できます。

 


▶BrowDown(Left・Right)

眉全体を下げます。BrowInnerUpなど、他の眉と合成したときの眉の角度を確認してください。

眉の位置を下げると同時に眉尻が下がります。

下がりすぎたり、上がりすぎたりしていた場合、以下のシェイプキーで、眉頭の角度を調整できます。

Brow_Angry(Left・Right)

Brow_Fun(Left・Right ※女性)

Brow_Sorrow(Left・Right ※男性)

 

また、たとえば同時に「EyeLid_Upper_Sorrow」をほんのわずかに入れることで、まぶたが下がるニュアンスを追加できます。入れすぎるとまばたきで破綻してしまいますが、「EyeLid_Upper_Wide」を組み合わせると多少回避できます。

 


▶BrowOuterUp(Left・Right)

眉尻側を上げるシェイプキーです。

VRoidでは各モデルの眉山がどこにあるかわからないので(テクスチャなので…)なんとなく外側を上げています。

また、たとえば同時に「EyeLid_Upper_Angry」+「EyeLid_Upper_Wide」を組み合わせて入れることで、目の外側が吊り上がってみひらくようなニュアンスを追加できます。

 


▶NoseSneer(Left・Right)

鼻にしわをよせるシェイプキーです。VRoidでは鼻は動かさず、眉をしかめる動きとしています。(動かすのにすこしコツがいりますが顔全体を鼻の頭にぎゅっと寄せるイメージです)

以下のシェイプキーで、眉を中央に寄せられます。より鮮やかに眉をしかめることができます。

Brow_Center(Left・Right)

 

また、たとえば同時に「EyeLid_Upper_Angry」「EyeLid_Upper_Sorrow」をほんのわずかに入れることで、にらみつけるニュアンスを追加できます。

「EyeLid_Upper_Wide」を組み合わせるとまばたきでの破綻を多少回避できます。

 

 

 ▶cheekPuff

ほっぺプクーのシェイプキーです。

口を閉じ、ほおを膨らませ、唇と歯のあいだにも空気をいれて顔の下半分をふくらませています。

顔が縦に短いモデルだと顔の輪郭が崩れることがあります。適宜弱めてください。

また、左右別々に利用できるように、左右の頬に分けたシェイプキーも追加しています。こちらは頬のみが膨らみます。cheekPuffに追加して使うとシルエットを調整できます。

 

f:id:hinzka:20210121064011p:plain

f:id:hinzka:20210121064038p:plainf:id:hinzka:20210121064057p:plain

f:id:hinzka:20210121064115p:plain

 

 

▶EyeExtraメッシュ用BlendShape

VRoidデフォルトで含まれるEyeExtraメッシュ

f:id:hinzka:20210124084835g:plain

 これを他の用途に使えるようにコントロール用のBlendShapeを追加しています。

テクスチャを書き換えることで、表情に「頬染め」「怒りマーク」などを追加できます。

f:id:hinzka:20210124085739p:plain

f:id:hinzka:20210124084940p:plain

 

 

 

瞳の貫通をなおす・ギザ歯などをデフォルトにする

上記のBlendShapeProxyとは別に、FaceオブジェクトのInspectorにもBlendShapeの項目があります。

f:id:hinzka:20210117165451p:plain

こちらを編集すると、シーン上のモデルの表情が変化します。

EyeIrisMoveBackで、瞳を顔の奥に移動できます。

f:id:hinzka:20210117165217p:plain

この状態で『Pose Freeze』を有効にしてエクスポートすると、その表情がVRMの初期状態になります。

 

他にも、たとえばギザ歯にしたい場合は ギザ歯のシェイプキーを入れてPozeFreeze出力するとデフォルトでギザ歯のモデルとなります。 

 

 以下参照

vrm.dev

 

調整が終わったらUniVRMメニューからモデルを出力して完成です。