Plask API アウトプットガイドライン

3Dモデルの設定

  • Unity Sceneへモデルをインポートする前に、Plask APIから出力されるローカル軸と3Dモデルのローカル軸を揃えることが必要です。

  • 使用する3Dモデルの軸を揃えるリギングは、以下のドキュメントを参考に行ってください。

    Plask APIデータ用にモデルのリギングを設定する

  • ローカル軸を揃えていないモデルに対して、補正計算を行わずにモーションキャプチャデータを適用した例

API outputの構造

API は、下記の例のような構造を持つjsonファイルとなります。

{
    "result": [
        {
            "motionNumber": <motion index>,
                    "trackData": [
                                {
                                  "boneName": <bone name>,
                                  "fps": <frames per second>,
                                  "property": <Transform type(position or rotationQuaternion)>,
                                  "transformKeys": [
                                        {
                                              "frame": <frame number>,
                                              "time": <time with keyframes>,
                                              "value": [
                                                    <position(3) or quaternion(4) values>
                                              ]
                                        }
                                  ]
                            }
                        ]
        }
    ],
    "workingtime": <Time taken for motion capture>
}

    • response.json

      {
      "result": [
      {
      "motionNumber": 0,
      "trackData": [ ...
      ]
      }
      ],
      "workingtime": 55.64448 4758377075
      }
  • モーションキャプチャデータは、“result”>”trackData”に含まれています。中には、24個のボーンからなるスケルトンをベースにした位置データ (x, y, z) や回転データ (x, y, z, w) が保存されています。ボーンは次のような構造になっています。

    ソースのボーン構造

  • “result”>”trackData”の配列のうち、[[[hips]]]は位置およびクォータニオン型の値を持ち、hipsを除く23個のボーンはクォータニオン型の値のみを持つため、合計25個の要素が存在することになります。各要素は、boneName・fps・プロパティ・transformKeysから構成されます。

    "trackData": [
            {
                    "boneName": "hips",
                    "fps": 30,
                    "property": "position",
                    "transformKeys": [ 
                            {
                                    "frame": 0,
                                    "time": 0,
                                    "value": [
                                            0.06301826238632202,
                                            0,
                                            0.2913147509098053
                                    ]
                            },
                            ...
                    ]
            },
            {
                    "boneName": "hips",
                    "fps": 30,
                    "property": "rotationQuaternion",
                    "transformKeys": [ ...
                    ]
            },
            {
                    "boneName": "leftUpLeg",
                    "fps": 30,
                    "property": "rotationQuaternion",
                    "transformKeys": [ ...
                    ]
            },
            ...
            {
                    "boneName": "rightHandIndex1",
                    "fps": 30,
                    "property": "rotationQuaternion",
                    "transformKeys": [ ...
                    ]
            },
    • boneName はモーションキャプチャデータを有するボーンの名称です
    • fps は、動きを抽出した動画のフレームレート(fps)です。
    • property は、変換値のタイプを表します。
    • transformKeys は、各ポーズに対応した時間と値からなる配列です。各ポーズには、frame、time、value informationが存在します。
      • frame は、ポーズのフレーム順序を表します。
      • time は、ポーズをする時間を表します。単位は秒です。
      • value はポーズの変換値を表します。プロパティの種類が位置の場合は3つの値 (x, y, z)、rotationQuaternionの場合は4つの値 (x, y, z, w) を持ちます。

アニメーションへの適用

  • 1フレームは3つの位置、4つのクォータニオンに対応します。
    • 位置の値は、1つのキーフレームに対応しており、x, y, z (unit is m)の順序で3つずつ表示されます。
    • rotationQuaternionの値もまた、1つのキーフレームに対応しており、 x, y, z, w の順序で4つずつ表示されます。

  • 上記の画像では、Babylon.jsエンジン内にあるMannequin.glbモデルのPelvis boneアニメーションコンポーネントに対して、API output dataを適用しています。(Babylon.js]で用いられる位置単位のcmに合わせるため、位置座標の値をそれぞれ100倍し、Z値はキャラクターモデルの身長に合わせて調整しています。)

  • 位置座標やクォータニオン座標の値は、使用する3Dエンジンで扱うアニメーションコンポーネントの構造に応じて設定する必要があります。

    使用例: Plask UnityとiOSにおけるアニメーションへのAPI応答について

Plaskツールでjsonファイルをインポートするには

  • API outputとして出力されたjsonファイルをPlask toolのライブラリに追加します。
  • ライブラリに追加されたjsonファイルを3Dモデルにドラッグ&ドロップし、モーションとしてインポートしてください。
  • インポートしたモーションをシーンにドラッグ&ドロップし、アニメーションを再生して確認してください。