3Dモデルの設定
-
Unity Sceneへモデルをインポートする前に、Plask APIから出力されるローカル軸と3Dモデルのローカル軸を揃えることが必要です。
-
使用する3Dモデルの軸を揃えるリギングは、以下のドキュメントを参考に行ってください。
-
ローカル軸を揃えていないモデルに対して、補正計算を行わずにモーションキャプチャデータを適用した例
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>
}
-
-
例
{
"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ツールでjsonファイルをインポートするには
- API outputとして出力されたjsonファイルをPlask toolのライブラリに追加します。
- ライブラリに追加されたjsonファイルを3Dモデルにドラッグ&ドロップし、モーションとしてインポートしてください。
- インポートしたモーションをシーンにドラッグ&ドロップし、アニメーションを再生して確認してください。