Humanoid#

ボーン構成#

親子関係#

../_images/logic.jpg

すべてのボーンが 完全に ワールド軸平行#

厳格TPose 向けの HumanBone 定義#

  • ボーンローカル座標をXYZではなく、Yaw,Pitch,Roll で抽象的に規定する。+で右手系の方向に回転することにしよう(Yaw+左,Pitch+上,Roll+右)

  • ボーンを TPose のときに連続して同じ方向に進むものに分類

    • 連続の最後に末端ボーンが必要(bvhのendSite)

    • hand を中指に接続していたが、hand と finger 分離したほうがよさそう(中指の開始位置が厳格TPoseで変わらない方がよい)

      • やっぱり中指で良さそう。hand-end 追加するのめんどくさいし、中指になるでしょ。

    • 同じ分類のものは同じローカル軸を持つ

分類

bone

Roll軸(進行方向)

Yaw軸(UP方向)

memo

体幹

hips, spine, chest, neck, head, endSite

あえてupperChest言及せず

左腕

leftShoulder, leftUpperArm, leftLowerArm, leftHand, endSite(もしくはleftMiddleFinger)

右腕

rightShoulder, rightUpperArm, rightLowerArm, rightHand, endSite(もしくはrightMiddleFinger)

左脚

leftUpperLeg, leftLowerLeg, leftFoot, endSite

右脚

rightUpperLeg, rightLowerLeg, rightFoot, endSite

左つま先

leftToes, endSite

右つま先

rightToes, endSite

左親指以外の四指

index, middle, ring, little の proximal, intermediate, distal, endSite

2,1,1くらいの長さ比

左親指

metaCarpal, proximal, distal, endSite

右親指以外の四指

index, middle, ring, little, endSite

右親指

metaCarpal, proximal, distal, endSite

Core (19ボーン)#

体幹, 左右腕、左右脚で 19 ボーン

Option: つま先(2ボーン)#

左右ひとつずつ

Option: 指(30ボーン)#

1指3関節 x 5本 x 左右 で 30 ボーン

データ表現#

struct Part
{
  vec3 position;
  std::vector<float> length;
};

struct Skeleton
{
  Part trunk; // hips, spine, chest, neck, head, head-end
  Part leftArm; // shoulder, upper, lower, hand, hand-end or middle-finger  
  Part rightArm; // shoulder, upper, lower, hand, hand-end or middle-finger  
  Part leftLeg; // upper, lower, foot, foot-end(heel)
  Part rightLeg; // upper, lower, foot, foot-end(heel)
  Part lefToes;
  Part rightToes;
  Part leftFingerThumbnail;
  Part leftFingerIndex;
  Part leftFingerMiddle;
  Part leftFingerRing;
  Part leftFingerLittle;
  Part rightFingerThumbnail;
  Part rightFingerIndex;
  Part rightFingerMiddle;
  Part rightFingerRing;
  Part rightFingerLittle;
};