はいぬっかメモ

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

3Dアバターをフェイストラッキングに対応させよう

 
------------------------------------------------------------
技術書典14に参加しました!
FACSに基づくフェイストラッキングでかわいい表情をつくる知見をまとめたものです
------------------------------------------------------------
 
 
既存の3Dモデルをフェイストラッキングに対応させる手順とリンク集
 
フェイストラッキングに対応したiPhoneまたはiPadが必要です
 
モデラーさん向けを想定していますが、
Unityだけで完結するかんたんコースもあります
 
 

 
※以下、VRMのバージョン系は 0.xで行っています vrm-1.0での動作は未確認です
 
 

◆ 既存3Dモデルにフェイストラッキング用シェイプキーを実装する

① Unity:VRM

 Unity上のFBXモデルをVRMモデルとしてエクスポート
 
 
 

② Unity:パーフェクトシンク化

 ①のVRMモデルをUnityにインポート
 HANA_ToolのClipBuilder機能で、モデルにBlendshapeClipを追加
 ARKitで定義されたシェイプキーと同名のBlendShapeClip52個をまとめて追加する
 
 ・元モデルが該当シェイプキーを持っている場合
   ⇒ ツールが自動的に割り当てる
 ・元モデルが該当シェイプキーを持っていない場合
   ⇒ 空のClipのみ作成される
     ARKitで定義された表情になるべく近いシェイプキーを、モデルが持っている表情シェイプキーの中から選び、手動で設定していく
   例:【JawOpen】 「aa」:50% 「oh」:30%
     【MouthSmileLeft】 「LipSmile」:50%
     【MouthSmileRight】 「LipSmile」:50%
 
 
 

③ Unity:表情調整

 iFacialMocapとVRMClipEditSupporterで、iOSバイスのARKit機能を使ったフェイストラッキングを行う
 フェイストラッキングに対応したiPhoneまたはiPadが必要
 ・iPhone側とWindows側それぞれにiFacialMocapアプリをインストールし実行
 ・Unity上のシーンにモデルを置き、VRMClipEditSupporterでモデルを指定して受信
 ・Play Modeではなく通常状態で使用する
 
 リアルタイムで顔を動かしながらClipを編集
 Clip内のスライダを動かし、表情を構成する要素ひとつひとつをシェイプキーの合成により調整
 
ARKitで定義された表情一覧
 
 
------------------------------------------------
 ここでVRM出力 ⇒ 「パーフェクトシンク対応モデル」完成
 『Luppet』や『vear』などのパーフェクトシンク対応アプリで、フェイストラッキングを利用可能です
 
 Blenderでさらに表情をブラッシュアップしたい、
 またはモデルをVRChatで使いたい場合は  ⇒ ④ へすすむ
------------------------------------------------
 

④ Unity:シェイプキー統合

 HANA_ToolのClipToShape機能で、③で調整したBlendshapeClipそれぞれを単独シェイプキーに変換
 

⑤ Unity:シェイプキー書き出し

 HANA_ToolのWriter機能で、④で統合したシェイプキーを書き出す
 

⑥ Unity:シェイプキー追加

 HANA_ToolのReader機能で、⑤で書き出したシェイプキーデータを元VRMに追加
(※同一名のシェイプキーがある場合はコピーされないので、あらかじめHANA_ToolのRemover機能で削除しておく)
 これにより、デフォルトの表情セットと調整済みのシェイプキーを同時に持つVRMができる
 いったんこのVRMをエクスポート
 
------------------------------------------------
 かんたんコースでの表情調整はここまで
            ⇒ ⑨へすすむ
------------------------------------------------
 

⑦ Blender:シェイプキー編集 ★上級者向け

 VRM Add-on for Blenderを使い、⑥で出力したVRMBlenderにインポート
 ③の合成で表現しきれなかった表情を調整する
 不足しているシェイプキー、表情調整用の補助シェイプキーの追加も行う
 52個すべて完成したら同アドオンでVRMエクスポート
 
 
 

⑧ UnityまたはWindowsアプリ:シェイプキー転送 ★上級者向け

 Blenderで編集する前後で、頂点数が微妙に変わってしまう
 これを回避するため、編集後のVRMから編集前のVRMにシェイプキーを転送
 HANA_ToolのBuildCopy、またはFaceForgeを使用
 
 
 転送が完了したモデルを使い、Unity上で改めて③の表情調整を行う
 
------------------------------------------------
 ③~⑧を繰り返し、フェイストラッキングのクオリティを追求
                   ⇒ きがすんだら⑨へ
------------------------------------------------
 

⑨ Unity:シェイプキー書き出し

 HANA_ToolのWriter機能で、完成版の52個のシェイプキーを書き出す
 または、⑧のモデルの顔メッシュを取得する
 

⑩ Unity:最終モデルにシェイプキーをコピー

 VRChat用のシーン上に置かれたFBXモデルに対し、HANA_ToolのReaderで⑨のシェイプキーデータを追加する
 または、顔メッシュを⑨で取得したメッシュに差し替える
 
VRChatでフェイストラッキングを利用するには、UnityのVRChat向けプロジェクトにVRCFaceTrackingのアセットを導入し、必要な設定を行ったうえでアバターをアップロードする必要があります
 
 

◆ VRChatでフェイストラッキングを利用する

VRChatは公式でOSCデータの受信に対応している
VRChatFaceTrackingは、フェイストラッキングのOSCデータ送信を行う外部ソフトウェア
 
公式ドキュメント
 
1.環境構築
1-1.VRCFaceTrackingをインストール
 
1-2.対応ハードウェアに応じたセットアップ
  ◇対応デバイス
    ・Viveシリーズ
   ・Pico 4 Pro
   ・Quest Pro
   ・Pimax
   ・Varjo
   Android(MeowFace)※デスクトップモード専用
    iPhoneiPad ※デスクトップモード専用(2023年7月現在はモジュールが未対応)
 
1-3.公開アバターでテスト
フェイストラッキングに対応したPublic avatarで動作を確認
 
公式ドキュメントの下部メニューに、VRCFaceTrackingのDiscordサーバーへのリンクがある
#avatar-showoff チャンネルのピン止めで、Public avatarのワールドが紹介されている
 
2.アバターセットアップ

アバターモデルをVRChat用のプロジェクトにインポートし、VRCFaceTrackingの各種設定を行う

詳しくは公式ドキュメント参照

VRCFaceTracking Program | VRCFaceTracking

 

Meta Quest Pro 表情トラッキング/ パーフェクトシンク対応表 ※追記あり

 

Meta Quest Proの内部にはフェイストラッキング用のカメラが内蔵されており、ユーザーの表情・視線の動きをリアルタイムにトラッキングできます。

 

モデルをこれに対応させるには、Meta Movement SDK の OVRFaceExpressions で定義された63個のシェイプキーが必要です。

Meta Movement SDK 公式ドキュメント

 

iPhoneフェイストラッキング(ARKit)向けのシェイプキーが揃っていれば、ほぼシェイプキー名の差し替えで対応可能です。

一部は、ARKitのシェイプキーを上下左右に分割して作成することになります。

 

青字は、ARKitのシェイプキーを左右(L/R)・上下(T/B)に分ける項目です。

赤字は、新規で作成する項目です。

 

全て揃っていなくてもそこそこ動きます。

 

 

  OVRFaceExpressions ARKitとの互換 内容
1 BrowLowererL browDownLeft 左眉全体を下げる
2 BrowLowererR browDownRight 右眉全体を下げる
3 CheekPuffL cheekPuff
左頬をふくらます
4 CheekPuffR cheekPuff 右頬をふくらます
5 CheekRaiserL cheekSquintLeft 左頬をもちあげる
6 CheekRaiserR cheekSquintRight 右頬をもちあげる
7 CheekSuckL 新規 左頬をへこます ※CheekPuffLの逆ベクトル
8 CheekSuckR 新規 右頬をへこます ※CheekPuffRの逆ベクトル
9 ChinRaiserB mouthShrugLower 上唇を上げる
10 ChinRaiserT mouthShrugUpper 下唇を上げる
11 DimplerL mouthDimpleLeft 左えくぼ (口角を後ろに引く)
12 DimplerR mouthDimpleRight 右えくぼ (口角を後ろに引く)
13 EyesClosedL eyeBlinkLeft 左閉じ目
14 EyesClosedR eyeBlinkRight 右閉じ目
15 EyesLookDownL eyeLookDownLeft 左目で下を見るときの瞼
16 EyesLookDownR eyeLookDownRight 右目で下を見るときの瞼
17 EyesLookLeftL eyeLookOutLeft 左目で左を見るときの瞼
18 EyesLookLeftR eyeLookInRight 右目で左を見るときの瞼
19 EyesLookRightL eyeLookInLeft 左目で右を見るときの瞼
20 EyesLookRightR eyeLookOutRight 右目で右を見るときの瞼
21 EyesLookUpL eyeLookUpLeft 左目で上を見るときの瞼
22 EyesLookUpR eyeLookUpRight 右目で上を見るときの瞼
23 InnerBrowRaiserL browInnerUp 左眉の内側を上げる
24 InnerBrowRaiserR browInnerUp 右眉の内側を上げる
25 JawDrop jawOpen 顎を開く
26 JawSidewaysLeft jawLeft 左に顎をずらす
27 JawSidewaysRight jawRight 右に顎をずらす
28 JawThrust jawForward 顎を前に出す
29 LidTightenerL eyeSquintLeft 左目を細める
30 LidTightenerR eyeSquintRight 右目を細める
31 LipCornerDepressorL mouthFrownLeft 左口角を下げる
32 LipCornerDepressorR mouthFrownRight 右口角を下げる
33 LipCornerPullerL mouthSmileLeft 左口角を上げる
34 LipCornerPullerR mouthSmileRight 右口角を上げる
35 LipFunnelerLB mouthFunnel 左の下唇をラッパ状に突き出す (ウの口)
36 LipFunnelerLT mouthFunnel 左の上唇をラッパ状に突き出す (ウの口)
37 LipFunnelerRB mouthFunnel 右の下唇をラッパ状に突き出す (ウの口)
38 LipFunnelerRT mouthFunnel 右の上唇をラッパ状に突き出す (ウの口)
39 LipPressorL 新規 左唇を上下に圧縮する 唇の幅は変化しない
40 LipPressorR 新規 右唇を上下に圧縮する 唇の幅は変化しない
41 LipPuckerL mouthPucker 左唇を細めつつ突き出す (チューの口)
42 LipPuckerR mouthPucker 右唇を細めつつ突き出す (チューの口)
43 LipStretcherL mouthStretchLeft 左口角を引き下げつつ横に伸ばす
44 LipStretcherR mouthStretchRight 右口角を引き下げつつ横に伸ばす
45 LipSuckLB mouthRollLower 左の下唇を巻き込む (もぐもぐの口)
46 LipSuckLT mouthRollUpper 右の上唇を巻き込む (もぐもぐの口)
47 LipSuckRB mouthRollLower 左の下唇を巻き込む (もぐもぐの口)
48 LipSuckRT mouthRollUpper 右の上唇を巻き込む (もぐもぐの口)
49 LipTightenerL mouthPressLeft 左の口角をぎゅっと緊張 ※ARKitより弱める
50 LipTightenerR mouthPressRight 右の口角をぎゅっと緊張 ※ARKitより弱める
51 LipsToward mouthClose 顎を開いた状態で唇を閉じる
52 LowerLipDepressorL mouthLowerDownLeft 左の下唇を引き下げる
53 LowerLipDepressorR mouthLowerDownRight 右の下唇を引き下げる
54 MouthLeft mouthLeft 口全体を左に寄せる
55 MouthRight mouthRight 口全体を右に寄せる
56 NoseWrinklerL noseSneerLeft 左の鼻をしかめる (左の眉根が寄る)
57 NoseWrinklerR noseSneerRight 右の鼻をしかめる (右の眉根が寄る)
58 OuterBrowRaiserL browOuterUpLeft 左眉の外側を上げる
59 OuterBrowRaiserR browOuterUpRight 右眉の外側を上げる
60 UpperLidRaiserL eyeWideLeft 左の目を見開く
61 UpperLidRaiserR eyeWideRight 右の目を見開く
62 UpperLipRaiserL mouthUpperUpLeft 左の上唇を引き上げる
63 UpperLipRaiserR mouthUpperUpRight 右の上唇を引き上げる

 

 

 

