アニメーションとリターゲティング
Animazeにはアニメーションの標準が多数あり、さまざまな形式のモデル(fbx、vrm、gltf、glb)のアニメーションマッピングのトラッキングを適切にサポートしています。これらの標準は、一連の骨格のアニメーション、ブレンドシェイプ(モーフターゲット)、ブレンドシェイプのグループ(vrm固有)、および骨格の関節(プロシージャルなアニメーションに使用)によって定義されます。
AnimazeでのVRMモデルの統合により、最も一般的に使用されるアニメーションの標準2つの実装が導入されました:VRoidとパーフェクトシンク(ARKitシェイプを使用)。この2つの標準の要件の違いは、表情のブレンドシェイプのセットであり、その他はすべて共通です。
Animazeのリターゲティングシステムは、vrm形式のモデルにデフォルトとしてVRoidアニメーションの標準を使用し、以下の現在の要件を満たします:
-
ブレンドシェイプグループ(VRM用語では表情、UniVRMではブレンドシェイププロキシとも呼ばれます)は顔の表情のマッピングに使用されます。
表情のリスト:無表情、喜び、楽しみ、怒り、悲しみ、驚き、左目の瞬き、右目の瞬き、A、E、O、U、I。詳細については顔の表情のリターゲティングセクションを参照してください。 -
骨格の関節 – 頭の剛体運動、目線のリターゲティング、体の待機モーション、体の待機ポーズに使用します。
使用される骨格の関節:脊柱、胸、上胸部、首、頭、左上腕、左前腕、右上腕、右前腕、左目、右目。詳細は以下のセクションで説明されています。
VRoidの表情(ブレンドシェイプグループ)はアトミック動作ではなく、アバター/モデルの顔全体に影響を与えます。つまり、複数のトラッキング入力によって表情がトリガーされます(例:楽しみの表情は、トラッキングされた口の微笑および/または眉が上がることによってトリガーされます)。言い換えれば、Animazeはより詳細にトラッキングされた動きを、あらかじめ定義された1つのアバターの感情にマッピングします。
既知の問題:
-
VRoidアニメーションの標準とアニメーションの限界のため、表情の非対称性に欠けています。
-
プロシージャルなアニメーションでは、メッシュクリッピングは考慮されません。
-
プロシージャルなアニメーションでは、スキニングの問題は考慮されません(例:不要な伸縮など)。
-
すべてのアニメーションの範囲設定は現在変更できません。
-
追加のブレンドシェイプグループ(または表情)は、VRoidアニメーションの標準に追加できません。
-
特殊アクションおよびポーズのサポートは限られています。
顔の表情のリターゲティング
VRoidアニメーションの標準
VRoidアニメーションの標準は、単一の事前定義されたアバターの感情(眉、まぶた、口のすべての顔の部分のポーズ)を通して実装され、トリガーするには複数のトラッキング入力が使用され、重複する場合があります。Animazeは、次の表の「備考」セクションで説明するように、マッピングされた感情に優先順位を付けることによって、入力の重複を処理します。
VRMブレンドシェイプのグループ名 |
トリガーのタイミング |
非対称サポート |
備考 |
無表情 |
他の表情が静止している |
非該当 |
|
A |
無表情で口を開く |
非該当 |
喜び、悲しみ、Oのいずれかが実行されている場合はトリガーされません |
喜び |
笑顔または眉毛を上げた状態で口を開く |
非該当 |
悲しみよりも喜びを優先します |
悲しみ |
顔をしかめる、または眉毛を下げた状態で口を開く |
非該当 |
悲しみよりも喜びを優先します |
O |
唇をすぼめながら口を開く(唇が漏斗状) |
非該当 |
Oよりも喜びと悲しみを優先します |
驚き |
目を大きく見開きながら口を開く |
非該当 |
喜び、悲しみ、Oのいずれかが実行されている場合はトリガーされません |
楽しみ |
口を閉じて微笑む |
なし |
怒りよりも楽しみを優先します |
怒り |
口を閉じて顔をしかめる |
なし |
怒りよりも楽しみを優先します |
U |
口を閉じて唇をすぼめる |
なし |
Uよりも楽しみと怒りを優先します |
左目の瞬き |
無表情で左目で瞬き |
あり |
|
右目の瞬き |
無表情で右目で瞬き |
あり |
|
口形素(オーディオに合わせたリップシンク) |
|||
A |
口形素AA、AH |
非該当 |
|
I |
口形素IH、Y、FV |
非該当 |
|
U |
口形素OY |
非該当 |
|
E |
口形素EY、EH |
非該当 |
|
O |
口形素AO、AW |
非該当 |
|
パーフェクトシンクアニメーションの標準は、顔のさまざまな部分のさらなるアトミック動作によってアバターの表現力を強化し、ユーザーが表現したい感情や表現をより自由にコントロールできるようにすることを目的としています。
標準ではiOSのARKit顔のトラッキングモジュールの52のブレンドシェイプが使われているため、ビルド方法はARKitの文書に従うのが最適です(https://developer.apple.com/documentation/arkit/arblendshapelocationを参照してください。各ブレンドシェイプが画像で表示されます)。52のシェイプと予定される名称は次のとおりです。
左眉を下げる |
右目を内側に動貸す |
口を閉じる |
下唇を口内へ巻き込む |
右眉を下げる |
左目を外側に動貸す |
左口角えくぼ |
上唇を口内へ巻き込む |
眉内側をあげる |
右目を外側に動かす |
右口角えくぼ |
下唇をすぼめる |
左眉の外側を上げる |
左目で見上げる |
左口角を下げる |
上唇をすぼめる |
右眉の外側を上げる |
右目で見上げる |
右口角を下げる |
左口角の微笑 |
頰を膨らます |
左目を細める |
唇を漏斗状にする |
右口角の微笑 |
左頬を縮める |
右目を細める |
口を左に動かす |
左口角を伸ばす |
右頬を縮める |
左目を見開く |
左下唇を下に歪める |
右口角を伸ばす |
左目の瞬き |
右目を見開く |
右下唇を下に歪める |
左上唇を上に歪める |
右目の瞬き |
顎を前に出す |
左口角を上げる |
右上唇を上に歪める |
左目で下を見る |
顎を左に動かす |
右口角を上げる |
鼻の左側にシワを寄せる |
右目で下を見る |
顎を下げる |
口を膨らます |
鼻の右側にシワを寄せる |
左目を内側に動かす |
顎を右に動かす |
口を右に動かす |
舌を出す |
備考:
-
完璧に同期したアニメーションの標準は、VRoidの標準と同じように、未加工のブレンドシェイプ名ではなく、ブレンドシェイプグループを使用します。
-
このトラッキング入力に一貫性のあるトラッキングデータを提供できる適切なトラッカーは、ARKitでもないと考えられるため、「顎を前に出す」シェイプはまったくマッピングされません。
-
口形素のマッピングはVRoidの標準と同じです。
頭の剛体運動のリターゲティング
VRoid Studioからエクスポートされる標準のVRMモデルには、骨格のアニメーションが含まれていません。そのため頭のモーショントラッキングは、モデルの骨格の関節上で直接リターゲティングされます。このシステムは、モデルの骨格がVRM標準に準拠していることを仮定して動作します(詳細は https://github.com/vrm-c/vrm-specification/blob/master/specification/0.0/README.md#vrm-ruleをご覧ください)。リターゲティングされた関節には追加の変形がなく、ワールドの変形にはOpenGLスタイルの回転軸で0,0,0だと仮定されます。
頭の剛体運動のリターゲティングに必要な関節と骨格のセットは以下の通りです。
-
脊柱
-
胸
-
胸上部
-
首
-
頭
モーションの範囲および関係する骨格と関節を下記の表に示します。
剛体運動 |
マッピングされたモーションの範囲(度) |
関係する骨格(および重量) |
頭のヨー |
[-50, 50] |
首(0.2)、頭(0.8) |
頭のロール |
[-30, 30] |
首(0.4)、頭(0.6) |
頭のピッチ |
[-30, 30] |
首(0.5)、頭(0.5) |
体のヨー |
[-45, 45] |
脊柱(0.3)、胸(0.3)、胸上部(0.4) |
体のロール |
[-30, 30] |
脊柱(0.3)、胸(0.3)、胸上部(0.4) |
体のピッチ |
[-30, 30] |
脊柱(0.3)、胸(0.3)、胸上部(0.4) |
骨格はVRM拡張機能のヒューマノイドシステム経由で設定可能です。
瞳孔のモーション
瞳孔のモーションは、頭の剛体運動と同じ方法でリターゲティングされ、左目と右目のボーンの変形を直接操作します。モーションの範囲は、両方の回転軸(ヨーとピッチ)において[-10, 10]度です。ただし、モデルの構築方法によって範囲が異なる場合があります。この範囲は、VRoid Studioのサンプルモデル上で実行される実験のプロセスによって決定されます。
プロシージャルな挙動
Animazeでは、「カメラ目線」設定や自然な目線の動きなどの、さまざまなプロシージャルな挙動がサポートされています。通常これらの挙動は、Animazeアプリ内のコアトラッキング解釈モジュールによって実装され、アバターの機能である骨格のアニメーションやブレンドシェイプを通して反映されます。VRMモデルの場合、以下のいくつかの動作ではカスタム実装が必要です。
-
idle1アニメーションを追加した場合にTポーズが適用されますが、VRMモデルによってTポーズがインポートされます。また、モデルが使用可能になるように、待機ポーズが追加されています。
-
VRMモデルによって静的なTポーズがインポートされ、アバターが自然に見えるように細かいプロシージャルな呼吸アニメーションが追加されます。
-
目のカメラ目線の挙動が追加され、瞳孔のモーション技術を使用してモーションがマッピングされます。
-
頭のカメラ目線の挙動では、頭の剛体運動技術を使用してモーションがマッピングされますが、トラッキングデータがオーバーライドされます。
待機ポーズ
VRMモデルは静的なTポーズをインポートすることで、手続き的に一連の骨格を回転させ、モデルの手を下げます。この場合に使用される関節および骨格は、左上腕、左前腕、右上腕、右前腕です。上腕はZ軸上(ロールモーション)で70度回転し、前腕はZ軸上でさらに10度回転します。
プロシージャルな待機ポーズでは、メッシュクリッピングが計算されず、現在は設定が無効化されています。
待機モーション(呼吸)
追加された待機モーションは、リアルな呼吸のアニメーションで、胸と胸上部の関節と骨格が影響を受けます。待機モーションは、VRMルールの状態として、関節のスケーリングがデフォルトで1に設定されていることを前提として、1から1.025の間隔で均一にスケーリングされる(すべての軸)アニメーションです。
目のカメラ目線
カメラ目線の挙動は、頭の関節の位置と方向(VRMルールに準拠している前提)を使用してカメラ目線を計算し、瞳孔の挙動リターゲティング技術を使用して適用されます。
頭のカメラ目線
頭のカメラ目線の挙動は、頭をカメラの方向へ向け、目のカメラ目線と同じ頭の関節の位置と方向を使用します。アニメーションマッピングには頭の剛体運動技術が使用されます。
特殊アクションおよび特殊ポーズ
特殊アクションと特殊ポーズは.VRM形式モデルで限定的にサポートされており、使用中の特定のアバター用にインポートする必要があります。現時点では、複数の.VRM形式モデル間で共有できるジェネリックなアニメーションはサポートされていません。
特殊アクションまたは特殊ポーズを追加するには、主に2つの方法があります。
-
.VRMモデルでアニメーションを提供する(基本の.gltf形式は骨格のアニメーションをサポートしています)。インポート後、これらのアニメーションは、適切なエディター機能を使用して、特殊アクションまたは特殊ポーズとして追加できます。
-
.VRMモデルをインポートし、その後特殊アニメーションを.FBX形式ファイルとしてインポートします。このファイルは、エディターの「特殊アクションと特殊ポーズ」メニューでアニメーションソースとして検出されます。これらのFBXアニメーションソースは、.VRMの骨格階層の100%に一致し、骨格のすべての関節にアニメーションのキーフレームがある必要があります。