はいぬっかメモ

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

パーフェクトシンクであそぼう!

f:id:hinzka:20200826210703p:plain

<概要>

iPhoneのデプスカメラを使ったフェイストラッキングで、モデルの顔がリアルタイムにいっぱい動く
このしくみに対応したアプリでVRMモデルを動かしてあそんでみよう
 

1.パーフェクトシンクとは

iOSのARKitで取得できるBlendShapeLocation全52点のパラメータに対して、VRMの同名BlendShapeClipを52個用意し、BlendShape単体ではなくClipを用いてVRMモデルの表情を制御する実装です。(noppeさん命名
 
ARKitのリサーチ中、VRMの仕様と相性がよいことに気づき、noppeさんのアプリ『vear』にBlendShapeClipを参照するモードを実装していただきました
これをきっかけに、現在では VMagicMirrorやLuppet、バーチャルモーションキャプチャーなど、さまざまな環境で利用できるようになっています。
 
BlendShapeやClipの数が激増してしまうデメリットもあり、本来のClipが意図した運用とは異なるのですが、今のところ許容していただけているようです。
 
ARKitとは、Appleによる開発キットの名称で、iOS向けのAR機能を提供するものです。
iPhoneiPadを使った高度な表情トラッキングで、アニ文字のように、豊かで自然な表情アニメーションを実現します。

f:id:hinzka:20200815094421g:plain

アニ文字(iPhoneアバター機能)

これをVRMモデルで手軽に使えるようにしたしくみが「パーフェクトシンク」です。

モデルのBlendShapeに手を加えることなく、パラメータ編集のみで表情を調整できるのが特徴です。

 

 

 

 

 

 

■対応機種リスト 2021年1月現在

 

FaceID対応端末で動作します。

また、iOS14以降で対応デバイスが追加されました(A12 Bionicチップ搭載機種)

 

 

2.パーフェクトシンク対応モデル

2-1.要件

1)ARKitで定義された52個のBlendShapeを全部または一部備えていること
 アプリはBlendShapeClipを参照して動作するため、BlendShape自体は52個全部そろっていなくてもOKです

f:id:hinzka:20200816105223p:plain

各シェイプキーはBlender等の3Dモデリングツールで作成する必要があります。

形状について別エントリにてまとめています。

hinzka.hatenablog.com

 
2)上記に対応するVRMBlendShapeClipを備えていること
 VRMのしくみで動作させるため、シェイプキーを同名のClipに登録します。
Clipの命名ルールはUnityのEnum ARKitBlendShapeLocationに準じています(Clip名が異なると動作しません)。
 
 Clip52個は、Unity用のツールでまとめて作成できます(HANA_ToolのClipBuilder)
コピーツールを利用してClipを既存のモデルからコピーすることもできます(UniVRMExtensionsのCopyVRMSettings)
 
 

2-2.サンプルモデル

VRoidのデフォルトキャラクターを改変し、パーフェクトシンクに対応させたVRMモデルです。自由に利用できるサンプルとしてVRoid hubにて配布しています。

ハート♡をつけておくと、VRoid hub連携によりvear等ですぐに動かすことができます。

2-3.雛形からのBlendShapeコピー 

モデルをパーフェクトシンクに対応させるためには、必要なBlendShapeを新たに作成しなければなりません。
 
同一のメッシュを持つモデルに対しては、一度BlendShapeデータを作成しておけばコピー流用が可能です。
 
通常「同一キャラクターのお着替えモデル」などがこれにあたります。
 
VRoidモデルは、BlendShapeを持つFaceオブジェクトのメッシュが共通です。
このため、VRoidStudioのバージョンが同一であれば、どのモデルに対しても表情のコピーができます。
2-2で示したサンプルモデルはコピー元として利用可能です。
 

f:id:hinzka:20200821070645p:plain

f:id:hinzka:20200815144711p:plain

 
BlendShapeコピーツール 
FaceForge

FaceForge について (3tene使い方サイト)

3tene PRO V2に同梱されているコピーツールです。
 (3tene PROと3tene PRO V2ではライセンスが異なるので注意)
BlendShapeとBlendShapeClipおよび設定値をまるごと移し替えます。
コピー元VRMモデルが必要です。コピー元とコピー先のVRMでメッシュが共通である必要があります。
コピー先VRMモデルに含まれていたBlendShapeとClip設定は上書きされます。
 
 
 
HANA_Tool
BlendShapeのデータを抽出・適用できるツールです。
おまけとして、VRoid用のパーフェクトシンク対応BlendShapeデータが同梱されています。
マウスドラッグとクリックぽちぽちで、必要なBlendShapeを追加し、お手持ちのモデルをパーフェクトシンク対応にできます。
コピー先VRMモデルの元の表情も保持されます。
 
BlenderとUnityで手動コピー 
以下はツールを使わずにUnityとBlenderでシェイプキー転送する手順です(現状おすすめではないですが、ログとして)

VRoidでかんたん!パーフェクトシンク(2/3) 

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

 

 
Blenderで編集済のモデルへのBlendShapeコピーについて
お手元のモデルをパーフェクトシンクに対応させたあと、
VRoidStudioから同キャラクターのお着換えモデルを出力したときは、その都度ツールで顔をコピーすることになります。
 

しかし、「VRoid Studioから出力後、アクセサリー追加などBlender・Unityで編集済」という場合、メッシュの頂点オーダーが変わってしまうため、BlendShapeのコピーに失敗してしまいます(動かすと形状が崩れる)。

HANA_Toolに含まれるBuildCopy機能を使うと、メッシュの頂点オーダーがずれた場合でも力づく紐づけつつコピーすることができます。Blenderでの作業を経由する方には必須ともいえる強力なツールです。

 

 

 

3.パーフェクトシンク対応アプリ

VRMのしくみで動くアプリのリストです

対応アプリ増えてくれると嬉しいです どうぞよろしくよろしくおねがいします!

