Expression
ドキュメント:
概要
- VRM-1.0 では旧「Blend Shape Proxy」機能は廃止された。VRM-1.0 では代わりに「Expression」機能を使う。
- Unity 再生中のみ適用される。
- Expression が設定されたブレンドシェイプは、再生中に手動で動かせない。
- 基本的な値は
0.0
~0.1
であるが、範囲外の値を指定して形状を外挿できる。
参考:
VRM 1.0 の表情について | Brand-new TOKYO
使い方
手順
- プロジェクトウィンドウでインポートした VRM-1.0 ファイルを選択し、インスペクターで「VRM」タブに切り替えて、「Extract Meta and Expressions」ボタンを押して、メタ情報及び Expression アセットを抽出する。
- プロジェクトウィンドウで
Model_Name.vrm1.Assets
ディレクトリ内に抽出された_vrm1_.asset
を選択し、インスペクターを開いて、「Select GUI」でExpression
に切り替える。 - プリセット Expression 及び、カスタム Expression に各 Expression アセット (旧 Blend Shape Clip) を割り当てる。
- 各 Expression は、
Model_Name.vrm1.Assets
ディレクトリ内に抽出された Expression アセットを選択して編集する。
ドキュメント:
設定
- Morph Target
- List
- Morph Target
- Material Color
- Texture Transform
- Options
- Is Binary: 挙動を二値化する/中間の値を取らない
- Override: オーバーライド
- Blink: 瞬きのオーバーライドを指定する
- Look At: 視線のオーバーライドを指定する
- Mouth: 口パクのオーバーライドを指定する
ドキュメント:
オーバーライド (Override)
グループ
プロシージャルに適用されるブレンドシェイプは、次の3つのグループに分けられる。
- Blink:瞬き
- Blink:両目閉じ
- BlinkLeft:左目閉じ
- BlinkRight:右目閉じ
- LookAt:視線制御
- LookUp:見上げる
- LookDown:見下ろす
- LookLeft:左を見る
- LookRight:右を見る
- Mouth:リップシンクに用いる口の形状
- aa:「あ」の形の口
- ih:「い」の形の口
- ou:「う」の形の口
- ee:「え」の形の口
- oh:「あ」の形の口
設定値
None
:プロシージャルなブレンドシェイプをそのまま適用するBlock
:プロシージャルなブレンドシェイプを無効化するBlend
:プロシージャルなブレンドシェイプを混合する
ドキュメント:
参考:
VRM 1.0 の表情について | Brand-new TOKYO
ブレンドシェイプ
モデルにアタッチされている「VRM Blend Shape Proxy」コンポーネントの「Blend Shape Avatar」に設定されているアセットが表情モーフを管理するアセットである。設定されているアセット名をダブルクリックするとアセットを選択状態にしてインスペクターに表示することができる。
VRM モデルをインポートすると、インポートしたディレクトリ下にある [Model Name].Blendshapes
ディレクトリ内に表情モーフのアセット BlendShape.asset
及びアニメーションクリップが作成される。
プレビュー
プロジェクトウィンドウで BlendShape.asset
を選択すると、インスペクターウィンドウで表情モーフをプレビューできる。
- 「Editor」タブ: Blend Shape Clip を編集する
- 「List」タブ: Blend Shape Clip を一覧表示する
Blend Shape Clip
- Neutral:基本 (ニュートラル)
- A:あ (口開け)
- I:い (口を横に引く)
- U:う (すぼみ口)
- E:え (口を横に引く/下唇を下げる)
- O:お (口を開けて唇を突き出す)
- Blink:両目閉じ
- Blink_L:左目閉じ (ウインク)
- Blink_R:右目閉じ (ウインク)
- Angry:怒り (眉下げ/への字口)
- Fun:楽しい (口角上げ)
- Joy:喜び (目閉じ/口開き)
- Sorrow:悲しい (困り眉/すぼみ口)
- Surprised:驚き (目を見開く/口開き)
- Extra:不等号目/「はぅ」 (
><
) - LookUp:上を見る
- LookDown:下を見る
- LookLeft:左を見る
- LookRight:右を見る
15 ~ 18 の LookUp / LookDown / LookLeft / LookRight は目線をモーフで制御するタイプのモデルで使用する。
視線をボーンで制御するタイプのモデルでは、「VRMLookAtBoneApplyer」コンポーネントを使用する。視線をモーフで制御する場合は「VRMLookAtBoneApplyer」を削除して、 代わりに「VRMLookAtBlendShapeApplyer」コンポーネントを付与する。
「Add Blend Shape Clip」ボタンを押して、新しい表情モーフを追加 (新規の Blend Shape Clip を作成) することができる。事前定義された表情モーフを追加する場合は「Preset」から該当するプリセットを選び、それ以外の表情モーフを追加する場合は Unknown
を選ぶ。(スクリプトから表情モーフをコントロールする際に、事前定義された表情モーフはプリセット名で指定することができる。)
ドキュメント:
参考:
視線の制御 (LookAt)
ドキュメント:
Blend Shape Proxy
※ VRM-1.0 では廃止された。VRM-1.0 では「Expression」機能を使う。
ゲーム再生中は、「VRM Blend Shape Proxy」コンポーネントに各ブレンドシェイプを 0
~ 1
で操作するスライダーが現れ、簡易的に表情モーフのテストが行える。
注意事項
- Unity 再生時のみ適用される。
- 値は
0.0
~0.1
の範囲のみで、外挿は適用できない。
参考:
UniVRM の VRMBlendShapeProxy で表情アニメーション処理を共通化する – Qiita
VRM で数秒後に表情を変化させる | まゆたまガジェット開発逆引き辞典
BlendShapeProxy の現状の問題点と解決案 · Issue #4 · vrm-c/vrm-specification – GitHub
BlendShapeProxy の現状の問題点と解決案 · Issue #126 · vrm-c/UniVRM – GitHub
Expression API
プロパティ
ExpressionKeys
(読み取り専用)Actual Weights
(読み取り専用)ActualEyeDirection
(読み取り専用)BlinkOverrideRate
(読み取り専用)LookAtOverrideRate
(読み取り専用)MouthOverrideRate
(読み取り専用)
メソッド
GetEyeDirection
GetWeight
GetWeights
SetWeight
SetWeights
使用例
public void SetFacial(GameObject root)
{
var controller = root.GetComponent<Vrm10Instance>().Runtime.Expression;
var facial = new Dictionary
}
Code language: C# (cs)
ドキュメント:
Expression – API | UniVRM Programming ドキュメント [公式]
リンク:
UniVRM 利用アプリケーションの VRM 1.0 への移行について (Santarh) – Speaker Deck
リップシンク
参考:
リップシンクと表情モーションを作る方法を徹底解説!! | コニーログ
フェイストラッキング
参考:
Meta Quest Pro で フェイストラッキングを試す | npaka
VRoid
参考:
VRoid で出力した VRM ファイルの表情調整 | しま
VRoid Studio 製モデルには実は表情が6つある/牙も生やせるし2種類もある/これらの使い方と調整の方法 | 友黎火の note
VRoid Studio 産 VRM モデルに Unity で新規表情パターンを追加 & 微調整する方法/VMagicMirror 向け | Vtuber の雑学メモ帳
キャラクターの表情やまばたきの制御方法 | Unity でゲームを作ろう!
法線がおかしくなる
ドキュメント:
Blend Shape の法線を確認しよう | VRM ドキュメント [公式]
仕様
ドキュメント:
expressions.ja.md – vrm-c/vrm-specification – GitHub
開発
[1.0] Expression、ignore系の名称変更およびblendの提案 · Issue #189 · vrm-c/vrm-specification – GitHub
[1.0] Expressionのneutral、結局どうするんでしたっけ? · Issue #185 · vrm-c/vrm-specification – GitHub
「各種名前の制約」の「ユニークにする」という制約は強すぎるので削除するかモーフターゲット名に限定したい · Issue #202 · vrm-c/vrm-specification – GitHub
資料
VRM で表情をこねくりまわす技術 (m2wasabi) – Speaker Deck
ソースコード
コード:
ExpressionExtensions.cs – GitHub
VRM10ObjectExpression.cs – GitHub
Vrm10RuntimeExpression.cs – GitHub
MorphTargetBinding.cs – GitHub
LookAtEyeDirection.cs – GitHub
PreviewFaceRenderer.cs – GitHub
SerializedExpressionEditor.cs – GitHub
Vrm10InstanceEditorExpression.cs – GitHub
VRM Expression Playable
リポジトリ:
sanaftg/VRMExpressionPlayable: VRM-1.0 の Expression を Timeline で制御する – GitHub
Face Expressions Controller
※ VRM-0
リポジトリ:
kuni-0930/FaceExpressionsControllerVRM: Script to Reflect OVR Expressions – GitHub