VRChatでQuestProのフェイストラッキングを使いたい人向けの追記:

ALXRとVRCFaceTrackingを用いて、表情のOSCデータをVRChatへ送信することができます。サックーさんの記事が参考になります。

qiita.com

このシステムでは、検知した各種表情に対して、任意のシェイプキーを自由に割り当て可能になっています。このため、ARKit用シェイプキーの文字列をわざわざQuestPro用にリネームする必要はありません。

 

UnityでQuestProのトラッキング環境を自作している人向けの追記:

VRMのBlendshape Clip経由の表情定義でフェイストラッキングできるスクリプトを、くにやんさんが公開されています。

Meta Movement SDKで定義された文字列で、Clipを63個用意し、それぞれに対応するBlendShapeを登録しておけば、QuestProで動作させることができます(パーフェクトシンクと同じしくみです)。

github.com

FaceExpressionsController.cs
FaceExpressionsControllerVRM.cs
の2つを、BlendShapeを持つオブジェクト(VRoidであれば"Face")にアタッチします。

 

 

 

Get your model ready for Perfect-Sync - 52 blendshapes for iPhone face Tracking -

f:id:hinzka:20211222002339p:plain

 

日本語版

 

 

 

The following is a summary of information about the 52 blendshapes that are compatible with Apple ARKit.


- Detailed GIF animations for all 52 shapes.
- Real-world facial expressions to target for tracking
- Modeling tips and tricks

 

f:id:hinzka:20211201134113g:plainf:id:hinzka:20211201143610g:plainClick to enlarge

All 52 shapes are illustrated with GIF animations to show what we noticed and worked on during the prototyping process.

 

When viewed on a smart phone, the display is broken.
Please use the GoogleDocs file from the link below.

     ↓↓↓

Description of 52 blendshapes for iPhone face Tracking - GoogleDocs

docs.google.com

 

Blendshapes LIST

  Blendshape Name      

1

browInnerUp

 

>>>ARKit documents

f:id:hinzka:20211216061510g:plain

f:id:hinzka:20211216071202g:plain



Raise the inside of the eyebrows
Do not move the ends of the eyebrows
Troubled Eyebrows

 

 

 

There are a total of 4 shape keys related to eyebrows

 - browInnerUp

 - browDownLeft / browDownRight

 - browOuterUpLeft / browOuterUpRight

 - noseSneerLeft / noseSneerRight

 

There are a total of three shape keys for eye expressions

 - eyeBlinkLeft / eyeBlinkRight

 - eyeSquintLeft / eyeSquintRight

 - eyeWideLeft / eyeWideRight

 

The three eye shapes are not enough to cover the full range of expressions around the eyes.

Including the eye movements in the eyebrow and cheek shape keys can enrich the variation.

 

Be careful not to bury the eyebrows in the face mesh when moving multiple shapes of eyebrows at the same time.

 

 

 

Maintain the position of the end of the eyebrow in browInnerUp.

When browInnerUp and browOuterUpLeft/browOuterUpRight are combined at 100% each, the shape of a "naturally raised eyebrow (=surprised eyebrow)" is created.

f:id:hinzka:20211216073917g:plain

(browInnerUp+browOuterUp)

2

browDownLeft

 

>>>ARKit documents

f:id:hinzka:20211216061422g:plain

f:id:hinzka:20211216071321g:plain

f:id:hinzka:20211216071354g:plain




Lower the entire left eyebrow
Quizzical eyebrows

 

Tilt and lower the entire left eyebrow.

f:id:hinzka:20211216073930g:plain

(browDown+browInnerUp)

 

Push the upper eyelid down slightly.
The movement of the upper eyelid should be such that when it overlaps with the blink of an eye, the eye is not buried and disappears.

3

browDownRight

 

>>>ARKit documents

f:id:hinzka:20211216061526g:plain

f:id:hinzka:20211216061537g:plain




f:id:hinzka:20211216071406g:plain

f:id:hinzka:20211216071414g:plain




Lower the entire right eyebrow
Quizzical eyebrows

Same as above

4

browOuterUpLeft

 

>>>ARKit documents

f:id:hinzka:20211216061555g:plain



f:id:hinzka:20211216071434g:plain

f:id:hinzka:20211216071442g:plain




Raise the outside of the left eyebrow
Don't move the "eyebrow head" position.

 

In browOuterUp, maintain the position of the top of the brow
Slightly lift the upper eyelid at the outer corner of the eye.

 

 

When browInnerUp and browOuterUpLeft/browOuterUpRight are combined at 100% each, the shape of a "naturally raised eyebrow (=surprised eyebrow)" is created.

f:id:hinzka:20211216073959g:plain

(browInnerUp+browOuterUp)

 

5

browOuterUpRight

 

>>>ARKit documents

f:id:hinzka:20211216061907g:plain

f:id:hinzka:20211216061915g:plain




f:id:hinzka:20211216071454g:plain

f:id:hinzka:20211216071502g:plain




Raise the outside of the right eyebrow
Don't move the "eyebrow head" position.

Same as above

6

eyeLookUpLeft

 

>>>ARKit documents

f:id:hinzka:20211216061936g:plain



f:id:hinzka:20211216071521g:plain

f:id:hinzka:20211216071531g:plain




Turn the pupil of the left eye upward

Lower the center of the left upper eyelid
Lower center of the lower eyelid

 

Composite Surprised eye shape key so that the amount of change increases as the vertex moves toward the center.

 

By focusing on the center of the eye, the eye moves smoothly when looking around the eyeball.

 

f:id:hinzka:20211216074050g:plain



7

eyeLookUpRight

 

>>>ARKit documents

f:id:hinzka:20211216061955g:plain

f:id:hinzka:20211216062003g:plain




f:id:hinzka:20211216071543g:plain

f:id:hinzka:20211216071552g:plain




Turn the pupil of the left eye downward

Lower the center of the right upper eyelid
Lower center of the lower eyelid

 

Same as above

8

eyeLookDownLeft

 

>>>ARKit documents

f:id:hinzka:20211216062014g:plain



f:id:hinzka:20211216071622g:plain

f:id:hinzka:20211216071631g:plain




Turn the pupil of the left eye downward

Lower the center of the left upper eyelid
Lower center of the lower eyelid

 

Composite Surprised eye shape key so that the amount of change increases as the vertex moves toward the center.

 

By focusing on the center of the eye, the eye moves smoothly when looking around the eyeball.

9

eyeLookDownRight

 

>>>ARKit documents

f:id:hinzka:20211216062026g:plain

f:id:hinzka:20211216062034g:plain




f:id:hinzka:20211216071643g:plain

f:id:hinzka:20211216071652g:plain




Turn the pupil of the left eye downward

Lower the center of the right upper eyelid
Lower center of the lower eyelid

 

Same as above

10

eyeLookInLeft

 

>>>ARKit documents

f:id:hinzka:20211216062157g:plain



f:id:hinzka:20211216071705g:plain

f:id:hinzka:20211216071712g:plain




Turn the pupil of the left eye inward

Look through the left eye socket.
Move the eye vertices from the center to the top of the eye only.

 

Composite the Surprised eye shape key so that the amount of change increases as the vertex moves toward the top of the eye.

 

By adding a slope to the amount of change, the eye moves smoothly when looking around the eyeball.

11

eyeLookInRight

 

>>>ARKit documents

f:id:hinzka:20211216062220g:plain

f:id:hinzka:20211216062235g:plain




f:id:hinzka:20211216071726g:plain

f:id:hinzka:20211216071734g:plain

Turn the pupil of the right  eye inward

Look through the right  eye socket.
Move the eye vertices from the center to the top of the eye only.

 

Same as above

12

eyeLookOutLeft

 

>>>ARKit documents

f:id:hinzka:20211216062310g:plain



f:id:hinzka:20211216071806g:plain

f:id:hinzka:20211216071814g:plain




Turn the pupil of the left eye outward

Look through the left corner of the eye.
Move only the outer corner of the eye from the center of the vertex.

 

Composite the Surprised eye shape key so that the amount of change increases as the vertex moves toward the outer corner of the eye.

 

By adding a slope to the amount of change, the eye moves smoothly when looking around the eye.

13

eyeLookOutRight

 

>>>ARKit documents

f:id:hinzka:20211216062157g:plain

f:id:hinzka:20211216062321g:plain



f:id:hinzka:20211216071827g:plain

f:id:hinzka:20211216071836g:plain



Turn the pupil of the right eye outward

Look through the right corner of the eye.
Move only the outer corner of the eye from the center of the vertex.

 

Same as above

14

eyeBlinkLeft

 

>>>ARKit documents

f:id:hinzka:20211216062412g:plain



f:id:hinzka:20211216071902g:plain

f:id:hinzka:20211216071910g:plain




Closing the left eye

 

During tracking, the iPhone sensor detects the shielding of the pupil caused by the lowering of the eyelid as a downward rotation of the pupil.
This may result in a bouncing motion of the pupil at the same time as blinking.

 

 

Normal eye closure