3-1.iOS単体アプリ

VRoid hubで配布中のサンプルモデル(前述)に♡をつけておくと、VRoid hub連携ですぐに利用できます。

 vear

vear - バーチャルライブ配信アプリ

vear - バーチャルライブ配信アプリ

  • Tomoya Hirano
  • ユーティリティ
  • 無料

apps.apple.com

 ※プレミアムモード機能

 

 Emosign

Emosign

Emosign

  • akihiro ueyama
  • エンターテインメント
  • 無料

apps.apple.com

 

 

 waidayo

github.com

 

3-2.PC併用アプリ

 VMagicMirror

malaybaku.github.io

iFacialMocapiOSアプリ)と連携した外部トラッキング機能(Ex.Tracker機能)

iFacialMocap on the App Store

 

 waidayo

github.com

 

 3tene PRO V2

3tene.com

 フェイストラッキング アプリ 3teneFTと連携した高精細フェーストラッキング

3teneFT on the App Store


 Luppetluppet.appspot.com

iFacialMocapiOSアプリ)と連携した外部トラッキング機能

iFacialMocap on the App Store

 

 VirtualMotionCapture

vmc.info

 全身モーションキャプチャーツール ※VMCプロトコルによるWaidayo連携機能

 

 Oredayo4V

github.com

 VMCプロトコルによるWaidayo連携アプリ Mac版あり

 

 VSeeFace

www.vseeface.icu

 ※VMCプロトコルによるWaidayo連携機能

PerfectSync facial adjustment TIPS

Japanese version

 

This section describes how to adjust the facial expressions of Perfect Sync, focusing on the facial expression data for VRoid included in HANA_Toolv2.9.7a and HANA_APP_v1_1.


HANA_Tool (Unity asset version)

kuniyan.booth.pm

HANA_APP_v1_1 (Windows application version)

booth.pm

HANA_Toolv2.9.7a and HANA_APP_v1_1 are applicable to the VRM models output from VRoid Studio v0.12.1 and v0.13.1.
* Versions prior to VRoidStudio v0.11.3 are not supported because the official default shape keys are less than the latest versions and necessary adjustments such as eye penetration measures and teeth reduction cannot be made.

 

The first letter in upper case refers to the BlendShapeClip in VRM, and the second letter in lower case refers to the BlendShape key to be registered in the Clip.


 

1. eyebrows

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

Eyebrows are too low and hang over the eyes

Clip to fix: BrowDownLeft / BrowDownRight
Weaken the browDown shape key (the shape key that lowers the eyebrows).

Lumpy eyebrows are too strong and hang over the eyes

Clip to correct: NoseSneerLeft / NoseSneerRight
Weaken the noseSneerLeft/noseSneerRight (shape keys that frown the nose and eyebrows).

Eyebrows are too raised and hidden by the bangs

Clip to fix: BrowInnerUp
Weaken the browInnerUp shape key (the shape key that raises the center of the eyebrows).

When I smile, my eyebrows become a troubled shape

Clip to fix: BrowInnerUp
BrowDownLeft / BrowDownRight
Weaken browInnerUp and browDown at the same time.


2. eyes

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

Clip to fix: EyeBlinkLeft/EyeBlinkRight
Make sure that the eyeBlinkLeft (left eye closure) / eyeBlinkRight (right eye closure) parameters have not been registered for each Clip.
If they are registered, set them to 0% and register the VRoid default shape keys "EYE_Close_L" and "EYE_Close_R" instead.
If you use ClipBuilder of HANA_Tool, the VRoid default shapekeys will be registered automatically.
The eyeBlinkLeft/eyeBlinkRight (the shape key of the closed eye) added by HANA_Tool is the shape of the template model, Sendagaya Shibu/HairSampleMale.

The eye mesh penetrates the eyelids

Clip to be modified: EyeBlinkLeft/EyeBlinkRight
Add a small amount of the VRoid default "EYE_Iris_Hide" (a shape key that lowers the pupil mesh to the back while shrinking it) to each of the left and right eyes (about 3-5% each).
 In Perfect Sync, the eyeball continues to rotate even when the eyes are closed, which causes frequent penetration for models with large eyes.
 We counteract this by lowering the eyeball by blinking. Be careful not to do too much or you will end up with white eyes.

f:id:hinzka:20210506073139g:plain


Unnatural smiling eyes

Clip to fix: EyeSquintLeft/EyeSquintRight
Weaken the eyeSquint (laughing eye shape key) parameter accordingly, and adjust the arch of the lower eyelid to a natural shape.
At this point, if the entire eye looks unnatural, as if it has been shifted upward
Add eyeDown_Left/eyeDown_Right (shape key to lower the whole eye: HANA_Tool_v2_9_7a included) to balance it out.
It would be a good idea to make sure that the appearance of the iris in the smiling eye is balanced to the same degree as the open eye.

 f:id:hinzka:20210505233804p:plainf:id:hinzka:20210505233818p:plain

Unnatural eye movement when I move my gaze

Clips to fix: EyeLookUpLeft/EyeLookUpRight
     EyeLookDownLeft/EyeLookDownRight
     EyeLookInLeft/EyeLookInRight
     EyeLookOutLeft/EyeLookOutRight
When the eye moves up, down, left, or right, the shape of the eye also changes slightly to give it expression. Depending on the model, this movement may be too large and uncomfortable, and can be improved by reducing each parameter in the clip.

 

Eyes are squinted when eyebrows are moved

Clip to fix: BrowDownLeft/BrowDownRight
     NoseSneerLeft / NoseSneerRight
When the eyebrows are moved using browDownLeft/browDownRight (shape keys for lowering the eyebrows) and noseSneerLeft/noseSneerRight (shape keys for frowning at the nose and eyebrows), the shape of the upper eyelids also changes slightly to add expression.
For some models, this movement may be too much and cause the eyes to break up, which can be avoided by reducing the parameters in the Clip.


