Face Tracking Data Installer

収録パッケージ: kb10uy’s Various Tools / org.kb10uy.zatools (>= 6.3.0)

概要

VRCSDK 3.10.6 以降 VRCAvatarDescriptor で設定できるようになった Face Tracking のデータを JSON で記述し、ビルド時に設定できるコンポーネントです。

厳密にはこのコンポーネントによって実現される機能は VRCAvatarDescriptor 標準の機能でも実現可能ですが、 はっきり言って話にならない のでより厳格かつ軽量に設定できるコンポーネントを実装しています。

使い方

アバター内の適当な GameObject に Zatools Face Tracking Data Installer を追加します。 なお、アバター内にこのコンポーネントを複数追加することが可能です。

Component View Component View

  • Face Tracking メッシュ: Face Tracking で動作させたい SkinnedMeshRenderer のリスト。VRCAvatarDescriptor と同様に複数設定可能です。
  • 定義 JSON: 所定の形式(後述)で記述された JSON ファイルの TextAsset。

コンパイル結果の概略がコンポーネント下部に表示されます。

定義 JSON ファイルの形式

定義 JSON のデータ形式を宣言している JSON Schema をこのサイトで公開しているのでこれを参照していただくのが最も確実です1。 以下のサンプルデータも参考にしてください。

{
  "$schema": "https://zatools.kb10uy.dev/schemas/face-tracking-data-installer.schema.json",
  "Version": 1,
  "UseAllTrackingKeys": true,
  "VisemeDampen": { "Mode": "DampenTracking", "Amount": 0.5 },
  "BlendShapeSets": [
    {
      "Name": "Eyes",
      "DefaultWeight": 1.0,
      "TrackingKeys": {
        "EyeClosedLeft": "blink_L",
        "EyeClosedRight": "blink_R",
        "EyeWideLeft": { "Shape": "surprised_L", "Multiplier": 0.5 },
        "EyeWideRight": { "Shape": "surprised_R", "Multiplier": 0.5 }
      }
    },
    {
      "Name": "Mouth",
      "DefaultWeight": 1.0,
      "TrackingKeys": {
        "JawOpen": "mouth_open",
        "TongueOut": "tongue_out"
      },
      "Visemes": {
        "aa": "vrc.v_aa",
        "oh": "vrc.v_oh"
      }
    }
  ],
  "ParameterBehaviors": [
    {
      "Operation": "ApplyBlendSetWeight",
      "Target": "Mouth",
      "Expression": {
        "Type": "Max",
        "TrackingKeys": [{ "Key": "Voice", "Invert": true }]
      }
    },
    {
      "Operation": "ForwardToAnimator",
      "Target": "FT/EyesClosed",
      "Expression": {
        "Type": "Min",
        "TrackingKeys": ["EyeClosedLeft", "EyeClosedRight"]
      }
    },
    {
      "Operation": "ApplyToBlendshape",
      "Target": "blush",
      "Weight": "Eyes",
      "Expression": {
        "Type": "Custom",
        "Expression": "clamp((CheekSquintLeft + CheekSquintRight) * 0.5, 0, 1)"
      }
    },
    {
      "Operation": "LimitBlendshapeMax",
      "Target": "surprised_L",
      "Expression": {
        "Type": "Multiply",
        "TrackingKeys": [{ "Key": "EyeClosedLeft", "Invert": true }]
      }
    },
    {
      "Operation": "LimitBlendshapeMin",
      "Target": "mouth_open",
      "Expression": {
        "Type": "Add",
        "TrackingKeys": ["Viseme_aa", "Viseme_oh"]
      }
    }
  ]
}

  1. LLM に投げたらやってくれるでしょう 多分 ↩︎