If you set "Joy eye" closing instead of blinking here, you can easily close laughing eyes by face tracking (normal closing eyes will not be possible).

 

In tracking animation, the pupils continue to rotate even when the eyes are about to close.
For this reason, depending on the model, the pupil mesh may protrude when blinking.
This can be prevented by adding a pupil scale to the closed eye shape.

15

eyeBlinkRight

 

>>>ARKit documents

f:id:hinzka:20211216062424g:plain

f:id:hinzka:20211216062432g:plain




f:id:hinzka:20211216072144g:plain

f:id:hinzka:20211216072152g:plain




Closing the right eye

 

During tracking, the iPhone sensor detects the shielding of the pupil caused by the lowering of the eyelid as a downward rotation of the pupil.
This may result in a bouncing motion of the pupil at the same time as blinking.

Normal eye closure

 

Same as above

16

eyeSquintLeft

 

>>>ARKit documents

f:id:hinzka:20211216062444g:plain



f:id:hinzka:20211216072219g:plain

f:id:hinzka:20211216072227g:plain




Smile with left eye

 

Smiling eyes with the left lower eyelid lifted.

 

Note that the pupil is not closed in the ARKit reference, and is not the so-called "Joy eye" closed.
The eyes are combined with the closed eyes, so if you simply set Joy Eyes Closed, it will fail.

 

How to create "Joy Eyes Closed" using only face tracking

 (1) Minus 100% of the "closed eyes" shape.
 (2) Add 100% of the shape of "Joy eyes“ closed shape.

 

 However, since the arc-shaped "Joy eyes closed" is a fiction, it tends to look unnatural in the middle when transformed from normal eyes.
 Face tracking does not work well with this middle expression, as it is the main focus. It is safer to use a key input that can be switched in an instant.

 

Pushing up only the lower eyelid tends to change the impression of the face for characters with large eyes (making the face longer).

 

17

eyeSquintRight

 

>>>ARKit documents

f:id:hinzka:20211216062524g:plain

f:id:hinzka:20211216062532g:plain




f:id:hinzka:20211216072239g:plain

f:id:hinzka:20211216072246g:plain




Smile with right  eye

Smiling eyes with the right lower eyelid lifted.

 

Same as above

18

eyeWideLeft

 

>>>ARKit documents

f:id:hinzka:20211216062541g:plain



f:id:hinzka:20211216072300g:plain

f:id:hinzka:20211216072316g:plain




Widen the left eye

Open the left eye wide.

 

For characters with large eyes, opening the eyelid may not be enough to see the whites of the eyes
Shrink the pupil and adjust it so that the whites of the eyes are adequately visible.

19

eyeWideRight

 

>>>ARKit documents

f:id:hinzka:20211216062553g:plain

f:id:hinzka:20211216062602g:plain




f:id:hinzka:20211216072325g:plain

f:id:hinzka:20211216072333g:plain




Widen the right eye

Open the right eye wide.

 

Same as above

20

cheekPuff

 

>>>ARKit documents

f:id:hinzka:20211216062616g:plain

f:id:hinzka:20211216062624g:plain




f:id:hinzka:20211216072348g:plain

f:id:hinzka:20211216072357g:plain




Cheeks puff out

Shape key to puffy cheeks
You should puff them out so that they are visible from the front.
Lips should be slightly forward. Pointy lips are cute.
Be careful not to narrow them too much, or they will collapse when moved at the same time as the mouthPucker.

 

The expression is easy to aim and activate.
The face does not mix well with other shapes except the mouthPucker, so it is easy to create a posed face.

21

cheekSquintLeft

 

>>>ARKit documents

f:id:hinzka:20211216062635g:plain



f:id:hinzka:20211216072409g:plain

f:id:hinzka:20211216072416g:plain




Pull up the left cheek

 

Making a smile with the left cheek Movement as the cheek rises

 

In cartoon-like models, moving parts such as the corners of the mouth and lower eyelids is less disruptive than moving the entire cheek.

 

Stretching to the side makes the mouth expand when smiling.
If the corners of the mouth are not stretched, the impression of the mouth can be maintained.

22

cheekSquintRight

 

>>>ARKit documents

f:id:hinzka:20211216062647g:plain

f:id:hinzka:20211216062656g:plain




f:id:hinzka:20211216072430g:plain

f:id:hinzka:20211216072440g:plain




Pull up the right cheek

Making a smile with the right cheek Movement as the cheek rises

 

Same as above

23

noseSneerLeft

 

>>>ARKit documents

f:id:hinzka:20211216062709g:plain



f:id:hinzka:20211216072457g:plain

f:id:hinzka:20211216072505g:plain




Frowning of the left nose and eyebrows

 

Facial expression with eyebrows squeezed together in the center of the face

Frowning of the left eyebrow as an accompanying movement to the frowning of the nose
The eyebrow is lowered and brought closer together.
The entire eyebrow position is maintained.

 

Be careful not to lower the eyebrow too much because it is combined with browDown.

f:id:hinzka:20211216074126g:plain

(browDown+noseSneer)

24

noseSneerRight

 

>>>ARKit documents

f:id:hinzka:20211216062722g:plain

f:id:hinzka:20211216062731g:plain




f:id:hinzka:20211216072516g:plain

f:id:hinzka:20211216072524g:plain




Frowning of the right nose and eyebrows

 

Facial expression with eyebrows squeezed together in the center of the face

Frowning of the right eyebrow as an accompanying movement to the frowning of the nose

 

Same as above

25

jawOpen

 

>>>ARKit documents

f:id:hinzka:20211216062751g:plain

f:id:hinzka:20211216062803g:plain




f:id:hinzka:20211216072546g:plain

f:id:hinzka:20211216072554g:plain




Open the mouth

Shape keys affect the impression of the character's face.

 

Set a large mouth opening.
When this opening is small, the mouth does not move much.

 

This is paired with mouthClose, and when both are at 100%, the mouth closes with the jaw open. When both are at 100%, the mouth closes with the jaw open, and only the jaw moves to chew.

f:id:hinzka:20211216062824g:plain

(jawOpen+mouthClose)

 

 

 

Basically, only jaw-related shapekeys move teeth.

・jawOpen

・jawForward

・jawLeft

・jawRight

 

The shape that combines jawOpen and mouthUpperUp/mouthLowerDown is the maximum value of the vertical mouth opening.
The shape that combines jawOpen with southDimple, southStretch, etc., respectively, is the maximum value of the mouth opening in the horizontal direction.

26

jawForward

 

>>>ARKit documents

f:id:hinzka:20211216062955g:plain

f:id:hinzka:20211216063003g:plain




f:id:hinzka:20211216072607g:plain

f:id:hinzka:20211216072615g:plain




Move the jaw forward

 

The entire lower jaw moves forward
Simultaneous movement of the mandible, tongue, and mandibular teeth

27

jawLeft

 

>>>ARKit documents

f:id:hinzka:20211216063017g:plain



f:id:hinzka:20211216072627g:plain

f:id:hinzka:20211216072635g:plain




Move the jaw left

 

The entire lower jaw moves to the left
Simultaneous movement of the jaw, tongue, and mandibular teeth

 

Because it is a movement that usually does not move much and is easy to control consciously, it is possible to intentionally activate a specific expression.

28

jawRight

 

>>>ARKit documents

f:id:hinzka:20211216063058g:plain



f:id:hinzka:20211216072649g:plain

f:id:hinzka:20211216072659g:plain




Move the jaw right

 

The entire lower jaw moves to the right

 

Same as above

29

mouthFunnel

 

>>>ARKit documents

f:id:hinzka:20211216063123g:plain

f:id:hinzka:20211216064351g:plain




f:id:hinzka:20211216072719g:plain

f:id:hinzka:20211216072731g:plain




Mouth when saying "Woo."
Lips pouting and slightly open, showing closed teeth

The shape of the lips sticking out and spreading like a ladle
Compose an expression that shows the teeth

 

Do not move the teeth at all.
*If you don't want to show teeth as much as possible as a character expression, add a movement to hide them in this shape key.

 

Narrow the corners of the mouth to a sharp angle to give the impression of a mouth full of energy.
Turn up the lips and thrust them out

 

Lift the tip of the tongue slightly (because the tip of the tongue shrinks when people make this mouth shape)

 

Adjust the mesh in the mouth so that the teeth do not fill in

30

mouthPucker

 

>>>ARKit documents

f:id:hinzka:20211216064415g:plain

f:id:hinzka:20211216064424g:plain




f:id:hinzka:20211216072746g:plain

f:id:hinzka:20211216072754g:plain




Narrowing the width of the lips

Narrowing the width of the lips
The narrower the lips, the fuller and more forward the lips will appear.
Combine with mouthFunnel to create a kissing mouth.

f:id:hinzka:20211216074153g:plain

(mouthFunnel+mouthPucker)

 

When combined with jawOpen, be careful not to make the narrowed mouth too long and narrow.

 

Narrow the tongue at the same time as the lips (to prevent penetration of the corners of the mouth).

31

mouthLeft

 

>>>ARKit documents

f:id:hinzka:20211216064436g:plain

 

 

f:id:hinzka:20211216072812g:plain

f:id:hinzka:20211216072820g:plain




Bring the entire mouth to the left, not just the corners of the mouth.

Bring the entire mouth to the upper left.
Do not move your teeth at all

 

Rotate only the tongue to follow the mouth, allowing the tongue to move naturally

f:id:hinzka:20211216074308g:plain

(tongueOut+mouthLeft)

32

mouthRight

 

>>>ARKit documents

f:id:hinzka:20211216064449g:plain

f:id:hinzka:20211216064637g:plain

f:id:hinzka:20211216072835g:plain

f:id:hinzka:20211216072843g:plain




Bring the entire mouth to the right, not just the corners of the mouth.

Bring the entire mouth to the upper right.
Do not move your teeth at all


Same as above

33

mouthRollUpper

 

>>>ARKit documents

f:id:hinzka:20211216064723g:plain

f:id:hinzka:20211216064733g:plain




f:id:hinzka:20211216072910g:plain

f:id:hinzka:20211216072919g:plain




Pinch your upper lip between your teeth

 

The mouth itself disappears when the texture fills in, especially on toon-like models.
Create a lip-biting shape while keeping the edge of the upper lip visible.

 

Works in conjunction with mouthRollLower to create a squirming expression around the mouth.
When actually moving, jawOpen is mixed in a little, so the movement is shallower than the created shape

f:id:hinzka:20211216074345g:plain

(mouthRollUpper+mouthRollLower)

34

mouthRollLower

 

>>>ARKit documents

 

f:id:hinzka:20211216064830g:plain

f:id:hinzka:20211216064838g:plain




f:id:hinzka:20211216072935g:plain