Surprise eyes are too exaggerated

Clip to fix: EyeWideLeft/EyeWideRight
     BrowInnerUp
Weaken eyeWideLeft/eyeWideRight (eye widening shape key).
When the eyebrows are raised using browInnerUp (a shape key that raises the center of the eyebrows), the shape of the upper eyelids is also slightly changed to add expression. This can also be weakened as needed. 3.


3. cheeks

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

How to reshape cheek pukes

Clip to fix: CheekPuff
Adjust the parameters of cheekPuff (the shape key that puffs up the cheeks) to make it moderately full.
If the mouth is too closed and the texture is buried, add a mouth with the VRoid default shape key "MTH_A" to make the buried mouth appear.
In addition, you can make the lips pointy by adding SharpenLips (a shape key to make the mouth pointy: HANA_Tool_v2_9_7a included).
Or, you can add the VRoid default shape key "MTH_Angry" to add an angry expression.
It is also cute to move the mouth up a little with the VRoid default shape key "MTH_Up". 

 

4. mouth

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

The mouth is vertical.

Clip to fix: MouthPucker
Weaken the parameter of mouthPucker (a shape key that narrows the width of the mouth).
First, check the face in front of you with the mouth open. Adjust the shape of the lips so that they are nicely rounded when they are pursed.
Next, check the profile with the mouth closed, and add SharpenLips (a shapekey to make the mouth pointy: included with HANA_Tool_v2_9_7a) to Clip to make a chew mouth.


The closed mouth will be buried

Clip to fix: MouthClose
  When you add JawOpen (Clip that opens the mouth) and MouthClose (Clip that closes the mouth), you need to adjust them so that the mouth is just closed.
In the MouthClose Clip, once the mouthClose shape key is added, add 100% of the jawOpen shape key at the same time.
Then gradually reduce the MouthClose shape key until the mouth is just closed.
Then return the jawOpen shape key to 0.

The shape of the open mouth is different from the model's original expression.
Clip to be modified: JawOpen
Set the parameter of the shape key jawOpen, which is registered by default, to 0%.
Instead, set the parameter of the VRoid shape key "MTH_A" to 100%.
  At this time, use "MTH_A" as the shape key to adjust MouthClose.

 

To adjust the shape of the mouth when smiling

Clip to be modified: CheekSquintLeft/CheekSquintRight
                                 MouthSmileLeft/MouthSmileRight
 The corners of the mouth of Smile are relatively round, while the corners of the mouth of CheekSquint are relatively sharp.
When each parameter is weakened, the corners of the mouth will drop and the shape of the mouth when smiling will become rounder.
(Even if you weaken the parameters, the corners of the mouth will become sharp if the opening is too small.)

 

I want to stretch my mouth out to the side when I smile.

Clip to correct: CheekSquintLeft / CheekSquintRight
                        MouthSmileLeft/MouthSmileRight
Add MouthWide_Left/MouthWide_Right (shape key for widening the mouth: HANA_Tool_v2_9_7a included) to each of the left and right parameters to widen the mouth horizontally.
The smiling face will become more dynamic and relaxed. Recommended for boys.

 

The mouth of the "O" becomes a trapezoid with a downward expansion.

Clip to correct: MouthStretchLeft/MouthStretchRight
Weaken the mouthStretchLeft/mouthStretchRight (shape keys that adjust the shape of the mouth when the mouth is opened wide).
When the mouth is opened wide, the corners of the mouth also rise. When the mouth is opened wide, the corners of the mouth also rise. This shape key helps to lower the raised corners of the mouth and make the open mouth more rounded.

 

When I open my mouth, my mouth is unnaturally large.

Clip to fix: MouthUpperUpLeft/MouthUpperUpRight

     MouthLowerDownLeft/MouthLowerDownRight

MouthUpperUpLeft/mouthUpperUpRight (shape-key to pull up the upper lip and bare the teeth)
mouthLowerDownLeft/mouthLowerDownRight (shape-keys that pull the lower lip down to bare the teeth)

Weaken each of the following.

 

 

When I squirm, my mouth fills up.

Clips to fix: MouthRollLower/MouthRollUpper
Weaken mouthRollLower and mouthRollUpper, respectively.
Adjust them to keep the mouth closed, even in the gorilla-like mouth state of "Mogu Mogu".
 If the mouth snaps open at this point, the MouthClose parameter may be too weak. If the mouth is puckered up, the MouthClose parameter may be too weak.


When I tie my mouth tightly, my mouth fills up.

Clip to fix: MouthShrugUpper/MouthShrugLower
Weaken the mouthShrugUpper (tightly tied upper lip) and mouthShrugLower (tightly tied lower lip) respectively. 5.


5. tongue

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

Tongue rotates too far to the side and penetrates the cheek.

Clips to correct: MouthLeft/MouthRignt
Weaken mouthLeft/mouthRight (shape-keys that pull up the corners of the mouth) to suppress the sideways rotation of the tongue.
Leave the TongueOut parameter as it is, as changing the length of the tongue will make it easier to penetrate the lips.


6. teeth

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

To prevent teeth from being bared.

Clips to be modified: MouthUpperUpLeft/MouthUpperUpRight

       MouthLowerDownLeft/MouthLowerDownRight

MouthUpperUpLeft/mouthUpperUpRight (shape key to pull up the upper lip and bare teeth)
mouthLowerDownLeft/mouthLowerDownRight (shape-keys that pull the lower lip down to bare the teeth)

Weaken each of the following

 

 

Want to make the teeth less visible when the mouth is open.

Clip to be modified: JawOpen

Add 100% of the VRoid default shape key "HA_Short".

 

 

To make the teeth invisible

(1) Use a texture to make them disappear (it is possible to make them disappear without fail).
 In the png file of the mouth texture image, delete the teeth part and make it a transparent png.
 In Unity, set the material as follows to prevent the transparent part from being drawn.
  Shader:VRM/Mtoon Rendering Type:CutOut Cull Mode:Back

