Fountain Coach Gitowner-controlled · read only

laban-rig.git · canonical_rig.json

laban-rig.git / canonical_rig.json

revision fc813fbf6ee5e1554e429fb8bf91ffb33f310308 · complete file

{
  "skeletonSchema": {
    "$schema": "http://json-schema.org/draft-07/schema#",
    "title": "CanonicalHumanoidSkeleton",
    "type": "object",
    "required": [
      "skeletonId",
      "version",
      "source",
      "coordinateSystem",
      "joints"
    ],
    "properties": {
      "skeletonId": {
        "type": "string",
        "description": "Stable identifier for this skeleton definition, e.g. 'canonical-arkit-body-v1'"
      },
      "version": {
        "type": "string",
        "description": "Semantic version of this skeleton description, e.g. '1.0.0'"
      },
      "source": {
        "type": "string",
        "description": "Origin of the skeleton topology, e.g. 'ARKit.defaultBody3D'"
      },
      "coordinateSystem": {
        "type": "object",
        "required": [
          "upAxis",
          "forwardAxis",
          "rightAxis",
          "unit"
        ],
        "properties": {
          "upAxis": {
            "type": "string",
            "enum": [
              "X",
              "Y",
              "Z",
              "-X",
              "-Y",
              "-Z"
            ]
          },
          "forwardAxis": {
            "type": "string",
            "enum": [
              "X",
              "Y",
              "Z",
              "-X",
              "-Y",
              "-Z"
            ]
          },
          "rightAxis": {
            "type": "string",
            "enum": [
              "X",
              "Y",
              "Z",
              "-X",
              "-Y",
              "-Z"
            ]
          },
          "unit": {
            "type": "string",
            "enum": [
              "meters",
              "centimeters",
              "millimeters"
            ]
          }
        }
      },
      "joints": {
        "type": "array",
        "minItems": 1,
        "items": {
          "$ref": "#/definitions/Joint"
        }
      },
      "metadata": {
        "type": "object",
        "description": "Optional free-form metadata for tools, exporters, etc."
      }
    },
    "definitions": {
      "Joint": {
        "type": "object",
        "required": [
          "id",
          "name",
          "parentId",
          "side",
          "role",
          "labanPart"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "Canonical joint ID, stable across formats, e.g. 'pelvis'"
          },
          "name": {
            "type": "string",
            "description": "Native joint name in the source skeleton, e.g. ARKit's 'hips_joint'"
          },
          "parentId": {
            "type": [
              "string",
              "null"
            ],
            "description": "Canonical ID of the parent joint; null for root"
          },
          "side": {
            "type": "string",
            "enum": [
              "CENTER",
              "LEFT",
              "RIGHT"
            ]
          },
          "role": {
            "$ref": "#/definitions/JointRole"
          },
          "labanPart": {
            "$ref": "#/definitions/LabanPart"
          },
          "restTransform": {
            "type": [
              "array",
              "null"
            ],
            "description": "4x4 column-major local transform matrix in bind pose, relative to parent; or null if specified elsewhere",
            "items": {
              "type": "number"
            },
            "minItems": 16,
            "maxItems": 16
          },
          "notes": {
            "type": "string",
            "description": "Optional human-readable comments"
          }
        }
      },
      "JointRole": {
        "type": "string",
        "enum": [
          "ROOT",
          "PELVIS",
          "SPINE_LOWER",
          "SPINE_MID",
          "SPINE_UPPER",
          "NECK_BASE",
          "NECK_TOP",
          "HEAD",
          "JAW",
          "CLAVICLE",
          "SHOULDER",
          "ELBOW",
          "WRIST",
          "HAND",
          "HIP",
          "KNEE",
          "ANKLE",
          "BALL",
          "TOE_END"
        ]
      },
      "LabanPart": {
        "type": "string",
        "enum": [
          "WHOLE",
          "TRUNK",
          "HEAD_NECK",
          "ARM_LEFT",
          "ARM_RIGHT",
          "HAND_LEFT",
          "HAND_RIGHT",
          "LEG_LEFT",
          "LEG_RIGHT",
          "FOOT_LEFT",
          "FOOT_RIGHT"
        ]
      }
    }
  },
  "exampleSkeleton": {
    "skeletonId": "canonical-arkit-body-v1",
    "version": "1.0.0",
    "source": "ARKit.defaultBody3D",
    "coordinateSystem": {
      "upAxis": "Y",
      "forwardAxis": "Z",
      "rightAxis": "X",
      "unit": "meters"
    },
    "joints": [
      {
        "id": "root",
        "name": "hips_joint",
        "parentId": null,
        "side": "CENTER",
        "role": "ROOT",
        "labanPart": "WHOLE",
        "restTransform": null,
        "notes": "Logical root aligned with pelvis / center of mass."
      },
      {
        "id": "pelvis",
        "name": "hips_joint",
        "parentId": "root",
        "side": "CENTER",
        "role": "PELVIS",
        "labanPart": "TRUNK",
        "restTransform": null
      },
      {
        "id": "spine_lower",
        "name": "spine_1_joint",
        "parentId": "pelvis",
        "side": "CENTER",
        "role": "SPINE_LOWER",
        "labanPart": "TRUNK",
        "restTransform": null
      },
      {
        "id": "spine_mid",
        "name": "spine_4_joint",
        "parentId": "spine_lower",
        "side": "CENTER",
        "role": "SPINE_MID",
        "labanPart": "TRUNK",
        "restTransform": null
      },
      {
        "id": "spine_upper",
        "name": "spine_7_joint",
        "parentId": "spine_mid",
        "side": "CENTER",
        "role": "SPINE_UPPER",
        "labanPart": "TRUNK",
        "restTransform": null
      },
      {
        "id": "neck_base",
        "name": "neck_1_joint",
        "parentId": "spine_upper",
        "side": "CENTER",
        "role": "NECK_BASE",
        "labanPart": "HEAD_NECK",
        "restTransform": null
      },
      {
        "id": "neck_top",
        "name": "neck_4_joint",
        "parentId": "neck_base",
        "side": "CENTER",
        "role": "NECK_TOP",
        "labanPart": "HEAD_NECK",
        "restTransform": null
      },
      {
        "id": "head",
        "name": "head_joint",
        "parentId": "neck_top",
        "side": "CENTER",
        "role": "HEAD",
        "labanPart": "HEAD_NECK",
        "restTransform": null
      },
      {
        "id": "hip_left",
        "name": "left_upLeg_joint",
        "parentId": "pelvis",
        "side": "LEFT",
        "role": "HIP",
        "labanPart": "LEG_LEFT",
        "restTransform": null
      },
      {
        "id": "knee_left",
        "name": "left_leg_joint",
        "parentId": "hip_left",
        "side": "LEFT",
        "role": "KNEE",
        "labanPart": "LEG_LEFT",
        "restTransform": null
      },
      {
        "id": "ankle_left",
        "name": "left_foot_joint",
        "parentId": "knee_left",
        "side": "LEFT",
        "role": "ANKLE",
        "labanPart": "FOOT_LEFT",
        "restTransform": null
      },
      {
        "id": "toe_left",
        "name": "left_toes_joint",
        "parentId": "ankle_left",
        "side": "LEFT",
        "role": "TOE_END",
        "labanPart": "FOOT_LEFT",
        "restTransform": null
      },
      {
        "id": "hip_right",
        "name": "right_upLeg_joint",
        "parentId": "pelvis",
        "side": "RIGHT",
        "role": "HIP",
        "labanPart": "LEG_RIGHT",
        "restTransform": null
      },
      {
        "id": "knee_right",
        "name": "right_leg_joint",
        "parentId": "hip_right",
        "side": "RIGHT",
        "role": "KNEE",
        "labanPart": "LEG_RIGHT",
        "restTransform": null
      },
      {
        "id": "ankle_right",
        "name": "right_foot_joint",
        "parentId": "knee_right",
        "side": "RIGHT",
        "role": "ANKLE",
        "labanPart": "FOOT_RIGHT",
        "restTransform": null
      },
      {
        "id": "toe_right",
        "name": "right_toes_joint",
        "parentId": "ankle_right",
        "side": "RIGHT",
        "role": "TOE_END",
        "labanPart": "FOOT_RIGHT",
        "restTransform": null
      },
      {
        "id": "clavicle_left",
        "name": "left_shoulder_1_joint",
        "parentId": "spine_upper",
        "side": "LEFT",
        "role": "CLAVICLE",
        "labanPart": "ARM_LEFT",
        "restTransform": null
      },
      {
        "id": "shoulder_left",
        "name": "left_arm_joint",
        "parentId": "clavicle_left",
        "side": "LEFT",
        "role": "SHOULDER",
        "labanPart": "ARM_LEFT",
        "restTransform": null
      },
      {
        "id": "elbow_left",
        "name": "left_forearm_joint",
        "parentId": "shoulder_left",
        "side": "LEFT",
        "role": "ELBOW",
        "labanPart": "ARM_LEFT",
        "restTransform": null
      },
      {
        "id": "wrist_left",
        "name": "left_hand_joint",
        "parentId": "elbow_left",
        "side": "LEFT",
        "role": "WRIST",
        "labanPart": "HAND_LEFT",
        "restTransform": null
      },
      {
        "id": "clavicle_right",
        "name": "right_shoulder_1_joint",
        "parentId": "spine_upper",
        "side": "RIGHT",
        "role": "CLAVICLE",
        "labanPart": "ARM_RIGHT",
        "restTransform": null
      },
      {
        "id": "shoulder_right",
        "name": "right_arm_joint",
        "parentId": "clavicle_right",
        "side": "RIGHT",
        "role": "SHOULDER",
        "labanPart": "ARM_RIGHT",
        "restTransform": null
      },
      {
        "id": "elbow_right",
        "name": "right_forearm_joint",
        "parentId": "shoulder_right",
        "side": "RIGHT",
        "role": "ELBOW",
        "labanPart": "ARM_RIGHT",
        "restTransform": null
      },
      {
        "id": "wrist_right",
        "name": "right_hand_joint",
        "parentId": "elbow_right",
        "side": "RIGHT",
        "role": "WRIST",
        "labanPart": "HAND_RIGHT",
        "restTransform": null
      }
    ]
  }
}