f:id:hinzka:20211216072945g:plain




Pinch your lower lip between your teeth

Works in conjunction with mouthRollLower to create a squirming expression around the mouth.

Same as above

35

mouthShrugUpper

 

>>>ARKit documents

f:id:hinzka:20211216064901g:plain



f:id:hinzka:20211216073010g:plain

f:id:hinzka:20211216073018g:plain




Lift your upper lip tightly

Shape that lifts the upper lip.
Works in conjunction with mouthShrugLower to create a closed, frowning mouth.

 

Also works with mouthPress to create a tightly closed mouth expression.

f:id:hinzka:20211216064943g:plain



(mouthShrug+mouthPress)

 

The movement to pull down the corners of the mouth should be placed on either the upper or lower lip, as dividing it evenly between the upper and lower lips will cause the corners of the mouth to rattle.

36

mouthShrugLower

 

>>>ARKit documents

f:id:hinzka:20211216064924g:plain



f:id:hinzka:20211216073034g:plain

f:id:hinzka:20211216073042g:plain




Lift your lower lip tightly

Shape that lifts the lower lip.
Works in combination with mouthShrugUpper to create a frowning, lopsided shape

37

mouthClose

 

>>>ARKit documents

f:id:hinzka:20211216065006g:plain



 

f:id:hinzka:20211216073110g:plain

f:id:hinzka:20211216073119g:plain




Close your mouth with your jaw open
This shape does not work alone in tracking

 

By opening and closing the jaw with the mouth closed, it becomes a chewing jaw movement.

f:id:hinzka:20211221211907g:plain
(jawOpen+mouthClose)

It looks like a broken shape, but it is not an abnormality in the model.

 

Closing the mouth while keeping the jaw open
Paired with jawOpen, when both are at 100%, the jaw is fully open, but the mouth is perfectly closed.

 

From the jawOpen face, select the area around the mouth and gradually narrow the selection so that only the mouth is closed, resulting in the "jaw fully open and mouth perfectly closed" shape.
From this state, we can create a mouthClose shape by further decreasing the jawOpen.

 

The female model is not very pretty when her jaw is extended, so the jaw opening of the sample model Female has been made moderate.

f:id:hinzka:20211216070459g:plain

f:id:hinzka:20211216070212g:plain

 

Move the tip of the tongue upward so that it does not penetrate the lower lip when you stick it out.

38

mouthSmileLeft

 

>>>ARKit documents

f:id:hinzka:20211216070657g:plain



f:id:hinzka:20211216073216g:plain

f:id:hinzka:20211216073224g:plain




Raise the left corner of the mouth

 

 

A smiling face with the left corner of the mouth pulled up

Configure the shape of the mouth when smiling (e.g., make the corners of the mouth acute or obtuse).
The mouth should look like a natural smile when combined with jawOpen.

f:id:hinzka:20211216074435g:plain

(jawOpen+mouthSmile)

 

If you simply split the shape from the center to the left and right, the movement will be unnatural.
Gradient the amount of change so that the left and right shapes add up to 100%.

 

Lower the tongue slightly (because the corners of the mouth rise when people stick their tongues out strongly)

f:id:hinzka:20211216074508g:plain



(tongueOut+mouthSmile)

 

Raising the corners of the mouth may cause the entire mouth to shift upward, changing the impression of the face as a character.
Balance the mouth by lowering it appropriately to maintain its position.

 

Do not move the teeth at all.
*If you don't want to show the teeth as much as possible as a character expression, add a movement to hide the teeth in this shape key.

39

mouthSmileRight

 

>>>ARKit documents

f:id:hinzka:20211216070713g:plain



f:id:hinzka:20211216073236g:plain

f:id:hinzka:20211216073243g:plain




Raise the right corner of the mouth

A smiling face with the right corner of the mouth pulled up

 

Do not move the teeth at all.
*If you don't want to show the teeth as much as possible as a character expression, add a movement to hide the teeth in this shape key.


Same as above

 

40

mouthFrownLeft

 

>>>ARKit documents

f:id:hinzka:20211216070726g:plain



f:id:hinzka:20211216073259g:plain

f:id:hinzka:20211216073308g:plain




Lower the left corner of the mouth
Mainly works with the mouth closed

 

Lower the left corner of the mouth
Mainly works with the mouth closed
The shape of the mouth should be natural when merged with jawOpen.


f:id:hinzka:20211216074524g:plain

(jawOpen+mouthFrown)

41

mouthFrownRight

 

>>>ARKit documents

f:id:hinzka:20211216070737g:plain



f:id:hinzka:20211216073320g:plain

f:id:hinzka:20211216073328g:plain




Lower the right corner of the mouth
Mainly works with the mouth closed

 

Lower the right corner of the mouth
Mainly works with the mouth closed

 

Same as above

42

mouthDimpleLeft

 

>>>ARKit documents

f:id:hinzka:20211216070751g:plain



f:id:hinzka:20211216073347g:plain

f:id:hinzka:20211216073355g:plain




Pull the left corner of the mouth backwards
Open your mouth even wider to the side

Widen the left corner of the mouth horizontally

 

In order not to change the shape of the corner of the mouth when composing with mouthSmile, etc., stretch the "middle part of the lips" instead of the corner of the mouth.


f:id:hinzka:20211216074546g:plain

(jawOpen+mouthDimple)

43

mouthDimpleRight

 

>>>ARKit documents

f:id:hinzka:20211216070802g:plain



f:id:hinzka:20211216073407g:plain

f:id:hinzka:20211216073415g:plain




Pull the right corner of the mouth backwards
Open your mouth even wider to the side

Widen the right corner of the mouth horizontally

 

Same as above

44

mouthUpperUpLeft

 

>>>ARKit documents

f:id:hinzka:20211216070827g:plain



f:id:hinzka:20211216073430g:plain

f:id:hinzka:20211216073438g:plain




Lift the left upper lip and bare the teeth

 

Teeth bared in a mouthFunnel position without moving the jaw, teeth are most visible when the mouth is extended sideways

f:id:hinzka:20211216074608g:plain

(mouthFunnel+mouthUpperUp

+mouthLowerDown

+mouthDimple)

Lift the left upper lip.
Do not move your teeth at all.

 

Compared to the lower lip, the corner of the person's upper lip is raised more
The entire upper lip will be shaped like a peanut.

 

If you simply divide it into left and right from the center, it will look unnatural.
Gradient the amount of change so that the left and right shapes add up to 100%.

 

The shape of jawOpen and mouthUpperUp/mouthLowerDown is the maximum value of the vertical mouth opening.

 

 

 

45

mouthUpperUpRight

 

>>>ARKit documents

f:id:hinzka:20211216070837g:plain



f:id:hinzka:20211216073450g:plain

f:id:hinzka:20211216073458g:plain




Lift the right upper lip and bare the teeth

Lift the right upper lip.
Do not move your teeth at all.

 

Same as above

46

mouthLowerDownLeft

 

>>>ARKit documents

f:id:hinzka:20211216070856g:plain



f:id:hinzka:20211216073531g:plain

f:id:hinzka:20211216073539g:plain




Pull down the left lower lip and bare your teeth.

 

Pull down the left lower lip.
Do not move your teeth at all.

 

Compared to the upper lip, the middle part of a human's lower lip has a greater downward movement.

 

If we simply split it from the center to the left and right, the movement will be unnatural.
Gradient the amount of change so that the left and right shapes add up to 100%.

 

The shape that combines jawOpen and mouthUpperUp/mouthLowerDown is the maximum value for the vertical opening of the mouth.

47

mouthLowerDownRight

 

>>>ARKit documents

f:id:hinzka:20211216070906g:plain



f:id:hinzka:20211216073553g:plain

f:id:hinzka:20211216073604g:plain




Pull down the right lower lip and bare your teeth.

Pull down the right lower lip.
Do not move your teeth at all.

 

Same as above

48

mouthPressLeft

 

>>>ARKit documents

f:id:hinzka:20211216070918g:plain



f:id:hinzka:20211216073617g:plain

f:id:hinzka:20211216073626g:plain




With your mouth closed, lift the left corner of your mouth tightly.
Make a duck-like mouth.

Push up the left corner of your mouth and squash it.
Works only when the mouth is squeezed, so it is easy to control consciously
Can be used to add nuances such as a cat or duck mouth

f:id:hinzka:20211216074637g:plain

(mouthShrug+mouthPress 猫口バージョン)

 

The cat's mouth must be symmetrical or it will look distorted.
You can make it symmetrical by adding pre-prepared cat mouth shapes equally to the left and right mouthPresses.

49

mouthPressRight

 

>>>ARKit documents

f:id:hinzka:20211216070927g:plain



f:id:hinzka:20211216073638g:plain

f:id:hinzka:20211216073646g:plain




With your mouth closed, lift the right corner of your mouth tightly.
Make a duck-like mouth.

Push up the right corner of your mouth and squash it.

 

Same as above

50

mouthStretchLeft

 

>>>ARKit documents

f:id:hinzka:20211216070939g:plain



f:id:hinzka:20211216073703g:plain

f:id:hinzka:20211216073712g:plain



Pull the left corner of the mouth downward
Compared to mouthFrown, the mouth moves more when it is open.

 

 

Pull down the left corner of the mouth to open the mouth further

 

When you open your mouth wide, the corners of your mouth rise up, whereas the corners of your mouth are lowered to balance the movement.

 

When the mouth is closed, it is difficult to create a beautiful movement by lowering the corners of the mouth.

 

From a shape with 100% jawOpen, pull down the corners of the mouth to get the ideal shape, and then set jawOpen to -100% to get the proper movement.

f:id:hinzka:20211216074700g:plain

(jawOpen+mouthStretch)

51

mouthStretchRight

 

>>>ARKit documents

f:id:hinzka:20211216070950g:plain



f:id:hinzka:20211216073816g:plain

f:id:hinzka:20211216073835g:plain

Pull the right corner of the mouth downward
Compared to mouthFrown, the mouth moves more when it is open.

Pull down the right corner of the mouth to open the mouth further

 

Same as above

52

tongueOut

 

>>>ARKit documents

f:id:hinzka:20211216071000g:plain



 

Stick out the tongue

Stick the tongue straight out from the lips

 

Deformation of the tongue to bend downward when the mouth is opened is done with jawOpen.
Synthesize with jawOpen to adjust the width of the arch so that when the tongue is bent, the arch crosses the lower lip.

 

Sample Models

The latest version of the sample model that I created from the official version of VRoid VRM is available at the following Github. Please use the latest version in the release section.

github.com

 

The realistic face model is a sample model from FaceCap (borrowed with permission). It is included in the project which you can download here.

github.com

