用語集#
- Node#
- ジョイント#
- Joint#
position + rotation。簡単のために本記事では scale は除外する。
- 骨格#
- Skeleton#
Joint の集合。 各Joint は初期姿勢として World 位置を持つ。 初期姿勢に回転が含まれるなら、それをローカル軸と言う。
- モデル#
スキニングモデルのことを指すかもしれないが、注意する。
- ボーンローカル軸#
- ローカル軸#
初期姿勢での Joint の向き。 ヒューマンボーンの稼働方向とローカル軸が一致しているデータ表現がありうるが、 保証されておらず、判定する方法も無い。誤判定してローカル軸をヒューマンボーンとして使ってしまうと、 ワールド軸から推定するよりも結果が悪化することもありえる。 もし、有効なローカル軸から厳格TPoseを作ることができれば、精度を高めることができて、 親指の斜めさを解決することが期待できる。 ユーザーモデルに決まった軸付けを要求するのは難しい(技量的、使用ツール的にできない可能性)。 厳格TPoseでは
Blender流に割り当てるので ロール軸がY、yaw 軸が Z である1種類しか考慮しない。- ボーン#
- Bone#
- ヒューマンボーン#
- HumanBone#
Bone は Joint を拡張して、tail と up を決めることにより3次元の空間を明示する。 ヒューマノイドを構成する。 本記事では、joint(node) と bone を明確に区別する。
- ヒューマノイド#
- Humanoid#
決まったボーン構成を持つ骨格。 必須ボーンと必須ボーン同士の親子関係が決まっている。 ヒューマノイドは、hips 以外は移動せずに回転しかしない。
- ポーズ#
- Pose#
hipsの移動と各ヒューマンボーンの回転のセット。 skeleton の初期姿勢からの相対値で表される。
- 姿勢#
骨格にポーズを適用した状態。 本記事では骨格の見た目全体を姿勢と呼び、ポーズはモーションの1フレーム分のデータというニュアンスで使い分ける。
boneの姿勢は、Transform(pos + rot)という意味で使うかも。- TPose#
モーションキャプチャーの初期ポーズとして使われることが多い。 直立して、両腕を水平にして、手の平を下向きにする。 モーションキャプチャーでは指を扱わないことが多いこともあり、指はあいまい。
- リターゲット#
同一体格の初期姿勢、ローカル軸違いのリターゲット。これは座標変換で、変換前後で同じ姿勢を取ることができるはずである。 異なる体格に対する体格差リターゲット。IKなどでモーションを補正する(回転を変更する)需要が発生しうる。 本記事では、2種類のリターゲットを区別する。 前者はモデルを扱いやすいように変換する前後で発生し、後者はポーズを異なるモデル間でやり取りするときに発生する。 単にリターゲットと言ったときに2つは区別されてないので、内容に注意する。 vrmの正規化は前者である。 Unity の mecanim、モーションビルダーのキャラクタライズは両者が混ざっているんでないか。 具体的には、(元モデルの座標系)=>座標変換=>(TPose的な処理用の座標系)=>ポーズ転送=>座標変換=>(対象モデルの座標系) というような一連の操作がパイプラインのようになっている。
- 初期姿勢#
- 姿勢の個性#
初期姿勢が、TPoseから大きく逸脱するような骨格のサポートを想定した場合になにか必要そう。 厳格TPoseからの差分回転を適用すると変になるかもしれない。