diff --git a/src/3d/Camera.tsx b/src/3d/Camera.tsx index 6cd08e1..70b5ba9 100644 --- a/src/3d/Camera.tsx +++ b/src/3d/Camera.tsx @@ -1,8 +1,11 @@ import { CameraControls } from '@react-three/drei'; import { Component, createRef, ReactNode } from 'react'; +import XYZValue from './value/xyz_value'; interface CameraProps { disabled?: boolean; + pos?: XYZValue; + lookAt?: XYZValue; } class Camera extends Component { @@ -10,7 +13,9 @@ class Camera extends Component { componentDidMount() { if (!this._cameraRef.current) return; - this._cameraRef.current.setLookAt(0, 250, 350, 0, 100, 0, false); + const pos = this.props.pos || new XYZValue(0, 250, 350); + const lookAt = this.props.lookAt || new XYZValue(0, 100, 0); + this._cameraRef.current.setLookAt(pos.x, pos.y, pos.z, lookAt.x, lookAt.y, lookAt.z, false); } render(): ReactNode { diff --git a/src/3d/FullBody.scss b/src/3d/FullBody.scss new file mode 100644 index 0000000..c99fe72 --- /dev/null +++ b/src/3d/FullBody.scss @@ -0,0 +1,39 @@ +.full-body { + width: 100vw; + height: 100vh; + position: relative; + + .overlay { + position: absolute; + top: 0; + left: 0; + display: flex; + justify-content: flex-start; + align-self: start; + + .overlay-area { + margin: 8px; + padding: 8px 8px 32px 8px; + background-color: #f5f5f5; + border: 1px solid #e0e0e0; + border-radius: 10px; + + .iteration { + pointer-events: none; + -webkit-user-select: none; + /* Safari */ + -ms-user-select: none; + /* IE 10 and IE 11 */ + user-select: none; + /* Standard syntax */ + } + } + } + + .canvas { + width: 100vw; + height: 100vh; + background-color: #f0f0f0; + border-radius: 10px; + } +} \ No newline at end of file diff --git a/src/3d/FullBody.tsx b/src/3d/FullBody.tsx new file mode 100644 index 0000000..9cbf7aa --- /dev/null +++ b/src/3d/FullBody.tsx @@ -0,0 +1,139 @@ +import Camera from './Camera'; +import XYZValue from './value/xyz_value'; +import { Canvas } from '@react-three/fiber'; +import { Component, ReactNode } from 'react'; +import FullBodyFABRIK from './fabrik/full-body-fabrik'; + +import './FullBody.scss'; + +import TargetVisualizer from './visualizer/TargetVisualizer'; +import BoneVisualizerFunc from './visualizer/BoneVisualizer'; +import Character, { importTemplate } from './character/character'; + +interface FullBodyState { + isLoading: boolean; + cameraEnabled: boolean; + fabrikIteration: number; + char: Character; +} + +class FullBody extends Component { + + private _fabrik: FullBodyFABRIK = new FullBodyFABRIK(); + + private _targetLH: XYZValue = new XYZValue(0, 0, 0); + private _targetRH: XYZValue = new XYZValue(0, 0, 0); + private _targetLF: XYZValue = new XYZValue(0, 0, 0); + private _targetRF: XYZValue = new XYZValue(0, 0, 0); + + constructor(props: any) { + super(props); + this.state = { + isLoading: true, + cameraEnabled: true, + fabrikIteration: 0, + char: importTemplate(), + } + } + + componentDidMount(): void { + this._targetLH = this.state.char.find('hand_l')!.world[0]; + this._targetRH = this.state.char.find('hand_r')!.world[0]; + this._targetLF = this.state.char.find('foot_l')!.world[0]; + this._targetRF = this.state.char.find('foot_r')!.world[0]; + this.setState({ + isLoading: false + }); + } + + private _onTargetLHMove = (pos: XYZValue): void => { + this._targetLH = pos; + this._resolve(); + } + + private _onTargetRHMove = (pos: XYZValue): void => { + this._targetRH = pos; + this._resolve(); + } + + private _onTargetLFMove = (pos: XYZValue): void => { + this._targetLF = pos; + this._resolve(); + } + + private _onTargetRFMove = (pos: XYZValue): void => { + this._targetRF = pos; + this._resolve(); + } + + private _resolve = (): void => { + const targets = { + leftHand: this._targetLH, + rightHand: this._targetRH, + leftFoot: this._targetLF, + rightFoot: this._targetRF, + }; + const char = this.state.char; + const iteration = this._fabrik.resolve(char, targets); + this.setState({ + fabrikIteration: iteration, + char: char, + }); + } + + render(): ReactNode { + if (this.state.isLoading) { + return
Loading...
; + } + return ( +
+
+
+ iteration: {this.state.fabrikIteration} +
+
+
+ + + + + + + {/* */} + + this.setState({ cameraEnabled: false })} + onDragEnd={() => this.setState({ cameraEnabled: true })} + /> + this.setState({ cameraEnabled: false })} + onDragEnd={() => this.setState({ cameraEnabled: true })} + /> + this.setState({ cameraEnabled: false })} + onDragEnd={() => this.setState({ cameraEnabled: true })} + /> + this.setState({ cameraEnabled: false })} + onDragEnd={() => this.setState({ cameraEnabled: true })} + /> + +
+
+ ) + } +} + +export default FullBody; \ No newline at end of file diff --git a/src/3d/character/bone.ts b/src/3d/character/bone.ts index 08a1d31..7aa4923 100644 --- a/src/3d/character/bone.ts +++ b/src/3d/character/bone.ts @@ -102,6 +102,10 @@ class Bone { return true; } + public canLeadTo(name: string): boolean { + return this._childrenNames.has(name); + } + public list(): Bone[] { const list: Bone[] = []; for (const bone of this) { diff --git a/src/3d/character/character.ts b/src/3d/character/character.ts new file mode 100644 index 0000000..ea4d678 --- /dev/null +++ b/src/3d/character/character.ts @@ -0,0 +1,56 @@ +import Bone from './bone'; +import XYZValue from '../value/xyz_value'; + +class Character { + private _root: Bone; + + public get root(): Bone { + return this._root; + } + + public set root(b: Bone) { + this._root = b; + } + + constructor(root: Bone) { + this._root = root; + } + + // in-order traversal + *[Symbol.iterator](): Generator { + yield* this._root; + } + + public copy(): Character { + return new Character(this._root.copy()); + } + + public find(name: string): Bone | undefined { + return this._root.find(name); + } +} + +import templateJson from '../../assets/template.json'; + +const importTemplate = (): Character => { + const bone = parseBoneFromJson(templateJson['root']); + bone.rotation.x = -90; + return new Character(bone); +} + +const parseBoneFromJson = (json: any): Bone => { + const pos = new XYZValue(json['base']['tx'], json['base']['ty'], json['base']['tz']); + const rot = new XYZValue(json['base']['rx'], json['base']['ry'], json['base']['rz']); + const bone = new Bone(json['name'], pos, rot); + + for (const child of json['children']) { + bone.addChild(parseBoneFromJson(child)); + } + + return bone; +} + +export default Character; +export { + importTemplate +} \ No newline at end of file diff --git a/src/3d/fabrik/full-body-fabrik.ts b/src/3d/fabrik/full-body-fabrik.ts new file mode 100644 index 0000000..ef575b7 --- /dev/null +++ b/src/3d/fabrik/full-body-fabrik.ts @@ -0,0 +1,238 @@ +import Bone from '../character/bone'; +import PointGroup from '../value/point_group'; +import Character from '../character/character'; +import XYZValue, { moveXYZAlone, subXYZ } from '../value/xyz_value'; +import Quat, { applyQuatRotation, averageQuat, quatFromDegree, transferQuat, xyzRotation } from '../value/quat'; + +interface FullBodyIKTargets { + leftHand: XYZValue; + rightHand: XYZValue; + leftFoot: XYZValue; + rightFoot: XYZValue; +} + +class FullBodyFABRIK { + private static MAX_ITERATIONS = 20; + private static TOLERANCE = 0.1; + + public resolve(char: Character, targets: FullBodyIKTargets): number { + for (let i = 0; i < FullBodyFABRIK.MAX_ITERATIONS; i++) { + const boneShouldVisit = this._extractBoneShouldVisit(char.root, 'pelvis', 'hand_l', 'hand_r', 'foot_l', 'foot_r'); + const worlds: Map = new Map(); + { // Initialize + for (const bone of char.root) { + if (boneShouldVisit.has(bone.name)) { + worlds.set(bone.name, bone.world[0]); + } + } + } + let forward: Map = new Map(); + {// Forward + const upperBodyForward = this._solveUpperBodyForward( + char.root, + targets, + worlds, + boneShouldVisit + ); + const lowerBodyForward = this._solveLowerBodyForward( + char.root, + upperBodyForward.get('pelvis')!, + targets, + worlds, + boneShouldVisit + ); + forward = new Map([...upperBodyForward, ...lowerBodyForward]); + // use lower body forward as the pelvis, because ue want to keep + // lower body(especially foot) in place + forward.set('pelvis', lowerBodyForward.get('pelvis')!); + } + { // Update root and hip first + const root = char.root; + const hip = root.find('pelvis')!; + hip.pos = transferQuat(forward.get('pelvis')!, quatFromDegree(root.rotation).inverse()); + } + { // Backward, use hip as fix root + for (const bone of char.find('pelvis')!) { + if (!boneShouldVisit.has(bone.name)) { + continue; + } + if (bone.name === 'foot_l' || bone.name === 'foot_r' || bone.name === 'hand_l' || bone.name === 'hand_r') { + continue; + } + const quats: Quat[] = []; + const [bw, br] = bone.world; + for (const child of bone.children) { + if (!boneShouldVisit.has(child.name)) { + continue; + } + const v1 = subXYZ(child.world[0], bw); + const v2 = subXYZ(forward.get(child.name)!, bw); + const quat = xyzRotation(v1, v2) + quats.push(quat); + } + const avg = averageQuat(quats); + bone.rotation = applyQuatRotation(br, bone.rotation, avg); + } + } + // Early termination when the target is reached + if ( + subXYZ(targets.leftHand, char.find('hand_l')!.world[0]).length() < FullBodyFABRIK.TOLERANCE && + subXYZ(targets.rightHand, char.find('hand_r')!.world[0]).length() < FullBodyFABRIK.TOLERANCE && + subXYZ(targets.leftFoot, char.find('foot_l')!.world[0]).length() < FullBodyFABRIK.TOLERANCE && + subXYZ(targets.rightFoot, char.find('foot_r')!.world[0]).length() < FullBodyFABRIK.TOLERANCE + ) { + return i + 1; + } + } + return FullBodyFABRIK.MAX_ITERATIONS; + } + + private _extractBoneShouldVisit( + root: Bone, + hip: string, + leftHand: string, + rightHand: string, + leftFoot: string, + rightFoot: string + ): Set { + const path: Set = new Set(['root']); + const h = root.find(hip); + if (!h) { + throw new Error('Hip bone not found'); + } + for (const b of h) { + if (b.canLeadTo(leftHand) || b.canLeadTo(rightHand) || b.canLeadTo(leftFoot) || b.canLeadTo(rightFoot)) { + path.add(b.name); + } + } + return path; + } + + private _solveUpperBodyForward( + root: Bone, + targets: FullBodyIKTargets, + worlds: Map, + boneShouldVisit: Set, + ): Map { + const forward: Map = new Map(); + this._saveAddPoint(forward, 'hand_l', targets.leftHand); + this._saveAddPoint(forward, 'hand_r', targets.rightHand); + const queue: Bone[] = []; + const visited: Set = new Set(); + queue.push(root.find('hand_l')!); + queue.push(root.find('hand_r')!); + let current: Bone | undefined = queue.shift(); + while (current) { + if (!current.parent || current.name === 'pelvis') { // skip root or pelvis + visited.add(current.name); + current = queue.shift(); + continue; + } + if (visited.has(current.name)) { // skip visited + current = queue.shift(); + continue; + } + // if one of the children should visit but not visited, push + // current back to the queue and continue + let allChildrenVisited = true; + for (const child of current.children) { + if (boneShouldVisit.has(child.name) && !visited.has(child.name)) { + allChildrenVisited = false; + break; + } + } + if (!allChildrenVisited) { + queue.push(current); + current = queue.shift(); + continue; + } + + visited.add(current!.name); + // forward process + const child = forward.get(current.name)!; + const parent = worlds.get(current.parent.name)!; + const length = current.pos.length(); + const newWorld = moveXYZAlone(child.centroid, parent, length); + this._saveAddPoint(forward, current.parent.name, newWorld); + queue.push(current.parent); + current = queue.shift(); + } + return this._mapPointGroupToMapXYZValue(forward); + } + + private _solveLowerBodyForward( + root: Bone, + hipUpperResolved: XYZValue, + targets: FullBodyIKTargets, + worlds: Map, + boneShouldVisit: Set, + ): Map { + const forward: Map = new Map(); + this._saveAddPoint(forward, 'foot_l', targets.leftFoot); + this._saveAddPoint(forward, 'foot_r', targets.rightFoot); + const queue: Bone[] = []; + const visited: Set = new Set(); + queue.push(root.find('foot_l')!); + queue.push(root.find('foot_r')!); + let current: Bone | undefined = queue.shift(); + while (current) { + if (!current.parent || current.name === 'pelvis') { // skip root or pelvis + visited.add(current.name); + current = queue.shift(); + continue; + } + if (visited.has(current.name)) { // skip visited + current = queue.shift(); + continue; + } + // if one of the children should visit but not visited, push + // current back to the queue and continue + let allChildrenVisited = true; + for (const child of current.children) { + if (boneShouldVisit.has(child.name) && !visited.has(child.name)) { + allChildrenVisited = false; + break; + } + } + if (!allChildrenVisited) { + queue.push(current); + current = queue.shift(); + continue; + } + + visited.add(current!.name); + // forward process + const child = forward.get(current.name)!; + let parent = worlds.get(current.parent.name)!; + if (current.parent.name === 'pelvis') { + parent = hipUpperResolved; + } + const length = current.pos.length(); + const newWorld = moveXYZAlone(child.centroid, parent, length); + this._saveAddPoint(forward, current.parent.name, newWorld); + queue.push(current.parent); + current = queue.shift(); + } + return this._mapPointGroupToMapXYZValue(forward); + } + + private _saveAddPoint(m: Map, name: string, point: XYZValue): void { + if (!m.has(name)) { + m.set(name, new PointGroup()); + } + m.get(name)!.addPoint(point); + } + + private _mapPointGroupToMapXYZValue(m: Map): Map { + const result: Map = new Map(); + for (const [k, v] of m) { + result.set(k, v.centroid); + } + return result; + } +} + +export default FullBodyFABRIK; +export type { + FullBodyIKTargets, +} \ No newline at end of file diff --git a/src/3d/visualizer/BoneVisualizer.tsx b/src/3d/visualizer/BoneVisualizer.tsx index e5a4bf7..13ac8bb 100644 --- a/src/3d/visualizer/BoneVisualizer.tsx +++ b/src/3d/visualizer/BoneVisualizer.tsx @@ -6,6 +6,8 @@ import { ConeGeometry, Mesh, MeshStandardMaterial, Scene, SphereGeometry, Vector interface BoneVisualizerProps { scene: Scene; root: Bone; + nodeSize: number; + stickSize: number; } class BoneVisualizer extends Component { @@ -23,7 +25,7 @@ class BoneVisualizer extends Component { private _createMeshes() { for (const bone of this.props.root) { const join = new Mesh() - join.geometry = new SphereGeometry(5) + join.geometry = new SphereGeometry(this.props.nodeSize) join.material = new MeshStandardMaterial({ color: 0xffff00 }) const [world, _] = bone.world @@ -35,7 +37,7 @@ class BoneVisualizer extends Component { if (bone.parent) { const segment = new Mesh() - segment.geometry = new ConeGeometry(3, bone.length, 20) + segment.geometry = new ConeGeometry(this.props.stickSize, bone.length, 20) segment.material = new MeshStandardMaterial({ color: 0xffff00 }) const [parentWorld, _] = bone.parent.world @@ -94,10 +96,12 @@ class BoneVisualizer extends Component { export default function BoneVisualizerFunc(props: { root: Bone; + nodeSize?: number; + stickSize?: number; }) { const { scene } = useThree(); return ( - + ) }; \ No newline at end of file diff --git a/src/3d/visualizer/CharacterVisualizer.tsx b/src/3d/visualizer/CharacterVisualizer.tsx new file mode 100644 index 0000000..04038a4 --- /dev/null +++ b/src/3d/visualizer/CharacterVisualizer.tsx @@ -0,0 +1,60 @@ +import { Component } from 'react'; +import { useFBX } from '@react-three/drei'; +import { useThree } from '@react-three/fiber'; +import Character from '../character/character'; +import { Group, Object3DEventMap, Scene, SkeletonHelper } from 'three'; + +interface CharacterVisualizerProps { + fbx: Group; + scene: Scene; + char: Character; +} + +class CharacterVisualizer extends Component { + private _fbx: Group; + + constructor(props: CharacterVisualizerProps) { + super(props); + this._fbx = props.fbx; + } + + componentDidMount(): void { + const helper = new SkeletonHelper(this._fbx); + this.props.scene.add(helper); + this._applyAnimation(); + } + + componentDidUpdate(prevProps: Readonly, _prevState: Readonly, _snapshot?: any): void { + if (prevProps.char !== this.props.char) { + this._applyAnimation(); + } + } + + private _applyAnimation = () => { + const root = this._fbx.getObjectByName('root'); + if (!root) return; + root.traverse((obj) => { + const bone = this.props.char.find(obj.name); + if (!bone) throw new Error(`Bone with name ${obj.name} not found`); + console.log(obj.rotation, bone.rotation); + obj.rotation.set(bone.rotation.x, bone.rotation.y, bone.rotation.z, 'ZYX'); + }); + } + + render() { + return ( + + ) + } +} + +export default function CharacterVisualizerFunc(props: { + char: Character; +}) { + const fbx = useFBX('/body.fbx'); + const { scene } = useThree(); + + return ( + + ) +}; \ No newline at end of file diff --git a/src/3d/visualizer/TargetVisualizer.tsx b/src/3d/visualizer/TargetVisualizer.tsx index ff01a87..610a049 100644 --- a/src/3d/visualizer/TargetVisualizer.tsx +++ b/src/3d/visualizer/TargetVisualizer.tsx @@ -9,6 +9,7 @@ interface TargetVisualizerProps { camera: Camera; render: WebGLRenderer; initPos?: XYZValue; + size: number; onTargetMove: (pos: XYZValue) => void; onDragStart?: () => void; onDragEnd?: () => void; @@ -21,7 +22,7 @@ class TargetVisualizer extends Component { constructor(props: TargetVisualizerProps) { super(props); this._mesh = new Mesh(); - this._mesh.geometry = new SphereGeometry(6) + this._mesh.geometry = new SphereGeometry(this.props.size) this._mesh.material = new MeshStandardMaterial({ color: 0xff0000 }) this._mesh.position.set(this.props.initPos?.x ?? 0, this.props.initPos?.y ?? 0, this.props.initPos?.z ?? 0); this.props.scene.add(this._mesh); @@ -54,6 +55,7 @@ class TargetVisualizer extends Component { export default function TargetVisualizerFunc(props: { initPos?: XYZValue; + size?: number; onTargetMove: (pos: XYZValue) => void; onDragStart?: () => void; onDragEnd?: () => void; @@ -61,8 +63,6 @@ export default function TargetVisualizerFunc(props: { const { scene, gl, camera } = useThree(); return ( - + ) } \ No newline at end of file diff --git a/src/assets/template.json b/src/assets/template.json new file mode 100644 index 0000000..ff78b61 --- /dev/null +++ b/src/assets/template.json @@ -0,0 +1 @@ +{"root": {"name": "root", "base": {"tx": 0.0, "ty": 0.0, "tz": 0.0, "rx": 0.0, "ry": 0.0, "rz": 0.0, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "pelvis", "base": {"tx": -1.5625454824802522e-29, "ty": -2.094848871231079, "tz": 87.07075500488281, "rx": 89.99999999999982, "ry": -87.94709357473859, "rz": -89.99999999999982, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "spine_01", "base": {"tx": 2.0311715602874756, "ty": 0.10440310835838318, "tz": -5.693236002018724e-20, "rx": -1.4898406412709962e-13, "ry": 0.00021307822593165686, "rz": -10.950072084655448, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "spine_02", "base": {"tx": 4.267596244812012, "ty": -7.105427357601002e-15, "tz": -5.963111948670274e-19, "rx": 4.2464985635453565e-20, "ry": -4.4042917936737486e-29, "rz": 7.320823540297456, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "spine_03", "base": {"tx": 6.75445032119751, "ty": -2.6645352591003757e-15, "tz": 6.389528663108823e-15, "rx": 5.161315164542115e-14, "ry": 0.00036117547758389657, "rz": 9.506167902497403, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "spine_04", "base": {"tx": 7.897822856903076, "ty": -4.618527782440651e-14, "tz": 4.049711954667856e-15, "rx": 2.6692277827264515e-19, "ry": 1.9412564653889166e-19, "rz": 8.532875693804156, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "spine_05", "base": {"tx": 15.038429260253906, "ty": -3.573955353886049e-09, "tz": 5.1092767169858e-12, "rx": -1.2132853510599488e-20, "ry": 1.9412565816789957e-19, "rz": -1.5326813750678985, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "neck_01", "base": {"tx": 10.624388694763184, "ty": -5.013767179207207e-10, "tz": 9.337962261074528e-14, "rx": -1.2132852766860365e-19, "ry": -5.823769504225509e-19, "rz": -23.15449357715306, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "neck_02", "base": {"tx": 5.316551208496094, "ty": 1.7795649398522073e-09, "tz": 4.814002061565015e-12, "rx": -3.1545418954936915e-19, "ry": 9.706282770795797e-20, "rz": 0.9045645520476061, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "head", "base": {"tx": 5.279529094696045, "ty": 1.6342482922482304e-13, "tz": -3.469446951953614e-17, "rx": 4.2920947667359934e-19, "ry": 4.853141119379092e-19, "rz": 11.425708018130226, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}]}]}, {"name": "clavicle_l", "base": {"tx": 5.1428070068359375, "ty": 0.8832057118415833, "tz": -0.8165484070777893, "rx": 170.14170512580452, "ry": 82.42361852864549, "rz": 159.40192690793236, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "upperarm_l", "base": {"tx": 13.340044021606445, "ty": -7.787474169163033e-05, "tz": -0.0002744915254879743, "rx": -4.607825476758903, "ry": 45.16852619040026, "rz": -3.305341271269605, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "upperarm_correctiveRoot_l", "base": {"tx": 0.0, "ty": 0.0, "tz": 0.0, "rx": 0.0, "ry": -0.0, "rz": -3.975693351829396e-16, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "upperarm_bck_l", "base": {"tx": 1.353843331336975, "ty": 5.6457295417785645, "tz": 0.6248241662979126, "rx": -71.33860590354806, "ry": -0.0, "rz": -3.975693351829396e-16, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "upperarm_fwd_l", "base": {"tx": 2.8106441497802734, "ty": -5.772027969360352, "tz": -0.4037199914455414, "rx": 98.94517416560775, "ry": -1.9520053287632744, "rz": 11.877573660059191, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "upperarm_in_l", "base": {"tx": 5.238709449768066, "ty": -1.399399757385254, "tz": -3.944599151611328, "rx": 180.0, "ry": -48.194143483235486, "rz": -1.491014746160395e-15, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "upperarm_out_l", "base": {"tx": -0.13020947575569153, "ty": 0.25720199942588806, "tz": 5.15362024307251, "rx": 3.1805546814635168e-15, "ry": -0.0, "rz": -3.975693351829396e-16, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}]}, {"name": "lowerarm_l", "base": {"tx": 23.83799934387207, "ty": 2.220446049250313e-14, "tz": -3.979039320256561e-13, "rx": 4.134721073749514e-14, "ry": -3.816665701661541e-14, "rz": -36.6470006091699, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "hand_l", "base": {"tx": 22.965999603271484, "ty": -7.815970093361102e-14, "tz": 8.526512829121202e-14, "rx": -71.44170110634099, "ry": 8.180400618354215, "rz": 3.4187271458356734, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "pinky_metacarpal_l", "base": {"tx": 2.6522703170776367, "ty": 0.43180879950523376, "tz": 1.6065832376480103, "rx": -26.582505882885176, "ry": -20.973636942598745, "rz": 11.6769878079508, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "pinky_01_l", "base": {"tx": 4.1507487297058105, "ty": 1.1368683772161603e-13, "tz": -1.7763568394002505e-14, "rx": 0.2484019867563307, "ry": 0.778265224970402, "rz": 11.702160949889796, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "pinky_02_l", "base": {"tx": 2.5510001182556152, "ty": -2.1316282072803006e-14, "tz": 7.105427357601002e-14, "rx": -2.9817699527563703e-15, "ry": -7.951386296312536e-15, "rz": 20.36200007981984, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "pinky_03_l", "base": {"tx": 1.5770000219345093, "ty": -2.1316282072803006e-14, "tz": -6.394884621840902e-14, "rx": 3.578124206524537e-15, "ry": 3.0215270797091106e-14, "rz": 3.609999976999247, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "pinky_03_bulge_l", "base": {"tx": 0.59932541847229, "ty": 0.5216273069381714, "tz": -0.0398733988404274, "rx": -88.4075352934583, "ry": -0.7362848802747856, "rz": 1.9321761284938042, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "pinky_03_half_l", "base": {"tx": 0.0, "ty": 0.0, "tz": 0.0, "rx": 0.0, "ry": -1.5902773407317584e-15, "rz": 1.5902773407317584e-15, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "pinky_03_in_l", "base": {"tx": -0.04532395303249359, "ty": 0.4689944386482239, "tz": -0.009613717906177044, "rx": -89.43593318376168, "ry": -2.415535462749213, "rz": 0.8711548163831997, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "pinky_02_dip_l", "base": {"tx": 0.0004737557319458574, "ty": -0.5696653723716736, "tz": 0.01856890320777893, "rx": 89.36133121039465, "ry": 1.9538318276281628, "rz": -1.546333345625992, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}]}]}, {"name": "pinky_02_bulge_l", "base": {"tx": 1.015424132347107, "ty": 0.5118633508682251, "tz": 0.14777348935604095, "rx": -74.93862087767405, "ry": -0.2558433193754961, "rz": -3.756686634273624, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "pinky_02_side_out_l", "base": {"tx": 1.0387001037597656, "ty": 0.045452434569597244, "tz": 0.5577539205551147, "rx": -0.48642136842403527, "ry": 13.487263280229751, "rz": -91.83430631294759, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "pinky_02_side_inn_l", "base": {"tx": 0.9942960739135742, "ty": -0.01255855057388544, "tz": -0.5825204849243164, "rx": -177.65768730245048, "ry": -1.7747497812471116, "rz": -88.73905371608355, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "pinky_02_half_l", "base": {"tx": 0.0, "ty": 0.0, "tz": 0.0, "rx": -3.975693351829396e-16, "ry": -1.5902773407317584e-15, "rz": -0.0, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "pinky_02_in_l", "base": {"tx": 0.16726824641227722, "ty": 0.5555758476257324, "tz": 0.08096069097518921, "rx": -82.27497985903565, "ry": -1.0792917327086753, "rz": -0.9319955586456636, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "pinky_02_pip_l", "base": {"tx": -0.14124970138072968, "ty": -0.5745026469230652, "tz": 0.036159664392471313, "rx": 88.66900012506002, "ry": 1.7075821486226832, "rz": -9.044907731233396, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}]}]}, {"name": "pinky_01_palmMid_l", "base": {"tx": 0.9102275371551514, "ty": 0.6387359499931335, "tz": 0.0039610289968550205, "rx": -79.67048285459562, "ry": -0.22883922679863933, "rz": -5.949184234194128, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "pinky_01_bulge_l", "base": {"tx": 1.8656649589538574, "ty": 0.6076467037200928, "tz": 0.024585330858826637, "rx": -82.54185882310972, "ry": -0.1502817382512007, "rz": -0.7095079791459196, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "pinky_01_side_out_l", "base": {"tx": 1.9697822332382202, "ty": -0.1581532508134842, "tz": 0.574246883392334, "rx": -1.080209839842911, "ry": 8.941306828169758, "rz": -87.60737919328113, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "pinky_01_side_inn_l", "base": {"tx": 1.9589067697525024, "ty": 0.10830514132976532, "tz": -0.6995092034339905, "rx": -179.31575031177965, "ry": 15.716955727282313, "rz": -84.88627031351501, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "pinky_01_half_l", "base": {"tx": 0.0, "ty": 0.0, "tz": 0.0, "rx": -3.975693351829396e-16, "ry": -0.0, "rz": 1.5902773407317584e-15, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "pinky_01_mcp_l", "base": {"tx": -0.20967581868171692, "ty": -0.7977951169013977, "tz": -0.03386245295405388, "rx": 94.00514175216813, "ry": 10.135922007077088, "rz": 5.9631772403987355, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "pinky_01_palm_l", "base": {"tx": 0.44146281480789185, "ty": 0.7346950769424438, "tz": 0.3849276602268219, "rx": -69.8497433065069, "ry": 8.616482746867428, "rz": -8.953497338177344, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}]}]}, {"name": "pinky_metacarpal_slide_l", "base": {"tx": 1.6675289869308472, "ty": -0.31163734197616577, "tz": -0.1581522673368454, "rx": 96.19857353695105, "ry": 3.670818133096168, "rz": 3.305855497471663, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}]}, {"name": "ring_metacarpal_l", "base": {"tx": 2.7567989826202393, "ty": 0.2743716835975647, "tz": 0.6301309466362, "rx": -11.482463023671727, "ry": -13.279005574600985, "rz": -0.48786438348103744, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "ring_01_l", "base": {"tx": 4.3929243087768555, "ty": -9.947598300641403e-14, "tz": -6.394884621840902e-14, "rx": -0.6686828624031005, "ry": 0.8814185663770107, "rz": 17.87854755963167, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "ring_02_l", "base": {"tx": 3.743000030517578, "ty": -5.684341886080802e-14, "tz": 5.684341886080802e-14, "rx": 4.293748815983984e-14, "ry": -3.816665429277145e-14, "rz": 26.69400014637915, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "ring_03_l", "base": {"tx": 2.8429999351501465, "ty": -1.4210854715202004e-14, "tz": -1.4921397450962104e-13, "rx": -4.651561407306936e-14, "ry": 3.180554722747685e-14, "rz": 4.710000051232254, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "ring_03_bulge_l", "base": {"tx": 0.39964279532432556, "ty": 0.558481752872467, "tz": 0.08821357041597366, "rx": -89.28228033094753, "ry": -2.181446432015695, "rz": -1.3321606371298267, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "ring_03_half_l", "base": {"tx": -2.842170943040401e-14, "ty": -9.237055564881302e-14, "tz": 2.842170943040401e-14, "rx": -1.5902773407317584e-15, "ry": 3.1805546814635168e-15, "rz": 1.5902773407317584e-15, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "ring_02_dip_l", "base": {"tx": -0.23420508205890656, "ty": -0.582325279712677, "tz": 0.0749637559056282, "rx": 92.77811437325992, "ry": -3.7804315051134947, "rz": -3.9645290776467785, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "ring_03_in_l", "base": {"tx": -0.22956089675426483, "ty": 0.5923759937286377, "tz": 0.07858841866254807, "rx": -87.28609316541397, "ry": -2.7299591066360613, "rz": -7.073965193326105, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}]}]}, {"name": "ring_02_bulge_l", "base": {"tx": 1.5942776203155518, "ty": 0.6098749041557312, "tz": 0.01654488407075405, "rx": -85.9629397551262, "ry": -2.0672859400580483, "rz": -1.5598742789491713, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "ring_02_side_out_l", "base": {"tx": 1.5324550867080688, "ty": -0.0786311998963356, "tz": 0.6239337921142578, "rx": 3.798896335433722, "ry": -3.3889550644009683, "rz": -89.85709213145995, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "ring_02_side_inn_l", "base": {"tx": 1.6241706609725952, "ty": -0.2523348927497864, "tz": -0.5907316207885742, "rx": -178.1206146398321, "ry": -4.7888038218419196, "rz": -89.00669608767353, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "ring_02_half_l", "base": {"tx": -9.947598300641403e-14, "ty": -8.526512829121202e-14, "tz": 0.0, "rx": 1.3914926731402886e-15, "ry": -0.0, "rz": 1.5902773407317584e-15, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "ring_02_in_l", "base": {"tx": 0.4183494448661804, "ty": 0.6711719036102295, "tz": -0.06292377412319183, "rx": -99.35069113308083, "ry": -5.95433835268483, "rz": -6.856412992356848, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "ring_02_pip_l", "base": {"tx": 0.024126730859279633, "ty": -0.6733824610710144, "tz": -0.03930867835879326, "rx": 90.0783836438498, "ry": -0.8141116563557156, "rz": -9.461451891820067, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}]}]}, {"name": "ring_01_palmMid_l", "base": {"tx": 1.6473854780197144, "ty": 0.9199504852294922, "tz": -0.1887522041797638, "rx": -89.63960016453287, "ry": -2.51134740730118, "rz": -1.89608144880058, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "ring_01_bulge_l", "base": {"tx": 2.856499671936035, "ty": 0.8655955791473389, "tz": -0.08550740033388138, "rx": -93.39768661387673, "ry": -2.751125935915748, "rz": 4.948323358247961, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "ring_01_side_out_l", "base": {"tx": 2.8139631748199463, "ty": -0.12231463938951492, "tz": 0.6404076218605042, "rx": -0.12584106940953482, "ry": 0.3298583381166698, "rz": -84.03316507659706, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "ring_01_side_inn_l", "base": {"tx": 2.914475917816162, "ty": 0.1310741901397705, "tz": -0.7791811227798462, "rx": 179.69485306345877, "ry": 8.32238373470435, "rz": -90.32738245069893, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "ring_01_half_l", "base": {"tx": 2.842170943040401e-14, "ty": -8.526512829121202e-14, "tz": 3.197442310920451e-14, "rx": 3.975693351829396e-15, "ry": -1.5902773407317584e-15, "rz": 3.1805546814635168e-15, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "ring_01_mcp_l", "base": {"tx": 0.15917149186134338, "ty": -0.7104759812355042, "tz": 0.1499018669128418, "rx": 85.65642320355155, "ry": -1.4814220066609414, "rz": 3.8303884033920577, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "ring_01_palm_l", "base": {"tx": 0.6197919249534607, "ty": 1.3254302740097046, "tz": -0.21368366479873657, "rx": -80.27836255247786, "ry": -2.1696388929450046, "rz": -14.669029841391536, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}]}]}, {"name": "ring_metacarpal_slide_l", "base": {"tx": 2.2473034858703613, "ty": -0.3637268543243408, "tz": -0.030413204804062843, "rx": 92.51302340961735, "ry": 1.1938530698813765, "rz": -3.1638671540714687, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}]}, {"name": "thumb_01_l", "base": {"tx": 2.0020296573638916, "ty": 1.3448725938796997, "tz": -2.2719030380249023, "rx": 80.71705232037372, "ry": 34.54410611283592, "rz": 22.007820584241642, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "thumb_02_l", "base": {"tx": 4.075952053070068, "ty": 7.105427357601002e-14, "tz": 2.1316282072803006e-14, "rx": -1.05085974692407, "ry": -6.203325717526042, "rz": 20.09856695702312, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "thumb_03_l", "base": {"tx": 2.3887434005737305, "ty": -2.4868995751603507e-13, "tz": 4.263256414560601e-14, "rx": -2.3854159172139944e-14, "ry": -3.180554528563462e-15, "rz": 8.880000176180175, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "thumb_03_bulge_l", "base": {"tx": 0.8540140390396118, "ty": 0.9278578162193298, "tz": -0.13635843992233276, "rx": -98.78788781729439, "ry": 2.3528356240054453, "rz": -3.7394486350876686, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "thumb_03_side_out_l", "base": {"tx": 0.3379212021827698, "ty": 0.20741279423236847, "tz": 0.7480942606925964, "rx": 2.062814467325439, "ry": 1.0346597850619637, "rz": 179.87517112180865, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "thumb_03_side_inn_l", "base": {"tx": 0.24173292517662048, "ty": 0.07430823892354965, "tz": -0.827369749546051, "rx": 173.22056274202902, "ry": 2.240899520721119, "rz": 8.5410353855817, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "thumb_03_half_l", "base": {"tx": 8.87713383690425e-07, "ty": 1.0923416766672744e-06, "tz": 5.944753525000124e-07, "rx": 3.1805546814635168e-15, "ry": 1.5902773407317584e-15, "rz": -0.0, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "thumb_03_pip_l", "base": {"tx": 0.02821403183043003, "ty": -0.7125564813613892, "tz": 0.13273675739765167, "rx": 82.12042071599589, "ry": 3.052577192570798, "rz": -0.621698740769459, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "thumb_03_in_l", "base": {"tx": 0.016098082065582275, "ty": 0.787993848323822, "tz": -0.12771987915039062, "rx": -94.02526869975733, "ry": 2.8673007432824007, "rz": -6.294252028798489, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}]}]}, {"name": "thumb_02_bulge_l", "base": {"tx": 1.6746025085449219, "ty": 0.859277069568634, "tz": -0.1133212000131607, "rx": -96.15206266938101, "ry": 2.3001241022814995, "rz": -2.323929637122008, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "thumb_02_side_out_l", "base": {"tx": 1.0629315376281738, "ty": 0.2661048173904419, "tz": 0.8130069971084595, "rx": 12.682659699112689, "ry": -2.51848126301773, "rz": 170.2155289365004, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "thumb_02_side_inn_l", "base": {"tx": 0.9576175212860107, "ty": -0.11052662134170532, "tz": -0.7045482993125916, "rx": 167.3173403008873, "ry": 2.51848126301773, "rz": -9.784471063499636, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "thumb_02_half_l", "base": {"tx": 7.084531716827769e-07, "ty": 1.2162809071014635e-06, "tz": 5.944753525000124e-07, "rx": 1.5902773407317584e-15, "ry": -1.5902773407317584e-15, "rz": -0.0, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "thumb_02_in_l", "base": {"tx": 0.7327224612236023, "ty": 1.013791561126709, "tz": -0.09599549323320389, "rx": -112.83612979923484, "ry": 0.263686013368409, "rz": -9.241403699386153, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "thumb_02_mcp_l", "base": {"tx": -0.5188635587692261, "ty": -0.608445942401886, "tz": -0.0585329532623291, "rx": 91.62786182567598, "ry": -7.169819381476529, "rz": -7.2481585385954865, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}]}]}, {"name": "thumb_01_side_out_l", "base": {"tx": 0.5726892352104187, "ty": -0.6719751954078674, "tz": -1.1091889142990112, "rx": 127.64955209759752, "ry": -8.85029645185281, "rz": -0.6570898959924362, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "thumb_01_side_inn_l", "base": {"tx": 4.167999744415283, "ty": 1.1418578624725342, "tz": 1.2959799766540527, "rx": -69.64002207117987, "ry": 65.81304472699031, "rz": -58.179234605878754, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}]}, {"name": "middle_metacarpal_l", "base": {"tx": 2.7600228786468506, "ty": 0.14173290133476257, "tz": -0.37157779932022095, "rx": -1.2408028090248675, "ry": -1.6568711892553738, "rz": -5.057844893319805, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "middle_01_l", "base": {"tx": 4.894044876098633, "ty": 0.0, "tz": 1.0658141036401503e-14, "rx": -3.625073133205381, "ry": -4.021235047699814, "rz": 23.861684902541132, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "middle_02_l", "base": {"tx": 4.328000068664551, "ty": 2.842170943040401e-14, "tz": 4.618527782440651e-14, "rx": -1.1628902594733257e-14, "ry": -1.5902772595575778e-14, "rz": 19.666999321170906, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "middle_03_l", "base": {"tx": 2.558000087738037, "ty": -1.1368683772161603e-13, "tz": -5.684341886080802e-14, "rx": 1.9779075394683192e-14, "ry": 2.0673605446326658e-14, "rz": 2.8500001260998844, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "middle_03_bulge_l", "base": {"tx": 0.6038790345191956, "ty": 0.5837720036506653, "tz": -0.09139694273471832, "rx": -100.65496851171407, "ry": -1.7355836101648168, "rz": -2.487150755970591, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "middle_03_half_l", "base": {"tx": 0.0, "ty": 0.0, "tz": 0.0, "rx": 1.4908850069360235e-16, "ry": -1.5902773407317584e-15, "rz": 5.963540027744094e-16, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "middle_03_in_l", "base": {"tx": -0.02162456326186657, "ty": 0.5364882946014404, "tz": -0.08702123910188675, "rx": -99.74880593159726, "ry": 0.5366720028200113, "rz": -0.3571725736151643, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "middle_02_dip_l", "base": {"tx": 0.018765361979603767, "ty": -0.5799578428268433, "tz": 0.096049003303051, "rx": 83.69273878917218, "ry": 1.0615835818443229, "rz": 3.2575615235207063, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}]}]}, {"name": "middle_02_bulge_l", "base": {"tx": 1.3356157541275024, "ty": 0.6387307643890381, "tz": -0.11870738863945007, "rx": -97.73343781975088, "ry": 1.5819457902675063, "rz": 4.121086488394726, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "middle_02_side_out_l", "base": {"tx": 1.2894165515899658, "ty": -0.05868103355169296, "tz": 0.6112178564071655, "rx": 0.6125492920855126, "ry": -2.2162074681004693, "rz": -90.2430141950581, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "middle_02_side_inn_l", "base": {"tx": 1.2774064540863037, "ty": -0.0692702904343605, "tz": -0.711643636226654, "rx": -177.94816808872207, "ry": -2.8962077502305807, "rz": -93.74208030821093, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "middle_02_half_l", "base": {"tx": 1.4210854715202004e-14, "ty": -4.973799150320701e-14, "tz": -8.171241461241152e-14, "rx": 1.0436195048552165e-15, "ry": -3.1805546814635168e-15, "rz": 1.9878466759146977e-16, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "middle_02_pip_l", "base": {"tx": -0.11776040494441986, "ty": -0.7082177996635437, "tz": 0.05259855464100838, "rx": 83.20090871728695, "ry": -0.3146814818474865, "rz": -7.26340399415479, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "middle_02_in_l", "base": {"tx": 0.23586416244506836, "ty": 0.6451548933982849, "tz": -0.10652058571577072, "rx": -97.23020306832039, "ry": 0.8430371232164806, "rz": 1.4192509416854144, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}]}]}, {"name": "middle_01_palmMid_l", "base": {"tx": 1.680186152458191, "ty": 1.105277180671692, "tz": -0.13429959118366241, "rx": -97.79459610384349, "ry": -4.001273211178462, "rz": -16.043610372982894, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "middle_01_bulge_l", "base": {"tx": 3.1937427520751953, "ty": 0.824525773525238, "tz": -0.05147776007652283, "rx": -89.36677303071168, "ry": -0.27815517268372947, "rz": -2.3559987542424046, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "middle_01_side_out_l", "base": {"tx": 3.2591655254364014, "ty": -0.06433409452438354, "tz": 0.7133996486663818, "rx": -4.139994088094187, "ry": 1.4022918284523762, "rz": -90.1109713094223, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "middle_01_side_inn_l", "base": {"tx": 3.105686902999878, "ty": 0.20573624968528748, "tz": -0.7603422999382019, "rx": 171.9714292027125, "ry": 12.273454768140498, "rz": -93.80357545372138, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "middle_01_half_l", "base": {"tx": -1.4210854715202004e-14, "ty": 8.526512829121202e-14, "tz": -4.973799150320701e-14, "rx": -2.3854160110976376e-15, "ry": -0.0, "rz": -3.1805546814635168e-15, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "middle_01_mcp_l", "base": {"tx": 0.011892074719071388, "ty": -0.7211583852767944, "tz": 0.12494724988937378, "rx": 89.61719149907167, "ry": 3.8901800327734417, "rz": -1.7529449020387533, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "middle_01_palm_l", "base": {"tx": 0.6492824554443359, "ty": 1.4999641180038452, "tz": -0.2650638520717621, "rx": -93.53902373111914, "ry": -5.758273934861854, "rz": -23.31747185212468, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}]}]}, {"name": "middle_metacarpal_slide_l", "base": {"tx": 2.467193126678467, "ty": -0.24645040929317474, "tz": -0.0037693949416279793, "rx": 92.02888045019452, "ry": -0.2245491625198444, "rz": 1.063300859064155, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}]}, {"name": "index_metacarpal_l", "base": {"tx": 3.0422046184539795, "ty": 0.2553211748600006, "tz": -1.8377519845962524, "rx": 16.12985377575285, "ry": 6.176648033573443, "rz": -1.785600338588944, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "index_01_l", "base": {"tx": 4.727410793304443, "ty": -9.947598300641403e-14, "tz": -6.927791673660977e-14, "rx": -10.584879670944686, "ry": -4.193122953351139, "rz": 19.14539722951793, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "index_02_l", "base": {"tx": 4.013999938964844, "ty": -4.263256414560601e-14, "tz": 4.796163466380676e-14, "rx": -1.8685758329749425e-14, "ry": 3.1805547678714175e-14, "rz": 11.930028227965897, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "index_03_l", "base": {"tx": 1.9789999723434448, "ty": -5.684341886080802e-14, "tz": 1.2434497875801753e-14, "rx": -2.782985346280577e-15, "ry": -1.5902773407317584e-15, "rz": 1.5902773407317584e-15, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "index_03_bulge_l", "base": {"tx": 0.8327805995941162, "ty": 0.6522034406661987, "tz": -0.06090278550982475, "rx": -101.71523515810783, "ry": -1.6504213770990845, "rz": -3.286742796060229, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "index_03_half_l", "base": {"tx": -8.526512829121202e-14, "ty": -2.842170943040401e-14, "tz": -2.1316282072803006e-14, "rx": -2.782985346280577e-15, "ry": -1.5902773407317584e-15, "rz": 1.5902773407317584e-15, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "index_02_dip_l", "base": {"tx": -0.04833132401108742, "ty": -0.5098572373390198, "tz": 0.06341074407100677, "rx": 77.9612680717149, "ry": -1.4326969521588786, "rz": 7.23430969230415, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "index_03_in_l", "base": {"tx": 0.006830116733908653, "ty": 0.6099433302879333, "tz": -0.09932471811771393, "rx": -98.67161540594412, "ry": -0.9325587148629054, "rz": -1.4499510079738123, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}]}]}, {"name": "index_02_bulge_l", "base": {"tx": 1.2678937911987305, "ty": 0.7245029807090759, "tz": -0.1244257390499115, "rx": -92.9124767248599, "ry": -2.3100334555741915, "rz": -3.4996666047462046, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "index_02_side_out_l", "base": {"tx": 1.2193597555160522, "ty": 0.02425382100045681, "tz": 0.6219930052757263, "rx": -2.3037454036536085, "ry": 0.3418781074118788, "rz": -91.35648355613745, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "index_02_side_inn_l", "base": {"tx": 1.2391924858093262, "ty": 0.04654737561941147, "tz": -0.7297171950340271, "rx": -175.70866602875134, "ry": -18.303685623999716, "rz": -90.21499784833199, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "index_02_half_l", "base": {"tx": -7.105427357601002e-14, "ty": -9.947598300641403e-14, "tz": 4.618527782440651e-14, "rx": -2.782985346280577e-15, "ry": -1.5902773407317584e-15, "rz": 1.5902773407317584e-15, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "index_02_in_l", "base": {"tx": 0.2020227015018463, "ty": 0.7363420128822327, "tz": -0.16799837350845337, "rx": -92.6608991505622, "ry": -2.7325269422769796, "rz": 5.757588242281076, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "index_02_pip_l", "base": {"tx": 0.0517604723572731, "ty": -0.6386433839797974, "tz": 0.02570442482829094, "rx": 88.76945415488365, "ry": -1.2332887550294331, "rz": -1.487530836175485, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}]}]}, {"name": "index_01_palmMid_l", "base": {"tx": 1.4778538942337036, "ty": 0.9648545384407043, "tz": -0.18242141604423523, "rx": -91.90607721486819, "ry": 7.345056840810664, "rz": -13.385809411862876, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "index_01_bulge_l", "base": {"tx": 2.7003631591796875, "ty": 0.8645333647727966, "tz": -0.2221497744321823, "rx": -102.69042960434962, "ry": 1.3148289047583472, "rz": 0.12231406246126458, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "index_01_side_out_l", "base": {"tx": 2.7525644302368164, "ty": -0.1164122000336647, "tz": 0.7381480932235718, "rx": -4.839742325721771, "ry": 5.914191654472793, "rz": -90.38123314077708, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "index_01_side_inn_l", "base": {"tx": 2.6653010845184326, "ty": 0.08119422942399979, "tz": -0.8636971712112427, "rx": 177.0940263956582, "ry": 5.914191502012584, "rz": -90.3812363031972, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "index_01_half_l", "base": {"tx": 0.0, "ty": 0.0, "tz": 0.0, "rx": -1.5902773407317584e-15, "ry": -0.0, "rz": -3.1805546814635168e-15, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "index_01_mcp_l", "base": {"tx": -0.28235554695129395, "ty": -0.844515323638916, "tz": 0.1505112200975418, "rx": 91.57915087622659, "ry": 2.519803294369545, "rz": -0.6370500136481599, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "index_01_palm_l", "base": {"tx": 0.4859580993652344, "ty": 1.2094910144805908, "tz": -0.4187966585159302, "rx": -95.41974053975775, "ry": 3.005941588994312, "rz": -20.74307843927181, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}]}]}, {"name": "index_metacarpal_slide_l", "base": {"tx": 2.0670852661132812, "ty": -0.3152482509613037, "tz": 0.20080697536468506, "rx": 86.26422979648599, "ry": -2.3790414113361646, "rz": 5.955812221085668, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}]}, {"name": "wrist_inner_l", "base": {"tx": -0.20103633403778076, "ty": 1.4634844064712524, "tz": -0.29940319061279297, "rx": -95.36480598103388, "ry": -26.069109002102447, "rz": 11.879690023048619, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "wrist_outer_l", "base": {"tx": 0.011854689568281174, "ty": -1.4689337015151978, "tz": -0.26638397574424744, "rx": 84.63519401896612, "ry": -26.069109002102447, "rz": 11.879690023048619, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}]}, {"name": "lowerarm_twist_02_l", "base": {"tx": 7.655333042144775, "ty": 5.684341886080802e-14, "tz": -1.1368683772161603e-13, "rx": 0.0, "ry": -0.0, "rz": 3.1805546814635168e-15, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "lowerarm_twist_01_l", "base": {"tx": 15.31066608428955, "ty": -1.2789769243681803e-13, "tz": 2.842170943040401e-14, "rx": 0.0, "ry": -0.0, "rz": 3.1805546814635168e-15, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "lowerarm_correctiveRoot_l", "base": {"tx": -1.5358153859779122e-07, "ty": 2.0644353071475052e-07, "tz": -6.055477115296526e-07, "rx": 0.0, "ry": -0.0, "rz": 3.1805546814635168e-15, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "lowerarm_in_l", "base": {"tx": 1.2895704507827759, "ty": 0.22581693530082703, "tz": -2.4432764053344727, "rx": 180.0, "ry": -0.0, "rz": 3.1805546814635168e-15, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "lowerarm_out_l", "base": {"tx": 0.5562236309051514, "ty": 0.8276651501655579, "tz": 1.7489700317382812, "rx": 0.0, "ry": -0.0, "rz": 3.1805546814635168e-15, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "lowerarm_fwd_l", "base": {"tx": 1.2415845394134521, "ty": -2.363349199295044, "tz": 0.48246505856513977, "rx": 90.00000000000001, "ry": -0.0, "rz": 3.1805546814635176e-15, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "lowerarm_bck_l", "base": {"tx": 1.322060227394104, "ty": 3.154132127761841, "tz": -1.0789055824279785, "rx": -90.00000000000001, "ry": -0.0, "rz": 3.1805546814635176e-15, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}]}]}, {"name": "upperarm_twist_01_l", "base": {"tx": 7.946000099182129, "ty": 5.8812059222645985e-08, "tz": -2.8044325972587103e-07, "rx": 0.0, "ry": -0.0, "rz": -3.975693351829396e-16, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "upperarm_twistCor_01_l", "base": {"tx": 8.668621376273222e-13, "ty": 4.263256414560601e-14, "tz": -5.115907697472721e-13, "rx": 0.0, "ry": -0.0, "rz": -3.975693351829396e-16, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}]}, {"name": "upperarm_twist_02_l", "base": {"tx": 15.892000198364258, "ty": 1.5805896680376463e-07, "tz": -4.4299599721853156e-07, "rx": 0.0, "ry": -0.0, "rz": -3.975693351829396e-16, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "upperarm_tricep_l", "base": {"tx": 0.12805941700935364, "ty": 4.213237762451172, "tz": -0.055012378841638565, "rx": -94.85422033313465, "ry": 3.880948382736041, "rz": 1.524867297730236, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "upperarm_bicep_l", "base": {"tx": 0.39427658915519714, "ty": -2.794113874435425, "tz": -0.24188938736915588, "rx": 85.14577966686537, "ry": 3.880948382736041, "rz": 1.524867297730236, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "upperarm_twistCor_02_l", "base": {"tx": 0.0, "ty": -9.769962616701378e-15, "tz": 0.0, "rx": 0.0, "ry": -0.0, "rz": -3.975693351829396e-16, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}]}]}, {"name": "clavicle_out_l", "base": {"tx": 9.577280044555664, "ty": 0.06342566758394241, "tz": 4.908296585083008, "rx": -0.1805298097407072, "ry": -3.110289416072247, "rz": -4.291571038011407, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "clavicle_scap_l", "base": {"tx": 7.711236476898193, "ty": 5.283814430236816, "tz": -1.9678877592086792, "rx": 0.1805298097407072, "ry": 3.110289416072247, "rz": 175.7084289619886, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}]}, {"name": "clavicle_r", "base": {"tx": 5.142764568328857, "ty": 0.8832033276557922, "tz": 0.8162336349487305, "rx": 170.15077908420614, "ry": 82.42090913317202, "rz": -20.589078543336377, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "upperarm_r", "base": {"tx": -13.340977668762207, "ty": -7.788198854541406e-05, "tz": -0.0002744943485595286, "rx": -4.607873005702063, "ry": 45.16679563701373, "rz": -3.304658942541843, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "upperarm_correctiveRoot_r", "base": {"tx": 5.684341886080802e-14, "ty": -2.6645352591003757e-15, "tz": 8.526512829121202e-14, "rx": 3.975693351829396e-16, "ry": -3.1805546814635168e-15, "rz": -3.975693351829396e-16, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "upperarm_bck_r", "base": {"tx": -1.379249930381775, "ty": -5.6666765213012695, "tz": -0.7537534236907959, "rx": -71.33860590354806, "ry": -3.1805546814635168e-15, "rz": -3.975693351829396e-16, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "upperarm_in_r", "base": {"tx": -5.221926212310791, "ty": 1.393454670906067, "tz": 3.92789888381958, "rx": 180.0, "ry": -48.194143483235486, "rz": 1.2673625429615634e-15, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "upperarm_fwd_r", "base": {"tx": -2.716057062149048, "ty": 5.811124801635742, "tz": 0.40376704931259155, "rx": 98.94517416560775, "ry": -1.9520053287632744, "rz": 11.877573660059191, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "upperarm_out_r", "base": {"tx": 0.15165624022483826, "ty": -0.2738608121871948, "tz": -5.21068000793457, "rx": 3.975693351829396e-16, "ry": -3.1805546814635168e-15, "rz": -3.975693351829396e-16, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}]}, {"name": "lowerarm_r", "base": {"tx": -23.83829116821289, "ty": -1.5987211554602254e-14, "tz": 8.526512829121202e-14, "rx": 3.180554562265184e-15, "ry": 1.590277376724501e-14, "rz": -36.64697901025575, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "hand_r", "base": {"tx": -22.965755462646484, "ty": 1.8474111129762605e-13, "tz": -1.9895196601282805e-13, "rx": -71.44171722069608, "ry": 8.180373680208683, "rz": 3.418724516414552, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "pinky_metacarpal_r", "base": {"tx": -2.65226149559021, "ty": -0.4317869246006012, "tz": -1.6064318418502808, "rx": -26.582507826164985, "ry": -20.97363639421337, "rz": 11.676989387995121, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "pinky_01_r", "base": {"tx": -4.150722503662109, "ty": 1.3641373698192183e-05, "tz": -2.1854726583114825e-05, "rx": 0.2484019867563307, "ry": 0.778265224970402, "rz": 11.702160949889796, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "pinky_02_r", "base": {"tx": -2.5510077476501465, "ty": 4.778404763783328e-05, "tz": -7.733096026640851e-06, "rx": -3.77690867309958e-15, "ry": -3.180554686473318e-15, "rz": 20.36200007981984, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "pinky_03_r", "base": {"tx": -1.5570000410079956, "ty": 2.376696556893876e-06, "tz": 1.512748042387102e-07, "rx": -4.770832026883867e-15, "ry": 2.385416127877975e-14, "rz": 3.609999976999247, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "pinky_03_bulge_r", "base": {"tx": -0.6192783117294312, "ty": -0.5204049944877625, "tz": 0.0399346686899662, "rx": -88.40753528895473, "ry": -0.7362850165985398, "rz": 1.932175070107137, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "pinky_03_half_r", "base": {"tx": -0.01999444141983986, "ty": 0.001261447207070887, "tz": 1.7763568394002505e-13, "rx": 0.0, "ry": -0.0, "rz": -1.5902773407317584e-15, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "pinky_03_in_r", "base": {"tx": 0.04532085731625557, "ty": -0.4690299332141876, "tz": 0.009656643494963646, "rx": -89.43593318376168, "ry": -2.415535462749213, "rz": 0.8711548163831997, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "pinky_02_dip_r", "base": {"tx": -0.00044356612488627434, "ty": 0.5696755647659302, "tz": -0.01854594238102436, "rx": 89.36133121039465, "ry": 1.9538318276281628, "rz": -1.546333345625992, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}]}]}, {"name": "pinky_02_bulge_r", "base": {"tx": -1.0154552459716797, "ty": -0.5119277238845825, "tz": -0.1477709263563156, "rx": -74.93862087492676, "ry": -0.25584333045610347, "rz": -3.756687700867673, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "pinky_02_side_out_r", "base": {"tx": -1.038723349571228, "ty": -0.04546969756484032, "tz": -0.5577278733253479, "rx": -0.48642136842403527, "ry": 13.487263280229751, "rz": -91.83430631294759, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "pinky_02_side_inn_r", "base": {"tx": -0.9943221807479858, "ty": 0.012520764023065567, "tz": 0.5825235843658447, "rx": -177.65768728338114, "ry": -1.7747497625900326, "rz": -88.7390537159975, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "pinky_02_half_r", "base": {"tx": -1.9895196601282805e-13, "ty": 2.3447910280083306e-13, "tz": 1.4210854715202004e-13, "rx": -1.987846675914698e-16, "ry": 1.5902773407317584e-15, "rz": 7.951386703658792e-16, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "pinky_02_in_r", "base": {"tx": -0.1672956645488739, "ty": -0.555638313293457, "tz": -0.0808858722448349, "rx": -82.27497985903565, "ry": -1.0792917327086753, "rz": -0.9319955586456636, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "pinky_02_pip_r", "base": {"tx": 0.1413005292415619, "ty": 0.5745104551315308, "tz": -0.0361502580344677, "rx": 88.66900012506002, "ry": 1.7075821486226832, "rz": -9.044907731233396, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}]}]}, {"name": "pinky_01_palmMid_r", "base": {"tx": -0.9102709889411926, "ty": -0.638710618019104, "tz": -0.0038863627705723047, "rx": -79.6704828578378, "ry": -0.2288391181288716, "rz": -5.949185435085953, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "pinky_01_bulge_r", "base": {"tx": -1.8656691312789917, "ty": -0.6076402068138123, "tz": -0.024586498737335205, "rx": -82.54185882144209, "ry": -0.15028175506921085, "rz": -0.7095091712972188, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "pinky_01_side_out_r", "base": {"tx": -1.9697555303573608, "ty": 0.15815697610378265, "tz": -0.5741950869560242, "rx": -1.080209839842911, "ry": 8.941306828169758, "rz": -87.60737919328113, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "pinky_01_side_inn_r", "base": {"tx": -1.958883285522461, "ty": -0.10825993120670319, "tz": 0.6995694041252136, "rx": -179.31575031177965, "ry": 15.716955727282313, "rz": -84.88627031351501, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "pinky_01_half_r", "base": {"tx": -1.7053025658242404e-13, "ty": 1.7053025658242404e-13, "tz": 6.750155989720952e-14, "rx": 3.975693351829396e-16, "ry": -0.0, "rz": 3.1805546814635168e-15, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "pinky_01_mcp_r", "base": {"tx": 0.2096729576587677, "ty": 0.7977805137634277, "tz": 0.033935196697711945, "rx": 94.00514175216813, "ry": 10.135922007077088, "rz": 5.9631772403987355, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "pinky_01_palm_r", "base": {"tx": -0.4414609372615814, "ty": -0.7346319556236267, "tz": -0.3848550319671631, "rx": -69.8497433065069, "ry": 8.616482746867428, "rz": -8.953497338177344, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}]}]}, {"name": "pinky_metacarpal_slide_r", "base": {"tx": -1.6675138473510742, "ty": 0.3117249310016632, "tz": 0.15814943611621857, "rx": 96.19857350015438, "ry": 3.6708181597174345, "rz": 3.3058543261634394, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}]}, {"name": "ring_metacarpal_r", "base": {"tx": -2.756730556488037, "ty": -0.27432340383529663, "tz": -0.6299906373023987, "rx": -11.48246315028207, "ry": -13.279005469080758, "rz": -0.4878632997195285, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "ring_01_r", "base": {"tx": -4.392989158630371, "ty": -3.818695404333994e-05, "tz": 4.085200998815708e-05, "rx": -0.6686828624031005, "ry": 0.8814185663770107, "rz": 17.87854755963167, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "ring_02_r", "base": {"tx": -3.742932081222534, "ty": 3.366695818840526e-05, "tz": 8.595320650783833e-06, "rx": -2.782984773575845e-15, "ry": 1.9083328141653042e-14, "rz": 26.69400014637915, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "ring_03_r", "base": {"tx": -2.843010663986206, "ty": -1.213323230331298e-05, "tz": -6.093449337640777e-05, "rx": -2.3456591140201488e-14, "ry": 1.2722219092148806e-14, "rz": 4.710000051232254, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "ring_03_bulge_r", "base": {"tx": -0.3996945023536682, "ty": -0.5584657192230225, "tz": -0.08815719932317734, "rx": -89.28228030476262, "ry": -2.181446763927436, "rz": -1.3321618095519416, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "ring_03_half_r", "base": {"tx": -9.947598300641403e-14, "ty": 1.7053025658242404e-13, "tz": 1.2434497875801753e-13, "rx": -1.987846675914698e-15, "ry": -0.0, "rz": 0.0, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "ring_02_dip_r", "base": {"tx": 0.23415790498256683, "ty": 0.5824064016342163, "tz": -0.07491070032119751, "rx": 92.77811437325992, "ry": -3.7804315051134947, "rz": -3.9645290776467785, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "ring_03_in_r", "base": {"tx": 0.22950634360313416, "ty": -0.5923253893852234, "tz": -0.07853876054286957, "rx": -87.28609316541397, "ry": -2.7299591066360613, "rz": -7.073965193326105, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}]}]}, {"name": "ring_02_bulge_r", "base": {"tx": -1.5943316221237183, "ty": -0.6098686456680298, "tz": -0.016574645414948463, "rx": -85.96293972987527, "ry": -2.067286276904459, "rz": -1.5598754240273824, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "ring_02_side_out_r", "base": {"tx": -1.5325103998184204, "ty": 0.07868070900440216, "tz": -0.6239359378814697, "rx": 3.798896807406668, "ry": -3.388955196457466, "rz": -89.85709214982091, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "ring_02_side_inn_r", "base": {"tx": -1.6242425441741943, "ty": 0.25234314799308777, "tz": 0.5907143950462341, "rx": -178.12061448732572, "ry": -4.788803672274983, "rz": -89.0066960915947, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "ring_02_half_r", "base": {"tx": -1.2789769243681803e-13, "ty": 1.8474111129762605e-13, "tz": 1.2434497875801753e-13, "rx": 4.770832022195275e-15, "ry": -0.0, "rz": 0.0, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "ring_02_in_r", "base": {"tx": -0.4183230698108673, "ty": -0.6711673736572266, "tz": 0.062863789498806, "rx": -99.35069113308083, "ry": -5.95433835268483, "rz": -6.856412992356848, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "ring_02_pip_r", "base": {"tx": -0.02417198196053505, "ty": 0.6733704805374146, "tz": 0.03931406885385513, "rx": 90.0783836438498, "ry": -0.8141116563557156, "rz": -9.461451891820067, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}]}]}, {"name": "ring_01_palmMid_r", "base": {"tx": -1.6473338603973389, "ty": -0.9198769927024841, "tz": 0.18870577216148376, "rx": -89.63960013309608, "ry": -2.5113477048063446, "rz": -1.8960826579761145, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "ring_01_bulge_r", "base": {"tx": -2.8564372062683105, "ty": -0.8655164837837219, "tz": 0.0855083167552948, "rx": -93.39768658804289, "ry": -2.7511260505667328, "rz": 4.948322078371436, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "ring_01_side_out_r", "base": {"tx": -2.8139171600341797, "ty": 0.12239185720682144, "tz": -0.6403952240943909, "rx": -0.1258408320902585, "ry": 0.32985853237863233, "rz": -84.03317472242577, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "ring_01_side_inn_r", "base": {"tx": -2.914486885070801, "ty": -0.13105618953704834, "tz": 0.7791697978973389, "rx": 179.694853366791, "ry": 8.322384036679153, "rz": -90.32738242943837, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "ring_01_half_r", "base": {"tx": -1.9895196601282805e-13, "ty": 1.8474111129762605e-13, "tz": 9.592326932761353e-14, "rx": 0.0, "ry": -0.0, "rz": 3.1805546814635168e-15, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "ring_01_mcp_r", "base": {"tx": -0.15915869176387787, "ty": 0.7105607986450195, "tz": -0.14989890158176422, "rx": 85.65642320355155, "ry": -1.4814220066609414, "rz": 3.8303884033920577, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "ring_01_palm_r", "base": {"tx": -0.6197552680969238, "ty": -1.325421690940857, "tz": 0.21367210149765015, "rx": -80.27836255247786, "ry": -2.1696388929450046, "rz": -14.669029841391536, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}]}]}, {"name": "ring_metacarpal_slide_r", "base": {"tx": -2.24737548828125, "ty": 0.36372384428977966, "tz": 0.030465345829725266, "rx": 92.51302340334152, "ry": 1.1938528681277925, "rz": -3.1638682904121604, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}]}, {"name": "thumb_01_r", "base": {"tx": -2.00205135345459, "ty": -1.3448615074157715, "tz": 2.272104263305664, "rx": 80.71705237430183, "ry": 34.54410583528144, "rz": 22.007820935398673, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "thumb_02_r", "base": {"tx": -4.075897693634033, "ty": -2.2744348825654015e-05, "tz": -5.9427231462905183e-05, "rx": -1.05085974692407, "ry": -6.203325717526042, "rz": 20.09856695702312, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "thumb_03_r", "base": {"tx": -2.388744592666626, "ty": -2.486553057678975e-06, "tz": 4.5950950152473524e-05, "rx": 1.4787795629608313e-06, "ry": -5.562179010042755e-15, "rz": 8.880000176180173, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "thumb_03_bulge_r", "base": {"tx": -0.8539445996284485, "ty": -0.9278497099876404, "tz": 0.136323019862175, "rx": -98.78788777974712, "ry": 2.352834664121591, "rz": -3.7394483335278057, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "thumb_03_side_out_r", "base": {"tx": -0.33787715435028076, "ty": -0.20738261938095093, "tz": -0.7481565475463867, "rx": 2.0628155370112125, "ry": 1.034660846091357, "rz": 179.87517153751838, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "thumb_03_side_inn_r", "base": {"tx": -0.2416893094778061, "ty": -0.07430332154035568, "tz": 0.8273792266845703, "rx": 173.22056139598504, "ry": 2.24089865837194, "rz": 8.541035410260578, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "thumb_03_half_r", "base": {"tx": -4.902744876744691e-13, "ty": -2.1316282072803006e-13, "tz": -8.526512829121202e-14, "rx": 7.951386703658792e-16, "ry": -0.0, "rz": -3.1805546814635168e-15, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "thumb_03_pip_r", "base": {"tx": -0.028191950172185898, "ty": 0.7125444412231445, "tz": -0.13273359835147858, "rx": 82.12042071599589, "ry": 3.052577192570798, "rz": -0.621698740769459, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "thumb_03_in_r", "base": {"tx": -0.016069630160927773, "ty": -0.7879414558410645, "tz": 0.12767943739891052, "rx": -94.02526869975733, "ry": 2.8673007432824007, "rz": -6.294252028798489, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}]}]}, {"name": "thumb_02_bulge_r", "base": {"tx": -1.6745476722717285, "ty": -0.8592654466629028, "tz": 0.11330795288085938, "rx": -96.15206264430965, "ry": 2.3001232047991764, "rz": -2.3239292955201214, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "thumb_02_side_out_r", "base": {"tx": -1.0629054307937622, "ty": -0.2661592662334442, "tz": -0.8130028247833252, "rx": 12.682658778732842, "ry": -2.5184804923534294, "rz": 170.21552904266713, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "thumb_02_side_inn_r", "base": {"tx": -0.9576094150543213, "ty": 0.11055447906255722, "tz": 0.7046063542366028, "rx": 167.31734122126716, "ry": 2.5184804923534294, "rz": -9.784470957332902, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "thumb_02_half_r", "base": {"tx": -3.481659405224491e-13, "ty": -2.1316282072803006e-14, "tz": 2.842170943040401e-14, "rx": -1.5902773407317584e-15, "ry": -0.0, "rz": 0.0, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "thumb_02_in_r", "base": {"tx": -0.7326561212539673, "ty": -1.013764500617981, "tz": 0.09603043645620346, "rx": -112.83612979923484, "ry": 0.263686013368409, "rz": -9.241403699386153, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "thumb_02_mcp_r", "base": {"tx": 0.5188868641853333, "ty": 0.6084798574447632, "tz": 0.058492936193943024, "rx": 91.62786182567598, "ry": -7.169819381476529, "rz": -7.2481585385954865, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}]}]}, {"name": "thumb_01_side_out_r", "base": {"tx": -0.5726752281188965, "ty": 0.6719650626182556, "tz": 1.1091506481170654, "rx": 127.64955207262281, "ry": -8.850297215941227, "rz": -0.6570895163251093, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "thumb_01_side_inn_r", "base": {"tx": -4.167909622192383, "ty": -1.1418663263320923, "tz": -1.296026349067688, "rx": -69.64002207117987, "ry": 65.81304472699031, "rz": -58.179234605878754, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}]}, {"name": "middle_metacarpal_r", "base": {"tx": -2.7599871158599854, "ty": -0.1416858434677124, "tz": 0.3716852366924286, "rx": -1.2408033690783917, "ry": -1.6568708842196116, "rz": -5.057844035448896, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "middle_01_r", "base": {"tx": -4.894123077392578, "ty": 5.6425660659442656e-06, "tz": 5.294250513543375e-05, "rx": -3.625073133205381, "ry": -4.021235047699814, "rz": 23.861684902541132, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "middle_02_r", "base": {"tx": -4.327966690063477, "ty": -7.695150998188183e-05, "tz": -2.879480780393351e-05, "rx": 1.7075471922207368e-06, "ry": 1.7382175521746993e-14, "rz": 19.66699932117091, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "middle_03_r", "base": {"tx": -2.557969331741333, "ty": 5.310456617735326e-05, "tz": 1.2135067663621157e-05, "rx": 2.416948669581701e-06, "ry": 3.8450279276449656e-14, "rz": 2.8500001260998844, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "middle_03_bulge_r", "base": {"tx": -0.6038830280303955, "ty": -0.5838002562522888, "tz": 0.09143375605344772, "rx": -100.65496848449848, "ry": -1.735584158559898, "rz": -2.487151766148019, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "middle_03_half_r", "base": {"tx": -1.1368683772161603e-13, "ty": 1.2789769243681803e-13, "tz": 1.4210854715202004e-14, "rx": -4.049006714792249e-06, "ry": 1.4124500206378372e-30, "rz": -1.1927080055488188e-15, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "middle_03_in_r", "base": {"tx": 0.02159016765654087, "ty": -0.5364454984664917, "tz": 0.08703987300395966, "rx": -99.74880593159726, "ry": 0.5366720028200113, "rz": -0.3571725736151643, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "middle_02_dip_r", "base": {"tx": -0.01873452216386795, "ty": 0.5799358487129211, "tz": -0.09605581313371658, "rx": 83.69273878917218, "ry": 1.0615835818443229, "rz": 3.2575615235207063, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}]}]}, {"name": "middle_02_bulge_r", "base": {"tx": -1.3356175422668457, "ty": -0.6387366056442261, "tz": 0.11872076243162155, "rx": -97.73344233888649, "ry": 1.581945519301668, "rz": 4.121085358358068, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "middle_02_side_out_r", "base": {"tx": -1.289385199546814, "ty": 0.05871104821562767, "tz": -0.6111921072006226, "rx": 0.6125498241452354, "ry": -2.216209051339414, "rz": -90.24301421381622, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "middle_02_side_inn_r", "base": {"tx": -1.2773473262786865, "ty": 0.0693274661898613, "tz": 0.7116841077804565, "rx": -177.94816750784378, "ry": -2.896209315861242, "rz": -93.74208035095448, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "middle_02_half_r", "base": {"tx": -2.1316282072803006e-13, "ty": 2.7711166694643907e-13, "tz": 2.1316282072803006e-14, "rx": -1.6082711380088577e-06, "ry": -1.5902773518913812e-15, "rz": -7.951386480466336e-16, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "middle_02_pip_r", "base": {"tx": 0.11781422048807144, "ty": 0.7082409262657166, "tz": -0.05262480303645134, "rx": 83.20090871728695, "ry": -0.3146814818474865, "rz": -7.26340399415479, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "middle_02_in_r", "base": {"tx": -0.23581960797309875, "ty": -0.6451411843299866, "tz": 0.10651762038469315, "rx": -97.23020306832039, "ry": 0.8430371232164806, "rz": 1.4192509416854144, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}]}]}, {"name": "middle_01_palmMid_r", "base": {"tx": -1.6801295280456543, "ty": -1.1052321195602417, "tz": 0.13430418074131012, "rx": -97.79459157103982, "ry": -4.0012728382110545, "rz": -16.04361244355824, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "middle_01_bulge_r", "base": {"tx": -3.193647623062134, "ty": -0.8245332837104797, "tz": 0.051440220326185226, "rx": -89.36677301895324, "ry": -0.27815561947194756, "rz": -2.3559998130271134, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "middle_01_side_out_r", "base": {"tx": -3.2591233253479004, "ty": 0.06434638053178787, "tz": -0.713412344455719, "rx": -4.13999363614502, "ry": 1.4022922815427707, "rz": -90.11097132026309, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "middle_01_side_inn_r", "base": {"tx": -3.1056315898895264, "ty": -0.20578601956367493, "tz": 0.760340690612793, "rx": 171.97142964321344, "ry": 12.273455235153468, "rz": -93.80357543927998, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "middle_01_half_r", "base": {"tx": -9.947598300641403e-14, "ty": 1.7053025658242404e-13, "tz": 1.2434497875801753e-13, "rx": -2.3854160110976376e-15, "ry": -0.0, "rz": 0.0, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "middle_01_mcp_r", "base": {"tx": -0.011831078678369522, "ty": 0.7211403846740723, "tz": -0.1250133216381073, "rx": 89.61719149907167, "ry": 3.8901800327734417, "rz": -1.7529449020387533, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "middle_01_palm_r", "base": {"tx": -0.649225652217865, "ty": -1.4999529123306274, "tz": 0.26503634452819824, "rx": -93.53902373111914, "ry": -5.758273934861854, "rz": -23.31747185212468, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}]}]}, {"name": "middle_metacarpal_slide_r", "base": {"tx": -2.4672293663024902, "ty": 0.246420755982399, "tz": 0.0038141754921525717, "rx": 92.02888044879019, "ry": -0.22454952241219184, "rz": 1.0632998715537438, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}]}, {"name": "index_metacarpal_r", "base": {"tx": -3.042185068130493, "ty": -0.2552834749221802, "tz": 1.8378596305847168, "rx": 16.12985382006056, "ry": 6.176648336741216, "rz": -1.7855994297720956, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "index_01_r", "base": {"tx": -4.727443218231201, "ty": 8.617800631327555e-05, "tz": 2.200729795731604e-05, "rx": -10.584879670944686, "ry": -4.193122953351139, "rz": 19.14539722951793, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "index_02_r", "base": {"tx": -4.0139689445495605, "ty": -9.292020695284009e-05, "tz": 2.238528941234108e-05, "rx": -2.981770074099271e-14, "ry": 1.1131941891810833e-14, "rz": 11.930028227965897, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "index_03_r", "base": {"tx": -1.9589999914169312, "ty": 4.3928117520408705e-05, "tz": -4.54544642707333e-05, "rx": -3.975693351829395e-16, "ry": -3.1805546814635168e-15, "rz": -3.1805546814635168e-15, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "index_03_bulge_r", "base": {"tx": -0.8527672290802002, "ty": -0.6522242426872253, "tz": 0.060911327600479126, "rx": -101.71523512688215, "ry": -1.6504220020038285, "rz": -3.286743718220359, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "index_03_half_r", "base": {"tx": -0.02004181407392025, "ty": -3.326635851408355e-05, "tz": 2.5791421649046242e-05, "rx": 1.987846675914698e-15, "ry": 3.1805546814635168e-15, "rz": -0.0, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "index_02_dip_r", "base": {"tx": 0.04835338890552521, "ty": 0.5098865628242493, "tz": -0.06344226747751236, "rx": 77.9612680717149, "ry": -1.4326969521588786, "rz": 7.23430969230415, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "index_03_in_r", "base": {"tx": -0.006819059140980244, "ty": -0.6098581552505493, "tz": 0.09932275116443634, "rx": -98.67161540594412, "ry": -0.9325587148629054, "rz": -1.4499510079738123, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}]}]}, {"name": "index_02_bulge_r", "base": {"tx": -1.267964482307434, "ty": -0.7244246006011963, "tz": 0.12440206855535507, "rx": -92.91247668007966, "ry": -2.310034235654668, "rz": -3.499667642347982, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "index_02_side_out_r", "base": {"tx": -1.2194111347198486, "ty": -0.024168536067008972, "tz": -0.6220024228096008, "rx": -2.3037448036916923, "ry": 0.3418784163637474, "rz": -91.3564835605588, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "index_02_side_inn_r", "base": {"tx": -1.2392154932022095, "ty": -0.04656123369932175, "tz": 0.7296855449676514, "rx": -175.70866540637658, "ry": -18.303685023688804, "rz": -90.21499792566063, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "index_02_half_r", "base": {"tx": -2.7000623958883807e-13, "ty": 1.4210854715202004e-13, "tz": 4.796163466380676e-14, "rx": -3.975693351829396e-16, "ry": 1.5902773407317584e-15, "rz": 1.5902773407317584e-15, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "index_02_in_r", "base": {"tx": -0.2020379900932312, "ty": -0.7363219857215881, "tz": 0.16801069676876068, "rx": -92.6608991505622, "ry": -2.7325269422769796, "rz": 5.757588242281076, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "index_02_pip_r", "base": {"tx": -0.051797881722450256, "ty": 0.6387186646461487, "tz": -0.02574750781059265, "rx": 88.76945415488365, "ry": -1.2332887550294331, "rz": -1.487530836175485, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}]}]}, {"name": "index_01_palmMid_r", "base": {"tx": -1.4778107404708862, "ty": -0.964896023273468, "tz": 0.1824076771736145, "rx": -91.90607716403242, "ry": 7.345055921813674, "rz": -13.38581029472812, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "index_01_bulge_r", "base": {"tx": -2.700319528579712, "ty": -0.864606499671936, "tz": 0.2221665382385254, "rx": -102.69042961639997, "ry": 1.3148281880451764, "rz": 0.12231307896097804, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "index_01_side_out_r", "base": {"tx": -2.752502679824829, "ty": 0.11635299772024155, "tz": -0.7381510734558105, "rx": -4.839742297918614, "ry": 5.914191775492305, "rz": -90.38124282529499, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "index_01_side_inn_r", "base": {"tx": -2.665247917175293, "ty": -0.08126576989889145, "tz": 0.8637298345565796, "rx": 177.094027152369, "ry": 5.9141916561825365, "rz": -90.38123626800365, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "index_01_half_r", "base": {"tx": -1.3500311979441904e-13, "ty": 2.5579538487363607e-13, "tz": 2.1316282072803006e-14, "rx": -7.951386703658791e-16, "ry": 1.5902773407317584e-15, "rz": 6.3611093629270335e-15, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "index_01_mcp_r", "base": {"tx": 0.28232136368751526, "ty": 0.8444397449493408, "tz": -0.1505260318517685, "rx": 91.57915087622659, "ry": 2.519803294369545, "rz": -0.6370500136481599, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "index_01_palm_r", "base": {"tx": -0.4859643578529358, "ty": -1.2095707654953003, "tz": 0.4188031256198883, "rx": -95.41974053975775, "ry": 3.005941588994312, "rz": -20.74307843927181, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}]}]}, {"name": "index_metacarpal_slide_r", "base": {"tx": -2.0671279430389404, "ty": 0.3152664303779602, "tz": -0.20082128047943115, "rx": 86.26422977113835, "ry": -2.379042189736545, "rz": 5.955811492802104, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}]}, {"name": "wrist_inner_r", "base": {"tx": 0.1493176370859146, "ty": -1.2895958423614502, "tz": 0.2736837565898895, "rx": -95.36480649806596, "ry": -26.069109461440615, "rz": 11.879692018607921, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "wrist_outer_r", "base": {"tx": -0.10550668835639954, "ty": 1.6354128122329712, "tz": 0.13550567626953125, "rx": 84.63519350193403, "ry": -26.069109461440615, "rz": 11.879692018607921, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}]}, {"name": "lowerarm_twist_02_r", "base": {"tx": -7.655236721038818, "ty": 3.836930773104541e-13, "tz": -5.115907697472721e-13, "rx": -1.8948040218405685e-05, "ry": -2.685670876491525e-05, "rz": -4.13471953278785e-14, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "lowerarm_twist_01_r", "base": {"tx": -15.31049633026123, "ty": 1.1368683772161603e-13, "tz": -1.9895196601282805e-13, "rx": -1.8948040218405685e-05, "ry": -2.685670876491525e-05, "rz": -4.13471953278785e-14, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "lowerarm_correctiveRoot_r", "base": {"tx": 2.2599793737754226e-05, "ty": -3.0378580049728043e-05, "tz": 0.0001800601021386683, "rx": -1.8948040218405685e-05, "ry": -2.685670876491525e-05, "rz": -4.13471953278785e-14, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "lowerarm_out_r", "base": {"tx": -0.5860006809234619, "ty": -1.2256808280944824, "tz": -1.9912598133087158, "rx": 1.2074183508393994e-06, "ry": -3.1805546479509254e-15, "rz": -3.180554714976108e-15, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "lowerarm_in_r", "base": {"tx": -1.474294662475586, "ty": -0.18371552228927612, "tz": 2.0132315158843994, "rx": 179.99999879300006, "ry": -3.180554714964495e-15, "rz": -3.1805546479625387e-15, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "lowerarm_fwd_r", "base": {"tx": -1.3021546602249146, "ty": 2.0986971855163574, "tz": -0.5741729736328125, "rx": 90.00000000000001, "ry": -3.1805546814635164e-15, "rz": -3.1805546814635183e-15, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "lowerarm_bck_r", "base": {"tx": -1.5214564800262451, "ty": -3.2136306762695312, "tz": 0.791584849357605, "rx": -90.00000000000001, "ry": -3.180554681463516e-15, "rz": -3.1805546814635187e-15, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}]}]}, {"name": "upperarm_twist_01_r", "base": {"tx": -7.94597864151001, "ty": -1.3204070455685724e-05, "tz": -2.9259483198984526e-05, "rx": -3.1232864239860884e-05, "ry": -1.0238126048194571e-05, "rz": 2.3462926788537373e-05, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "upperarm_twistCor_01_r", "base": {"tx": -5.684341886080802e-14, "ty": 2.6645352591003757e-15, "tz": -7.105427357601002e-14, "rx": 3.975693351829396e-16, "ry": 6.3611093629270335e-15, "rz": 3.975693351829396e-16, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}]}, {"name": "upperarm_twist_02_r", "base": {"tx": -15.892135620117188, "ty": -2.5533548978273757e-05, "tz": 7.540031219832599e-05, "rx": -3.1232864239860884e-05, "ry": -1.0238126048194571e-05, "rz": 2.3462926788537373e-05, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "upperarm_tricep_r", "base": {"tx": -0.28481173515319824, "ty": -4.2061591148376465, "tz": -0.13881725072860718, "rx": -94.85422033313465, "ry": 3.880948382736041, "rz": 1.524867297730236, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "upperarm_bicep_r", "base": {"tx": -0.535015344619751, "ty": 2.800846815109253, "tz": 0.05812295526266098, "rx": 85.14577966686537, "ry": 3.880948382736041, "rz": 1.524867297730236, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "upperarm_twistCor_02_r", "base": {"tx": 0.0, "ty": -8.881784197001252e-15, "tz": 0.0, "rx": 3.975693351829396e-16, "ry": 6.3611093629270335e-15, "rz": 3.975693351829396e-16, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}]}]}, {"name": "clavicle_out_r", "base": {"tx": -9.679080963134766, "ty": -0.10085994005203247, "tz": -4.936144828796387, "rx": -0.18052842087686027, "ry": -3.1103064392314552, "rz": -4.291567208179053, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "clavicle_scap_r", "base": {"tx": -7.808781147003174, "ty": -5.2962236404418945, "tz": 1.9363936185836792, "rx": 0.18052842087686027, "ry": 3.1103064392314552, "rz": 175.70843279182097, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}]}, {"name": "clavicle_pec_r", "base": {"tx": -6.79698371887207, "ty": -8.768803596496582, "tz": 8.613248825073242, "rx": 123.22087241428461, "ry": 82.00548357508913, "rz": -67.34654299877235, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "spine_04_latissimus_l", "base": {"tx": -7.00226354598999, "ty": 2.3310608863830566, "tz": -11.061848640441895, "rx": 130.38472935526502, "ry": 71.62202519213201, "rz": 118.20949958519994, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "spine_04_latissimus_r", "base": {"tx": -7.002472400665283, "ty": 2.331110954284668, "tz": 11.062228202819824, "rx": -145.97671309682144, "ry": 84.72507375606796, "rz": 23.824683094641642, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "clavicle_pec_l", "base": {"tx": -6.801868915557861, "ty": -8.540940284729004, "tz": -8.297289848327637, "rx": 123.2008855135154, "ry": 82.00646315285364, "rz": 112.63366553706547, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}]}]}]}]}]}, {"name": "thigh_r", "base": {"tx": -3.0362560749053955, "ty": -0.3258131742477417, "tz": 9.572073936462402, "rx": 8.47511542287208, "ry": -2.6782077164658293, "rz": -179.1309589911693, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "calf_r", "base": {"tx": 40.24262237548828, "ty": -3.1086244689504383e-15, "tz": 8.881784197001252e-15, "rx": -5.056584822467214e-15, "ry": -4.770832123210057e-15, "rz": -1.0331990021939863, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "foot_r", "base": {"tx": 36.74325942993164, "ty": -2.4424906541753444e-15, "tz": -5.5067062021407764e-14, "rx": -2.052457732105168e-15, "ry": 2.8230392485815536, "rz": 3.1844194108344025e-15, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "ball_r", "base": {"tx": 5.9355034828186035, "ty": 11.956721305847168, "tz": -0.17242038249969482, "rx": 5.352044349953838e-16, "ry": -2.5460787842051486e-17, "rz": -90.00000000000001, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "littletoe_01_r", "base": {"tx": 1.1336431503295898, "ty": -0.8229188919067383, "tz": 4.279630661010742, "rx": -4.556980696582586, "ry": 0.2631297396431846, "rz": -13.022761552576835, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "littletoe_02_r", "base": {"tx": -1.289960265159607, "ty": 8.75719797477359e-06, "tz": 4.5470951590687037e-05, "rx": -5.565970697430192e-15, "ry": 1.192707993229085e-15, "rz": -9.999999970953377, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}]}, {"name": "ringtoe_01_r", "base": {"tx": 0.26914289593696594, "ty": -1.34153413772583, "tz": 3.195281744003296, "rx": -4.556980696582586, "ry": 0.2631297396431846, "rz": -13.022761552576835, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "ringtoe_02_r", "base": {"tx": -1.8720124959945679, "ty": -1.7212740885952371e-06, "tz": -3.955073407269083e-05, "rx": -5.565970697430192e-15, "ry": 1.192707993229085e-15, "rz": -9.999999970953377, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}]}, {"name": "middletoe_01_r", "base": {"tx": -0.4086328446865082, "ty": -1.5426952838897705, "tz": 1.8519947528839111, "rx": -4.556980696582586, "ry": 0.2631297396431846, "rz": -13.022761552576835, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "middletoe_02_r", "base": {"tx": -2.1519291400909424, "ty": 1.5298583093681373e-05, "tz": 1.3348799257073551e-05, "rx": -5.565970697430192e-15, "ry": 1.192707993229085e-15, "rz": -9.999999970953377, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}]}, {"name": "bigtoe_01_r", "base": {"tx": -0.6422123312950134, "ty": -1.0468683242797852, "tz": -2.182070732116699, "rx": -0.3787442348841678, "ry": 4.262670904051089, "rz": -3.273863766322534, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "bigtoe_02_r", "base": {"tx": -2.642408609390259, "ty": -5.073929969512392e-06, "tz": 1.3601594446299714e-06, "rx": 1.8966076195006445e-16, "ry": -1.7007105709818534e-15, "rz": 4.1107705776115494e-41, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}]}, {"name": "indextoe_01_r", "base": {"tx": -0.6412308216094971, "ty": -1.6030168533325195, "tz": 0.16001997888088226, "rx": -0.7674055879998478, "ry": 3.6121638083309566, "rz": -8.530881438223526, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "indextoe_02_r", "base": {"tx": -2.6423428058624268, "ty": 7.831528137103305e-08, "tz": 1.1792567420343403e-05, "rx": 1.0224986126656428e-14, "ry": -9.628632128949373e-16, "rz": -11.999999880335064, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}]}]}, {"name": "ankle_bck_r", "base": {"tx": -0.6237866282463074, "ty": -3.641645908355713, "tz": 0.5119972825050354, "rx": -89.1988297875174, "ry": -3.581026587016069, "rz": -4.530136746842464, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "ankle_fwd_r", "base": {"tx": -1.5538878440856934, "ty": 3.914644479751587, "tz": -0.43877631425857544, "rx": 90.80117021248259, "ry": -3.581026587016069, "rz": -4.530136746842464, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}]}, {"name": "calf_twist_02_r", "base": {"tx": 12.247754096984863, "ty": -2.4424906541753444e-15, "tz": -1.7763568394002505e-14, "rx": -2.0499668845370324e-15, "ry": -0.0, "rz": 0.0, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "calf_twistCor_02_r", "base": {"tx": 0.0, "ty": 0.0, "tz": 0.0, "rx": -2.0499668845370324e-15, "ry": -0.0, "rz": 0.0, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}]}, {"name": "calf_twist_01_r", "base": {"tx": 24.495508193969727, "ty": -6.8833827526759706e-15, "tz": -3.730349362740526e-14, "rx": -2.0499668845370324e-15, "ry": -0.0, "rz": 0.0, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "calf_correctiveRoot_r", "base": {"tx": 0.0, "ty": 9.769962616701378e-15, "tz": -1.7763568394002505e-15, "rx": -2.0499668845370324e-15, "ry": -0.0, "rz": 0.0, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "calf_kneeBack_r", "base": {"tx": -0.24511364102363586, "ty": -4.596703052520752, "tz": -0.2459918111562729, "rx": -87.80935887368912, "ry": -0.6378681485070302, "rz": -2.8106705899652904, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "calf_knee_r", "base": {"tx": -0.05165347829461098, "ty": 4.054684638977051, "tz": -0.056528590619564056, "rx": 92.1906411263109, "ry": -0.6378681485070302, "rz": -2.8106705899652904, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}]}]}, {"name": "thigh_twist_01_r", "base": {"tx": 13.414207458496094, "ty": 0.0, "tz": 4.796163466380676e-14, "rx": 2.3419318650620035e-15, "ry": -7.951386703658792e-16, "rz": -9.939233379573492e-17, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "thigh_twistCor_01_r", "base": {"tx": 0.0, "ty": 0.0, "tz": 0.0, "rx": 2.3419318650620035e-15, "ry": -7.951386703658792e-16, "rz": -9.939233379573492e-17, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}]}, {"name": "thigh_twist_02_r", "base": {"tx": 26.828414916992188, "ty": 7.549516567451064e-15, "tz": 3.019806626980426e-14, "rx": 2.3419318650620035e-15, "ry": -7.951386703658792e-16, "rz": -9.939233379573492e-17, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "thigh_twistCor_02_r", "base": {"tx": -9.947598300641403e-14, "ty": -1.3322676295501878e-15, "tz": 5.329070518200751e-15, "rx": 2.3419318650620035e-15, "ry": -7.951386703658792e-16, "rz": -9.939233379573492e-17, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}]}, {"name": "thigh_correctiveRoot_r", "base": {"tx": 0.0, "ty": 0.0, "tz": 0.0, "rx": 2.3419318650620035e-15, "ry": -7.951386703658792e-16, "rz": -9.939233379573492e-17, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "thigh_fwd_r", "base": {"tx": -5.605712413787842, "ty": 6.760024547576904, "tz": -0.5285370945930481, "rx": 90.00000000000001, "ry": -7.951387038784689e-16, "rz": -9.939234217388238e-17, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "thigh_bck_r", "base": {"tx": -3.4131150245666504, "ty": -9.658788681030273, "tz": -1.8439222574234009, "rx": -90.00000000000001, "ry": -7.951387038784689e-16, "rz": -9.939234217388238e-17, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "thigh_out_r", "base": {"tx": -5.217547416687012, "ty": -1.0981626510620117, "tz": 4.464845180511475, "rx": 179.9999977409999, "ry": -7.951386723252492e-16, "rz": -9.939232996926228e-17, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "thigh_in_r", "base": {"tx": 9.064610481262207, "ty": 0.7528324723243713, "tz": -7.8628692626953125, "rx": 2.2588726814303084e-06, "ry": -7.951386684066195e-16, "rz": -9.939233169707849e-17, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "thigh_bck_lwr_r", "base": {"tx": 5.406442642211914, "ty": -9.323371887207031, "tz": -1.5263465642929077, "rx": -90.00000000000001, "ry": -7.951387038784689e-16, "rz": -9.939234217388238e-17, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "thigh_fwd_lwr_r", "base": {"tx": -0.49298810958862305, "ty": 6.406782150268555, "tz": -0.4669034779071808, "rx": 90.00000000000001, "ry": -7.951387038784689e-16, "rz": -9.939234217388238e-17, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}]}]}, {"name": "thigh_l", "base": {"tx": -3.0362324714660645, "ty": -0.3258151412010193, "tz": -9.572070121765137, "rx": 8.47511542287208, "ry": -2.6782077164658293, "rz": 0.8690410088306914, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "calf_l", "base": {"tx": -40.242637634277344, "ty": -1.021405182655144e-14, "tz": -5.3290705182007514e-14, "rx": -1.0075897588710406e-14, "ry": 1.9878466467166504e-15, "rz": -1.0331990021939863, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "foot_l", "base": {"tx": -36.74327087402344, "ty": 8.881784197001252e-15, "tz": 4.085620730620576e-14, "rx": -4.726872424811006e-16, "ry": 2.8230392485815536, "rz": -1.9902620515000543e-15, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "ball_l", "base": {"tx": -5.935503959655762, "ty": -11.956724166870117, "tz": 0.17238283157348633, "rx": -3.1351289023827086e-16, "ry": -1.4010109020988318e-15, "rz": -90.00000000000001, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "indextoe_01_l", "base": {"tx": 0.641240656375885, "ty": 1.603023648262024, "tz": -0.16002534329891205, "rx": -0.7674055879998478, "ry": 3.6121638083309566, "rz": -8.530881438223526, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "indextoe_02_l", "base": {"tx": 2.642374277114868, "ty": 1.0658141036401503e-14, "tz": -2.3092638912203256e-14, "rx": 4.6465915889952596e-15, "ry": -1.3355844101762184e-15, "rz": -11.999999880335064, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}]}, {"name": "bigtoe_01_l", "base": {"tx": 0.6422252655029297, "ty": 1.046868085861206, "tz": 2.182098627090454, "rx": -0.3787442348841678, "ry": 4.262670904051089, "rz": -3.273863766322534, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "bigtoe_02_l", "base": {"tx": 2.642374277114868, "ty": 6.217248937900877e-15, "tz": 5.684341886080802e-14, "rx": -3.3001360830615105e-17, "ry": -1.1740962086686116e-15, "rz": -0.0, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}]}, {"name": "littletoe_01_l", "base": {"tx": -1.133647084236145, "ty": 0.8229185342788696, "tz": -4.279591083526611, "rx": -4.556980696582586, "ry": 0.2631297396431846, "rz": -13.022761552576835, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "littletoe_02_l", "base": {"tx": 1.2899999618530273, "ty": 1.509903313490213e-14, "tz": -5.3290705182007514e-14, "rx": 1.1131941506998056e-14, "ry": -4.611804237102082e-14, "rz": -9.999999970953377, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}]}, {"name": "middletoe_01_l", "base": {"tx": 0.40858280658721924, "ty": 1.5426994562149048, "tz": -1.8519707918167114, "rx": -4.556980696582586, "ry": 0.2631297396431846, "rz": -13.022761552576835, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "middletoe_02_l", "base": {"tx": 2.1519999504089355, "ty": 4.440892098500626e-15, "tz": 4.263256414560601e-14, "rx": 1.1131941506998056e-14, "ry": -4.611804237102082e-14, "rz": -9.999999970953377, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}]}, {"name": "ringtoe_01_l", "base": {"tx": -0.2691801190376282, "ty": 1.3415353298187256, "tz": -3.1952097415924072, "rx": -4.556980696582586, "ry": 0.2631297396431846, "rz": -13.022761552576835, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "ringtoe_02_l", "base": {"tx": 1.871999979019165, "ty": -1.5987211554602254e-14, "tz": 3.552713678800501e-15, "rx": 1.1131941506998056e-14, "ry": -4.611804237102082e-14, "rz": -9.999999970953377, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}]}]}, {"name": "ankle_bck_l", "base": {"tx": 0.6906856894493103, "ty": 2.9911956787109375, "tz": -0.18684470653533936, "rx": -97.22883950148639, "ry": -4.179348530099319, "rz": -3.9848641766103796, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "ankle_fwd_l", "base": {"tx": 1.2119234800338745, "ty": -3.487379312515259, "tz": -0.07560697942972183, "rx": 82.77116049851364, "ry": -4.179348530099319, "rz": -3.9848641766103796, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}]}, {"name": "calf_twist_02_l", "base": {"tx": -12.247756004333496, "ty": -7.502632684008859e-07, "tz": -9.22952403925592e-06, "rx": -4.721135855297407e-16, "ry": -0.0, "rz": 0.0, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "calf_twistCor_02_l", "base": {"tx": 0.0, "ty": 0.0, "tz": 0.0, "rx": -4.721135855297407e-16, "ry": -0.0, "rz": 0.0, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}]}, {"name": "calf_twist_01_l", "base": {"tx": -24.495512008666992, "ty": 3.2563687000219943e-06, "tz": 1.272065765078878e-05, "rx": -4.721135855297407e-16, "ry": -0.0, "rz": 0.0, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "calf_correctiveRoot_l", "base": {"tx": 8.57889688177238e-08, "ty": -4.756895577884279e-06, "tz": -3.117970481980592e-05, "rx": -4.721135855297407e-16, "ry": -0.0, "rz": 0.0, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "calf_kneeBack_l", "base": {"tx": 0.2418079376220703, "ty": 4.5919718742370605, "tz": 0.22235582768917084, "rx": -87.80931522353636, "ry": -0.6388765291276984, "rz": -2.809780513631777, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "calf_knee_l", "base": {"tx": 0.04867034777998924, "ty": -4.058018207550049, "tz": 0.0537591278553009, "rx": 92.19068477646364, "ry": -0.6388765291276984, "rz": -2.809780513631777, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}]}]}, {"name": "thigh_twist_01_l", "base": {"tx": -13.414213180541992, "ty": -1.5858896631470998e-06, "tz": -1.0393235243100207e-05, "rx": 6.460501696722769e-16, "ry": -3.975693351829396e-16, "rz": -9.93923337957349e-17, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "thigh_twistCor_01_l", "base": {"tx": -9.947598300641403e-14, "ty": -1.3322676295501878e-15, "tz": 5.329070518200751e-15, "rx": 6.460501696722769e-16, "ry": -3.975693351829396e-16, "rz": -9.93923337957349e-17, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}]}, {"name": "thigh_twist_02_l", "base": {"tx": -26.828426361083984, "ty": -3.1717793262941996e-06, "tz": -2.0786470486200415e-05, "rx": 6.460501696722769e-16, "ry": -3.975693351829396e-16, "rz": -9.93923337957349e-17, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "thigh_twistCor_02_l", "base": {"tx": 0.0, "ty": 0.0, "tz": 0.0, "rx": 6.460501696722769e-16, "ry": -3.975693351829396e-16, "rz": -9.93923337957349e-17, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}]}, {"name": "thigh_correctiveRoot_l", "base": {"tx": 9.947598300641403e-14, "ty": -8.881784197001252e-15, "tz": -1.0658141036401503e-14, "rx": 6.460501696722769e-16, "ry": -3.975693351829396e-16, "rz": -9.93923337957349e-17, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": [{"name": "thigh_bck_l", "base": {"tx": 3.4113388061523438, "ty": 9.65222454071045, "tz": 1.817700743675232, "rx": -90.00000000000001, "ry": -3.975693351829396e-16, "rz": -9.939234217388233e-17, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "thigh_fwd_l", "base": {"tx": 5.609381198883057, "ty": -6.744137763977051, "tz": 0.5318726897239685, "rx": 90.00000000000001, "ry": -3.975693351829396e-16, "rz": -9.939234217388233e-17, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "thigh_out_l", "base": {"tx": 5.2154083251953125, "ty": 1.0835095643997192, "tz": -4.477994918823242, "rx": -180.0, "ry": -3.975693351829396e-16, "rz": -9.939233379573492e-17, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "thigh_bck_lwr_l", "base": {"tx": -5.163907051086426, "ty": 9.269197463989258, "tz": 1.2146680355072021, "rx": -90.00000000000001, "ry": -3.975693351829396e-16, "rz": -9.939234217388233e-17, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "thigh_in_l", "base": {"tx": -9.003467559814453, "ty": -0.8119459748268127, "tz": 7.840514183044434, "rx": 6.460501696722769e-16, "ry": -3.975693351829396e-16, "rz": -9.93923337957349e-17, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}, {"name": "thigh_fwd_lwr_l", "base": {"tx": 0.4119085371494293, "ty": -6.90631103515625, "tz": 0.38978904485702515, "rx": 90.00000000000001, "ry": -3.975693351829396e-16, "rz": -9.939234217388233e-17, "sx": 1.0, "sy": 1.0, "sz": 1.0}, "children": []}]}]}]}]}, "frames": 0, "take_name": "template"} \ No newline at end of file diff --git a/src/router/Router.tsx b/src/router/Router.tsx index 54439bc..599d8d8 100644 --- a/src/router/Router.tsx +++ b/src/router/Router.tsx @@ -12,6 +12,7 @@ import ThreeDimension from '../3d/index'; const SingleEnd3D = withSuspense(lazy(() => import('../3d/SingleEnd'))); const MultiEnd3D = withSuspense(lazy(() => import('../3d/MultiEnd'))); +const FullBody = withSuspense(lazy(() => import('../3d/FullBody'))); class Router extends Component { render(): ReactNode { @@ -25,6 +26,7 @@ class Router extends Component { }> } /> } /> + } /> diff --git a/test/3d/value/quat.test.ts b/test/3d/value/quat.test.ts index 315011d..aef688b 100644 --- a/test/3d/value/quat.test.ts +++ b/test/3d/value/quat.test.ts @@ -14,6 +14,19 @@ describe('quat', () => { expect(r2.z).toBeCloseTo(0, 5); }); + test('test transferQuat', () => { + const pos = new XYZValue(1, 2, 3); + const quat = new Quat(0.7071067811865476, 0, 0.7071067811865475, 0); + const r = transferQuat(pos, quat); + expect(r.x).toBeCloseTo(3, 5); + expect(r.y).toBeCloseTo(2, 5); + expect(r.z).toBeCloseTo(-1, 5); + const r2 = transferQuat(r, quat.inverse()); + expect(r2.x).toBeCloseTo(1, 5); + expect(r2.y).toBeCloseTo(2, 5); + expect(r2.z).toBeCloseTo(3, 5); + }); + test('test xyzRotation will return correct angle of rotation', () => { const v1 = new XYZValue(-41.55416026062527, -23.32211631159055, 87.91661194440394); const v2 = new XYZValue(-50.80669294345101, -80.36956934365189, 30.97438095694281);