FaceCap is an iPhone face tracking application that has been used to create Youtube content for Idolish Seven. It does not support Perfect Sync, but if you prepare 52 BlendShapes that support Perfect Sync, FaceCap will also work. The face calibration function allows you to move the model clearly with a single tap, even if the person's expression does not move much.

 

 

Glossary of Terms

Apple ARKit

A development kit available for iOS devices such as iPhone and iPad. One of the features provided is advanced face tracking. To take advantage of this, a 3D model with 52 corresponding blendshapes is required.

 

VRM

A format for humanoid 3D models developed by the VRM Consortium. Users can freely add new expressions by composing existing expression blendshapes with Clip.

 

Perfect-Synk (a.k.a.)

How to use face tracking with iPhone in combination with VRM specification. We add 52 Clips to the model and treat them as 52 different shapes that can be tracked in ARKit. Expression Clips can be adjusted by the user.

hinzka.hatenablog.com

パーフェクトシンク対応モデルをつくろう! iPhone顔トラッキング用 52BlendShapes制作メモ

f:id:hinzka:20211202003921p:plain

 

English version

 

 

 

 

Apple ARKitに対応したブレンドシェイプ52個について、トラッキングのターゲットとなる現実側の表情、およびモデリング上の要点と思われる内容をまとめました。

 

f:id:hinzka:20211201134113g:plainf:id:hinzka:20211201143610g:plainクリックすると大きくなります

 

サンプルを試作する中で気づいた点や工夫したところを、52個すべてのシェイプについてGIFアニメーションを付記して解説しています。

 

スマホだと表示が崩れます!以下のリンクからGoogleDocsのファイルをご利用ください

f:id:hinzka:20211202013840p:plain

iPhoneトラッキング向けBlendShape資料 - Google ドキュメント

docs.google.com

 

ブレンドシェイプ一覧

  シェイプ名      

1

browInnerUp

 

▶ARKit資料

f:id:hinzka:20211216061510g:plain

f:id:hinzka:20211216071202g:plain



眉の内側を上げる

眉尻は動かさない

困った眉

眉に関連するシェイプキーは全部で4種

 - browInnerUp

 - browDownLeft / browDownRight

 - browOuterUpLeft / browOuterUpRight

 - noseSneerLeft / noseSneerRight

 

目の表情に関するシェイプキーは全部で3種

 - eyeBlinkLeft / eyeBlinkRight

 - eyeSquintLeft / eyeSquintRight

 - eyeWideLeft / eyeWideRight

 

目のシェイプ3種だけでは目元の表情を十分にカバーできない

眉のや頬のシェイプキーに目元の動きも含めることでバリエーションを豊かにすることができる

 

眉の複数のシェイプを同時に動かしたとき、顔のメッシュに埋まらないように注意

 

 

 

browInnerUpでは眉尻の位置を維持する

browInnerUpとbrowOuterUpLeft/browOuterUpRightはそれぞれ100%で合成すると「自然に上がった眉(=びっくりした眉)」の形になる

f:id:hinzka:20211216073917g:plain

(browInnerUp+browOuterUp)

2

browDownLeft

 

▶ARKit資料

f:id:hinzka:20211216061422g:plain

f:id:hinzka:20211216071321g:plain

f:id:hinzka:20211216071354g:plain




左眉全体を下げる

訝しむ眉

 

browDownでは眉全体を傾斜しつつ下降させる

f:id:hinzka:20211216073930g:plain

(browDown+browInnerUp)

 

上まぶたをわずかに押し下げる

上まぶたの動きは、まばたきと重なったときに目が埋もれて消えない程度にする

3

browDownRight

 

▶ARKit資料

f:id:hinzka:20211216061526g:plain

f:id:hinzka:20211216061537g:plain




f:id:hinzka:20211216071406g:plain

f:id:hinzka:20211216071414g:plain




右眉全体を下げる

訝しむ眉

同上

4

browOuterUpLeft

 

▶ARKit資料

f:id:hinzka:20211216061555g:plain



f:id:hinzka:20211216071434g:plain

f:id:hinzka:20211216071442g:plain




左眉の外側を上げる

眉頭の位置は維持

 

browOuterUpでは眉頭の位置を維持する

上まぶたの目尻側をわずかに持ち上げる

 

 

browInnerUpとbrowOuterUpLeft/browOuterUpRightはそれぞれ100%で合成すると「自然に上がった眉(=びっくりした眉)」の形になる

f:id:hinzka:20211216073959g:plain

(browInnerUp+browOuterUp)

 

5

browOuterUpRight

 

▶ARKit資料

f:id:hinzka:20211216061907g:plain

f:id:hinzka:20211216061915g:plain




f:id:hinzka:20211216071454g:plain

f:id:hinzka:20211216071502g:plain




左眉の外側を上げる

眉頭の位置は維持

同上

6

eyeLookUpLeft

 

▶ARKit資料

f:id:hinzka:20211216061936g:plain

 

※眼球の動きはボーン制御です

片目だと見た目が怖いので両目を動かしています

f:id:hinzka:20211216071521g:plain

f:id:hinzka:20211216071531g:plain




左目の瞳を上に向ける

※ここでは参考のために眼球を動かしています。実際には眼球は動きません。

ボーン制御の眼球を持つモデルでは、シェイプキーに眼球の動きを入れてはいけません。

 

左の上まぶたの中央を見開く

 

左の上まぶたの中央を見開く

下まぶたの中央を持ち上げる

 

頂点が中央よりになるほど変化量が大きくなるように、Surprised目のシェイプキーを合成

 

上瞼全体を一様に上げ下げするのではなく、中央部を重点的に動かすことで、眼球をみまわしたとき目元がなめらかに動く

 

f:id:hinzka:20211216074050g:plain



7

eyeLookUpRight

 

▶ARKit資料

f:id:hinzka:20211216061955g:plain

f:id:hinzka:20211216062003g:plain

 

※眼球の動きはボーン制御です

片目だと見た目が怖いので両目を動かしています



f:id:hinzka:20211216071543g:plain

f:id:hinzka:20211216071552g:plain




右目の瞳を上に向ける

※ここでは参考のために眼球を動かしています。実際には眼球は動きません。

 

右の上まぶたの中央を見開く

下まぶたの中央を持ち上げる

 

同上

8

eyeLookDownLeft

 

▶ARKit資料

f:id:hinzka:20211216062014g:plain

 

※眼球の動きはボーン制御です

片目だと見た目が怖いので両目を動かしています

f:id:hinzka:20211216071622g:plain

f:id:hinzka:20211216071631g:plain




左目の瞳を下に向ける

※ここでは参考のために眼球を動かしています。実際には眼球は動きません。

 

左の上まぶたの中央を下げる

下まぶたの中央を下げる

 

頂点が中央よりになるほど変化量が大きくなるように、Surprised目のシェイプキーを合成

 

中央部を重点的に動かすことで、眼球をみまわしたとき目元がなめらかに動く

9

eyeLookDownRight

 

▶ARKit資料

f:id:hinzka:20211216062026g:plain

f:id:hinzka:20211216062034g:plain

※眼球の動きはボーン制御です

片目だと見た目が怖いので両目を動かしています




f:id:hinzka:20211216071643g:plain

f:id:hinzka:20211216071652g:plain




右目の瞳を下に向ける

※ここでは参考のために眼球を動かしています。実際には眼球は動きません。

 

右の上まぶたの中央を下げる

下まぶたの中央を下げる

 

同上

10

eyeLookInLeft

 

▶ARKit資料

f:id:hinzka:20211216062157g:plain

 

※眼球の動きはボーン制御です

片目だと見た目が怖いので両目を動かしています

f:id:hinzka:20211216071705g:plain

f:id:hinzka:20211216071712g:plain




左目の瞳を内側に向ける

※ここでは参考のために眼球を動かしています。実際には眼球は動きません。

 

左の目頭部分を見開く

目の頂点の中央から目頭側だけを動かす

 

頂点が目頭よりになるほど変化量が大きくなるように、Surprised目のシェイプキーを合成

 

変化量に傾斜をつけることで、眼球をみまわしたとき目元がなめらかに動く

11

eyeLookInRight

 

▶ARKit資料

f:id:hinzka:20211216062220g:plain

f:id:hinzka:20211216062235g:plain

 

※眼球の動きはボーン制御です

片目だと見た目が怖いので両目を動かしています



f:id:hinzka:20211216071726g:plain

f:id:hinzka:20211216071734g:plain

右目の瞳を内側に向ける

※ここでは参考のために眼球を動かしています。実際には眼球は動きません。

 

右の目頭部分を見開く

目の頂点の中央から目頭側だけを動かす

 

同上

12

eyeLookOutLeft

 

▶ARKit資料

f:id:hinzka:20211216062310g:plain

 

※眼球の動きはボーン制御です

片目だと見た目が怖いので両目を動かしています

f:id:hinzka:20211216071806g:plain

f:id:hinzka:20211216071814g:plain




左目の瞳を外側に向ける

※ここでは参考のために眼球を動かしています。実際には眼球は動きません。

 

左の目尻部分を見開く

目の頂点の中央から目尻側だけを動かす

 

頂点が目尻よりになるほど変化量が大きくなるように、Surprised目のシェイプキーを合成

 

変化量に傾斜をつけることで、眼球をみまわしたとき目元がなめらかに動く

13

eyeLookOutRight

 

▶ARKit資料

f:id:hinzka:20211216062157g:plain

f:id:hinzka:20211216062321g:plain

※眼球の動きはボーン制御です

片目だと見た目が怖いので両目を動かしています



f:id:hinzka:20211216071827g:plain

f:id:hinzka:20211216071836g:plain



左目の瞳を外側に向ける

※ここでは参考のために眼球を動かしています。実際には眼球は動きません。

 

右の目尻部分を見開く

目の頂点の中央から目尻側だけを動かす

 

同上

14

eyeBlinkLeft

 

▶ARKit資料

f:id:hinzka:20211216062412g:plain



f:id:hinzka:20211216071902g:plain

f:id:hinzka:20211216071910g:plain




左目を閉じる

 

ラッキングの際、まぶたの下降に伴う瞳の遮蔽を、iPhoneセンサーが瞳の下回転として検知する

このため、まばたきと同時に瞳がバウンドするような動きになることがある

 

 

通常の閉じ目

 

ここに、まばたきではなく「Joy目閉じ」を設定しておくと、フェイストラッキングで簡単に笑い目閉じができる(通常の閉じ目はできなくなる)

 

ラッキングによるアニメーションでは、目が閉じかけても瞳の回転は継続するため、

モデルによってはまばたき時に瞳メッシュがはみ出す場合がある

閉じ目のシェイプに瞳のスケールを入れることで貫通対策ができる

15

eyeBlinkRight

 

▶ARKit資料