(2) Hiding with BlendShape
 Add 100% of the VRoid default shape key "HA_Short" to each of the following Clips.
JawOpen
MouthSmileLeft
MouthSmileRight
MouthFunnel (Additional. If you add this to the Clip, you will not be able to see the teeth even in the case of Sasis Seso.


7. real side face movement series

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

Improvement of tracking in general

Make the lighting in the room brighter. When using a handheld light, be careful not to cast a shadow on the face. When using a handheld light, be careful not to cast a shadow on the face, as strong light shining at an angle will cast a strong shadow on the nose.
If your hair hangs over your face, fasten it with hairpins. If your eyebrows are hidden by the bangs, you cannot track them.


How to make mouth frown

If you close your mouth tightly and lower the corners of your mouth, you can make mouth frown.
(When the mouth is open, mouthFrown (the shape key that lowers the corners of the mouth) has almost no effect.


How to make a tongue flap

With your mouth closed, stick out your tongue from your closed lips and stretch it out to the left or right as far as you can to make a tongue flap.
It is difficult to recognize the tongue movement in the dark, so if this does not work, try brightening the room.


Frowning your eyebrows

To make a lumpy eyebrow, put pressure between your eyebrows, as if you were wrinkling your nose.

Translated with www.DeepL.com/Translator (free version)

パーフェクトシンク表情調整TIPS

 
HANA_Toolv2.9.7a および HANA_APP_v1_1 に同梱のVRoid用表情データを中心に、パーフェクトシンクの表情調整について解説します。
 
 HANA_Tool(Unityアセット版)

kuniyan.booth.pm

 HANA_APP_v1_1(Windowsアプリ版)

kuniyan.booth.pm

HANA_Toolv2.9.7aは、VRoid Studio v0.12.1、v0.13.1から出力したVRMモデルが対象です。
※VRoidStudio v0.11.3以前のバージョンについては、公式デフォルトのシェイプキーが最新のバージョンよりも少なく、眼球の貫通対策・歯の縮小など必要な調整が行えないため非対応になりました。
 

先頭が大文字のものはVRMのBlendShapeClip、小文字のものはClip内に登録するBlendShapeキーを指します。
 

 

 
 

1. 眉

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

 眉が下がりすぎて目にかかる

修正するClip:BrowDownLeft/BrowDownRight
browDownシェイプキー(眉を下げるシェイプキー)を弱めます。
 

 おこり眉が強すぎて目にかかる

修正するClip:NoseSneerLeft/NoseSneerRight
noseSneerLeft/noseSneerRight(鼻と眉をしかめるシェイプキー)を弱めます。
 

 眉が上がりすぎて前髪に隠れる

修正するClip:BrowInnerUp
browInnerUpシェイプキー(眉の中央を上げるシェイプキー)を弱めます。
 

 笑ったとき困り眉になってしまう

修正するClip:BrowInnerUp
                    BrowDownLeft/BrowDownRight
browInnerUpとbrowDownを同時に弱めます。
 
 

2. 目

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

 まばたきがきれいに閉じない

修正するClip:EyeBlinkLeft/EyeBlinkRight
 各Clipに、eyeBlinkLeft(左の閉じ目)/eyeBlinkRight(右の閉じ目)のパラメータが登録されてしまっていないか確認してください。
もし登録されていた場合は0%にし、かわりにVRoidデフォルトのシェイプキー「EYE_Close_L」/「EYE_Close_R」を登録します。
※HANA_ToolのClipBuilderを使用するとVRoidデフォルトのシェイプキーが自動的に登録されます。
※HANA_Toolで追加されるeyeBlinkLeft/eyeBlinkRight(閉じ目のシェイプキー)は、雛形モデルである千駄ヶ谷渋・HairSampleMaleの形状となります。
 

 瞳メッシュがまぶたを貫通する

修正するClip:EyeBlinkLeft/EyeBlinkRight
左右それぞれに、VRoidデフォルトの「EYE_Iris_Hide」(瞳メッシュを縮小しつつ奥に下げるシェイプキー)を僅かに追加します(各3~5%程度)。
 ※パーフェクトシンクでは、目を閉じたときも眼球の回転が継続するため、大きな瞳のモデルでは貫通が頻発します。
 まばたきで眼球を下げることで対策しています。やりすぎると白目になってしまうので気を付けてください。

f:id:hinzka:20210506073126g:plain

 

 笑い目が不自然

修正するClip:EyeSquintLeft/EyeSquintRight
eyeSquint(笑い目のシェイプキー)のパラメータを適宜弱め、下まぶたのアーチを自然な形に整えます。
このとき、目全体が上にずれたような不自然な見た目になってしまった場合は、
eyeDown_Left/eyeDown_Right(目全体を下げるシェイプキー:HANA_Tool_v2_9_7a同梱)を追加してバランスを取ります。
笑い目の虹彩の見えかたが、開いた目と同程度のバランスになるようにするとよさそうです。

f:id:hinzka:20210505233804p:plain

f:id:hinzka:20210505233818p:plain

 

 視線を動かしたときの目の動きが不自然

修正するClip:EyeLookUpLeft/EyeLookUpRight
       EyeLookDownLeft/EyeLookDownRight
       EyeLookInLeft/EyeLookInRight
       EyeLookOutLeft/EyeLookOutRight
 視線を上下左右に動かしたとき、目元の形状もわずかに変化させることで表情をつけています。モデルによっては、この動きが大きすぎて違和感が出る場合があります。Clip内の各パラメータを弱めることで改善できます。
 

 眉を動かしたとき目がつぶれる

修正するClip:BrowDownLeft/BrowDownRight
       NoseSneerLeft/NoseSneerRight
 
 browDownLeft/browDownRight(眉を下げるシェイプキー)、noseSneerLeft/noseSneerRight(鼻や眉をしかめるシェイプキー)により眉を動かしたとき、上まぶたの形状もわずかに変化させることで表情をつけています。
モデルによっては、この動きが大きすぎて目元が破綻する場合があります。Clip内の各パラメータを弱めることで回避できます。
 

 びっくり目が大げさすぎる

修正するClip:EyeWideLeft/EyeWideRight
        BrowInnerUp
eyeWideLeft/eyeWideRight(目を見開くシェイプキー)を弱めます。
browInnerUp(眉の中央を上げるシェイプキー)で眉を上げたとき、上まぶたの形状もわずかに変化させることで表情をつけています。こちらも必要に応じて弱めます。
 
 
 

3. 頬

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

 ほっぺプクーの形を整えたい

修正するClip:CheekPuff
cheekPuff(頬をふくらませるシェイプキー)のパラメータを調整してほどよい膨らみにします。
口が閉じすぎてテクスチャが埋もれてしまう場合、VRoidデフォルトのシェイプキー「MTH_A」の口を追加すると埋まった口が出てきます。
さらに、SharpenLips(口をとがらせるシェイプキー:HANA_Tool_v2_9_7a同梱)を追加すると唇をツンと尖らせられます。
または、VRoidデフォルトのシェイプキー「MTH_Angry」を追加すると怒った表情を追加できます。
VRoidデフォルトのシェイプキー「MTH_Up」で口をすこし上に動かしてもかわいいです。
 
 
 

4. 口

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

 口が縦長になってしまう

修正するClip:MouthPucker
mouthPucker(口の横幅を狭めるシェイプキー)のパラメータを弱めます。
まず、口を開けた状態で正面の顔を確認します。唇をすぼめたときの形がきれいに丸くなるように調整します。
次に、口を閉じた状態で横顔を確認します。mouthPuckerを弱めると口の尖り方も弱まるため、ClipにSharpenLips(口をとがらせるシェイプキー:HANA_Tool_v2_9_7a同梱)を追加してチューの口ができるよう調整します。
 

 閉じた口が埋まってしまう

修正するClip:MouthClose
  ※JawOpen(口を開くClip)と MouthClose(口を閉じるClip)を足したとき、ちょうど閉じた口になるように調整する必要があります。
MouthCloseのClipの中で、mouthCloseシェイプキーと同時に、いったんjawOpenシェイプキーを100%追加します。
その状態でmouthCloseのシェイプキーを徐々に弱め、ちょうど閉じた口になるまで調整します。
そののちに、jawOpenシェイプキーを0に戻します。
 

 開いた口の形がモデル本来の表情と異なる

修正するClip:JawOpen
デフォルトで登録されるシェイプキーjawOpenのパラメータを0%にします。
かわりにVRoidのシェイプキー「MTH_A」のパラメータを100%にします。
  ※このとき、MouthCloseの調整に使用するシェイプキーも 「MTH_A」のほうを使ってください。
 

 笑った口の形を整えたい

修正するClip:CheekSquintLeft/CheekSquintRight
                    MouthSmileLeft/MouthSmileRight
 ※Smileの口角は比較的まるく、cheekSquintの口角は比較的尖った形に作成しています
各パラメータを弱めると口角は下がり、笑ったときの口の形がまるくなります。
(弱めていても、開き方がちいさいと口角は鋭角になります)
 
 

 笑ったとき口を横に伸ばしたい

修正するClip:CheekSquintLeft/CheekSquintRight
                    MouthSmileLeft/MouthSmileRight
左右のパラメータそれぞれに、mouthWide_Left/MouthWide_Right(口の幅を広げるシェイプキー:HANA_Tool_v2_9_7a同梱)を追加すると口が横に広がります。
にっこり顔がのびのびダイナミックな表情になります。 男子におすすめです。
 

 『お』の口が下に広がった台形になる

修正するClip:MouthStretchLeft/MouthStretchRight
mouthStretchLeft/mouthStretchRight(口を大きく開けたときの口の形を整えるシェイプキー)を弱めます。
※口を大きく開けると口角も上がります。このシェイプキーは、上がった口角を下げることで開いた口を丸く整える役割をしています。
 

 口を開けたとき不自然に口が大きくなる

修正するClip:MouthUpperUpLeft/MouthUpperUpRight

       MouthLowerDownLeft/MouthLowerDownRight

mouthUpperUpLeft/mouthUpperUpRight(上唇を引きあげて歯をむきだすシェイプキー)
mouthLowerDownLeft/mouthLowerDownRight(下唇を引き下げて歯をむきだすシェイプキー)

をそれぞれ弱めます。

 

 もぐもぐすると口が埋まってしまう

修正するClip:MouthRollLower/MouthRollUpper
mouthRollLower(もぐもぐの上唇)mouthRollUpper(もぐもぐの下唇)をそれぞれ弱めます。
『もーー(ぐもぐ)』のゴリラみたいな口の状態でも、口を閉じた状態を維持するよう調整します。
 ※ここで口がパカパカあいてしまう場合、MouthCloseのパラメータが弱すぎる可能性があります。「閉じた口が埋まってしまう」の項目を参照してください。
 

 口をぎゅっと結ぶと口が埋まってしまう

修正するClip:MouthShrugUpper/MouthShrugLower
mouthShrugUpper(ぎゅっと結んだ上唇)mouthShrugLower(ぎゅっと結んだ下唇)をそれぞれ弱めます。
 

5. 舌

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

 舌が横に回転しすぎて頬を貫通する

修正するClip:MouthLeft/MouthRignt
mouthLeft/mouthRight(口角を引き上げるシェイプキー)を弱め、舌の横回転を抑制します。
※舌の長さを変更すると唇を貫通しやすくなるため、TongueOutのパラメータはそのままにすること
 
 

6. 歯

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

 歯をむきださないようにしたい

修正するClip:MouthUpperUpLeft/MouthUpperUpRight

       MouthLowerDownLeft/MouthLowerDownRight

mouthUpperUpLeft/mouthUpperUpRight(上唇を引きあげて歯をむきだすシェイプキー)
mouthLowerDownLeft/mouthLowerDownRight(下唇を引き下げて歯をむきだすシェイプキー)

をそれぞれ弱めます。

 

 口を開いたときの歯の見え方を控えめにしたい

修正するClip:JawOpen

VRoidデフォルトのシェイプキー「HA_Short」を100%追加します。

 

 歯を見えなくしたい

①テクスチャで消す(確実に消せます)
 口内テクスチャ画像のpngファイルで、歯の部分を削除して透過pngにします。
 Unity上で以下のようにマテリアル設定すると透明部分が描画されなくなります。
  Shader:VRM/Mtoon Rendering Type:CutOut  Cull Mode:Back
 
②BlendShapeで隠す
 以下のClipに、VRoidデフォルトのシェイプキー「HA_Short」をそれぞれ100%追加します。
JawOpen
MouthSmileLeft
MouthSmileRight
MouthFunnel(これに追加すると、サシスセソのときも歯が見えなくなります)
 
 

7. リアル側の顔のうごかしかたシリーズ

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

 トラッキング全般の改善

・部屋の照明をあかるくすること。手元でライトを使うときは顔に影を落とさないよう注意します。強い光が斜めに当たると鼻の影が強く出てしまいます。
・髪が顔にかかる場合はヘアピンなどで留めます。眉が前髪で隠れるとトラッキングできません。
 

 への字の口のつくりかた

口をぎゅっと閉じて口角を下げるとへの字の口になります。
(口が開いているとき、mouthFrown(口角を下げるシェイプキー)はほぼ影響しません)
 

 舌ペロのやりかた

口を閉じた状態で、閉じた唇から舌だけを出し、左右どちらかに思い切りのばすと舌ペロになります。
暗いと舌の動きを認識しづらいので、うまくいかないときは部屋を明るくしてみてください。
 

 眉のしかめかた

鼻にシワをよせるイメージで眉間に力をいれると おこり眉になります。

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

f:id:hinzka:20201012214535p:plain



概要

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

1. VRMモデル出力

パーフェクトシンク対応させたいモデルファイルを用意します。
VRoidStudio V0.12.1またはV0.13.1から直接出力したVRMである必要があります
 
 
対象以外のバージョンから出力したVRMでは、コピー後にBlendShapeを動かしたときメッシュが崩れます
 
また、VRMエクスポートの際、「透明メッシュを削除する」を選択しないようにしてください。

f:id:hinzka:20201011235323p:plain

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

 

 

 

2. BlendShapeのコピー(Unity)

2-1. 準備

端末にUnityをインストールしておきます。
推奨バージョン Unity-2019.4 LTS(UniVRMリリースノートより)
 
UniVRMをインポートします。
 
VRMモデルファイルをインポートします。
プロジェクト上にVRMファイルをドラッグ&ドロップするだけで自動的にファイルやフォルダが展開されます。
(Assetsフォルダの下に別途フォルダを作成しておき、その中にドラッグ&ドロップすると散らからないのでおすすめです)
 
HANA Toolをインポートします。
VRM向けとそれ以外とで2種類のアセットが同梱されています。
VRM向けのアセットには、Clipのコピーツール(ClipBuilder)が含まれています。
 f:id:hinzka:20201012225202p:plain
VRoidモデルでは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:20201012003148p:plain
モデルの「Face」オブジェクトをReaderウインドウにセットします。

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

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

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

また、VRoidStudioのバージョンと同じファイルを選択してください。

f:id:hinzka:20201109075357p: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となります(眉や口角などは50)。

 

f:id:hinzka:20210117152328p:plain

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

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

f:id:hinzka:20210120110238p:plain

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

f:id:hinzka:20210120110942p: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で規定されています。

以下リストにまとめています。

シェイプ名からリンクしている公式資料で画像を確認できます。

hinzka.hatenablog.com

 

 

 

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

 

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

眉の中央を上げます。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メニューからモデルを出力して完成です。

 

 

 

 

パーフェクトシンクの顔をお着換えモデルに移植しよう

f:id:hinzka:20200816212032p:plain

<概要>

パーフェクトシンク対応(BlendShape追加済)のVRMモデルの顔を、同一キャラクターの衣装違いモデルに移植します。

VRoidを例にしていますが、他のモデルでも同様の手順でできる可能性があります。

 

 

1.VRoidのオブジェクト構成

f:id:hinzka:20200817000618p:plain

髪や体の揺れもの設定を維持したまま、Faceのみを差し替えます。

 

 2.Blender

2-1.VRMインポート

VRM Importerアドオンを使用します。

github.com

2体のVRMを同一シーン上にインポートします。

モデルが完全に重なって表示されます。そのままで作業をすすめます。

f:id:hinzka:20200817000738p:plain

 

2-2.Faceオブジェクト差し替え

FaceオブジェクトはHeadボーンに100%追従するため、差し替えは簡単です。

オブジェクト名と格納ディレクトリに気をつけてください。

Faceオブジェクトの文字列が本来のものと異なるとエクスポートに失敗します。

f:id:hinzka:20200817000752p:plain

 

2-3. Faceオブジェクト位置調整、VRMエクスポート

靴の厚みが異なると身長が変わってしまうので頭の位置がずれます。必要に応じて位置調整します。

その場合も、BlenderのZ方向(高さ)以外は調整不要のはずです。

f:id:hinzka:20200817000804p:plain

 

3.Unity

BlenderからVRMエクスポートすると、なぜかアウトラインが非表示になってしまいます。

Unityでマテリアル編集を行い最終調整します。

UniVRMをUnityにインポートしておきます。

github.com

f:id:hinzka:20200819120640p:plain

最終VRMをエクスポートして完了です。

 


4.Face.bakedのリネーム

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

"Face.baked" を "Face"に戻すことで動作するようになります。

 

Blenderを使ってリネームができます。

オブジェクト名から”.baked”を除去 + スクリプトから”.baked”を除去

なお、オブジェクト名とスクリプトの記述が一致していないとエクスポートに失敗します。

(むずかしいとおもったらやめておきましょう)

HANA Tool V2アセットのReaderでは、指定したオブジェクトを"Face”にリネームする機能があります。

kuniyan.booth.pm

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

f:id:hinzka:20200821073625p:plain

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

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

f:id:hinzka:20200821230024p:plain


 

____________________________________________________________________________________

!本記事の記載内容は過去の手順となります!

 

現在、VRoidにパーフェクトシンク対応のBlendShapeを実装するには

くにやんさん @nikutokuni 作の 超かんたんBlendShapeコピーツールがおすすめです

booth.pm

VRoid用の表情データセット同梱(VRoidStudio V0.11.3対応)
Blenderを経由せず、Unityだけで簡単にVRoidモデルのパーフェクトシンク対応ができます

Unity初めてのかたでもわかりやすいように手順書を書きました

hinzka.hatenablog.com

____________________________________________________________________________________

 

 

 

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

Unity:2019.4.0f1

Blender:v2.83.2

 

1.【Unity】BlendShapeClip追加

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

vrm.dev

 
 
雛形データセット」に含まれるVRMファイル(前章で使用したBlenderファイルとは別のもの)から、BlendShapeClipとその設定値をコピーします。
BlendShape52点に対応した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

 
 
 
 

VRoidでかんたん!パーフェクトシンク(2/3)BlendShape追加、顔の入れ替え

f:id:hinzka:20200821073514p:plain

 

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

<概要>
iPhoneのフェイストラッキングに必要なBlendShapeを追加します。
雛形のモデルからシェイプキー転送します。
元のVRMに新しい顔を入れ替えます。

f:id:hinzka:20200821225941p:plain本解説で使用しているUnity・Blenderのバージョンは以下の通りです。

Unity:2019.4.0f1

Blender:v2.83.2

 

 

____________________________________________________________________________________

!本記事の記載内容は過去の手順となります!

 

現在、VRoidにパーフェクトシンク対応のBlendShapeを実装するには

くにやんさん @nikutokuni 作の 超かんたんBlendShapeコピーツールがおすすめです

booth.pm

VRoid用の表情データセット同梱(VRoidStudio V0.11.3対応)
Blenderを経由せず、Unityだけで簡単にVRoidモデルのパーフェクトシンク対応ができます

Unity初めてのかたでもわかりやすいように手順書を書きました

hinzka.hatenablog.com

____________________________________________________________________________________

 

 

1. 配布ファイル

使用するファイルをまとめてBOOTHで配布しています。
性別によってメッシュの構成が異なります。同一の性別の雛形を使用してください。

 


hinzka.booth.pm

 

2.【Blender】雛形モデルからBlendShape複製

2-1. BlendShape複製

(前回から引き続き)Blender上にモデルが表示されている状態です。

ここに雛形モデルをアペンドします。

f:id:hinzka:20200819122136p:plain

f:id:hinzka:20200819124014p:plain

Filter Blender IDs を有効にするとアペンドするファイルの種類を指定できます。

Objectsを選択状態にして、雛形の.blendファイルを選択します。objectフォルダの下にFaceオブジェクトがあります。

f:id:hinzka:20200819123917p:plain

Appendを選択すると、雛形の顔オブジェクトが追加で読み込まれます。

f:id:hinzka:20200819125521p:plain

(同名オブジェクトが存在するときは、後から読み込んだ方に自動で連番が付加されます)

 

【シェイプキーの転送】
シェイプキーを転送します。
 
 シェイプキーの転送を行うアドオン
転送元のシェイプキーをすべて転送します。
(雛形モデルからはデフォルトの表情を削除しているため重複はしません)

f:id:hinzka:20200819125939g:plain

スポイトツールでTargetオブジェクトとSourceオブジェクトをそれぞれ選択し、「シェイプキーを転送」を実行します。
頂点の状態が異なると転送に失敗します。転送先のモデルが前章の手順で作成されていることを確認してください。
 

2-2. 失敗するときの原因と対策

クリックで展開
・VRoid Studioのバージョンが配布データセットのものと異なる
   → 配布データセットに記載のVRoid StudioバージョンでVRM出力してお試しください。
・アクセサリ追加などのために他のツールを経由している
   → VRoid Studioから直接出力されたVRMをお使いください。
     本章の4で顔を差し替えるとき、アクセサリ追加されたVRMの体に差し替えてください。
・FBX Expoterのバージョンが異なる
   → UnityのPackageManagerから最新版を入れるようにしてください( v3.2.0以降 )。
     Asset Storeからインポートすると古いバージョンになってしまいます。
・雛形の種類が異なる
   → コピー元の.blendファイルはターゲットと同じ性別のものをお使いください。
     男性はさらに2種類あるので、一方で失敗したらもう片方も試してみてください。
 
※転送直後、BlendShapeリストの最後(tongueOut)が選択状態になります。エクスポート時にはBasisを選択状態にしてください。
 

2-3. iFacialMocapでの動作確認

クリックで展開
Blender上で顔の動作確認することができます。 
 
流用の予定がなければ、この動作確認は本章5の段階(マテリアル設定済)で行うのがおすすめです。ただし、5の段階ではメッシュの状態が共通ではなくなっています。
 
他のモデルへモーフを転送可能なVRoid用雛形として流用するなら、この段階でマテリアルを設定してモーフの形状を編集・.blendファイル保存するのがおすすめです。マテリアルの設定方法は前章のおまけに記載しています。
 
詳しくはiFacialMocapの解説を参照 

f:id:hinzka:20200830110513p:plain



 

2-4. シェイプキーのソートと追加

クリックで展開
手動で一部のシェイプキーを追加・作成した場合など、必要に応じてシェイプキーの並びをソートできます。
 
シェイプキーのソートを行うアドオン
iFacialMocap、FaceCapのそれぞれの命名規則にシェイプキー名が適合しているかをチェックします。
不足したキーをダミーで埋める機能もあります。全部手動でつくる場合など、入力ミスをなくすことができて大変便利です。
 
さらに、これらのBlendShapeがリストの先頭にくるように並べ替えます。
 ソート後はBasisが選択状態になります。
 
 
 
 転送に成功したことを確認したら、雛形のオブジェクトは忘れずに削除しておきます。
 

3.【Blender】BlendShape複製済のFBXモデル出力

 
 
BlenderでFBXを直接VRM出力するのに成功していないため(回転やスケールがおかしくなる…)VRM化の処理はUnity上で行います。
 
いったんFBXに出力します 
※エクスポートの際、BlendShapeの選択状態に注意
 (Basis以外のShapeKeysが選択されていると、その表情がデフォルトになってしまいます)
 
アドオン【Unity_tools 2.80 and newer.zip】
Unityにインポートしたときのアニメーション挙動が正しくなるよう回転を加えるアドオン
詳しくはこちら
ルートのTramsformでXが -90°になります。FBXエクスポートf:id:hinzka:20200819051125p:plainf:id:hinzka:20200819051459p:plain
以下の設定で出力
・エクスポート対象:Armature, Mesh
・Apply Scalings:FBX All
・!EXPERIMENTAL! Apply Transform:チェックあり
 f:id:hinzka:20200819053101p:plain
カスタマイズしたエクスポート設定は「Operator Presets」に保存しておくと便利です

4.【Unity】顔転送用のVRMモデル出力

4-1. FBX読み込み、マテリアル調整、VRM出力

 上記のFBXモデルをUnityにインポートします。(Assetフォルダの任意の場所にFBXをドラッグ&ドロップ)
 BlendShapeNormalをImportに、リグをHumanoidにそれぞれ設定します。
顔のマテリアルを、一番最初にインポートした元VRMのものに差し替えます。

f:id:hinzka:20200819060121p:plain

・Calculateのままだと表情が動いたとき影が不自然になることがあります

f:id:hinzka:20200819060158p:plain

VRM出力するためにはRigがHumanoidである必要があります

マテリアルスロットに、元VRMのマテリアルをドラッグ&ドロップします。
(同一プロジェクトにあるファイルでないとドラッグ&ドロップできないので注意 前章でFBX化したときと同じプロジェクトで作業すると効率よいです)

f:id:hinzka:20200819062413p:plain

f:id:hinzka:20200819062603p:plain

Unityのシーンに配置します(例ではマテリアルをすべて設定しています)。

顔以外の体や髪については不正な表示になることがありますが、ここでは気にしなくて大丈夫です。
この状態でVRM出力します。これがモデルのあたらしい顔になります。

f:id:hinzka:20200819062223p:plain

※いったんFBXを経由してVRM化したモデルには、元のマテリアルや揺れ物の設定がなくなっています。このため、元のVRMモデルに「顔だけ」コピーします。衣装替えモデルに顔を差し替える場合も同様の手順となります。

 

4-2. iFacialMocapでの動作確認

クリックで展開
 Unity上で顔の動作確認することができます。

 

5.【Blender】顔オブジェクトを、元VRMモデルの顔と差し替え

5-1. 顔の差し替え

 Blender上で元のVRMと3で作成したVRMの二つを読み込み、前者の顔だけを後者に差し替えます。
以下のアドオンをインストールします。

github.com

インポートの項目にVRMが追加されます。

先に、元々のVRM(BlendShapeをコピーしていない方)を読み込みます。

f:id:hinzka:20200819131556p:plain

VRMの設定どおりマテリアル設定も含めて正しく読み込まれます。
見やすくするため、collidersとsleletonをいったん非表示にします。

f:id:hinzka:20200819132609p:plain

さらに、Unityから出力したVRM(BlendShape52種を追加したモデル)を読み込みます。こちらもcollidersとsleletonをいったん非表示にします。

同じ位置に表示されるため一体に見えますが、2体読み込まれた状態です。

f:id:hinzka:20200819132910p:plain

Sceneのディレクトリ表示上で、

BlendShape入りのFaceオブジェクト(Face.baked.001)を、元モデルのものと同一の階層にドラッグして移動します。顔以外の残りの項目は不要なので削除します。

元モデルのFaceオブジェクト(Face.baked)も削除します。

BlendShape入りのFaceオブジェクトを、元の文字列(Face.baked)にリネームします。

f:id:hinzka:20200819133819g:plain

f:id:hinzka:20200819135653p:plain

FaceオブジェクトのShapeKeysを選択し、正しく動くことを確認します。

 

5-2. iFacialMocapでの動作確認

クリックで展開
Blender上で顔の動作確認することができます。 
 
詳しくはiFacialMocapの解説を参照 

f:id:hinzka:20200830110513p:plain

 
 
頭の位置について :
 同じモデル同士であれば顔も全く同じ位置にくるため位置調整は不要です。衣装替えモデルで靴の種類が異なる場合は高さのみ合わせる必要があります。
顔オブジェクトの位置を編集モードの”Basis”キー上で調整します(オブジェクトモードではないことに注意)。Basisでの位置・形状は他のすべてのシェイプキーに反映されます。
 

5-3. VRM出力

顔差し替え済みのモデルを改めてVRMに出力します。
・非表示にしてあった項目を再度表示します。
・3Dビュー上で「A」キーを押下し、すべてのオブジェクトを選択します。
この状態でVRMのエクスポートを実行します。

f:id:hinzka:20200819140140p:plain

※エクスポートの際、BlendShapeの選択状態に注意
 (Basis以外のShapeKeysが選択されていると、その表情がデフォルトになってしまいます)
 
最終調整は次エントリにてUnity上で行います。