f:id:hinzka:20211216062424g:plain

f:id:hinzka:20211216062432g:plain




f:id:hinzka:20211216072144g:plain

f:id:hinzka:20211216072152g:plain




右目を閉じる

 

ラッキングの際、まぶたの下降に伴う瞳の遮蔽を、iPhoneセンサーが瞳の下回転として検知する

このため、まばたきと同時に瞳がバウンドするような動きになることがある

通常の閉じ目

 

同上

16

eyeSquintLeft

 

▶ARKit資料

f:id:hinzka:20211216062444g:plain



f:id:hinzka:20211216072219g:plain

f:id:hinzka:20211216072227g:plain




左目を笑顔にする

 

左の下まぶたを持ち上げて笑った目

 

ARKitのリファレンスでは瞳は閉じておらず、いわゆる『Joy目閉じ』ではないことに注意

閉じ目と合成されるため、単純にJoy目閉じを設定すると破綻する

 

フェイストラッキングのみで『Joy目閉じ』をつくるには

 ①「閉じ目」のシェイプ100%をマイナス

 ②「Joy目閉じ」のシェイプ100%をプラス

することで可能

 

 ただし、円弧状の「Joy目閉じ」はフィクションなので、通常の目から変形させると中間で不自然な表情になりがち

 フェイストラッキングではこの中間の表情が中心となるため相性がよくない。一瞬で切り替わるキー入力を採用したほうが無難

 

下まぶただけを押し上げると目の大きいキャラクターは顔の印象が変わってしまいがち(面長になる)

 

17

eyeSquintRight

 

▶ARKit資料

f:id:hinzka:20211216062524g:plain

f:id:hinzka:20211216062532g:plain




f:id:hinzka:20211216072239g:plain

f:id:hinzka:20211216072246g:plain




右目を笑顔にする

右の下まぶたを持ち上げて笑った目

 

同上

18

eyeWideLeft

 

▶ARKit資料

f:id:hinzka:20211216062541g:plain



f:id:hinzka:20211216072300g:plain

f:id:hinzka:20211216072316g:plain




左目を見開く

左目を見開く

 

瞳の大きなキャラクターの場合、まぶたを開いただけでは白目の見え方が十分でない場合がある

瞳を縮小して白目が適度に見えるように調整する

19

eyeWideRight

 

▶ARKit資料

f:id:hinzka:20211216062553g:plain

f:id:hinzka:20211216062602g:plain




f:id:hinzka:20211216072325g:plain

f:id:hinzka:20211216072333g:plain




右目を見開く

右目を見開く

 

同上

20

cheekPuff

 

▶ARKit資料

f:id:hinzka:20211216062616g:plain

f:id:hinzka:20211216062624g:plain




f:id:hinzka:20211216072348g:plain

f:id:hinzka:20211216072357g:plain




頬を膨らませる

頬を膨らませるシェイプキー

正面から見てもわかるようにふくらませるとよい

唇は少し前に出る。とがらせると可愛い

狭めすぎるとmouthPuckerと同時に動いたとき破綻するので注意

 

 

狙って発動しやすい表情

mouthPucker以外の他シェイプと混ざりにくいためキメ顔を工夫しやすい

21

cheekSquintLeft

 

▶ARKit資料

f:id:hinzka:20211216062635g:plain



f:id:hinzka:20211216072409g:plain

f:id:hinzka:20211216072416g:plain




左頬をもちあげる

 

左頬で笑顔を作る 頬の上昇に伴った動き

 

アニメ風モデルでは、頬全体を動かすより「口角」「下まぶた」などパーツを動かした表現のほうが破綻が少ない

 

横に伸ばすと笑ったときの口がのびのび広がる

このとき口角付近は伸ばさないほうが口の印象を維持できる

22

cheekSquintRight

 

▶ARKit資料

f:id:hinzka:20211216062647g:plain

f:id:hinzka:20211216062656g:plain




f:id:hinzka:20211216072430g:plain

f:id:hinzka:20211216072440g:plain




右頬をもちあげる

右頬で笑顔を作る 頬の上昇に伴った動き

 

同上

23

noseSneerLeft

 

▶ARKit資料

f:id:hinzka:20211216062709g:plain



f:id:hinzka:20211216072457g:plain

f:id:hinzka:20211216072505g:plain




左の鼻と眉をしかめる

 

眉を顔の中心にぎゅっと寄せる表情

鼻をしかめる動きに付随した動きとして左眉をしかめる

眉頭を下げて寄せる

眉全体の位置は維持

 

browDownと合成されるので下げすぎに注意

f:id:hinzka:20211216074126g:plain

(browDown+noseSneer)

24

noseSneerRight

 

▶ARKit資料

f:id:hinzka:20211216062722g:plain

f:id:hinzka:20211216062731g:plain




f:id:hinzka:20211216072516g:plain

f:id:hinzka:20211216072524g:plain




右の鼻と眉をしかめる

 

眉を顔の中心にぎゅっと寄せる表情

鼻をしかめる動きに付随した動きとして右眉をしかめる

 

同上

25

jawOpen

 

▶ARKit資料

f:id:hinzka:20211216062751g:plain

f:id:hinzka:20211216062803g:plain




f:id:hinzka:20211216072546g:plain

f:id:hinzka:20211216072554g:plain




口を開く

キャラクターの顔の印象を左右するシェイプキー

 

大きく口を開いた状態を設定する

この開きが小さいと口パクがあまり動かない

 

mouthCloseと対になり、双方100%のときに「顎を開けたまま口を閉じる」形になる。顎のみが動くことで咀嚼する動作となる

f:id:hinzka:20211216062824g:plain

(jawOpen+mouthClose)

 

 

 

基本的に、歯を動かすのは顎にかかわるシェイプキーのみ

・jawOpen

・jawForward

・jawLeft

・jawRight

 

・jawOpenとmouthUpperUp/mouthLowerDownを合わせたシェイプが、縦方向の口の開きの最大値

・jawOpenとmouthDimple、mouthStretchなどをそれぞれ合わせたシェイプが、横方向の口の開きの最大値

26

jawForward

 

▶ARKit資料

f:id:hinzka:20211216062955g:plain

f:id:hinzka:20211216063003g:plain




f:id:hinzka:20211216072607g:plain

f:id:hinzka:20211216072615g:plain




顎を前に動かす

 

下顎全体が前に動く

顎と舌・下顎の歯を同時に動かす

27

jawLeft

 

▶ARKit資料

f:id:hinzka:20211216063017g:plain



f:id:hinzka:20211216072627g:plain

f:id:hinzka:20211216072635g:plain




顎を左に動かす

 

下顎全体が左に動く

顎と舌・下顎の歯を同時に動かす

 

通常あまり動くことがなく、意識的にコントロールしやすい動きのため、特定の表情を意図的に発動させることも可能

28

jawRight

 

▶ARKit資料

f:id:hinzka:20211216063058g:plain



f:id:hinzka:20211216072649g:plain

f:id:hinzka:20211216072659g:plain




顎を右に動かす

 

下顎全体が右に動く

顎と舌・下顎の歯を同時に動かす

 

同上

29

mouthFunnel

 

▶ARKit資料

f:id:hinzka:20211216063123g:plain

f:id:hinzka:20211216064351g:plain




f:id:hinzka:20211216072719g:plain

f:id:hinzka:20211216072731g:plain




ウの口

唇をとがらせてわずかに開き、閉じた歯を見せる

唇をつきだしてじょうごのように広げる形

サシスセソの歯を見せる表情を構成する

 

歯は一切動かさない

★キャラクター表現として、歯を極力見せたくない場合はこのシェイプキーに歯を隠す動きを追加

 

口角を狭めて鋭角にすると口元に力が入っている雰囲気が出る

唇をめくりあげて突き出す

 

舌先を少し持ち上げる(人がこの口の形をつくるとき舌先が縮まるため)

 

歯が埋まらないよう口内のメッシュを調整する

30

mouthPucker

 

▶ARKit資料

f:id:hinzka:20211216064415g:plain

f:id:hinzka:20211216064424g:plain




f:id:hinzka:20211216072746g:plain

f:id:hinzka:20211216072754g:plain




唇の横幅を狭める

唇の横幅を狭める

狭めた分、くちびるがふっくらして前に出る

mouthFunnelとの合成でキスの口になる

f:id:hinzka:20211216074153g:plain

(mouthFunnel+mouthPucker)

 

jawOpenと合成したとき、口を細めた形状が縦に細長くなりすぎないよう注意

 

唇と同時に舌を狭める(口角の貫通対策)

 

 

31

mouthLeft

 

▶ARKit資料

f:id:hinzka:20211216064436g:plain

 

 

f:id:hinzka:20211216072812g:plain

f:id:hinzka:20211216072820g:plain




口角ではなく、口全体を左に寄せる

口全体を左上に寄せる

歯は一切動かさない

 

舌のみを口に追従して回転させることで自然に舌を動かすことができる

f:id:hinzka:20211216074308g:plain

(tongueOut+mouthLeft)

32

mouthRight

 

▶ARKit資料

f:id:hinzka:20211216064449g:plain

f:id:hinzka:20211216064637g:plain

f:id:hinzka:20211216072835g:plain

f:id:hinzka:20211216072843g:plain




口角ではなく、口全体を右に寄せる

口全体を右上に寄せる

歯は一切動かさない

舌のみを口に追従して回転させることで自然に舌を動かすことができる

 

 

33

mouthRollUpper

 

▶ARKit資料

f:id:hinzka:20211216064723g:plain

f:id:hinzka:20211216064733g:plain




f:id:hinzka:20211216072910g:plain

f:id:hinzka:20211216072919g:plain




上唇を噛む

 

特にトゥーン調のモデルではテクスチャが埋まると口自体が消えてしまう

上唇のエッジが見えている状態を維持しつつ唇を噛む形状をつくる

 

mouthRollLowerとセットで動作し、口元のもぐもぐした表情をつくる

実際に動くときはjawOpenが少し混ざるため、作成したシェイプよりは浅い動きになる

f:id:hinzka:20211216074345g:plain

(mouthRollUpper+mouthRollLower)

34

mouthRollLower

 

▶ARKit資料

 

f:id:hinzka:20211216064830g:plain

f:id:hinzka:20211216064838g:plain




f:id:hinzka:20211216072935g:plain

f:id:hinzka:20211216072945g:plain




下唇を噛む

同上

35

mouthShrugUpper

 

▶ARKit資料

f:id:hinzka:20211216064901g:plain



f:id:hinzka:20211216073010g:plain

f:id:hinzka:20211216073018g:plain




上唇をぎゅっと持ち上げる

上唇を持ち上げるシェイプ

mouthShrugLowerとセットで動作し、口元をしかめて閉じた「への字の口」を作る

 

さらにmouthPressと同時に動くと口元をぎゅっと引き結ぶ表情になる

f:id:hinzka:20211216064943g:plain



(mouthShrug+mouthPress)

 

口角を引き下げる動きは、上唇・下唇に均等に分けると口角がガタつくため、上唇・下唇のどちらかにまとめて入れること

36

mouthShrugLower

 

▶ARKit資料

f:id:hinzka:20211216064924g:plain



f:id:hinzka:20211216073034g:plain

f:id:hinzka:20211216073042g:plain




下唇をぎゅっと持ち上げる

下唇を持ち上げるシェイプ

mouthShrugUpperとセットで動作し、口元をしかめてへの字を作る

37

mouthClose

 

▶ARKit資料

f:id:hinzka:20211216065006g:plain



 

f:id:hinzka:20211216073110g:plain

f:id:hinzka:20211216073119g:plain




顎を開いたまま口を閉じる

ラッキング上でこのシェイプが単体で動作することはない

 

口を閉じたまま顎を開閉することで、咀嚼する顎の動きになる


f:id:hinzka:20211221211907g:plain

(jawOpen+mouthClose)

破綻したシェイプに見えますがモデルの異常ではありません

 

顎を開いたまま口を閉じる動作

jawOpenと対になり、双方100%のときに「顎は全開だが、口はぴったり閉じている」形になる

 

jawOpenの顔から、口の周りを選択して徐々に選択範囲を狭めながら口だけ閉じさせ、「顎が全開で口がぴったり閉じている」形に整える

この状態からさらにjawOpenをマイナスすることでmouthCloseのシェイプを作成できる

 

女性モデルは顎が伸びるとあまり可愛くないので、サンプルモデルFemaleでは顎の開きを控えめにしています

f:id:hinzka:20211216070459g:plain

f:id:hinzka:20211216070212g:plain

 

舌を出したとき下唇を貫通しないよう、舌先を上向きに移動

 

38

mouthSmileLeft

 

▶ARKit資料

f:id:hinzka:20211216070657g:plain



f:id:hinzka:20211216073216g:plain

f:id:hinzka:20211216073224g:plain




左の口角を上げる

 

 

左の口角を引き上げた笑顔の表情

笑ったときの口の形を構成する(口角を鋭角・鈍角にするなど)

jawOpenと合成したとき自然な笑顔の口になること

f:id:hinzka:20211216074435g:plain



(jawOpen+mouthSmile)

 

中央から単純に左右に分割すると不自然な動きになる

左右のシェイプを足して100%になるように変化量をグラデーションさせる

 

舌をやや下げる(人が強く舌を出すときは口角が上がるため)

f:id:hinzka:20211216074508g:plain



(tongueOut+mouthSmile)

 

口角が上がることにより口全体が上にずれ、キャラクターとしての顔の印象が変わってしまうことがある

適宜口全体を下げ、位置を維持するようにバランスをとる

 

歯は一切動かさない

★キャラクター表現として、歯を極力見せたくない場合はこのシェイプキーに歯を隠す動きを追加

39

mouthSmileRight

 

▶ARKit資料

f:id:hinzka:20211216070713g:plain



f:id:hinzka:20211216073236g:plain

f:id:hinzka:20211216073243g:plain




右の口角を上げる

右の口角を引き上げた笑顔の表情

 

歯は一切動かさない

★キャラクター表現として、歯を極力見せたくない場合はこのシェイプキーに歯を隠す動きを追加

 

同上

 

40

mouthFrownLeft

 

▶ARKit資料

f:id:hinzka:20211216070726g:plain



f:id:hinzka:20211216073259g:plain

f:id:hinzka:20211216073308g:plain




左の口角を下げる

主に口を閉じた状態で動作する

 

左の口角を引き下げた不快の表情

jawOpenと合成したとき自然な口の形状になること

f:id:hinzka:20211216074524g:plain



(jawOpen+mouthFrown)

41

mouthFrownRight

 

▶ARKit資料

f:id:hinzka:20211216070737g:plain



f:id:hinzka:20211216073320g:plain

f:id:hinzka:20211216073328g:plain




右の口角を下げる

主に口を閉じた状態で動作する

 

右の口角を引き下げた不快の表情

 

同上

42

mouthDimpleLeft

 

▶ARKit資料

f:id:hinzka:20211216070751g:plain



f:id:hinzka:20211216073347g:plain

f:id:hinzka:20211216073355g:plain




左の口角を後ろに引っ張る

開いた口をさらに大きく横に開く

左の口角を横に広げる

 

mouthSmileなどと合成した際に口角の形状を変えないためには、口角付近ではなく「唇の中央部分」を伸ばす

f:id:hinzka:20211216074546g:plain



(jawOpen+mouthDimple)

43

mouthDimpleRight

 

▶ARKit資料

f:id:hinzka:20211216070802g:plain



f:id:hinzka:20211216073407g:plain

f:id:hinzka:20211216073415g:plain




右の口角を後ろに引っ張る

開いた口をさらに大きく横に開く

右の口角を横に広げる

 

同上

44

mouthUpperUpLeft

 

▶ARKit資料

f:id:hinzka:20211216070827g:plain



f:id:hinzka:20211216073430g:plain

f:id:hinzka:20211216073438g:plain




左の上唇を持ち上げ、歯をむき出す

 

顎を動かさずにmouthFunnel(ウの口)の状態で歯をむき出し、口を横に広げたときに最も歯がよく見える

f:id:hinzka:20211216074608g:plain

(mouthFunnel+mouthUpperUp

+mouthLowerDown

+mouthDimple)

左の上唇を持ち上げる

歯は一切動かさない

 

下唇と比べて、人の上唇は口角部分がより大きく上がる

上唇全体が落花生のような形になる

 

中央から単純に左右に分割すると不自然な動きになる

左右のシェイプを足して100%になるように変化量をグラデーションさせる

 

jawOpenとmouthUpperUp/mouthLowerDownを合わせたシェイプが、縦方向の口の開きの最大値

 

 

 

45

mouthUpperUpRight

 

▶ARKit資料

f:id:hinzka:20211216070837g:plain



f:id:hinzka:20211216073450g:plain

f:id:hinzka:20211216073458g:plain




右の上唇を持ち上げ、歯をむき出す

右の上唇を持ち上げる

 

同上

46

mouthLowerDownLeft

 

▶ARKit資料

f:id:hinzka:20211216070856g:plain



f:id:hinzka:20211216073531g:plain

f:id:hinzka:20211216073539g:plain




左の下唇を引き下げ、歯をむき出す

 

左の下唇を引き下げる

歯は一切動かさない

 

上唇と比べて、人の下唇は中央部分がより大きく下がる

 

中央から単純に左右に分割すると不自然な動きになる

左右のシェイプを足して100%になるように変化量をグラデーションさせる

 

jawOpenとmouthUpperUp/mouthLowerDownを合わせたシェイプが、縦方向の口の開きの最大値

47

mouthLowerDownRight

 

▶ARKit資料

f:id:hinzka:20211216070906g:plain



f:id:hinzka:20211216073553g:plain

f:id:hinzka:20211216073604g:plain




右の下唇を引き下げ、歯をむき出す

右の下唇を引き下げる

 

同上

48

mouthPressLeft

 

▶ARKit資料

f:id:hinzka:20211216070918g:plain



f:id:hinzka:20211216073617g:plain

f:id:hinzka:20211216073626g:plain




口を閉じた状態で、左の口角をぎゅっと持ち上げる

 

アヒル口をつくると認識されやすい

左の口角を押し上げてつぶす

口をぎゅっとした時のみに動作するため、意識的にコントロールしやすい

猫口やアヒル口などのニュアンスを追加することができる

f:id:hinzka:20211216074637g:plain

(mouthShrug+mouthPress 猫口バージョン)

 

猫口は、左右対称でないと歪な口元になる

あらかじめ用意した猫口シェイプを左右のmouthPressに均等に追加することで左右対称にできる

49

mouthPressRight

 

▶ARKit資料

f:id:hinzka:20211216070927g:plain



f:id:hinzka:20211216073638g:plain

f:id:hinzka:20211216073646g:plain




口を閉じた状態で、右の口角をぎゅっと持ち上げる

 

アヒル口をつくると認識されやすい

左の口角を押し上げてつぶす

 

同上

50

mouthStretchLeft

 

▶ARKit資料

f:id:hinzka:20211216070939g:plain



f:id:hinzka:20211216073703g:plain

f:id:hinzka:20211216073712g:plain



左口角を下に引き下げる

mouthFrownに比べ、口が開いているときにより大きく動く

 

 

左口角を引き下げて口をさらに開く

 

口を大きく開けたとき、口角が上がってしまうのに対して口角を下げてバランスをとるような動き

 

閉じた状態で口角を下げて作ると綺麗な動きになりにくい

 

jawOpen100%のシェイプから理想的な形になるよう口角を引き下げ、そこからjawOpenを‐100%することで適切な動きになる

f:id:hinzka:20211216074700g:plain

(jawOpen+mouthStretch)

51

mouthStretchRight

 

▶ARKit資料

f:id:hinzka:20211216070950g:plain



f:id:hinzka:20211216073816g:plain

f:id:hinzka:20211216073835g:plain

右口角を下に引き下げる

mouthFrownに比べ、口が開いているときにより大きく動く

右口角を引き下げて口をさらに開く

 

同上

52

tongueOut

 

▶ARKit資料

f:id:hinzka:20211216071000g:plain



 

舌を出す

舌を唇からまっすぐに突き出す

 

口を開いたときに下方向に曲げる変形はjawOpenで行う

jawOpenと合成して舌が曲がったとき、アーチが下唇を越えられるように出幅を調整

 

サンプルモデル

VRoid正式版VRMから作成したサンプルモデルの最新版は以下のGithubで公開しています。リリース欄の最新版をお使いください。

github.com

 

リアルな顔モデルはFaceCapのサンプルモデルです(許可を得てお借りしています)。こちらからダウンロードできるプロジェクトに同梱されています。

github.com

FaceCapiPhoneフェイストラッキングアプリで、アイドリッシュセブンYoutubeコンテンツ制作でも採用されています。パーフェクトシンク対応ではありませんが、パーフェクトシンク対応のBlendShapes52個を用意すればFaceCapでも動きます。顔のキャリブレーション機能により、表情があまり動かない人でも、ワンタップでモデルがくっきり動くようになります。

 

 

用語集

Apple ARKit

iPhoneiPadなどのiOS機器で利用できる開発キット。その一つとして高度なフェイストラッキング機能が提供されている。これを活用するためには、対応する52個のblendshapeを備えた3Dモデルが必要となる。

 

VRM

VRMコンソーシアムによって策定された、人型の3Dモデルのフォーマット。既存の表情ブレンドシェイプをClipで合成することで、新たな表情をユーザー自身で自由に追加できる。

 

パーフェクトシンク(通称)

iPhoneを使ったフェイストラッキングを、VRMの仕様と組み合わせて動かすしくみ。モデルに52個のClipを追加し、それらをARKitのトラッキングに対応した52種のシェイプとして扱う。表情Clipはユーザー自身で調整することができる。

hinzka.hatenablog.com

PerfectSync facial adjustment TIPS

Japanese version

 

This section describes how to adjust the facial expressions of Perfect Synth, using a sample file created with the official version of VRoid's VRM as an example.

f:id:hinzka:20211125234842p:plain

Sample VRM models are available here.

github.com

 

The following entry summarizes the facial expressions on the real side, which are the target of tracking.

hinzka.hatenablog.com

 

 

The official version of VRoid Studio can be copied from both male and female data.

If you want to move the jaw firmly, the male version of the data is recommended.
The male version is recommended for models with a large "Mouth Width" setting.  
The female version is recommended for models with a small "Mouth Width" setting.

f:id:hinzka:20211221112204p:plain

 

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

                    browOuterUpLeft/browOuterUpRight
Weaken the browInnerUp shape key (the shape key that raises the center of the eyebrows).

At the same time, weaken browOuterUpLeft/browOuterUpRight (shape-keys that raise the ends of the eyebrows).

 

When I smile, my eyebrows become a troubled shape

Clip to fix: BrowInnerUp
                    browOuterUpLeft/browOuterUpRight
Weaken browInnerUp (the shape key for troubled eyebrows) and at the same time weaken browOuterUpLeft/browOuterUpRight (the shape keys for raised eyebrows).


These shapes will create a "naturally raised eyebrow(=Surprised eyebrows)" shape when combined.

f:id:hinzka:20211222071857g:plain(browInnerUp+browOuterUp)

If you weaken browInnerUp, you need to weaken browOuterUpLeft/browOuterUpRight at the same time.
As a result, if the eyebrows are not raised enough when you are surprised, add the VRoid default Fun/Joy eyebrows (a shape that raises the entire left and right eyebrows) to BrowInnerUp and adjust them.


2. eyes

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

Clip to fix: EyeBlinkLeft/EyeBlinkRight
Make sure that the original model's own closing shape key is set.
If the correct shape is registered, there may be a problem with the tracking environment. See Improvement of tracking in general.

.

The eye mesh penetrates the eyelids

Clip to be modified: EyeBlinkLeft/EyeBlinkRight
Add a small amount of the VRoid default "Fcl_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 to make the arch of the lower eyelid look more natural.

 

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 too wide to collapse

Modify Clip: JowOpen MouthClose

 

Jaw Open and Mouth Close need to be adjusted as a set.

In JawOpen, weaken the parameters of jawOpen (shape key that opens the jaw and mouth).  * Please remember the values ​​at this time.

In addition, add Fcl_MTH_Small and Fcl_MTH_Large (both are VRoid default shape keys) and adjust them so that they open nicely and roundly when you open your mouth wide.

Then, in the MouthClose clip, set the mouthClose parameter to "the same number as the jawOpen number set in the JawOpen clip".

 

 

The mouth is vertical.

Clip to fix: MouthPucker
Weaken the parameter of mouthPucker (a shape key that narrows the width of the mouth).
Adjust the shape of the lips so that they are nicely rounded when they are squeezed.

If the mouthPucker parameter is maximized but the narrowing is still insufficient, you can add the VRoid default Fcl_MTH_Small (a shapekey to narrow the mouth) to narrow it.


The closed mouth will be buried

Clip to fix: MouthClose
Set the parameters for JawOpen (Clip to open the mouth) and MouthClose (Clip to close the mouth) to be the same.

 want to reshape my open mouth.

Clip to fix: JawOpen

JawOpen parameters, and
Fcl_MTH_Small (shape key to narrow the width of the mouth)
Fcl_MTH_Large (shape key to increase the width of the mouth)
to adjust the mouth opening.

 

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
Adding the VRoid default Fcl_MTH_Large (a shape key that increases the width of the mouth) to each of the left and right parameters makes the mouth widen horizontally.
The smiling face becomes more dynamic and relaxed. This is 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 "Fcl_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.

# For VRoid Studio β:

#  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 "Fcl_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

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

The following entry summarizes the facial expressions on the real side, which are the target of tracking.

hinzka.hatenablog.com

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 mouth like a peanut

Without raising the corners of your mouth, open your lips firmly and make a "" mouth shape.

 


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.


How to frown 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)

 

How to make eyebrows sad 

Lift the middle of the eyebrow (between the eyebrows) to frown. Do not lift the ends of your eyebrows.

 

How to raise the entire eyebrow

Lift the center of the eyebrow and the end of the eyebrow at the same time.

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

 
VRoid正式版で作成したサンプルモデルを例に、パーフェクトシンクの表情調整について解説します。

f:id:hinzka:20211125234842p:plain

サンプルVRMモデルは以下で配布しています。
 
ラッキングのターゲットとなる現実側の表情について、以下のエントリでまとめています。
 
 
VRoid正式版のBlendShapeは男女どちらのデータからでもコピー可能です。
・顎をしっかり動かしたい場合は男性版データがおすすめです。
・「口の横幅」を大きく設定しているモデルは男性版データがおすすめです。
・「口の横幅」を小さく設定しているモデルは女性版データがおすすめです。

f:id:hinzka:20211221112104p:plain

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

 

1. 眉

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

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

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

 おこり眉の眉頭が目にかかる

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

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

修正するClip:BrowInnerUp
                    browOuterUpLeft/browOuterUpRight
browInnerUpシェイプキー(眉の中央を上げるシェイプキー)を弱めます。
同時にbrowOuterUpLeft/browOuterUpRight(眉尻を上げるシェイプキー)も弱めます。
 

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

修正するClip:BrowInnerUp
                    browOuterUpLeft/browOuterUpRight
browInnerUp(困り眉のシェイプキー)を弱め、同時にbrowOuterUpLeft/browOuterUpRight(眉尻を上げるシェイプキー)を弱めます。
 
これらのシェイプは合成したときに「自然に上がった眉(=驚いた眉)」の形状になります。
f:id:hinzka:20211222071857g:plain(browInnerUp+browOuterUp)
browInnerUpを弱めたら同時にbrowOuterUpLeft/browOuterUpRightを弱める必要があります。
これらを弱めた結果、驚いた眉の上がり方が足りないと感じる場合は、VRoidデフォルトのFun・Joyの眉(左右の眉全体が上がるシェイプ)をBrowInnerUpに追加して調整してください。
 

2. 目

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

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

修正するClip:EyeBlinkLeft/EyeBlinkRight
本来のモデル自身の閉じ目シェイプキーが設定されていることを確認してください。
正しいシェイプが登録されている場合、トラッキング環境に問題があるかもしれません。トラッキング全般の改善を参照してください。
 

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

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

f:id:hinzka:20210506073126g:plain

 

 笑い目が不自然

修正するClip:EyeSquintLeft/EyeSquintRight
eyeSquint(笑い目のシェイプキー)のパラメータを適宜弱め、下まぶたのアーチを自然な形に整えます。

 

 

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

修正する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」の口を追加すると埋まった口が出てきます。
または、VRoidデフォルトのシェイプキー「MTH_Angry」を追加すると怒った表情を追加できます。
VRoidデフォルトのシェイプキー「MTH_Up」で口をすこし上に動かしてもかわいいです。
 
 
 

4. 口

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

 口の開きが大きすぎて破綻する

修正するClip:JowOpen MouthClose

JawOpenとMouthCloseをセットで調整する必要があります。
①JawOpenで、jawOpen(顎と口を開くシェイプキー)のパラメータを弱めます 。※この時の数値は覚えておいてください。
さらに、Fcl_MTH_Small、Fcl_MTH_Large(いずれもVRoidデフォルトのシェイプキー)を使用して、縦横バランスよく開くよう調整します。
②MouthCloseのクリップで、mouthCloseのパラメータに 「JawOpenのクリップで設定したjawOpenの数値と同じ数値」を設定します。
 

 口が縦長になってしまう

修正するClip:MouthPucker
mouthPucker(口の横幅を狭めるシェイプキー)のパラメータを弱めます。
唇をすぼめたときの形がきれいに丸くなるように調整します。
mouthPuckerのパラメータを最大にしてもまだ狭め方が不足している場合は、VRoidデフォルトの Fcl_MTH_Small (口を狭めるシェイプキー)を追加して狭めることができます。
 

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

修正するClip:MouthClose
  JawOpen(口を開くClip)と MouthClose(口を閉じるClip)のパラメータを同一に設定します。
 

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

修正するClip:JawOpen
JawOpenのパラメータ、および
Fcl_MTH_Small(口の幅を狭めるシェイプキー)
Fcl_MTH_Large(口の幅を広げるシェイプキー)
を調整し、好みの口の開きかたに調整します。
 

 笑った口の形を整えたい

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

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

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

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

修正する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デフォルトのシェイプキー「Fcl_HA_Short」を100%追加します。

 

 歯を見えなくしたい

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

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

-----------------------------------------
ラッキングのターゲットとなる現実側の表情について、以下のエントリでまとめています。
 
 

 トラッキング全般の改善

・部屋の照明をあかるくすること。手元でライトを使うときは顔に影を落とさないよう注意します。強い光が斜めに当たると鼻の影が強く出てしまいます。
・髪が顔にかかる場合はヘアピンなどで留めます。眉が前髪で隠れるとトラッキングできません。
iPhoneとPCをWi-Fiで連携したとき、周波数帯によっては電波干渉により遅延が発生します。周波数帯を変更することで遅延が改善することがあります。
  ■802.11b/g/n:2.4GHz帯 家電と共通の周波数帯 ノイズが乗りやすい(カクつく)
  ■802.11ac:5GHz帯 電波干渉を受けにくい 障害物に弱いためルーターを近くに置く必要がある

  f:id:hinzka:20211207171107p:plain



 への字の口のつくりかた

口をぎゅっと閉じて口角を下げるとへの字の口になります。
 

落花生のような口のつくりかた

口角を上げずにしっかり唇を開いて「イ」の口をつくります。

 

 舌ペロのやりかた

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

 眉のしかめかた

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

眉のひそめかた

眉の中央(眉間)を持ち上げると眉を顰めます。眉尻を上げてはいけません。

 

眉全体の上げかた

眉の中央と眉尻を同時に持ち上げます。

 

 

 

クリックで実装!パーフェクトシンク 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メニューからモデルを出力して完成です。