Spaces:
Sleeping
Sleeping
Upload 41 files
Browse files- .gitattributes +3 -0
- animation/.DS_Store +0 -0
- animation/README.md +77 -0
- animation/demo.sh +7 -0
- animation/download.py +13 -0
- animation/inputs/.DS_Store +0 -0
- animation/inputs/crocodile/first_frames/render_back.png +0 -0
- animation/inputs/crocodile/first_frames/render_front.png +0 -0
- animation/inputs/crocodile/first_frames/render_left.png +0 -0
- animation/inputs/crocodile/first_frames/render_right.png +0 -0
- animation/inputs/crocodile/input.mp4 +3 -0
- animation/inputs/crocodile/objs/material.mtl +7 -0
- animation/inputs/crocodile/objs/mesh.obj +0 -0
- animation/inputs/crocodile/objs/rig.txt +2611 -0
- animation/inputs/fish/first_frames/render_back.png +0 -0
- animation/inputs/fish/first_frames/render_front.png +0 -0
- animation/inputs/fish/first_frames/render_left.png +0 -0
- animation/inputs/fish/first_frames/render_right.png +0 -0
- animation/inputs/fish/input.mp4 +3 -0
- animation/inputs/fish/objs/fish_texture.png +3 -0
- animation/inputs/fish/objs/material.mtl +8 -0
- animation/inputs/fish/objs/mesh.obj +0 -0
- animation/inputs/fish/objs/rig.txt +1204 -0
- animation/model.py +199 -0
- animation/optimization.py +626 -0
- animation/renderer.py +348 -0
- animation/third_partys/.DS_Store +0 -0
- animation/utils/cameras/back.json +1 -0
- animation/utils/cameras/back_left.json +64 -0
- animation/utils/cameras/back_right.json +64 -0
- animation/utils/cameras/front.json +1 -0
- animation/utils/cameras/front_left.json +64 -0
- animation/utils/cameras/front_right.json +64 -0
- animation/utils/cameras/left.json +1 -0
- animation/utils/cameras/right.json +1 -0
- animation/utils/data_loader.py +170 -0
- animation/utils/loss_utils.py +420 -0
- animation/utils/misc.py +34 -0
- animation/utils/quat_utils.py +179 -0
- animation/utils/render_first_frame.py +93 -0
- animation/utils/save_flow.py +288 -0
- animation/utils/save_utils.py +374 -0
.gitattributes
CHANGED
|
@@ -33,3 +33,6 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
|
| 33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
|
|
|
|
|
|
| 33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
| 36 |
+
animation/inputs/crocodile/input.mp4 filter=lfs diff=lfs merge=lfs -text
|
| 37 |
+
animation/inputs/fish/input.mp4 filter=lfs diff=lfs merge=lfs -text
|
| 38 |
+
animation/inputs/fish/objs/fish_texture.png filter=lfs diff=lfs merge=lfs -text
|
animation/.DS_Store
ADDED
|
Binary file (6.15 kB). View file
|
|
|
animation/README.md
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# 3D Animation with Video Guidance
|
| 2 |
+
This repository provides a complete pipeline for generating 3D object animations with video guidance. The system includes data processing and optimization algorithms for rigging-based animation.
|
| 3 |
+
|
| 4 |
+
## Overview
|
| 5 |
+
The pipeline takes a rigged 3D model and a reference video, then optimizes the object's motion to match the video guidance while maintaining realistic skeletal constraints.
|
| 6 |
+
|
| 7 |
+
## Prerequisites
|
| 8 |
+
|
| 9 |
+
### Model Downloads
|
| 10 |
+
Download the required pre-trained models:
|
| 11 |
+
|
| 12 |
+
- [Video-Depth-Anything](https://huggingface.co/depth-anything/Video-Depth-Anything-Large) - For depth estimation
|
| 13 |
+
- [CoTracker3](https://huggingface.co/facebook/cotracker3) - For point tracking
|
| 14 |
+
|
| 15 |
+
```
|
| 16 |
+
python download.py
|
| 17 |
+
```
|
| 18 |
+
|
| 19 |
+
### Input Data Structure
|
| 20 |
+
|
| 21 |
+
Organize your input data as follows:
|
| 22 |
+
```
|
| 23 |
+
inputs/
|
| 24 |
+
└── {seq_name}/
|
| 25 |
+
├── objs/
|
| 26 |
+
│ ├── mesh.obj # 3D mesh geometry
|
| 27 |
+
│ ├── rig.txt # Rigging definition
|
| 28 |
+
│ ├── material.mtl # Material properties (optional)
|
| 29 |
+
│ └── texture.png # Texture maps (optional)
|
| 30 |
+
├── first_frames/ # Rendered initial frames
|
| 31 |
+
├── imgs/ # Extracted video frames
|
| 32 |
+
├── flow/ # Optical flow data
|
| 33 |
+
├── flow_vis/ # Visualized optical flow
|
| 34 |
+
├── depth/ # Esitmated depth data
|
| 35 |
+
├── track_2d_verts/ # tracked vertices
|
| 36 |
+
├── track_2d_joints/ # tracked joints
|
| 37 |
+
└── input.mp4 # Source video
|
| 38 |
+
```
|
| 39 |
+
|
| 40 |
+
## Data Processing
|
| 41 |
+
|
| 42 |
+
Given a 3D model with rigging under `inputs/{seq_name}/objs` (`mesh.obj, rig.txt`, optional `.mtl` and texture `.png`), we first render the object from a specified viewpoint. This image is used as the input (first frame) to the video generation model (e.g., [Jimeng AI](https://jimeng.jianying.com/ai-tool/home?type=video)).
|
| 43 |
+
|
| 44 |
+
```
|
| 45 |
+
python utils/render_first_frame.py --input_path inputs --seq_name {seq_name}
|
| 46 |
+
```
|
| 47 |
+
Replace `{seq_name}` with your sequence name. The first-frame images are saved to `inputs/{seq_name}/first_frames`. This generates reference images from 4 different viewpoints (you can add more). Choose the viewpoint that best shows the object's joints and key parts for optimal animation results. Save the generated videos to `inputs/{seq_name}/input.mp4`.
|
| 48 |
+
|
| 49 |
+
Then we extract the frames from the video by running:
|
| 50 |
+
|
| 51 |
+
```
|
| 52 |
+
cd inputs/{seq_name}; mkdir imgs
|
| 53 |
+
ffmpeg -i input.mp4 -vf fps=10 imgs/frame_%04d.png
|
| 54 |
+
cd ../../
|
| 55 |
+
```
|
| 56 |
+
|
| 57 |
+
Estimate optical flows by running:
|
| 58 |
+
|
| 59 |
+
```
|
| 60 |
+
python utils/save_flow.py --input_path inputs --seq_name {seq_name}
|
| 61 |
+
```
|
| 62 |
+
The flow `.flo` files are saved to `inputs/{seq_name}/flow`, the flow visualization are saved to `inputs/{seq_name}/flow_vis`. Depth and tracking information are saved during optimization.
|
| 63 |
+
|
| 64 |
+
## Optimization
|
| 65 |
+
|
| 66 |
+
To optimize the animation, you can run
|
| 67 |
+
|
| 68 |
+
```
|
| 69 |
+
bash demo.sh
|
| 70 |
+
```
|
| 71 |
+
|
| 72 |
+
The results are saved to `results/{seq_name}/{save_name}`. Modify `--main_renderer` and `--additional_renderers` to change rendering viewpoints. If animations exhibit jitter or instability, increase the root/joint smoothing weights for better temporal consistency.
|
| 73 |
+
|
| 74 |
+
|
| 75 |
+
## TODO
|
| 76 |
+
|
| 77 |
+
- [ ] Add multi-view supervisions.
|
animation/demo.sh
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
python optimization.py --save_path results --iter 200 --input_path inputs --img_size 960 \
|
| 2 |
+
--seq_name 'fish' --save_name 'fish' --coherence_weight 5
|
| 3 |
+
|
| 4 |
+
# python optimization.py --save_path results --iter 200 --input_path inputs --img_size 960 \
|
| 5 |
+
# --seq_name 'crocodile' --save_name 'crocodile_demo' --coherence_weight 15
|
| 6 |
+
|
| 7 |
+
|
animation/download.py
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from huggingface_hub import hf_hub_download
|
| 2 |
+
|
| 3 |
+
file_path = hf_hub_download(
|
| 4 |
+
repo_id="facebook/cotracker3",
|
| 5 |
+
filename="scaled_offline.pth",
|
| 6 |
+
local_dir="third_partys/co_tracker/ckpt"
|
| 7 |
+
)
|
| 8 |
+
|
| 9 |
+
file_path = hf_hub_download(
|
| 10 |
+
repo_id="depth-anything/Video-Depth-Anything-Large",
|
| 11 |
+
filename="video_depth_anything_vitl.pth",
|
| 12 |
+
local_dir="third_partys/Video_Depth_Anything/ckpt"
|
| 13 |
+
)
|
animation/inputs/.DS_Store
ADDED
|
Binary file (6.15 kB). View file
|
|
|
animation/inputs/crocodile/first_frames/render_back.png
ADDED
|
animation/inputs/crocodile/first_frames/render_front.png
ADDED
|
animation/inputs/crocodile/first_frames/render_left.png
ADDED
|
animation/inputs/crocodile/first_frames/render_right.png
ADDED
|
animation/inputs/crocodile/input.mp4
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:1182d9336eaf8946c2099100508f123cf70763af8053889f67fd227ce7c49b9b
|
| 3 |
+
size 2584084
|
animation/inputs/crocodile/objs/material.mtl
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
newmtl CrocodileMaterial_01
|
| 2 |
+
Ka 1.000000 1.000000 1.000000
|
| 3 |
+
Kd 0.800000 0.800000 0.800000
|
| 4 |
+
Ks 0.000000 0.000000 0.000000
|
| 5 |
+
Ns 10.000000
|
| 6 |
+
illum 2
|
| 7 |
+
|
animation/inputs/crocodile/objs/mesh.obj
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
animation/inputs/crocodile/objs/rig.txt
ADDED
|
@@ -0,0 +1,2611 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
joints joint0 -1.96306712 -0.02048700 0.28044931
|
| 2 |
+
joints joint1 -1.57830150 -0.02048700 0.28044931
|
| 3 |
+
joints joint2 -1.27068431 -0.02048700 0.24199716
|
| 4 |
+
joints joint3 -0.96306712 -0.02048700 0.20354502
|
| 5 |
+
joints joint4 -0.50115306 -0.02048700 0.20354502
|
| 6 |
+
joints joint5 -0.23162181 -0.94431512 0.35735361
|
| 7 |
+
joints joint6 -0.23162181 0.86476691 0.35735361
|
| 8 |
+
joints joint7 -0.19316966 -1.13669794 0.35735361
|
| 9 |
+
joints joint8 -0.19316966 1.05666144 0.35735361
|
| 10 |
+
joints joint9 -0.15471752 -0.36692255 0.20354502
|
| 11 |
+
joints joint10 -0.15471752 -0.02048700 0.20354502
|
| 12 |
+
joints joint11 -0.15471752 0.28737433 0.20354502
|
| 13 |
+
joints joint12 -0.03923900 -0.67478387 0.16503183
|
| 14 |
+
joints joint13 -0.03923900 0.63380988 0.16503183
|
| 15 |
+
joints joint14 0.03772633 -0.02048700 0.16503183
|
| 16 |
+
joints joint15 0.38410084 -0.02048700 0.12654917
|
| 17 |
+
joints joint16 0.65363209 -0.02048700 0.16503183
|
| 18 |
+
joints joint17 0.92267506 -0.63620966 0.28044931
|
| 19 |
+
joints joint18 0.96173756 -0.40525262 0.24199716
|
| 20 |
+
joints joint19 0.96173756 -0.13596552 0.20354502
|
| 21 |
+
joints joint20 0.96173756 0.05647833 0.20354502
|
| 22 |
+
joints joint21 0.96173756 0.36427863 0.24199716
|
| 23 |
+
joints joint22 0.96173756 0.59523566 0.28044931
|
| 24 |
+
joints joint23 1.11505788 -0.02048700 0.16503183
|
| 25 |
+
joints joint24 1.11505788 0.74904425 0.35735361
|
| 26 |
+
joints joint25 1.19220631 -0.82859247 0.35735361
|
| 27 |
+
joints joint26 1.34650319 -0.02048700 0.12654917
|
| 28 |
+
joints joint27 1.53888600 -0.02048700 0.08806650
|
| 29 |
+
root joint10
|
| 30 |
+
hier joint10 joint14
|
| 31 |
+
hier joint14 joint15
|
| 32 |
+
hier joint14 joint9
|
| 33 |
+
hier joint10 joint4
|
| 34 |
+
hier joint14 joint11
|
| 35 |
+
hier joint15 joint16
|
| 36 |
+
hier joint9 joint12
|
| 37 |
+
hier joint4 joint3
|
| 38 |
+
hier joint11 joint13
|
| 39 |
+
hier joint16 joint23
|
| 40 |
+
hier joint12 joint5
|
| 41 |
+
hier joint3 joint2
|
| 42 |
+
hier joint13 joint6
|
| 43 |
+
hier joint23 joint26
|
| 44 |
+
hier joint23 joint19
|
| 45 |
+
hier joint23 joint20
|
| 46 |
+
hier joint5 joint7
|
| 47 |
+
hier joint2 joint1
|
| 48 |
+
hier joint6 joint8
|
| 49 |
+
hier joint26 joint27
|
| 50 |
+
hier joint19 joint18
|
| 51 |
+
hier joint20 joint21
|
| 52 |
+
hier joint1 joint0
|
| 53 |
+
hier joint18 joint17
|
| 54 |
+
hier joint21 joint22
|
| 55 |
+
hier joint17 joint25
|
| 56 |
+
hier joint22 joint24
|
| 57 |
+
skin 0 joint26 1.000000
|
| 58 |
+
skin 1 joint26 1.000000
|
| 59 |
+
skin 2 joint26 1.000000
|
| 60 |
+
skin 3 joint26 1.000000
|
| 61 |
+
skin 4 joint26 1.000000
|
| 62 |
+
skin 5 joint26 1.000000
|
| 63 |
+
skin 6 joint26 1.000000
|
| 64 |
+
skin 7 joint26 1.000000
|
| 65 |
+
skin 8 joint26 1.000000
|
| 66 |
+
skin 9 joint26 1.000000
|
| 67 |
+
skin 10 joint26 1.000000
|
| 68 |
+
skin 11 joint26 1.000000
|
| 69 |
+
skin 12 joint26 1.000000
|
| 70 |
+
skin 13 joint26 1.000000
|
| 71 |
+
skin 14 joint26 1.000000
|
| 72 |
+
skin 15 joint26 1.000000
|
| 73 |
+
skin 16 joint26 1.000000
|
| 74 |
+
skin 17 joint26 1.000000
|
| 75 |
+
skin 18 joint26 1.000000
|
| 76 |
+
skin 19 joint26 1.000000
|
| 77 |
+
skin 20 joint26 1.000000
|
| 78 |
+
skin 21 joint26 0.678619 joint27 0.321381
|
| 79 |
+
skin 22 joint26 0.732537 joint27 0.267463
|
| 80 |
+
skin 23 joint26 0.732537 joint27 0.267463
|
| 81 |
+
skin 24 joint26 1.000000
|
| 82 |
+
skin 25 joint26 1.000000
|
| 83 |
+
skin 26 joint26 0.582329 joint27 0.417671
|
| 84 |
+
skin 27 joint26 1.000000
|
| 85 |
+
skin 28 joint26 1.000000
|
| 86 |
+
skin 29 joint26 1.000000
|
| 87 |
+
skin 30 joint26 1.000000
|
| 88 |
+
skin 31 joint26 1.000000
|
| 89 |
+
skin 32 joint26 1.000000
|
| 90 |
+
skin 33 joint26 0.732537 joint27 0.267463
|
| 91 |
+
skin 34 joint26 1.000000
|
| 92 |
+
skin 35 joint26 0.732537 joint27 0.267463
|
| 93 |
+
skin 36 joint27 1.000000
|
| 94 |
+
skin 37 joint26 0.295836 joint27 0.704164
|
| 95 |
+
skin 38 joint26 0.295836 joint27 0.704164
|
| 96 |
+
skin 39 joint26 0.348470 joint27 0.651529
|
| 97 |
+
skin 40 joint26 0.576930 joint27 0.423070
|
| 98 |
+
skin 41 joint26 0.576930 joint27 0.423070
|
| 99 |
+
skin 42 joint26 0.348470 joint27 0.651529
|
| 100 |
+
skin 43 joint27 1.000000
|
| 101 |
+
skin 44 joint26 0.400758 joint27 0.599242
|
| 102 |
+
skin 45 joint27 1.000000
|
| 103 |
+
skin 46 joint27 1.000000
|
| 104 |
+
skin 47 joint27 1.000000
|
| 105 |
+
skin 48 joint27 1.000000
|
| 106 |
+
skin 49 joint27 1.000000
|
| 107 |
+
skin 50 joint27 1.000000
|
| 108 |
+
skin 51 joint27 1.000000
|
| 109 |
+
skin 52 joint27 1.000000
|
| 110 |
+
skin 53 joint26 0.336109 joint27 0.663891
|
| 111 |
+
skin 54 joint27 1.000000
|
| 112 |
+
skin 55 joint27 1.000000
|
| 113 |
+
skin 56 joint27 1.000000
|
| 114 |
+
skin 57 joint27 1.000000
|
| 115 |
+
skin 58 joint27 1.000000
|
| 116 |
+
skin 59 joint27 1.000000
|
| 117 |
+
skin 60 joint26 0.337740 joint27 0.662260
|
| 118 |
+
skin 61 joint27 1.000000
|
| 119 |
+
skin 62 joint26 0.268269 joint27 0.731731
|
| 120 |
+
skin 63 joint27 1.000000
|
| 121 |
+
skin 64 joint27 1.000000
|
| 122 |
+
skin 65 joint27 1.000000
|
| 123 |
+
skin 66 joint27 1.000000
|
| 124 |
+
skin 67 joint27 1.000000
|
| 125 |
+
skin 68 joint27 1.000000
|
| 126 |
+
skin 69 joint27 1.000000
|
| 127 |
+
skin 70 joint27 1.000000
|
| 128 |
+
skin 71 joint26 0.272801 joint27 0.727199
|
| 129 |
+
skin 72 joint27 1.000000
|
| 130 |
+
skin 73 joint27 1.000000
|
| 131 |
+
skin 74 joint27 1.000000
|
| 132 |
+
skin 75 joint27 1.000000
|
| 133 |
+
skin 76 joint27 1.000000
|
| 134 |
+
skin 77 joint27 1.000000
|
| 135 |
+
skin 78 joint27 1.000000
|
| 136 |
+
skin 79 joint27 1.000000
|
| 137 |
+
skin 80 joint27 1.000000
|
| 138 |
+
skin 81 joint26 1.000000
|
| 139 |
+
skin 82 joint26 1.000000
|
| 140 |
+
skin 83 joint26 1.000000
|
| 141 |
+
skin 84 joint26 1.000000
|
| 142 |
+
skin 85 joint26 1.000000
|
| 143 |
+
skin 86 joint26 1.000000
|
| 144 |
+
skin 87 joint26 0.720251 joint27 0.279749
|
| 145 |
+
skin 88 joint26 0.720251 joint27 0.279749
|
| 146 |
+
skin 89 joint26 1.000000
|
| 147 |
+
skin 90 joint26 1.000000
|
| 148 |
+
skin 91 joint26 1.000000
|
| 149 |
+
skin 92 joint26 1.000000
|
| 150 |
+
skin 93 joint26 1.000000
|
| 151 |
+
skin 94 joint26 1.000000
|
| 152 |
+
skin 95 joint26 1.000000
|
| 153 |
+
skin 96 joint26 1.000000
|
| 154 |
+
skin 97 joint26 1.000000
|
| 155 |
+
skin 98 joint26 1.000000
|
| 156 |
+
skin 99 joint26 1.000000
|
| 157 |
+
skin 100 joint26 1.000000
|
| 158 |
+
skin 101 joint26 0.720251 joint27 0.279749
|
| 159 |
+
skin 102 joint26 0.720251 joint27 0.279749
|
| 160 |
+
skin 103 joint26 0.720251 joint27 0.279749
|
| 161 |
+
skin 104 joint26 0.720251 joint27 0.279749
|
| 162 |
+
skin 105 joint26 1.000000
|
| 163 |
+
skin 106 joint26 0.720251 joint27 0.279749
|
| 164 |
+
skin 107 joint26 0.720251 joint27 0.279749
|
| 165 |
+
skin 108 joint26 0.693260 joint27 0.306740
|
| 166 |
+
skin 109 joint26 0.701043 joint27 0.298957
|
| 167 |
+
skin 110 joint26 1.000000
|
| 168 |
+
skin 111 joint26 1.000000
|
| 169 |
+
skin 112 joint26 1.000000
|
| 170 |
+
skin 113 joint26 1.000000
|
| 171 |
+
skin 114 joint26 1.000000
|
| 172 |
+
skin 115 joint26 0.325966 joint27 0.674034
|
| 173 |
+
skin 116 joint26 0.311307 joint27 0.688693
|
| 174 |
+
skin 117 joint26 0.311307 joint27 0.688693
|
| 175 |
+
skin 118 joint26 0.372629 joint27 0.627371
|
| 176 |
+
skin 119 joint26 0.424944 joint27 0.575056
|
| 177 |
+
skin 120 joint26 0.343554 joint27 0.656446
|
| 178 |
+
skin 121 joint26 0.372629 joint27 0.627371
|
| 179 |
+
skin 122 joint26 0.372629 joint27 0.627371
|
| 180 |
+
skin 123 joint26 0.279008 joint27 0.720992
|
| 181 |
+
skin 124 joint26 0.456522 joint27 0.543478
|
| 182 |
+
skin 125 joint27 1.000000
|
| 183 |
+
skin 126 joint26 0.304618 joint27 0.695382
|
| 184 |
+
skin 127 joint26 0.304618 joint27 0.695382
|
| 185 |
+
skin 128 joint27 1.000000
|
| 186 |
+
skin 129 joint26 0.304618 joint27 0.695382
|
| 187 |
+
skin 130 joint27 1.000000
|
| 188 |
+
skin 131 joint26 0.279008 joint27 0.720992
|
| 189 |
+
skin 132 joint26 0.279008 joint27 0.720992
|
| 190 |
+
skin 133 joint26 0.262288 joint27 0.737712
|
| 191 |
+
skin 134 joint26 0.344660 joint27 0.655340
|
| 192 |
+
skin 135 joint27 1.000000
|
| 193 |
+
skin 136 joint27 1.000000
|
| 194 |
+
skin 137 joint27 1.000000
|
| 195 |
+
skin 138 joint27 1.000000
|
| 196 |
+
skin 139 joint26 0.582810 joint27 0.417190
|
| 197 |
+
skin 140 joint27 1.000000
|
| 198 |
+
skin 141 joint27 1.000000
|
| 199 |
+
skin 142 joint27 1.000000
|
| 200 |
+
skin 143 joint27 1.000000
|
| 201 |
+
skin 144 joint27 1.000000
|
| 202 |
+
skin 145 joint27 1.000000
|
| 203 |
+
skin 146 joint27 1.000000
|
| 204 |
+
skin 147 joint27 1.000000
|
| 205 |
+
skin 148 joint27 1.000000
|
| 206 |
+
skin 149 joint27 1.000000
|
| 207 |
+
skin 150 joint26 1.000000
|
| 208 |
+
skin 151 joint26 1.000000
|
| 209 |
+
skin 152 joint26 1.000000
|
| 210 |
+
skin 153 joint26 1.000000
|
| 211 |
+
skin 154 joint26 1.000000
|
| 212 |
+
skin 155 joint26 1.000000
|
| 213 |
+
skin 156 joint26 1.000000
|
| 214 |
+
skin 157 joint26 1.000000
|
| 215 |
+
skin 158 joint26 1.000000
|
| 216 |
+
skin 159 joint26 1.000000
|
| 217 |
+
skin 160 joint26 1.000000
|
| 218 |
+
skin 161 joint26 1.000000
|
| 219 |
+
skin 162 joint26 1.000000
|
| 220 |
+
skin 163 joint26 1.000000
|
| 221 |
+
skin 164 joint26 1.000000
|
| 222 |
+
skin 165 joint26 1.000000
|
| 223 |
+
skin 166 joint26 1.000000
|
| 224 |
+
skin 167 joint26 1.000000
|
| 225 |
+
skin 168 joint26 1.000000
|
| 226 |
+
skin 169 joint26 1.000000
|
| 227 |
+
skin 170 joint26 1.000000
|
| 228 |
+
skin 171 joint26 1.000000
|
| 229 |
+
skin 172 joint26 1.000000
|
| 230 |
+
skin 173 joint26 1.000000
|
| 231 |
+
skin 174 joint26 1.000000
|
| 232 |
+
skin 175 joint26 1.000000
|
| 233 |
+
skin 176 joint26 1.000000
|
| 234 |
+
skin 177 joint26 1.000000
|
| 235 |
+
skin 178 joint26 1.000000
|
| 236 |
+
skin 179 joint26 1.000000
|
| 237 |
+
skin 180 joint26 1.000000
|
| 238 |
+
skin 181 joint26 1.000000
|
| 239 |
+
skin 182 joint26 1.000000
|
| 240 |
+
skin 183 joint26 1.000000
|
| 241 |
+
skin 184 joint26 1.000000
|
| 242 |
+
skin 185 joint26 1.000000
|
| 243 |
+
skin 186 joint26 0.489875 joint27 0.510125
|
| 244 |
+
skin 187 joint26 0.411208 joint27 0.588792
|
| 245 |
+
skin 188 joint26 0.411208 joint27 0.588792
|
| 246 |
+
skin 189 joint26 0.578085 joint27 0.421915
|
| 247 |
+
skin 190 joint26 0.578085 joint27 0.421915
|
| 248 |
+
skin 191 joint26 0.587299 joint27 0.412701
|
| 249 |
+
skin 192 joint26 0.573509 joint27 0.426491
|
| 250 |
+
skin 193 joint26 0.503474 joint27 0.496526
|
| 251 |
+
skin 194 joint26 0.574292 joint27 0.425708
|
| 252 |
+
skin 195 joint26 0.445675 joint27 0.554325
|
| 253 |
+
skin 196 joint26 0.503474 joint27 0.496526
|
| 254 |
+
skin 197 joint26 0.503474 joint27 0.496526
|
| 255 |
+
skin 198 joint26 0.531465 joint27 0.468535
|
| 256 |
+
skin 199 joint26 0.531465 joint27 0.468535
|
| 257 |
+
skin 200 joint26 0.467883 joint27 0.532117
|
| 258 |
+
skin 201 joint26 0.467883 joint27 0.532117
|
| 259 |
+
skin 202 joint26 0.341676 joint27 0.658324
|
| 260 |
+
skin 203 joint26 0.542645 joint27 0.457355
|
| 261 |
+
skin 204 joint26 0.351702 joint27 0.648298
|
| 262 |
+
skin 205 joint26 0.345570 joint27 0.654430
|
| 263 |
+
skin 206 joint26 0.345570 joint27 0.654430
|
| 264 |
+
skin 207 joint26 0.368600 joint27 0.631400
|
| 265 |
+
skin 208 joint26 0.368600 joint27 0.631400
|
| 266 |
+
skin 209 joint26 0.332608 joint27 0.667392
|
| 267 |
+
skin 210 joint26 0.345570 joint27 0.654430
|
| 268 |
+
skin 211 joint26 0.331877 joint27 0.668123
|
| 269 |
+
skin 212 joint26 0.366395 joint27 0.633606
|
| 270 |
+
skin 213 joint26 0.336817 joint27 0.663183
|
| 271 |
+
skin 214 joint26 0.345570 joint27 0.654430
|
| 272 |
+
skin 215 joint26 0.345570 joint27 0.654430
|
| 273 |
+
skin 216 joint26 0.332608 joint27 0.667392
|
| 274 |
+
skin 217 joint26 0.332608 joint27 0.667392
|
| 275 |
+
skin 218 joint26 0.308315 joint27 0.691685
|
| 276 |
+
skin 219 joint26 0.297316 joint27 0.702684
|
| 277 |
+
skin 220 joint26 0.283284 joint27 0.716716
|
| 278 |
+
skin 221 joint26 0.354659 joint27 0.645341
|
| 279 |
+
skin 222 joint27 1.000000
|
| 280 |
+
skin 223 joint27 1.000000
|
| 281 |
+
skin 224 joint27 1.000000
|
| 282 |
+
skin 225 joint27 1.000000
|
| 283 |
+
skin 226 joint27 1.000000
|
| 284 |
+
skin 227 joint27 1.000000
|
| 285 |
+
skin 228 joint27 1.000000
|
| 286 |
+
skin 229 joint27 1.000000
|
| 287 |
+
skin 230 joint26 0.262899 joint27 0.737101
|
| 288 |
+
skin 231 joint26 1.000000
|
| 289 |
+
skin 232 joint26 1.000000
|
| 290 |
+
skin 233 joint26 1.000000
|
| 291 |
+
skin 234 joint26 1.000000
|
| 292 |
+
skin 235 joint26 1.000000
|
| 293 |
+
skin 236 joint26 1.000000
|
| 294 |
+
skin 237 joint26 1.000000
|
| 295 |
+
skin 238 joint26 1.000000
|
| 296 |
+
skin 239 joint26 1.000000
|
| 297 |
+
skin 240 joint26 1.000000
|
| 298 |
+
skin 241 joint26 1.000000
|
| 299 |
+
skin 242 joint26 1.000000
|
| 300 |
+
skin 243 joint26 1.000000
|
| 301 |
+
skin 244 joint26 1.000000
|
| 302 |
+
skin 245 joint26 1.000000
|
| 303 |
+
skin 246 joint26 1.000000
|
| 304 |
+
skin 247 joint26 1.000000
|
| 305 |
+
skin 248 joint26 1.000000
|
| 306 |
+
skin 249 joint26 1.000000
|
| 307 |
+
skin 250 joint26 1.000000
|
| 308 |
+
skin 251 joint26 1.000000
|
| 309 |
+
skin 252 joint26 1.000000
|
| 310 |
+
skin 253 joint26 1.000000
|
| 311 |
+
skin 254 joint26 1.000000
|
| 312 |
+
skin 255 joint26 1.000000
|
| 313 |
+
skin 256 joint26 1.000000
|
| 314 |
+
skin 257 joint26 1.000000
|
| 315 |
+
skin 258 joint26 1.000000
|
| 316 |
+
skin 259 joint26 1.000000
|
| 317 |
+
skin 260 joint26 1.000000
|
| 318 |
+
skin 261 joint26 1.000000
|
| 319 |
+
skin 262 joint26 1.000000
|
| 320 |
+
skin 263 joint26 1.000000
|
| 321 |
+
skin 264 joint26 1.000000
|
| 322 |
+
skin 265 joint26 0.594304 joint27 0.405696
|
| 323 |
+
skin 266 joint26 0.594304 joint27 0.405696
|
| 324 |
+
skin 267 joint26 0.594304 joint27 0.405696
|
| 325 |
+
skin 268 joint26 0.594304 joint27 0.405696
|
| 326 |
+
skin 269 joint26 0.531309 joint27 0.468691
|
| 327 |
+
skin 270 joint26 0.525044 joint27 0.474956
|
| 328 |
+
skin 271 joint26 0.509758 joint27 0.490242
|
| 329 |
+
skin 272 joint26 0.509758 joint27 0.490242
|
| 330 |
+
skin 273 joint26 0.534833 joint27 0.465167
|
| 331 |
+
skin 274 joint26 0.525044 joint27 0.474956
|
| 332 |
+
skin 275 joint26 0.449106 joint27 0.550894
|
| 333 |
+
skin 276 joint26 0.482263 joint27 0.517737
|
| 334 |
+
skin 277 joint26 0.482263 joint27 0.517737
|
| 335 |
+
skin 278 joint26 0.534833 joint27 0.465167
|
| 336 |
+
skin 279 joint26 0.414742 joint27 0.585258
|
| 337 |
+
skin 280 joint26 0.445887 joint27 0.554113
|
| 338 |
+
skin 281 joint26 0.445887 joint27 0.554113
|
| 339 |
+
skin 282 joint26 0.445887 joint27 0.554113
|
| 340 |
+
skin 283 joint26 0.484993 joint27 0.515007
|
| 341 |
+
skin 284 joint26 0.445887 joint27 0.554113
|
| 342 |
+
skin 285 joint26 0.542412 joint27 0.457588
|
| 343 |
+
skin 286 joint26 0.445887 joint27 0.554113
|
| 344 |
+
skin 287 joint26 0.445887 joint27 0.554113
|
| 345 |
+
skin 288 joint26 0.473694 joint27 0.526306
|
| 346 |
+
skin 289 joint26 0.411521 joint27 0.588479
|
| 347 |
+
skin 290 joint26 0.271567 joint27 0.728433
|
| 348 |
+
skin 291 joint26 0.271567 joint27 0.728433
|
| 349 |
+
skin 292 joint26 0.271567 joint27 0.728433
|
| 350 |
+
skin 293 joint26 0.430535 joint27 0.569465
|
| 351 |
+
skin 294 joint26 0.310750 joint27 0.689250
|
| 352 |
+
skin 295 joint26 0.368600 joint27 0.631400
|
| 353 |
+
skin 296 joint26 0.310750 joint27 0.689250
|
| 354 |
+
skin 297 joint26 0.310750 joint27 0.689250
|
| 355 |
+
skin 298 joint26 0.409007 joint27 0.590993
|
| 356 |
+
skin 299 joint26 0.345570 joint27 0.654430
|
| 357 |
+
skin 300 joint18 0.269472 joint19 0.730528
|
| 358 |
+
skin 301 joint18 0.555810 joint19 0.444190
|
| 359 |
+
skin 302 joint18 1.000000
|
| 360 |
+
skin 303 joint17 0.513502 joint18 0.486498
|
| 361 |
+
skin 304 joint17 1.000000
|
| 362 |
+
skin 305 joint17 1.000000
|
| 363 |
+
skin 306 joint17 1.000000
|
| 364 |
+
skin 307 joint19 1.000000
|
| 365 |
+
skin 308 joint19 1.000000
|
| 366 |
+
skin 309 joint19 1.000000
|
| 367 |
+
skin 310 joint18 0.352881 joint19 0.647119
|
| 368 |
+
skin 311 joint18 0.352881 joint19 0.647119
|
| 369 |
+
skin 312 joint18 0.355847 joint19 0.644153
|
| 370 |
+
skin 313 joint18 0.279127 joint19 0.720873
|
| 371 |
+
skin 314 joint19 1.000000
|
| 372 |
+
skin 315 joint18 0.260053 joint19 0.739947
|
| 373 |
+
skin 316 joint18 0.415982 joint19 0.584017
|
| 374 |
+
skin 317 joint18 0.732795 joint19 0.267205
|
| 375 |
+
skin 318 joint18 0.670333 joint19 0.329667
|
| 376 |
+
skin 319 joint18 0.739074 joint19 0.260926
|
| 377 |
+
skin 320 joint18 1.000000
|
| 378 |
+
skin 321 joint18 1.000000
|
| 379 |
+
skin 322 joint18 0.391671 joint19 0.608329
|
| 380 |
+
skin 323 joint18 0.391671 joint19 0.608329
|
| 381 |
+
skin 324 joint18 0.371018 joint19 0.628982
|
| 382 |
+
skin 325 joint18 0.378906 joint19 0.621094
|
| 383 |
+
skin 326 joint18 0.350501 joint19 0.649499
|
| 384 |
+
skin 327 joint17 0.333589 joint18 0.666411
|
| 385 |
+
skin 328 joint17 0.498117 joint18 0.501883
|
| 386 |
+
skin 329 joint17 0.400443 joint18 0.599557
|
| 387 |
+
skin 330 joint17 0.286092 joint18 0.713908
|
| 388 |
+
skin 331 joint17 0.286092 joint18 0.713908
|
| 389 |
+
skin 332 joint17 0.363211 joint18 0.636789
|
| 390 |
+
skin 333 joint17 0.416999 joint18 0.583001
|
| 391 |
+
skin 334 joint17 0.497181 joint18 0.502819
|
| 392 |
+
skin 335 joint17 0.332193 joint18 0.667807
|
| 393 |
+
skin 336 joint17 0.357914 joint18 0.642087
|
| 394 |
+
skin 337 joint17 0.452717 joint18 0.547283
|
| 395 |
+
skin 338 joint17 0.522320 joint18 0.477680
|
| 396 |
+
skin 339 joint17 0.563483 joint18 0.436517
|
| 397 |
+
skin 340 joint17 0.597026 joint18 0.402974
|
| 398 |
+
skin 341 joint17 0.553236 joint18 0.446764
|
| 399 |
+
skin 342 joint17 0.400443 joint18 0.599557
|
| 400 |
+
skin 343 joint17 0.400443 joint18 0.599557
|
| 401 |
+
skin 344 joint17 0.326355 joint18 0.673645
|
| 402 |
+
skin 345 joint17 0.326355 joint18 0.673645
|
| 403 |
+
skin 346 joint17 0.549771 joint18 0.450229
|
| 404 |
+
skin 347 joint17 1.000000
|
| 405 |
+
skin 348 joint17 1.000000
|
| 406 |
+
skin 349 joint17 1.000000
|
| 407 |
+
skin 350 joint17 1.000000
|
| 408 |
+
skin 351 joint17 1.000000
|
| 409 |
+
skin 352 joint17 0.693710 joint25 0.306290
|
| 410 |
+
skin 353 joint17 0.684301 joint25 0.315699
|
| 411 |
+
skin 354 joint17 1.000000
|
| 412 |
+
skin 355 joint17 1.000000
|
| 413 |
+
skin 356 joint17 1.000000
|
| 414 |
+
skin 357 joint17 1.000000
|
| 415 |
+
skin 358 joint17 1.000000
|
| 416 |
+
skin 359 joint17 1.000000
|
| 417 |
+
skin 360 joint17 1.000000
|
| 418 |
+
skin 361 joint17 1.000000
|
| 419 |
+
skin 362 joint17 1.000000
|
| 420 |
+
skin 363 joint17 1.000000
|
| 421 |
+
skin 364 joint17 1.000000
|
| 422 |
+
skin 365 joint17 1.000000
|
| 423 |
+
skin 366 joint17 1.000000
|
| 424 |
+
skin 367 joint17 1.000000
|
| 425 |
+
skin 368 joint17 1.000000
|
| 426 |
+
skin 369 joint17 1.000000
|
| 427 |
+
skin 370 joint17 1.000000
|
| 428 |
+
skin 371 joint17 1.000000
|
| 429 |
+
skin 372 joint17 1.000000
|
| 430 |
+
skin 373 joint17 1.000000
|
| 431 |
+
skin 374 joint17 1.000000
|
| 432 |
+
skin 375 joint17 1.000000
|
| 433 |
+
skin 376 joint17 1.000000
|
| 434 |
+
skin 377 joint17 1.000000
|
| 435 |
+
skin 378 joint17 1.000000
|
| 436 |
+
skin 379 joint9 0.440279 joint10 0.559721
|
| 437 |
+
skin 380 joint9 1.000000
|
| 438 |
+
skin 381 joint9 0.517533 joint12 0.482467
|
| 439 |
+
skin 382 joint12 1.000000
|
| 440 |
+
skin 383 joint12 1.000000
|
| 441 |
+
skin 384 joint9 0.298066 joint10 0.701934
|
| 442 |
+
skin 385 joint9 0.264982 joint10 0.735018
|
| 443 |
+
skin 386 joint9 0.301859 joint10 0.698141
|
| 444 |
+
skin 387 joint10 1.000000
|
| 445 |
+
skin 388 joint10 1.000000
|
| 446 |
+
skin 389 joint10 1.000000
|
| 447 |
+
skin 390 joint10 0.397837 joint14 0.602163
|
| 448 |
+
skin 391 joint9 0.374989 joint10 0.334186 joint14 0.290825
|
| 449 |
+
skin 392 joint9 0.315654 joint10 0.292293 joint14 0.392053
|
| 450 |
+
skin 393 joint9 0.211980 joint10 0.361454 joint14 0.426566
|
| 451 |
+
skin 394 joint9 1.000000
|
| 452 |
+
skin 395 joint9 0.721949 joint10 0.278051
|
| 453 |
+
skin 396 joint9 0.601174 joint10 0.398826
|
| 454 |
+
skin 397 joint9 0.687042 joint10 0.312958
|
| 455 |
+
skin 398 joint9 1.000000
|
| 456 |
+
skin 399 joint9 1.000000
|
| 457 |
+
skin 400 joint9 1.000000
|
| 458 |
+
skin 401 joint9 1.000000
|
| 459 |
+
skin 402 joint9 1.000000
|
| 460 |
+
skin 403 joint9 1.000000
|
| 461 |
+
skin 404 joint9 0.303862 joint12 0.696138
|
| 462 |
+
skin 405 joint9 0.482283 joint12 0.517717
|
| 463 |
+
skin 406 joint9 0.396220 joint12 0.603780
|
| 464 |
+
skin 407 joint9 0.609293 joint12 0.390707
|
| 465 |
+
skin 408 joint9 0.601014 joint12 0.398986
|
| 466 |
+
skin 409 joint9 0.601014 joint12 0.398986
|
| 467 |
+
skin 410 joint9 0.735163 joint12 0.264837
|
| 468 |
+
skin 411 joint9 0.723111 joint12 0.276889
|
| 469 |
+
skin 412 joint9 0.590930 joint12 0.409070
|
| 470 |
+
skin 413 joint9 0.682097 joint12 0.317903
|
| 471 |
+
skin 414 joint12 1.000000
|
| 472 |
+
skin 415 joint12 1.000000
|
| 473 |
+
skin 416 joint12 1.000000
|
| 474 |
+
skin 417 joint12 1.000000
|
| 475 |
+
skin 418 joint12 1.000000
|
| 476 |
+
skin 419 joint12 1.000000
|
| 477 |
+
skin 420 joint12 1.000000
|
| 478 |
+
skin 421 joint12 1.000000
|
| 479 |
+
skin 422 joint12 1.000000
|
| 480 |
+
skin 423 joint5 0.307426 joint12 0.692574
|
| 481 |
+
skin 424 joint5 0.307426 joint12 0.692574
|
| 482 |
+
skin 425 joint5 0.307426 joint12 0.692574
|
| 483 |
+
skin 426 joint12 1.000000
|
| 484 |
+
skin 427 joint12 1.000000
|
| 485 |
+
skin 428 joint12 1.000000
|
| 486 |
+
skin 429 joint12 1.000000
|
| 487 |
+
skin 430 joint12 1.000000
|
| 488 |
+
skin 431 joint12 1.000000
|
| 489 |
+
skin 432 joint12 1.000000
|
| 490 |
+
skin 433 joint12 1.000000
|
| 491 |
+
skin 434 joint12 1.000000
|
| 492 |
+
skin 435 joint0 1.000000
|
| 493 |
+
skin 436 joint0 1.000000
|
| 494 |
+
skin 437 joint0 1.000000
|
| 495 |
+
skin 438 joint1 1.000000
|
| 496 |
+
skin 439 joint1 1.000000
|
| 497 |
+
skin 440 joint0 0.297003 joint1 0.702997
|
| 498 |
+
skin 441 joint0 0.277447 joint1 0.722553
|
| 499 |
+
skin 442 joint1 1.000000
|
| 500 |
+
skin 443 joint1 1.000000
|
| 501 |
+
skin 444 joint4 0.440502 joint10 0.559498
|
| 502 |
+
skin 445 joint4 0.390025 joint10 0.609975
|
| 503 |
+
skin 446 joint4 0.390025 joint10 0.609975
|
| 504 |
+
skin 447 joint4 0.510094 joint10 0.489906
|
| 505 |
+
skin 448 joint4 0.488432 joint10 0.511568
|
| 506 |
+
skin 449 joint1 1.000000
|
| 507 |
+
skin 450 joint26 1.000000
|
| 508 |
+
skin 451 joint26 1.000000
|
| 509 |
+
skin 452 joint4 0.464918 joint10 0.535082
|
| 510 |
+
skin 453 joint4 0.464918 joint10 0.535082
|
| 511 |
+
skin 454 joint4 0.589574 joint10 0.410426
|
| 512 |
+
skin 455 joint4 0.628627 joint10 0.371373
|
| 513 |
+
skin 456 joint4 0.705784 joint10 0.294216
|
| 514 |
+
skin 457 joint4 0.619327 joint10 0.380673
|
| 515 |
+
skin 458 joint4 0.536165 joint10 0.463835
|
| 516 |
+
skin 459 joint2 0.333443 joint3 0.666557
|
| 517 |
+
skin 460 joint2 0.333443 joint3 0.666557
|
| 518 |
+
skin 461 joint2 0.318178 joint3 0.681822
|
| 519 |
+
skin 462 joint2 0.337092 joint3 0.662908
|
| 520 |
+
skin 463 joint2 0.323962 joint3 0.676038
|
| 521 |
+
skin 464 joint4 0.534786 joint10 0.465214
|
| 522 |
+
skin 465 joint4 0.534786 joint10 0.465214
|
| 523 |
+
skin 466 joint2 0.351588 joint3 0.648412
|
| 524 |
+
skin 467 joint2 0.351487 joint3 0.648513
|
| 525 |
+
skin 468 joint3 0.473782 joint4 0.526218
|
| 526 |
+
skin 469 joint3 0.495252 joint4 0.504748
|
| 527 |
+
skin 470 joint3 0.485438 joint4 0.514562
|
| 528 |
+
skin 471 joint3 0.472223 joint4 0.527777
|
| 529 |
+
skin 472 joint3 0.425934 joint4 0.574066
|
| 530 |
+
skin 473 joint3 0.425934 joint4 0.574066
|
| 531 |
+
skin 474 joint17 0.299402 joint25 0.700598
|
| 532 |
+
skin 475 joint25 1.000000
|
| 533 |
+
skin 476 joint25 1.000000
|
| 534 |
+
skin 477 joint25 1.000000
|
| 535 |
+
skin 478 joint25 1.000000
|
| 536 |
+
skin 479 joint17 0.263391 joint25 0.736608
|
| 537 |
+
skin 480 joint17 0.374888 joint25 0.625112
|
| 538 |
+
skin 481 joint17 0.374888 joint25 0.625112
|
| 539 |
+
skin 482 joint17 0.299402 joint25 0.700598
|
| 540 |
+
skin 483 joint25 1.000000
|
| 541 |
+
skin 484 joint25 1.000000
|
| 542 |
+
skin 485 joint25 1.000000
|
| 543 |
+
skin 486 joint25 1.000000
|
| 544 |
+
skin 487 joint25 1.000000
|
| 545 |
+
skin 488 joint25 1.000000
|
| 546 |
+
skin 489 joint25 1.000000
|
| 547 |
+
skin 490 joint1 1.000000
|
| 548 |
+
skin 491 joint3 0.409989 joint4 0.590011
|
| 549 |
+
skin 492 joint3 0.537938 joint4 0.462062
|
| 550 |
+
skin 493 joint4 0.581214 joint10 0.418786
|
| 551 |
+
skin 494 joint4 0.581214 joint10 0.418786
|
| 552 |
+
skin 495 joint3 0.716090 joint4 0.283910
|
| 553 |
+
skin 496 joint3 0.500416 joint4 0.499584
|
| 554 |
+
skin 497 joint3 0.669242 joint4 0.330758
|
| 555 |
+
skin 498 joint4 0.311445 joint10 0.688555
|
| 556 |
+
skin 499 joint4 0.311445 joint10 0.688555
|
| 557 |
+
skin 500 joint10 1.000000
|
| 558 |
+
skin 501 joint10 1.000000
|
| 559 |
+
skin 502 joint25 1.000000
|
| 560 |
+
skin 503 joint25 1.000000
|
| 561 |
+
skin 504 joint25 1.000000
|
| 562 |
+
skin 505 joint25 1.000000
|
| 563 |
+
skin 506 joint25 1.000000
|
| 564 |
+
skin 507 joint25 1.000000
|
| 565 |
+
skin 508 joint25 1.000000
|
| 566 |
+
skin 509 joint25 1.000000
|
| 567 |
+
skin 510 joint25 1.000000
|
| 568 |
+
skin 511 joint25 1.000000
|
| 569 |
+
skin 512 joint25 1.000000
|
| 570 |
+
skin 513 joint25 1.000000
|
| 571 |
+
skin 514 joint26 1.000000
|
| 572 |
+
skin 515 joint26 1.000000
|
| 573 |
+
skin 516 joint26 1.000000
|
| 574 |
+
skin 517 joint26 1.000000
|
| 575 |
+
skin 518 joint25 1.000000
|
| 576 |
+
skin 519 joint25 1.000000
|
| 577 |
+
skin 520 joint25 1.000000
|
| 578 |
+
skin 521 joint25 1.000000
|
| 579 |
+
skin 522 joint25 1.000000
|
| 580 |
+
skin 523 joint25 1.000000
|
| 581 |
+
skin 524 joint25 1.000000
|
| 582 |
+
skin 525 joint25 1.000000
|
| 583 |
+
skin 526 joint25 1.000000
|
| 584 |
+
skin 527 joint25 1.000000
|
| 585 |
+
skin 528 joint3 0.723415 joint4 0.276585
|
| 586 |
+
skin 529 joint3 0.723415 joint4 0.276585
|
| 587 |
+
skin 530 joint0 0.609521 joint1 0.390479
|
| 588 |
+
skin 531 joint0 0.609521 joint1 0.390479
|
| 589 |
+
skin 532 joint0 0.555045 joint1 0.444955
|
| 590 |
+
skin 533 joint0 0.568517 joint1 0.431483
|
| 591 |
+
skin 534 joint0 0.593470 joint1 0.406530
|
| 592 |
+
skin 535 joint25 1.000000
|
| 593 |
+
skin 536 joint25 1.000000
|
| 594 |
+
skin 537 joint25 1.000000
|
| 595 |
+
skin 538 joint25 1.000000
|
| 596 |
+
skin 539 joint25 1.000000
|
| 597 |
+
skin 540 joint25 1.000000
|
| 598 |
+
skin 541 joint25 1.000000
|
| 599 |
+
skin 542 joint25 1.000000
|
| 600 |
+
skin 543 joint25 1.000000
|
| 601 |
+
skin 544 joint25 1.000000
|
| 602 |
+
skin 545 joint0 0.570535 joint1 0.429465
|
| 603 |
+
skin 546 joint21 1.000000
|
| 604 |
+
skin 547 joint0 0.580870 joint1 0.419130
|
| 605 |
+
skin 548 joint3 0.633598 joint4 0.366402
|
| 606 |
+
skin 549 joint3 0.732891 joint4 0.267109
|
| 607 |
+
skin 550 joint3 0.686401 joint4 0.313599
|
| 608 |
+
skin 551 joint25 1.000000
|
| 609 |
+
skin 552 joint25 1.000000
|
| 610 |
+
skin 553 joint25 1.000000
|
| 611 |
+
skin 554 joint25 1.000000
|
| 612 |
+
skin 555 joint25 1.000000
|
| 613 |
+
skin 556 joint25 1.000000
|
| 614 |
+
skin 557 joint25 1.000000
|
| 615 |
+
skin 558 joint25 1.000000
|
| 616 |
+
skin 559 joint1 0.705184 joint2 0.294816
|
| 617 |
+
skin 560 joint1 0.705184 joint2 0.294816
|
| 618 |
+
skin 561 joint1 0.603850 joint2 0.396150
|
| 619 |
+
skin 562 joint1 0.588783 joint2 0.411217
|
| 620 |
+
skin 563 joint1 0.588783 joint2 0.411217
|
| 621 |
+
skin 564 joint1 0.418489 joint2 0.581511
|
| 622 |
+
skin 565 joint1 0.418489 joint2 0.581511
|
| 623 |
+
skin 566 joint1 0.480196 joint2 0.519803
|
| 624 |
+
skin 567 joint3 0.709727 joint4 0.290273
|
| 625 |
+
skin 568 joint3 0.684361 joint4 0.315639
|
| 626 |
+
skin 569 joint25 1.000000
|
| 627 |
+
skin 570 joint25 1.000000
|
| 628 |
+
skin 571 joint25 1.000000
|
| 629 |
+
skin 572 joint25 1.000000
|
| 630 |
+
skin 573 joint25 1.000000
|
| 631 |
+
skin 574 joint25 1.000000
|
| 632 |
+
skin 575 joint25 1.000000
|
| 633 |
+
skin 576 joint25 1.000000
|
| 634 |
+
skin 577 joint25 1.000000
|
| 635 |
+
skin 578 joint25 1.000000
|
| 636 |
+
skin 579 joint25 1.000000
|
| 637 |
+
skin 580 joint25 1.000000
|
| 638 |
+
skin 581 joint25 1.000000
|
| 639 |
+
skin 582 joint25 1.000000
|
| 640 |
+
skin 583 joint25 1.000000
|
| 641 |
+
skin 584 joint25 1.000000
|
| 642 |
+
skin 585 joint25 1.000000
|
| 643 |
+
skin 586 joint25 1.000000
|
| 644 |
+
skin 587 joint25 1.000000
|
| 645 |
+
skin 588 joint17 0.278771 joint25 0.721229
|
| 646 |
+
skin 589 joint25 1.000000
|
| 647 |
+
skin 590 joint25 1.000000
|
| 648 |
+
skin 591 joint25 1.000000
|
| 649 |
+
skin 592 joint25 1.000000
|
| 650 |
+
skin 593 joint25 1.000000
|
| 651 |
+
skin 594 joint25 1.000000
|
| 652 |
+
skin 595 joint25 1.000000
|
| 653 |
+
skin 596 joint25 1.000000
|
| 654 |
+
skin 597 joint25 1.000000
|
| 655 |
+
skin 598 joint25 1.000000
|
| 656 |
+
skin 599 joint25 1.000000
|
| 657 |
+
skin 600 joint25 1.000000
|
| 658 |
+
skin 601 joint25 1.000000
|
| 659 |
+
skin 602 joint25 1.000000
|
| 660 |
+
skin 603 joint25 1.000000
|
| 661 |
+
skin 604 joint25 1.000000
|
| 662 |
+
skin 605 joint25 1.000000
|
| 663 |
+
skin 606 joint25 1.000000
|
| 664 |
+
skin 607 joint25 1.000000
|
| 665 |
+
skin 608 joint25 1.000000
|
| 666 |
+
skin 609 joint25 1.000000
|
| 667 |
+
skin 610 joint25 1.000000
|
| 668 |
+
skin 611 joint25 1.000000
|
| 669 |
+
skin 612 joint25 1.000000
|
| 670 |
+
skin 613 joint25 1.000000
|
| 671 |
+
skin 614 joint25 1.000000
|
| 672 |
+
skin 615 joint25 1.000000
|
| 673 |
+
skin 616 joint25 1.000000
|
| 674 |
+
skin 617 joint1 1.000000
|
| 675 |
+
skin 618 joint1 1.000000
|
| 676 |
+
skin 619 joint1 1.000000
|
| 677 |
+
skin 620 joint25 1.000000
|
| 678 |
+
skin 621 joint1 1.000000
|
| 679 |
+
skin 622 joint1 0.710586 joint2 0.289414
|
| 680 |
+
skin 623 joint1 0.710586 joint2 0.289414
|
| 681 |
+
skin 624 joint25 1.000000
|
| 682 |
+
skin 625 joint25 1.000000
|
| 683 |
+
skin 626 joint25 1.000000
|
| 684 |
+
skin 627 joint25 1.000000
|
| 685 |
+
skin 628 joint25 1.000000
|
| 686 |
+
skin 629 joint25 1.000000
|
| 687 |
+
skin 630 joint25 1.000000
|
| 688 |
+
skin 631 joint25 1.000000
|
| 689 |
+
skin 632 joint25 1.000000
|
| 690 |
+
skin 633 joint25 1.000000
|
| 691 |
+
skin 634 joint25 1.000000
|
| 692 |
+
skin 635 joint25 1.000000
|
| 693 |
+
skin 636 joint25 1.000000
|
| 694 |
+
skin 637 joint25 1.000000
|
| 695 |
+
skin 638 joint25 1.000000
|
| 696 |
+
skin 639 joint25 1.000000
|
| 697 |
+
skin 640 joint25 1.000000
|
| 698 |
+
skin 641 joint25 1.000000
|
| 699 |
+
skin 642 joint25 1.000000
|
| 700 |
+
skin 643 joint25 1.000000
|
| 701 |
+
skin 644 joint25 1.000000
|
| 702 |
+
skin 645 joint25 1.000000
|
| 703 |
+
skin 646 joint25 1.000000
|
| 704 |
+
skin 647 joint25 1.000000
|
| 705 |
+
skin 648 joint25 1.000000
|
| 706 |
+
skin 649 joint25 1.000000
|
| 707 |
+
skin 650 joint25 1.000000
|
| 708 |
+
skin 651 joint25 1.000000
|
| 709 |
+
skin 652 joint25 1.000000
|
| 710 |
+
skin 653 joint17 0.392708 joint25 0.607292
|
| 711 |
+
skin 654 joint17 0.424533 joint25 0.575467
|
| 712 |
+
skin 655 joint17 0.597730 joint25 0.402270
|
| 713 |
+
skin 656 joint17 0.597730 joint25 0.402270
|
| 714 |
+
skin 657 joint25 1.000000
|
| 715 |
+
skin 658 joint25 1.000000
|
| 716 |
+
skin 659 joint17 0.456085 joint25 0.543915
|
| 717 |
+
skin 660 joint17 0.572553 joint25 0.427447
|
| 718 |
+
skin 661 joint17 0.572553 joint25 0.427447
|
| 719 |
+
skin 662 joint17 0.342221 joint25 0.657779
|
| 720 |
+
skin 663 joint17 0.342221 joint25 0.657779
|
| 721 |
+
skin 664 joint25 1.000000
|
| 722 |
+
skin 665 joint17 0.394259 joint25 0.605741
|
| 723 |
+
skin 666 joint17 0.325430 joint25 0.674570
|
| 724 |
+
skin 667 joint25 1.000000
|
| 725 |
+
skin 668 joint17 0.278771 joint25 0.721229
|
| 726 |
+
skin 669 joint17 0.519864 joint25 0.480136
|
| 727 |
+
skin 670 joint25 1.000000
|
| 728 |
+
skin 671 joint17 0.506601 joint25 0.493399
|
| 729 |
+
skin 672 joint25 1.000000
|
| 730 |
+
skin 673 joint17 0.506601 joint25 0.493399
|
| 731 |
+
skin 674 joint17 0.375782 joint25 0.624218
|
| 732 |
+
skin 675 joint17 0.375782 joint25 0.624218
|
| 733 |
+
skin 676 joint25 1.000000
|
| 734 |
+
skin 677 joint17 0.642754 joint25 0.357246
|
| 735 |
+
skin 678 joint25 1.000000
|
| 736 |
+
skin 679 joint17 0.597730 joint25 0.402270
|
| 737 |
+
skin 680 joint25 1.000000
|
| 738 |
+
skin 681 joint17 0.636121 joint25 0.363879
|
| 739 |
+
skin 682 joint17 1.000000
|
| 740 |
+
skin 683 joint17 1.000000
|
| 741 |
+
skin 684 joint17 1.000000
|
| 742 |
+
skin 685 joint17 1.000000
|
| 743 |
+
skin 686 joint12 1.000000
|
| 744 |
+
skin 687 joint9 0.268850 joint12 0.731150
|
| 745 |
+
skin 688 joint9 0.422721 joint12 0.577279
|
| 746 |
+
skin 689 joint12 1.000000
|
| 747 |
+
skin 690 joint12 1.000000
|
| 748 |
+
skin 691 joint12 1.000000
|
| 749 |
+
skin 692 joint12 1.000000
|
| 750 |
+
skin 693 joint12 1.000000
|
| 751 |
+
skin 694 joint12 1.000000
|
| 752 |
+
skin 695 joint12 1.000000
|
| 753 |
+
skin 696 joint12 1.000000
|
| 754 |
+
skin 697 joint1 0.334934 joint2 0.665066
|
| 755 |
+
skin 698 joint1 0.334934 joint2 0.665066
|
| 756 |
+
skin 699 joint2 0.681271 joint3 0.318729
|
| 757 |
+
skin 700 joint2 0.681271 joint3 0.318729
|
| 758 |
+
skin 701 joint3 1.000000
|
| 759 |
+
skin 702 joint3 1.000000
|
| 760 |
+
skin 703 joint4 1.000000
|
| 761 |
+
skin 704 joint4 1.000000
|
| 762 |
+
skin 705 joint1 0.729320 joint2 0.270680
|
| 763 |
+
skin 706 joint4 0.729840 joint10 0.270160
|
| 764 |
+
skin 707 joint2 0.460008 joint3 0.539992
|
| 765 |
+
skin 708 joint3 1.000000
|
| 766 |
+
skin 709 joint4 1.000000
|
| 767 |
+
skin 710 joint17 0.719622 joint18 0.280378
|
| 768 |
+
skin 711 joint17 0.662864 joint18 0.337136
|
| 769 |
+
skin 712 joint17 0.648905 joint18 0.351095
|
| 770 |
+
skin 713 joint17 0.720065 joint18 0.279935
|
| 771 |
+
skin 714 joint17 0.633861 joint18 0.366139
|
| 772 |
+
skin 715 joint17 0.633861 joint18 0.366139
|
| 773 |
+
skin 716 joint17 0.633861 joint18 0.366139
|
| 774 |
+
skin 717 joint17 1.000000
|
| 775 |
+
skin 718 joint17 0.670709 joint18 0.329291
|
| 776 |
+
skin 719 joint17 0.630847 joint18 0.369153
|
| 777 |
+
skin 720 joint17 0.620671 joint18 0.379329
|
| 778 |
+
skin 721 joint5 0.623584 joint12 0.376416
|
| 779 |
+
skin 722 joint5 0.623584 joint12 0.376416
|
| 780 |
+
skin 723 joint12 1.000000
|
| 781 |
+
skin 724 joint5 1.000000
|
| 782 |
+
skin 725 joint5 1.000000
|
| 783 |
+
skin 726 joint5 1.000000
|
| 784 |
+
skin 727 joint7 1.000000
|
| 785 |
+
skin 728 joint7 1.000000
|
| 786 |
+
skin 729 joint7 1.000000
|
| 787 |
+
skin 730 joint5 0.262705 joint7 0.737294
|
| 788 |
+
skin 731 joint5 0.262705 joint7 0.737294
|
| 789 |
+
skin 732 joint5 1.000000
|
| 790 |
+
skin 733 joint5 0.297091 joint12 0.702909
|
| 791 |
+
skin 734 joint5 0.387318 joint12 0.612682
|
| 792 |
+
skin 735 joint5 1.000000
|
| 793 |
+
skin 736 joint5 1.000000
|
| 794 |
+
skin 737 joint7 1.000000
|
| 795 |
+
skin 738 joint7 1.000000
|
| 796 |
+
skin 739 joint5 1.000000
|
| 797 |
+
skin 740 joint5 0.283392 joint7 0.716608
|
| 798 |
+
skin 741 joint5 0.624895 joint12 0.375105
|
| 799 |
+
skin 742 joint5 0.567655 joint7 0.432345
|
| 800 |
+
skin 743 joint5 0.567655 joint7 0.432345
|
| 801 |
+
skin 744 joint5 0.502404 joint12 0.497596
|
| 802 |
+
skin 745 joint5 1.000000
|
| 803 |
+
skin 746 joint5 1.000000
|
| 804 |
+
skin 747 joint5 0.283392 joint7 0.716608
|
| 805 |
+
skin 748 joint5 0.262705 joint7 0.737294
|
| 806 |
+
skin 749 joint5 0.262705 joint7 0.737294
|
| 807 |
+
skin 750 joint5 0.542123 joint12 0.457877
|
| 808 |
+
skin 751 joint5 1.000000
|
| 809 |
+
skin 752 joint5 1.000000
|
| 810 |
+
skin 753 joint5 1.000000
|
| 811 |
+
skin 754 joint5 1.000000
|
| 812 |
+
skin 755 joint5 1.000000
|
| 813 |
+
skin 756 joint5 1.000000
|
| 814 |
+
skin 757 joint5 1.000000
|
| 815 |
+
skin 758 joint5 1.000000
|
| 816 |
+
skin 759 joint5 1.000000
|
| 817 |
+
skin 760 joint5 0.426703 joint12 0.573297
|
| 818 |
+
skin 761 joint5 0.426703 joint12 0.573297
|
| 819 |
+
skin 762 joint5 0.572436 joint12 0.427564
|
| 820 |
+
skin 763 joint5 1.000000
|
| 821 |
+
skin 764 joint5 1.000000
|
| 822 |
+
skin 765 joint5 0.622857 joint7 0.377144
|
| 823 |
+
skin 766 joint5 0.622857 joint7 0.377144
|
| 824 |
+
skin 767 joint5 0.542123 joint12 0.457877
|
| 825 |
+
skin 768 joint5 0.432672 joint7 0.567328
|
| 826 |
+
skin 769 joint5 0.327598 joint7 0.672402
|
| 827 |
+
skin 770 joint5 0.327598 joint7 0.672402
|
| 828 |
+
skin 771 joint5 0.327120 joint7 0.672879
|
| 829 |
+
skin 772 joint5 1.000000
|
| 830 |
+
skin 773 joint5 1.000000
|
| 831 |
+
skin 774 joint5 1.000000
|
| 832 |
+
skin 775 joint5 1.000000
|
| 833 |
+
skin 776 joint5 1.000000
|
| 834 |
+
skin 777 joint5 1.000000
|
| 835 |
+
skin 778 joint5 1.000000
|
| 836 |
+
skin 779 joint5 1.000000
|
| 837 |
+
skin 780 joint7 1.000000
|
| 838 |
+
skin 781 joint7 1.000000
|
| 839 |
+
skin 782 joint5 1.000000
|
| 840 |
+
skin 783 joint5 1.000000
|
| 841 |
+
skin 784 joint5 0.622857 joint7 0.377144
|
| 842 |
+
skin 785 joint5 1.000000
|
| 843 |
+
skin 786 joint7 1.000000
|
| 844 |
+
skin 787 joint7 1.000000
|
| 845 |
+
skin 788 joint7 1.000000
|
| 846 |
+
skin 789 joint7 1.000000
|
| 847 |
+
skin 790 joint7 1.000000
|
| 848 |
+
skin 791 joint5 0.314957 joint7 0.685043
|
| 849 |
+
skin 792 joint5 0.522281 joint7 0.477719
|
| 850 |
+
skin 793 joint5 0.327598 joint7 0.672402
|
| 851 |
+
skin 794 joint5 1.000000
|
| 852 |
+
skin 795 joint5 1.000000
|
| 853 |
+
skin 796 joint5 1.000000
|
| 854 |
+
skin 797 joint5 0.639846 joint7 0.360154
|
| 855 |
+
skin 798 joint7 1.000000
|
| 856 |
+
skin 799 joint5 0.314957 joint7 0.685043
|
| 857 |
+
skin 800 joint5 0.314957 joint7 0.685043
|
| 858 |
+
skin 801 joint5 0.314957 joint7 0.685043
|
| 859 |
+
skin 802 joint5 0.626617 joint7 0.373383
|
| 860 |
+
skin 803 joint5 0.626617 joint7 0.373383
|
| 861 |
+
skin 804 joint5 1.000000
|
| 862 |
+
skin 805 joint5 1.000000
|
| 863 |
+
skin 806 joint7 1.000000
|
| 864 |
+
skin 807 joint7 1.000000
|
| 865 |
+
skin 808 joint7 1.000000
|
| 866 |
+
skin 809 joint7 1.000000
|
| 867 |
+
skin 810 joint5 0.663025 joint12 0.336975
|
| 868 |
+
skin 811 joint5 1.000000
|
| 869 |
+
skin 812 joint5 1.000000
|
| 870 |
+
skin 813 joint5 0.535267 joint12 0.464733
|
| 871 |
+
skin 814 joint15 0.303936 joint16 0.404654 joint19 0.291410
|
| 872 |
+
skin 815 joint15 0.241280 joint16 0.386258 joint19 0.372462
|
| 873 |
+
skin 816 joint14 0.580049 joint15 0.419951
|
| 874 |
+
skin 817 joint9 0.170790 joint14 0.420562 joint15 0.408648
|
| 875 |
+
skin 818 joint15 0.254544 joint16 0.470757 joint19 0.274698
|
| 876 |
+
skin 819 joint19 1.000000
|
| 877 |
+
skin 820 joint19 1.000000
|
| 878 |
+
skin 821 joint14 0.462144 joint15 0.537856
|
| 879 |
+
skin 822 joint19 1.000000
|
| 880 |
+
skin 823 joint19 1.000000
|
| 881 |
+
skin 824 joint15 0.476026 joint16 0.523974
|
| 882 |
+
skin 825 joint16 0.446690 joint19 0.553310
|
| 883 |
+
skin 826 joint15 0.493780 joint16 0.506220
|
| 884 |
+
skin 827 joint16 1.000000
|
| 885 |
+
skin 828 joint14 0.392267 joint15 0.607733
|
| 886 |
+
skin 829 joint10 0.210455 joint14 0.571710 joint15 0.217836
|
| 887 |
+
skin 830 joint10 0.482580 joint14 0.517420
|
| 888 |
+
skin 831 joint10 0.716107 joint14 0.283893
|
| 889 |
+
skin 832 joint10 1.000000
|
| 890 |
+
skin 833 joint10 1.000000
|
| 891 |
+
skin 834 joint10 1.000000
|
| 892 |
+
skin 835 joint10 1.000000
|
| 893 |
+
skin 836 joint10 1.000000
|
| 894 |
+
skin 837 joint10 1.000000
|
| 895 |
+
skin 838 joint10 1.000000
|
| 896 |
+
skin 839 joint10 0.704043 joint14 0.295957
|
| 897 |
+
skin 840 joint10 0.704043 joint14 0.295957
|
| 898 |
+
skin 841 joint10 0.361233 joint14 0.638767
|
| 899 |
+
skin 842 joint14 0.517991 joint15 0.482009
|
| 900 |
+
skin 843 joint14 0.564848 joint15 0.435152
|
| 901 |
+
skin 844 joint15 0.310412 joint16 0.399939 joint19 0.289649
|
| 902 |
+
skin 845 joint15 0.260031 joint16 0.422800 joint19 0.317169
|
| 903 |
+
skin 846 joint19 1.000000
|
| 904 |
+
skin 847 joint19 1.000000
|
| 905 |
+
skin 848 joint19 1.000000
|
| 906 |
+
skin 849 joint19 1.000000
|
| 907 |
+
skin 850 joint16 0.196783 joint19 0.316894 joint23 0.240993 joint26 0.245330
|
| 908 |
+
skin 851 joint16 1.000000
|
| 909 |
+
skin 852 joint16 1.000000
|
| 910 |
+
skin 853 joint16 1.000000
|
| 911 |
+
skin 854 joint16 1.000000
|
| 912 |
+
skin 855 joint16 0.681497 joint23 0.318503
|
| 913 |
+
skin 856 joint16 0.681497 joint23 0.318503
|
| 914 |
+
skin 857 joint16 1.000000
|
| 915 |
+
skin 858 joint16 1.000000
|
| 916 |
+
skin 859 joint16 1.000000
|
| 917 |
+
skin 860 joint16 1.000000
|
| 918 |
+
skin 861 joint10 0.304870 joint14 0.695130
|
| 919 |
+
skin 862 joint10 0.304870 joint14 0.695130
|
| 920 |
+
skin 863 joint10 1.000000
|
| 921 |
+
skin 864 joint10 1.000000
|
| 922 |
+
skin 865 joint16 0.320616 joint19 0.679384
|
| 923 |
+
skin 866 joint16 0.337449 joint19 0.662551
|
| 924 |
+
skin 867 joint16 0.213394 joint19 0.176749 joint23 0.441546 joint26 0.168311
|
| 925 |
+
skin 868 joint16 0.632870 joint23 0.367130
|
| 926 |
+
skin 869 joint16 0.192715 joint23 0.525958 joint26 0.281328
|
| 927 |
+
skin 870 joint16 1.000000
|
| 928 |
+
skin 871 joint1 0.701452 joint2 0.298548
|
| 929 |
+
skin 872 joint16 0.261527 joint23 0.527911 joint26 0.210562
|
| 930 |
+
skin 873 joint14 0.428442 joint15 0.571558
|
| 931 |
+
skin 874 joint15 1.000000
|
| 932 |
+
skin 875 joint14 1.000000
|
| 933 |
+
skin 876 joint14 1.000000
|
| 934 |
+
skin 877 joint10 0.371585 joint14 0.628415
|
| 935 |
+
skin 878 joint10 0.652504 joint14 0.347496
|
| 936 |
+
skin 879 joint10 1.000000
|
| 937 |
+
skin 880 joint10 0.343200 joint14 0.656800
|
| 938 |
+
skin 881 joint16 0.261211 joint23 0.414348 joint26 0.324442
|
| 939 |
+
skin 882 joint16 0.261211 joint23 0.414348 joint26 0.324442
|
| 940 |
+
skin 883 joint19 0.282850 joint23 0.265724 joint26 0.451426
|
| 941 |
+
skin 884 joint23 0.291824 joint26 0.708176
|
| 942 |
+
skin 885 joint19 0.299276 joint23 0.287839 joint26 0.412884
|
| 943 |
+
skin 886 joint23 0.259456 joint26 0.740544
|
| 944 |
+
skin 887 joint19 0.321286 joint23 0.425347 joint26 0.253368
|
| 945 |
+
skin 888 joint23 0.414029 joint26 0.585971
|
| 946 |
+
skin 889 joint23 0.594606 joint26 0.405394
|
| 947 |
+
skin 890 joint23 0.552699 joint26 0.447301
|
| 948 |
+
skin 891 joint19 0.449182 joint23 0.342301 joint26 0.208517
|
| 949 |
+
skin 892 joint23 0.383901 joint26 0.616099
|
| 950 |
+
skin 893 joint23 0.376880 joint26 0.623120
|
| 951 |
+
skin 894 joint16 0.152084 joint19 0.157153 joint23 0.317257 joint26 0.373506
|
| 952 |
+
skin 895 joint26 0.340326 joint27 0.659674
|
| 953 |
+
skin 896 joint26 0.340326 joint27 0.659674
|
| 954 |
+
skin 897 joint26 0.428823 joint27 0.571178
|
| 955 |
+
skin 898 joint26 0.428823 joint27 0.571178
|
| 956 |
+
skin 899 joint26 0.555009 joint27 0.444991
|
| 957 |
+
skin 900 joint26 0.555009 joint27 0.444991
|
| 958 |
+
skin 901 joint26 0.508948 joint27 0.491052
|
| 959 |
+
skin 902 joint26 0.508948 joint27 0.491052
|
| 960 |
+
skin 903 joint26 0.617482 joint27 0.382518
|
| 961 |
+
skin 904 joint26 0.617482 joint27 0.382518
|
| 962 |
+
skin 905 joint26 0.516741 joint27 0.483259
|
| 963 |
+
skin 906 joint26 0.516741 joint27 0.483259
|
| 964 |
+
skin 907 joint26 0.429731 joint27 0.570269
|
| 965 |
+
skin 908 joint26 0.429731 joint27 0.570269
|
| 966 |
+
skin 909 joint26 0.366213 joint27 0.633787
|
| 967 |
+
skin 910 joint26 0.366213 joint27 0.633787
|
| 968 |
+
skin 911 joint26 0.389980 joint27 0.610020
|
| 969 |
+
skin 912 joint26 0.429731 joint27 0.570269
|
| 970 |
+
skin 913 joint26 0.431648 joint27 0.568352
|
| 971 |
+
skin 914 joint26 0.547279 joint27 0.452721
|
| 972 |
+
skin 915 joint26 0.547279 joint27 0.452721
|
| 973 |
+
skin 916 joint26 0.561141 joint27 0.438860
|
| 974 |
+
skin 917 joint26 0.429731 joint27 0.570269
|
| 975 |
+
skin 918 joint26 0.429731 joint27 0.570269
|
| 976 |
+
skin 919 joint26 0.709676 joint27 0.290324
|
| 977 |
+
skin 920 joint26 0.652862 joint27 0.347138
|
| 978 |
+
skin 921 joint26 1.000000
|
| 979 |
+
skin 922 joint26 1.000000
|
| 980 |
+
skin 923 joint26 1.000000
|
| 981 |
+
skin 924 joint26 1.000000
|
| 982 |
+
skin 925 joint26 1.000000
|
| 983 |
+
skin 926 joint26 1.000000
|
| 984 |
+
skin 927 joint26 0.709490 joint27 0.290510
|
| 985 |
+
skin 928 joint26 0.721677 joint27 0.278323
|
| 986 |
+
skin 929 joint26 0.627424 joint27 0.372576
|
| 987 |
+
skin 930 joint26 0.696599 joint27 0.303402
|
| 988 |
+
skin 931 joint26 0.709676 joint27 0.290324
|
| 989 |
+
skin 932 joint26 1.000000
|
| 990 |
+
skin 933 joint26 0.453910 joint27 0.546090
|
| 991 |
+
skin 934 joint26 0.655447 joint27 0.344553
|
| 992 |
+
skin 935 joint26 0.510799 joint27 0.489201
|
| 993 |
+
skin 936 joint26 0.510799 joint27 0.489201
|
| 994 |
+
skin 937 joint26 0.655447 joint27 0.344553
|
| 995 |
+
skin 938 joint26 0.721718 joint27 0.278282
|
| 996 |
+
skin 939 joint26 0.718285 joint27 0.281715
|
| 997 |
+
skin 940 joint26 1.000000
|
| 998 |
+
skin 941 joint26 0.721677 joint27 0.278323
|
| 999 |
+
skin 942 joint26 1.000000
|
| 1000 |
+
skin 943 joint26 1.000000
|
| 1001 |
+
skin 944 joint23 0.329100 joint26 0.670900
|
| 1002 |
+
skin 945 joint26 1.000000
|
| 1003 |
+
skin 946 joint26 0.460415 joint27 0.539585
|
| 1004 |
+
skin 947 joint26 0.492852 joint27 0.507148
|
| 1005 |
+
skin 948 joint26 0.492852 joint27 0.507148
|
| 1006 |
+
skin 949 joint26 0.452410 joint27 0.547590
|
| 1007 |
+
skin 950 joint26 0.449106 joint27 0.550894
|
| 1008 |
+
skin 951 joint26 0.449106 joint27 0.550894
|
| 1009 |
+
skin 952 joint26 0.422634 joint27 0.577366
|
| 1010 |
+
skin 953 joint26 0.471994 joint27 0.528006
|
| 1011 |
+
skin 954 joint26 0.471994 joint27 0.528006
|
| 1012 |
+
skin 955 joint26 0.359096 joint27 0.640904
|
| 1013 |
+
skin 956 joint26 0.429929 joint27 0.570071
|
| 1014 |
+
skin 957 joint26 0.429929 joint27 0.570071
|
| 1015 |
+
skin 958 joint26 0.272441 joint27 0.727559
|
| 1016 |
+
skin 959 joint26 0.349046 joint27 0.650954
|
| 1017 |
+
skin 960 joint26 0.349046 joint27 0.650954
|
| 1018 |
+
skin 961 joint26 0.288604 joint27 0.711396
|
| 1019 |
+
skin 962 joint26 0.336817 joint27 0.663183
|
| 1020 |
+
skin 963 joint26 0.336817 joint27 0.663183
|
| 1021 |
+
skin 964 joint26 0.267951 joint27 0.732049
|
| 1022 |
+
skin 965 joint27 1.000000
|
| 1023 |
+
skin 966 joint27 1.000000
|
| 1024 |
+
skin 967 joint4 0.314888 joint10 0.685112
|
| 1025 |
+
skin 968 joint27 1.000000
|
| 1026 |
+
skin 969 joint27 1.000000
|
| 1027 |
+
skin 970 joint26 0.260790 joint27 0.739210
|
| 1028 |
+
skin 971 joint26 0.263186 joint27 0.736814
|
| 1029 |
+
skin 972 joint27 1.000000
|
| 1030 |
+
skin 973 joint27 1.000000
|
| 1031 |
+
skin 974 joint27 1.000000
|
| 1032 |
+
skin 975 joint27 1.000000
|
| 1033 |
+
skin 976 joint26 0.361323 joint27 0.638677
|
| 1034 |
+
skin 977 joint26 0.330256 joint27 0.669744
|
| 1035 |
+
skin 978 joint26 0.380756 joint27 0.619244
|
| 1036 |
+
skin 979 joint26 0.318050 joint27 0.681950
|
| 1037 |
+
skin 980 joint27 1.000000
|
| 1038 |
+
skin 981 joint26 0.323312 joint27 0.676688
|
| 1039 |
+
skin 982 joint27 1.000000
|
| 1040 |
+
skin 983 joint27 1.000000
|
| 1041 |
+
skin 984 joint26 0.421836 joint27 0.578164
|
| 1042 |
+
skin 985 joint26 0.487007 joint27 0.512993
|
| 1043 |
+
skin 986 joint26 1.000000
|
| 1044 |
+
skin 987 joint26 1.000000
|
| 1045 |
+
skin 988 joint26 1.000000
|
| 1046 |
+
skin 989 joint26 0.737932 joint27 0.262068
|
| 1047 |
+
skin 990 joint26 0.697724 joint27 0.302276
|
| 1048 |
+
skin 991 joint26 0.697724 joint27 0.302276
|
| 1049 |
+
skin 992 joint26 0.737932 joint27 0.262068
|
| 1050 |
+
skin 993 joint26 0.737932 joint27 0.262068
|
| 1051 |
+
skin 994 joint26 0.523969 joint27 0.476031
|
| 1052 |
+
skin 995 joint26 1.000000
|
| 1053 |
+
skin 996 joint26 1.000000
|
| 1054 |
+
skin 997 joint26 1.000000
|
| 1055 |
+
skin 998 joint26 1.000000
|
| 1056 |
+
skin 999 joint26 1.000000
|
| 1057 |
+
skin 1000 joint26 1.000000
|
| 1058 |
+
skin 1001 joint26 1.000000
|
| 1059 |
+
skin 1002 joint26 1.000000
|
| 1060 |
+
skin 1003 joint26 1.000000
|
| 1061 |
+
skin 1004 joint26 1.000000
|
| 1062 |
+
skin 1005 joint26 1.000000
|
| 1063 |
+
skin 1006 joint26 1.000000
|
| 1064 |
+
skin 1007 joint26 1.000000
|
| 1065 |
+
skin 1008 joint26 1.000000
|
| 1066 |
+
skin 1009 joint26 1.000000
|
| 1067 |
+
skin 1010 joint26 1.000000
|
| 1068 |
+
skin 1011 joint26 1.000000
|
| 1069 |
+
skin 1012 joint26 1.000000
|
| 1070 |
+
skin 1013 joint26 1.000000
|
| 1071 |
+
skin 1014 joint26 1.000000
|
| 1072 |
+
skin 1015 joint26 1.000000
|
| 1073 |
+
skin 1016 joint26 1.000000
|
| 1074 |
+
skin 1017 joint26 1.000000
|
| 1075 |
+
skin 1018 joint26 1.000000
|
| 1076 |
+
skin 1019 joint26 1.000000
|
| 1077 |
+
skin 1020 joint26 1.000000
|
| 1078 |
+
skin 1021 joint26 1.000000
|
| 1079 |
+
skin 1022 joint26 1.000000
|
| 1080 |
+
skin 1023 joint26 1.000000
|
| 1081 |
+
skin 1024 joint26 1.000000
|
| 1082 |
+
skin 1025 joint26 1.000000
|
| 1083 |
+
skin 1026 joint26 1.000000
|
| 1084 |
+
skin 1027 joint26 1.000000
|
| 1085 |
+
skin 1028 joint26 1.000000
|
| 1086 |
+
skin 1029 joint26 1.000000
|
| 1087 |
+
skin 1030 joint26 1.000000
|
| 1088 |
+
skin 1031 joint26 1.000000
|
| 1089 |
+
skin 1032 joint26 1.000000
|
| 1090 |
+
skin 1033 joint26 1.000000
|
| 1091 |
+
skin 1034 joint26 1.000000
|
| 1092 |
+
skin 1035 joint26 1.000000
|
| 1093 |
+
skin 1036 joint23 0.321400 joint26 0.678600
|
| 1094 |
+
skin 1037 joint23 0.321400 joint26 0.678600
|
| 1095 |
+
skin 1038 joint26 1.000000
|
| 1096 |
+
skin 1039 joint26 1.000000
|
| 1097 |
+
skin 1040 joint26 1.000000
|
| 1098 |
+
skin 1041 joint26 1.000000
|
| 1099 |
+
skin 1042 joint26 1.000000
|
| 1100 |
+
skin 1043 joint26 1.000000
|
| 1101 |
+
skin 1044 joint26 1.000000
|
| 1102 |
+
skin 1045 joint26 1.000000
|
| 1103 |
+
skin 1046 joint26 1.000000
|
| 1104 |
+
skin 1047 joint26 1.000000
|
| 1105 |
+
skin 1048 joint26 1.000000
|
| 1106 |
+
skin 1049 joint26 1.000000
|
| 1107 |
+
skin 1050 joint26 1.000000
|
| 1108 |
+
skin 1051 joint26 1.000000
|
| 1109 |
+
skin 1052 joint26 1.000000
|
| 1110 |
+
skin 1053 joint26 1.000000
|
| 1111 |
+
skin 1054 joint26 1.000000
|
| 1112 |
+
skin 1055 joint26 1.000000
|
| 1113 |
+
skin 1056 joint26 1.000000
|
| 1114 |
+
skin 1057 joint26 1.000000
|
| 1115 |
+
skin 1058 joint26 1.000000
|
| 1116 |
+
skin 1059 joint26 1.000000
|
| 1117 |
+
skin 1060 joint26 1.000000
|
| 1118 |
+
skin 1061 joint26 1.000000
|
| 1119 |
+
skin 1062 joint26 1.000000
|
| 1120 |
+
skin 1063 joint26 1.000000
|
| 1121 |
+
skin 1064 joint26 1.000000
|
| 1122 |
+
skin 1065 joint26 1.000000
|
| 1123 |
+
skin 1066 joint26 1.000000
|
| 1124 |
+
skin 1067 joint26 1.000000
|
| 1125 |
+
skin 1068 joint26 1.000000
|
| 1126 |
+
skin 1069 joint26 1.000000
|
| 1127 |
+
skin 1070 joint26 1.000000
|
| 1128 |
+
skin 1071 joint26 1.000000
|
| 1129 |
+
skin 1072 joint26 1.000000
|
| 1130 |
+
skin 1073 joint26 1.000000
|
| 1131 |
+
skin 1074 joint26 1.000000
|
| 1132 |
+
skin 1075 joint26 1.000000
|
| 1133 |
+
skin 1076 joint26 1.000000
|
| 1134 |
+
skin 1077 joint26 1.000000
|
| 1135 |
+
skin 1078 joint26 1.000000
|
| 1136 |
+
skin 1079 joint26 1.000000
|
| 1137 |
+
skin 1080 joint26 1.000000
|
| 1138 |
+
skin 1081 joint26 1.000000
|
| 1139 |
+
skin 1082 joint26 1.000000
|
| 1140 |
+
skin 1083 joint26 1.000000
|
| 1141 |
+
skin 1084 joint26 1.000000
|
| 1142 |
+
skin 1085 joint26 1.000000
|
| 1143 |
+
skin 1086 joint26 0.534833 joint27 0.465167
|
| 1144 |
+
skin 1087 joint26 0.489875 joint27 0.510125
|
| 1145 |
+
skin 1088 joint26 0.417111 joint27 0.582889
|
| 1146 |
+
skin 1089 joint26 0.380163 joint27 0.619837
|
| 1147 |
+
skin 1090 joint26 0.283284 joint27 0.716716
|
| 1148 |
+
skin 1091 joint26 0.368588 joint27 0.631412
|
| 1149 |
+
skin 1092 joint26 0.352180 joint27 0.647820
|
| 1150 |
+
skin 1093 joint27 1.000000
|
| 1151 |
+
skin 1094 joint27 1.000000
|
| 1152 |
+
skin 1095 joint10 1.000000
|
| 1153 |
+
skin 1096 joint10 1.000000
|
| 1154 |
+
skin 1097 joint10 1.000000
|
| 1155 |
+
skin 1098 joint4 0.341420 joint10 0.658580
|
| 1156 |
+
skin 1099 joint4 0.291967 joint10 0.708033
|
| 1157 |
+
skin 1100 joint4 0.353504 joint10 0.646496
|
| 1158 |
+
skin 1101 joint4 0.375471 joint10 0.624529
|
| 1159 |
+
skin 1102 joint4 0.416264 joint10 0.583736
|
| 1160 |
+
skin 1103 joint4 0.432829 joint10 0.567171
|
| 1161 |
+
skin 1104 joint4 1.000000
|
| 1162 |
+
skin 1105 joint4 1.000000
|
| 1163 |
+
skin 1106 joint4 1.000000
|
| 1164 |
+
skin 1107 joint4 1.000000
|
| 1165 |
+
skin 1108 joint4 1.000000
|
| 1166 |
+
skin 1109 joint4 1.000000
|
| 1167 |
+
skin 1110 joint3 1.000000
|
| 1168 |
+
skin 1111 joint3 1.000000
|
| 1169 |
+
skin 1112 joint3 1.000000
|
| 1170 |
+
skin 1113 joint3 1.000000
|
| 1171 |
+
skin 1114 joint3 1.000000
|
| 1172 |
+
skin 1115 joint3 1.000000
|
| 1173 |
+
skin 1116 joint3 1.000000
|
| 1174 |
+
skin 1117 joint4 0.674664 joint10 0.325336
|
| 1175 |
+
skin 1118 joint2 0.448711 joint3 0.551289
|
| 1176 |
+
skin 1119 joint2 0.638053 joint3 0.361947
|
| 1177 |
+
skin 1120 joint2 0.576739 joint3 0.423261
|
| 1178 |
+
skin 1121 joint2 0.641299 joint3 0.358701
|
| 1179 |
+
skin 1122 joint2 0.616238 joint3 0.383762
|
| 1180 |
+
skin 1123 joint2 1.000000
|
| 1181 |
+
skin 1124 joint1 0.312720 joint2 0.687280
|
| 1182 |
+
skin 1125 joint1 0.320231 joint2 0.679769
|
| 1183 |
+
skin 1126 joint1 0.392069 joint2 0.607931
|
| 1184 |
+
skin 1127 joint1 0.401082 joint2 0.598918
|
| 1185 |
+
skin 1128 joint1 0.398395 joint2 0.601605
|
| 1186 |
+
skin 1129 joint26 0.644344 joint27 0.355656
|
| 1187 |
+
skin 1130 joint26 0.335487 joint27 0.664513
|
| 1188 |
+
skin 1131 joint27 1.000000
|
| 1189 |
+
skin 1132 joint27 1.000000
|
| 1190 |
+
skin 1133 joint27 1.000000
|
| 1191 |
+
skin 1134 joint27 1.000000
|
| 1192 |
+
skin 1135 joint27 1.000000
|
| 1193 |
+
skin 1136 joint27 1.000000
|
| 1194 |
+
skin 1137 joint27 1.000000
|
| 1195 |
+
skin 1138 joint23 0.270642 joint26 0.729358
|
| 1196 |
+
skin 1139 joint23 0.397271 joint26 0.602729
|
| 1197 |
+
skin 1140 joint23 0.397271 joint26 0.602729
|
| 1198 |
+
skin 1141 joint0 0.357060 joint1 0.642940
|
| 1199 |
+
skin 1142 joint0 0.357060 joint1 0.642940
|
| 1200 |
+
skin 1143 joint16 0.523305 joint23 0.476695
|
| 1201 |
+
skin 1144 joint10 0.655261 joint14 0.344739
|
| 1202 |
+
skin 1145 joint10 0.655261 joint14 0.344739
|
| 1203 |
+
skin 1146 joint10 0.655261 joint14 0.344739
|
| 1204 |
+
skin 1147 joint10 0.655261 joint14 0.344739
|
| 1205 |
+
skin 1148 joint14 0.644779 joint15 0.355221
|
| 1206 |
+
skin 1149 joint14 0.644779 joint15 0.355221
|
| 1207 |
+
skin 1150 joint10 1.000000
|
| 1208 |
+
skin 1151 joint10 1.000000
|
| 1209 |
+
skin 1152 joint15 0.477703 joint16 0.522297
|
| 1210 |
+
skin 1153 joint15 0.477703 joint16 0.522297
|
| 1211 |
+
skin 1154 joint15 0.522779 joint16 0.477221
|
| 1212 |
+
skin 1155 joint0 0.372524 joint1 0.627476
|
| 1213 |
+
skin 1156 joint0 0.425253 joint1 0.574747
|
| 1214 |
+
skin 1157 joint0 0.389312 joint1 0.610688
|
| 1215 |
+
skin 1158 joint0 0.353121 joint1 0.646879
|
| 1216 |
+
skin 1159 joint0 0.394841 joint1 0.605159
|
| 1217 |
+
skin 1160 joint0 0.371566 joint1 0.628435
|
| 1218 |
+
skin 1161 joint0 1.000000
|
| 1219 |
+
skin 1162 joint0 1.000000
|
| 1220 |
+
skin 1163 joint0 1.000000
|
| 1221 |
+
skin 1164 joint0 1.000000
|
| 1222 |
+
skin 1165 joint0 1.000000
|
| 1223 |
+
skin 1166 joint0 1.000000
|
| 1224 |
+
skin 1167 joint0 1.000000
|
| 1225 |
+
skin 1168 joint0 1.000000
|
| 1226 |
+
skin 1169 joint21 1.000000
|
| 1227 |
+
skin 1170 joint4 0.722660 joint10 0.277340
|
| 1228 |
+
skin 1171 joint4 0.722660 joint10 0.277340
|
| 1229 |
+
skin 1172 joint4 0.712179 joint10 0.287821
|
| 1230 |
+
skin 1173 joint4 1.000000
|
| 1231 |
+
skin 1174 joint4 1.000000
|
| 1232 |
+
skin 1175 joint4 0.672691 joint10 0.327309
|
| 1233 |
+
skin 1176 joint4 0.388605 joint10 0.611395
|
| 1234 |
+
skin 1177 joint4 0.388605 joint10 0.611395
|
| 1235 |
+
skin 1178 joint0 1.000000
|
| 1236 |
+
skin 1179 joint0 1.000000
|
| 1237 |
+
skin 1180 joint0 1.000000
|
| 1238 |
+
skin 1181 joint0 1.000000
|
| 1239 |
+
skin 1182 joint0 1.000000
|
| 1240 |
+
skin 1183 joint0 1.000000
|
| 1241 |
+
skin 1184 joint0 1.000000
|
| 1242 |
+
skin 1185 joint0 1.000000
|
| 1243 |
+
skin 1186 joint4 0.720787 joint10 0.279213
|
| 1244 |
+
skin 1187 joint10 1.000000
|
| 1245 |
+
skin 1188 joint10 1.000000
|
| 1246 |
+
skin 1189 joint0 1.000000
|
| 1247 |
+
skin 1190 joint0 1.000000
|
| 1248 |
+
skin 1191 joint0 1.000000
|
| 1249 |
+
skin 1192 joint10 1.000000
|
| 1250 |
+
skin 1193 joint10 1.000000
|
| 1251 |
+
skin 1194 joint4 0.307987 joint10 0.692013
|
| 1252 |
+
skin 1195 joint4 0.307987 joint10 0.692013
|
| 1253 |
+
skin 1196 joint10 1.000000
|
| 1254 |
+
skin 1197 joint10 1.000000
|
| 1255 |
+
skin 1198 joint10 1.000000
|
| 1256 |
+
skin 1199 joint26 1.000000
|
| 1257 |
+
skin 1200 joint27 1.000000
|
| 1258 |
+
skin 1201 joint26 0.345570 joint27 0.654430
|
| 1259 |
+
skin 1202 joint0 1.000000
|
| 1260 |
+
skin 1203 joint0 1.000000
|
| 1261 |
+
skin 1204 joint0 1.000000
|
| 1262 |
+
skin 1205 joint0 1.000000
|
| 1263 |
+
skin 1206 joint0 1.000000
|
| 1264 |
+
skin 1207 joint0 1.000000
|
| 1265 |
+
skin 1208 joint0 1.000000
|
| 1266 |
+
skin 1209 joint0 1.000000
|
| 1267 |
+
skin 1210 joint4 0.277297 joint10 0.722703
|
| 1268 |
+
skin 1211 joint4 0.277297 joint10 0.722703
|
| 1269 |
+
skin 1212 joint3 0.346174 joint4 0.653826
|
| 1270 |
+
skin 1213 joint4 0.282176 joint10 0.717824
|
| 1271 |
+
skin 1214 joint10 1.000000
|
| 1272 |
+
skin 1215 joint10 1.000000
|
| 1273 |
+
skin 1216 joint10 1.000000
|
| 1274 |
+
skin 1217 joint0 1.000000
|
| 1275 |
+
skin 1218 joint0 1.000000
|
| 1276 |
+
skin 1219 joint0 1.000000
|
| 1277 |
+
skin 1220 joint0 1.000000
|
| 1278 |
+
skin 1221 joint0 1.000000
|
| 1279 |
+
skin 1222 joint0 1.000000
|
| 1280 |
+
skin 1223 joint0 1.000000
|
| 1281 |
+
skin 1224 joint0 1.000000
|
| 1282 |
+
skin 1225 joint0 1.000000
|
| 1283 |
+
skin 1226 joint10 1.000000
|
| 1284 |
+
skin 1227 joint10 1.000000
|
| 1285 |
+
skin 1228 joint10 1.000000
|
| 1286 |
+
skin 1229 joint10 1.000000
|
| 1287 |
+
skin 1230 joint10 1.000000
|
| 1288 |
+
skin 1231 joint10 1.000000
|
| 1289 |
+
skin 1232 joint4 0.277297 joint10 0.722703
|
| 1290 |
+
skin 1233 joint4 0.277297 joint10 0.722703
|
| 1291 |
+
skin 1234 joint10 0.605729 joint14 0.394271
|
| 1292 |
+
skin 1235 joint10 0.605729 joint14 0.394271
|
| 1293 |
+
skin 1236 joint10 1.000000
|
| 1294 |
+
skin 1237 joint0 1.000000
|
| 1295 |
+
skin 1238 joint0 1.000000
|
| 1296 |
+
skin 1239 joint0 1.000000
|
| 1297 |
+
skin 1240 joint0 1.000000
|
| 1298 |
+
skin 1241 joint0 1.000000
|
| 1299 |
+
skin 1242 joint0 1.000000
|
| 1300 |
+
skin 1243 joint0 1.000000
|
| 1301 |
+
skin 1244 joint0 1.000000
|
| 1302 |
+
skin 1245 joint0 1.000000
|
| 1303 |
+
skin 1246 joint0 1.000000
|
| 1304 |
+
skin 1247 joint0 1.000000
|
| 1305 |
+
skin 1248 joint0 1.000000
|
| 1306 |
+
skin 1249 joint0 1.000000
|
| 1307 |
+
skin 1250 joint0 1.000000
|
| 1308 |
+
skin 1251 joint0 1.000000
|
| 1309 |
+
skin 1252 joint0 1.000000
|
| 1310 |
+
skin 1253 joint9 0.497636 joint10 0.502364
|
| 1311 |
+
skin 1254 joint9 0.588465 joint10 0.411535
|
| 1312 |
+
skin 1255 joint9 0.596825 joint10 0.403175
|
| 1313 |
+
skin 1256 joint9 0.659147 joint10 0.340853
|
| 1314 |
+
skin 1257 joint9 0.602217 joint10 0.397783
|
| 1315 |
+
skin 1258 joint9 0.497023 joint10 0.502977
|
| 1316 |
+
skin 1259 joint9 0.410688 joint10 0.589312
|
| 1317 |
+
skin 1260 joint9 0.410688 joint10 0.589312
|
| 1318 |
+
skin 1261 joint9 0.411937 joint10 0.588063
|
| 1319 |
+
skin 1262 joint9 0.432107 joint10 0.567893
|
| 1320 |
+
skin 1263 joint9 0.333960 joint10 0.666040
|
| 1321 |
+
skin 1264 joint9 1.000000
|
| 1322 |
+
skin 1265 joint9 0.583790 joint10 0.416210
|
| 1323 |
+
skin 1266 joint9 0.284442 joint10 0.415526 joint14 0.300032
|
| 1324 |
+
skin 1267 joint10 0.355315 joint14 0.644685
|
| 1325 |
+
skin 1268 joint14 1.000000
|
| 1326 |
+
skin 1269 joint14 1.000000
|
| 1327 |
+
skin 1270 joint9 0.364712 joint12 0.635287
|
| 1328 |
+
skin 1271 joint12 1.000000
|
| 1329 |
+
skin 1272 joint12 1.000000
|
| 1330 |
+
skin 1273 joint12 1.000000
|
| 1331 |
+
skin 1274 joint5 0.327975 joint12 0.672025
|
| 1332 |
+
skin 1275 joint5 1.000000
|
| 1333 |
+
skin 1276 joint5 0.262705 joint7 0.737294
|
| 1334 |
+
skin 1277 joint5 0.262705 joint7 0.737294
|
| 1335 |
+
skin 1278 joint5 0.314957 joint7 0.685043
|
| 1336 |
+
skin 1279 joint5 0.626617 joint7 0.373383
|
| 1337 |
+
skin 1280 joint5 1.000000
|
| 1338 |
+
skin 1281 joint5 1.000000
|
| 1339 |
+
skin 1282 joint14 0.740006 joint15 0.259994
|
| 1340 |
+
skin 1283 joint14 0.740006 joint15 0.259994
|
| 1341 |
+
skin 1284 joint14 0.740006 joint15 0.259994
|
| 1342 |
+
skin 1285 joint10 0.609301 joint14 0.390699
|
| 1343 |
+
skin 1286 joint10 0.609301 joint14 0.390699
|
| 1344 |
+
skin 1287 joint14 0.732643 joint15 0.267357
|
| 1345 |
+
skin 1288 joint14 0.732643 joint15 0.267357
|
| 1346 |
+
skin 1289 joint14 0.609158 joint15 0.390842
|
| 1347 |
+
skin 1290 joint14 1.000000
|
| 1348 |
+
skin 1291 joint14 1.000000
|
| 1349 |
+
skin 1292 joint14 0.441384 joint15 0.558616
|
| 1350 |
+
skin 1293 joint14 0.441384 joint15 0.558616
|
| 1351 |
+
skin 1294 joint10 0.307690 joint14 0.692310
|
| 1352 |
+
skin 1295 joint10 0.307690 joint14 0.692310
|
| 1353 |
+
skin 1296 joint15 0.678402 joint16 0.321598
|
| 1354 |
+
skin 1297 joint15 0.678402 joint16 0.321598
|
| 1355 |
+
skin 1298 joint14 0.354270 joint15 0.645730
|
| 1356 |
+
skin 1299 joint14 0.354270 joint15 0.645730
|
| 1357 |
+
skin 1300 joint14 0.468554 joint15 0.531446
|
| 1358 |
+
skin 1301 joint14 0.468554 joint15 0.531446
|
| 1359 |
+
skin 1302 joint14 0.337236 joint15 0.662764
|
| 1360 |
+
skin 1303 joint15 0.604828 joint16 0.395172
|
| 1361 |
+
skin 1304 joint15 0.604828 joint16 0.395172
|
| 1362 |
+
skin 1305 joint15 0.468997 joint16 0.531003
|
| 1363 |
+
skin 1306 joint15 0.468997 joint16 0.531003
|
| 1364 |
+
skin 1307 joint15 0.621293 joint16 0.378707
|
| 1365 |
+
skin 1308 joint15 0.621293 joint16 0.378707
|
| 1366 |
+
skin 1309 joint15 0.501356 joint16 0.498644
|
| 1367 |
+
skin 1310 joint15 0.489442 joint16 0.510558
|
| 1368 |
+
skin 1311 joint15 0.489442 joint16 0.510558
|
| 1369 |
+
skin 1312 joint15 0.494413 joint16 0.505587
|
| 1370 |
+
skin 1313 joint15 0.494413 joint16 0.505587
|
| 1371 |
+
skin 1314 joint15 0.671568 joint16 0.328432
|
| 1372 |
+
skin 1315 joint15 0.630327 joint16 0.369673
|
| 1373 |
+
skin 1316 joint14 0.234044 joint15 0.500354 joint16 0.265602
|
| 1374 |
+
skin 1317 joint14 0.234044 joint15 0.500354 joint16 0.265602
|
| 1375 |
+
skin 1318 joint14 0.169148 joint15 0.426135 joint16 0.404717
|
| 1376 |
+
skin 1319 joint14 0.233113 joint15 0.434403 joint16 0.332484
|
| 1377 |
+
skin 1320 joint14 0.164375 joint15 0.440071 joint16 0.395554
|
| 1378 |
+
skin 1321 joint15 0.409824 joint16 0.423990 joint19 0.166186
|
| 1379 |
+
skin 1322 joint14 0.371171 joint15 0.628829
|
| 1380 |
+
skin 1323 joint14 0.371171 joint15 0.628829
|
| 1381 |
+
skin 1324 joint15 0.335650 joint16 0.664350
|
| 1382 |
+
skin 1325 joint15 0.335650 joint16 0.664350
|
| 1383 |
+
skin 1326 joint15 0.414315 joint16 0.585685
|
| 1384 |
+
skin 1327 joint15 0.414315 joint16 0.585685
|
| 1385 |
+
skin 1328 joint15 0.354073 joint16 0.645927
|
| 1386 |
+
skin 1329 joint15 0.570233 joint16 0.429766
|
| 1387 |
+
skin 1330 joint16 0.626967 joint19 0.373033
|
| 1388 |
+
skin 1331 joint16 0.626967 joint19 0.373033
|
| 1389 |
+
skin 1332 joint15 0.476026 joint16 0.523974
|
| 1390 |
+
skin 1333 joint15 0.476026 joint16 0.523974
|
| 1391 |
+
skin 1334 joint16 1.000000
|
| 1392 |
+
skin 1335 joint16 1.000000
|
| 1393 |
+
skin 1336 joint16 0.706441 joint19 0.293559
|
| 1394 |
+
skin 1337 joint16 0.706441 joint19 0.293559
|
| 1395 |
+
skin 1338 joint16 0.678127 joint19 0.321873
|
| 1396 |
+
skin 1339 joint15 0.530587 joint16 0.469413
|
| 1397 |
+
skin 1340 joint16 1.000000
|
| 1398 |
+
skin 1341 joint16 1.000000
|
| 1399 |
+
skin 1342 joint16 1.000000
|
| 1400 |
+
skin 1343 joint16 1.000000
|
| 1401 |
+
skin 1344 joint16 0.429639 joint19 0.570361
|
| 1402 |
+
skin 1345 joint16 0.429639 joint19 0.570361
|
| 1403 |
+
skin 1346 joint16 0.651058 joint19 0.348942
|
| 1404 |
+
skin 1347 joint16 0.446690 joint19 0.553310
|
| 1405 |
+
skin 1348 joint16 0.446690 joint19 0.553310
|
| 1406 |
+
skin 1349 joint16 0.519165 joint19 0.480835
|
| 1407 |
+
skin 1350 joint16 0.519165 joint19 0.480835
|
| 1408 |
+
skin 1351 joint16 0.374344 joint19 0.163412 joint23 0.318485 joint26 0.143758
|
| 1409 |
+
skin 1352 joint16 0.374344 joint19 0.163412 joint23 0.318485 joint26 0.143758
|
| 1410 |
+
skin 1353 joint16 0.277572 joint23 0.485865 joint26 0.236562
|
| 1411 |
+
skin 1354 joint16 0.277572 joint23 0.485865 joint26 0.236562
|
| 1412 |
+
skin 1355 joint16 0.579823 joint23 0.420177
|
| 1413 |
+
skin 1356 joint23 0.577908 joint26 0.422092
|
| 1414 |
+
skin 1357 joint23 0.577908 joint26 0.422092
|
| 1415 |
+
skin 1358 joint16 0.451703 joint19 0.548297
|
| 1416 |
+
skin 1359 joint16 0.451703 joint19 0.548297
|
| 1417 |
+
skin 1360 joint16 0.213394 joint19 0.176749 joint23 0.441546 joint26 0.168311
|
| 1418 |
+
skin 1361 joint16 0.213394 joint19 0.176749 joint23 0.441546 joint26 0.168311
|
| 1419 |
+
skin 1362 joint23 0.470448 joint26 0.529552
|
| 1420 |
+
skin 1363 joint23 0.470448 joint26 0.529552
|
| 1421 |
+
skin 1364 joint16 0.213287 joint23 0.569547 joint26 0.217166
|
| 1422 |
+
skin 1365 joint16 0.495001 joint19 0.504999
|
| 1423 |
+
skin 1366 joint16 0.495001 joint19 0.504999
|
| 1424 |
+
skin 1367 joint23 0.670548 joint26 0.329452
|
| 1425 |
+
skin 1368 joint23 0.670548 joint26 0.329452
|
| 1426 |
+
skin 1369 joint16 0.213394 joint19 0.176749 joint23 0.441546 joint26 0.168311
|
| 1427 |
+
skin 1370 joint16 0.213394 joint19 0.176749 joint23 0.441546 joint26 0.168311
|
| 1428 |
+
skin 1371 joint14 1.000000
|
| 1429 |
+
skin 1372 joint14 1.000000
|
| 1430 |
+
skin 1373 joint14 1.000000
|
| 1431 |
+
skin 1374 joint14 1.000000
|
| 1432 |
+
skin 1375 joint14 1.000000
|
| 1433 |
+
skin 1376 joint14 1.000000
|
| 1434 |
+
skin 1377 joint14 1.000000
|
| 1435 |
+
skin 1378 joint10 0.592796 joint14 0.407204
|
| 1436 |
+
skin 1379 joint10 0.592796 joint14 0.407204
|
| 1437 |
+
skin 1380 joint10 0.373890 joint14 0.626110
|
| 1438 |
+
skin 1381 joint10 0.373890 joint14 0.626110
|
| 1439 |
+
skin 1382 joint10 0.459169 joint14 0.540831
|
| 1440 |
+
skin 1383 joint14 1.000000
|
| 1441 |
+
skin 1384 joint14 1.000000
|
| 1442 |
+
skin 1385 joint10 1.000000
|
| 1443 |
+
skin 1386 joint10 1.000000
|
| 1444 |
+
skin 1387 joint10 0.396467 joint14 0.603533
|
| 1445 |
+
skin 1388 joint10 0.396467 joint14 0.603533
|
| 1446 |
+
skin 1389 joint4 0.392436 joint10 0.607564
|
| 1447 |
+
skin 1390 joint4 0.392436 joint10 0.607564
|
| 1448 |
+
skin 1391 joint4 0.416232 joint10 0.583768
|
| 1449 |
+
skin 1392 joint4 0.416232 joint10 0.583768
|
| 1450 |
+
skin 1393 joint4 1.000000
|
| 1451 |
+
skin 1394 joint4 1.000000
|
| 1452 |
+
skin 1395 joint4 0.518651 joint10 0.481349
|
| 1453 |
+
skin 1396 joint4 0.518651 joint10 0.481349
|
| 1454 |
+
skin 1397 joint4 1.000000
|
| 1455 |
+
skin 1398 joint4 1.000000
|
| 1456 |
+
skin 1399 joint4 1.000000
|
| 1457 |
+
skin 1400 joint4 0.683539 joint10 0.316461
|
| 1458 |
+
skin 1401 joint4 0.683539 joint10 0.316461
|
| 1459 |
+
skin 1402 joint3 0.385450 joint4 0.614550
|
| 1460 |
+
skin 1403 joint3 0.385450 joint4 0.614550
|
| 1461 |
+
skin 1404 joint4 1.000000
|
| 1462 |
+
skin 1405 joint4 1.000000
|
| 1463 |
+
skin 1406 joint4 0.563483 joint10 0.436517
|
| 1464 |
+
skin 1407 joint4 0.563483 joint10 0.436517
|
| 1465 |
+
skin 1408 joint4 1.000000
|
| 1466 |
+
skin 1409 joint4 1.000000
|
| 1467 |
+
skin 1410 joint3 0.664683 joint4 0.335317
|
| 1468 |
+
skin 1411 joint3 0.664683 joint4 0.335317
|
| 1469 |
+
skin 1412 joint4 1.000000
|
| 1470 |
+
skin 1413 joint4 1.000000
|
| 1471 |
+
skin 1414 joint3 0.419656 joint4 0.580344
|
| 1472 |
+
skin 1415 joint3 0.419656 joint4 0.580344
|
| 1473 |
+
skin 1416 joint4 1.000000
|
| 1474 |
+
skin 1417 joint3 0.419656 joint4 0.580344
|
| 1475 |
+
skin 1418 joint3 0.500416 joint4 0.499584
|
| 1476 |
+
skin 1419 joint3 0.500416 joint4 0.499584
|
| 1477 |
+
skin 1420 joint1 1.000000
|
| 1478 |
+
skin 1421 joint1 1.000000
|
| 1479 |
+
skin 1422 joint3 0.500849 joint4 0.499151
|
| 1480 |
+
skin 1423 joint3 0.419656 joint4 0.580344
|
| 1481 |
+
skin 1424 joint3 0.419656 joint4 0.580344
|
| 1482 |
+
skin 1425 joint3 0.626239 joint4 0.373761
|
| 1483 |
+
skin 1426 joint3 0.626239 joint4 0.373761
|
| 1484 |
+
skin 1427 joint2 1.000000
|
| 1485 |
+
skin 1428 joint3 1.000000
|
| 1486 |
+
skin 1429 joint3 1.000000
|
| 1487 |
+
skin 1430 joint3 1.000000
|
| 1488 |
+
skin 1431 joint3 0.701723 joint4 0.298276
|
| 1489 |
+
skin 1432 joint3 0.701723 joint4 0.298276
|
| 1490 |
+
skin 1433 joint3 1.000000
|
| 1491 |
+
skin 1434 joint3 1.000000
|
| 1492 |
+
skin 1435 joint3 1.000000
|
| 1493 |
+
skin 1436 joint3 1.000000
|
| 1494 |
+
skin 1437 joint3 1.000000
|
| 1495 |
+
skin 1438 joint3 1.000000
|
| 1496 |
+
skin 1439 joint3 1.000000
|
| 1497 |
+
skin 1440 joint3 1.000000
|
| 1498 |
+
skin 1441 joint2 0.448711 joint3 0.551289
|
| 1499 |
+
skin 1442 joint3 1.000000
|
| 1500 |
+
skin 1443 joint3 1.000000
|
| 1501 |
+
skin 1444 joint3 1.000000
|
| 1502 |
+
skin 1445 joint3 1.000000
|
| 1503 |
+
skin 1446 joint1 1.000000
|
| 1504 |
+
skin 1447 joint3 1.000000
|
| 1505 |
+
skin 1448 joint3 1.000000
|
| 1506 |
+
skin 1449 joint3 1.000000
|
| 1507 |
+
skin 1450 joint2 0.392916 joint3 0.607085
|
| 1508 |
+
skin 1451 joint3 1.000000
|
| 1509 |
+
skin 1452 joint2 0.372074 joint3 0.627926
|
| 1510 |
+
skin 1453 joint2 0.372074 joint3 0.627926
|
| 1511 |
+
skin 1454 joint2 0.372074 joint3 0.627926
|
| 1512 |
+
skin 1455 joint2 0.392916 joint3 0.607085
|
| 1513 |
+
skin 1456 joint2 0.392916 joint3 0.607085
|
| 1514 |
+
skin 1457 joint2 0.392916 joint3 0.607085
|
| 1515 |
+
skin 1458 joint2 0.607263 joint3 0.392737
|
| 1516 |
+
skin 1459 joint2 0.653432 joint3 0.346568
|
| 1517 |
+
skin 1460 joint2 0.653432 joint3 0.346568
|
| 1518 |
+
skin 1461 joint2 0.653432 joint3 0.346568
|
| 1519 |
+
skin 1462 joint2 0.635557 joint3 0.364443
|
| 1520 |
+
skin 1463 joint2 0.635557 joint3 0.364443
|
| 1521 |
+
skin 1464 joint2 0.635557 joint3 0.364443
|
| 1522 |
+
skin 1465 joint1 0.458386 joint2 0.541614
|
| 1523 |
+
skin 1466 joint1 0.458386 joint2 0.541614
|
| 1524 |
+
skin 1467 joint2 1.000000
|
| 1525 |
+
skin 1468 joint3 1.000000
|
| 1526 |
+
skin 1469 joint3 1.000000
|
| 1527 |
+
skin 1470 joint3 1.000000
|
| 1528 |
+
skin 1471 joint2 1.000000
|
| 1529 |
+
skin 1472 joint2 1.000000
|
| 1530 |
+
skin 1473 joint1 1.000000
|
| 1531 |
+
skin 1474 joint1 1.000000
|
| 1532 |
+
skin 1475 joint1 1.000000
|
| 1533 |
+
skin 1476 joint1 0.267844 joint2 0.732156
|
| 1534 |
+
skin 1477 joint1 0.267844 joint2 0.732156
|
| 1535 |
+
skin 1478 joint3 0.716090 joint4 0.283910
|
| 1536 |
+
skin 1479 joint3 0.716090 joint4 0.283910
|
| 1537 |
+
skin 1480 joint1 0.458386 joint2 0.541614
|
| 1538 |
+
skin 1481 joint3 0.533163 joint4 0.466837
|
| 1539 |
+
skin 1482 joint2 1.000000
|
| 1540 |
+
skin 1483 joint2 1.000000
|
| 1541 |
+
skin 1484 joint1 0.267145 joint2 0.732855
|
| 1542 |
+
skin 1485 joint1 0.300941 joint2 0.699059
|
| 1543 |
+
skin 1486 joint1 0.275501 joint2 0.724499
|
| 1544 |
+
skin 1487 joint1 0.271336 joint2 0.728664
|
| 1545 |
+
skin 1488 joint1 0.271336 joint2 0.728664
|
| 1546 |
+
skin 1489 joint1 1.000000
|
| 1547 |
+
skin 1490 joint1 1.000000
|
| 1548 |
+
skin 1491 joint1 1.000000
|
| 1549 |
+
skin 1492 joint1 1.000000
|
| 1550 |
+
skin 1493 joint1 1.000000
|
| 1551 |
+
skin 1494 joint1 1.000000
|
| 1552 |
+
skin 1495 joint1 1.000000
|
| 1553 |
+
skin 1496 joint0 1.000000
|
| 1554 |
+
skin 1497 joint0 0.377451 joint1 0.622549
|
| 1555 |
+
skin 1498 joint0 0.377451 joint1 0.622549
|
| 1556 |
+
skin 1499 joint0 0.377451 joint1 0.622549
|
| 1557 |
+
skin 1500 joint0 0.350257 joint1 0.649743
|
| 1558 |
+
skin 1501 joint0 0.350257 joint1 0.649743
|
| 1559 |
+
skin 1502 joint0 0.617050 joint1 0.382950
|
| 1560 |
+
skin 1503 joint0 0.580870 joint1 0.419130
|
| 1561 |
+
skin 1504 joint0 0.580870 joint1 0.419130
|
| 1562 |
+
skin 1505 joint0 0.580870 joint1 0.419130
|
| 1563 |
+
skin 1506 joint0 1.000000
|
| 1564 |
+
skin 1507 joint0 1.000000
|
| 1565 |
+
skin 1508 joint0 1.000000
|
| 1566 |
+
skin 1509 joint20 0.570479 joint21 0.429521
|
| 1567 |
+
skin 1510 joint0 1.000000
|
| 1568 |
+
skin 1511 joint0 1.000000
|
| 1569 |
+
skin 1512 joint0 1.000000
|
| 1570 |
+
skin 1513 joint0 1.000000
|
| 1571 |
+
skin 1514 joint0 1.000000
|
| 1572 |
+
skin 1515 joint0 1.000000
|
| 1573 |
+
skin 1516 joint0 1.000000
|
| 1574 |
+
skin 1517 joint21 1.000000
|
| 1575 |
+
skin 1518 joint22 0.599594 joint24 0.400406
|
| 1576 |
+
skin 1519 joint22 0.733306 joint24 0.266694
|
| 1577 |
+
skin 1520 joint22 0.733306 joint24 0.266694
|
| 1578 |
+
skin 1521 joint20 0.715764 joint21 0.284236
|
| 1579 |
+
skin 1522 joint20 0.646850 joint21 0.353150
|
| 1580 |
+
skin 1523 joint20 0.556838 joint21 0.443162
|
| 1581 |
+
skin 1524 joint20 0.481111 joint21 0.518889
|
| 1582 |
+
skin 1525 joint20 0.481111 joint21 0.518889
|
| 1583 |
+
skin 1526 joint20 0.414032 joint21 0.585968
|
| 1584 |
+
skin 1527 joint20 0.363934 joint21 0.636066
|
| 1585 |
+
skin 1528 joint20 0.390984 joint21 0.609016
|
| 1586 |
+
skin 1529 joint20 0.396577 joint21 0.603423
|
| 1587 |
+
skin 1530 joint20 0.503268 joint21 0.496732
|
| 1588 |
+
skin 1531 joint21 1.000000
|
| 1589 |
+
skin 1532 joint20 0.294558 joint21 0.705442
|
| 1590 |
+
skin 1533 joint21 1.000000
|
| 1591 |
+
skin 1534 joint21 1.000000
|
| 1592 |
+
skin 1535 joint21 1.000000
|
| 1593 |
+
skin 1536 joint20 0.320115 joint21 0.679885
|
| 1594 |
+
skin 1537 joint20 0.320115 joint21 0.679885
|
| 1595 |
+
skin 1538 joint20 0.521212 joint21 0.478788
|
| 1596 |
+
skin 1539 joint20 0.519126 joint21 0.480874
|
| 1597 |
+
skin 1540 joint20 0.400135 joint21 0.599865
|
| 1598 |
+
skin 1541 joint21 1.000000
|
| 1599 |
+
skin 1542 joint21 0.634182 joint22 0.365818
|
| 1600 |
+
skin 1543 joint21 0.482324 joint22 0.517676
|
| 1601 |
+
skin 1544 joint21 0.604701 joint22 0.395299
|
| 1602 |
+
skin 1545 joint21 0.604701 joint22 0.395299
|
| 1603 |
+
skin 1546 joint21 0.652862 joint22 0.347138
|
| 1604 |
+
skin 1547 joint21 1.000000
|
| 1605 |
+
skin 1548 joint21 0.738959 joint22 0.261041
|
| 1606 |
+
skin 1549 joint21 1.000000
|
| 1607 |
+
skin 1550 joint21 1.000000
|
| 1608 |
+
skin 1551 joint21 0.616759 joint22 0.383241
|
| 1609 |
+
skin 1552 joint21 0.611662 joint22 0.388338
|
| 1610 |
+
skin 1553 joint21 0.531557 joint22 0.468443
|
| 1611 |
+
skin 1554 joint21 0.537278 joint22 0.462722
|
| 1612 |
+
skin 1555 joint21 0.375682 joint22 0.624318
|
| 1613 |
+
skin 1556 joint21 0.468762 joint22 0.531238
|
| 1614 |
+
skin 1557 joint21 0.468762 joint22 0.531238
|
| 1615 |
+
skin 1558 joint21 0.482324 joint22 0.517676
|
| 1616 |
+
skin 1559 joint22 1.000000
|
| 1617 |
+
skin 1560 joint21 0.332516 joint22 0.667484
|
| 1618 |
+
skin 1561 joint22 0.680615 joint24 0.319385
|
| 1619 |
+
skin 1562 joint22 0.451232 joint24 0.548768
|
| 1620 |
+
skin 1563 joint22 0.311131 joint24 0.688869
|
| 1621 |
+
skin 1564 joint22 0.311131 joint24 0.688869
|
| 1622 |
+
skin 1565 joint22 0.436032 joint24 0.563968
|
| 1623 |
+
skin 1566 joint22 0.412096 joint24 0.587904
|
| 1624 |
+
skin 1567 joint22 0.506767 joint24 0.493233
|
| 1625 |
+
skin 1568 joint22 0.707959 joint24 0.292041
|
| 1626 |
+
skin 1569 joint22 0.707959 joint24 0.292041
|
| 1627 |
+
skin 1570 joint22 0.707959 joint24 0.292041
|
| 1628 |
+
skin 1571 joint22 0.733306 joint24 0.266694
|
| 1629 |
+
skin 1572 joint22 0.680615 joint24 0.319385
|
| 1630 |
+
skin 1573 joint22 0.680615 joint24 0.319385
|
| 1631 |
+
skin 1574 joint22 0.553404 joint24 0.446596
|
| 1632 |
+
skin 1575 joint22 0.553404 joint24 0.446596
|
| 1633 |
+
skin 1576 joint22 0.589640 joint24 0.410360
|
| 1634 |
+
skin 1577 joint22 0.589640 joint24 0.410360
|
| 1635 |
+
skin 1578 joint22 0.589640 joint24 0.410360
|
| 1636 |
+
skin 1579 joint22 0.561199 joint24 0.438801
|
| 1637 |
+
skin 1580 joint22 0.561199 joint24 0.438801
|
| 1638 |
+
skin 1581 joint22 0.561199 joint24 0.438801
|
| 1639 |
+
skin 1582 joint22 0.576066 joint24 0.423934
|
| 1640 |
+
skin 1583 joint22 0.576066 joint24 0.423934
|
| 1641 |
+
skin 1584 joint22 1.000000
|
| 1642 |
+
skin 1585 joint22 1.000000
|
| 1643 |
+
skin 1586 joint22 1.000000
|
| 1644 |
+
skin 1587 joint22 1.000000
|
| 1645 |
+
skin 1588 joint22 1.000000
|
| 1646 |
+
skin 1589 joint22 1.000000
|
| 1647 |
+
skin 1590 joint22 1.000000
|
| 1648 |
+
skin 1591 joint22 1.000000
|
| 1649 |
+
skin 1592 joint22 1.000000
|
| 1650 |
+
skin 1593 joint10 0.577050 joint11 0.422950
|
| 1651 |
+
skin 1594 joint11 1.000000
|
| 1652 |
+
skin 1595 joint11 0.290575 joint13 0.709425
|
| 1653 |
+
skin 1596 joint13 1.000000
|
| 1654 |
+
skin 1597 joint13 1.000000
|
| 1655 |
+
skin 1598 joint10 0.680577 joint11 0.319423
|
| 1656 |
+
skin 1599 joint10 0.681571 joint11 0.318429
|
| 1657 |
+
skin 1600 joint10 0.700064 joint11 0.299936
|
| 1658 |
+
skin 1601 joint10 1.000000
|
| 1659 |
+
skin 1602 joint10 0.658223 joint11 0.341777
|
| 1660 |
+
skin 1603 joint10 0.658223 joint11 0.341777
|
| 1661 |
+
skin 1604 joint10 0.437121 joint11 0.171487 joint14 0.391392
|
| 1662 |
+
skin 1605 joint10 0.424377 joint11 0.276536 joint14 0.299087
|
| 1663 |
+
skin 1606 joint10 0.363619 joint11 0.347571 joint14 0.288810
|
| 1664 |
+
skin 1607 joint10 0.355567 joint11 0.246112 joint14 0.398321
|
| 1665 |
+
skin 1608 joint11 1.000000
|
| 1666 |
+
skin 1609 joint10 0.333022 joint11 0.666978
|
| 1667 |
+
skin 1610 joint10 0.361863 joint11 0.638137
|
| 1668 |
+
skin 1611 joint10 0.335154 joint11 0.664846
|
| 1669 |
+
skin 1612 joint11 1.000000
|
| 1670 |
+
skin 1613 joint11 1.000000
|
| 1671 |
+
skin 1614 joint11 1.000000
|
| 1672 |
+
skin 1615 joint11 1.000000
|
| 1673 |
+
skin 1616 joint11 1.000000
|
| 1674 |
+
skin 1617 joint11 1.000000
|
| 1675 |
+
skin 1618 joint13 1.000000
|
| 1676 |
+
skin 1619 joint13 1.000000
|
| 1677 |
+
skin 1620 joint11 0.369040 joint13 0.630960
|
| 1678 |
+
skin 1621 joint13 1.000000
|
| 1679 |
+
skin 1622 joint11 0.333712 joint13 0.666288
|
| 1680 |
+
skin 1623 joint11 0.333712 joint13 0.666288
|
| 1681 |
+
skin 1624 joint13 1.000000
|
| 1682 |
+
skin 1625 joint11 0.620660 joint13 0.379340
|
| 1683 |
+
skin 1626 joint11 0.445168 joint13 0.554832
|
| 1684 |
+
skin 1627 joint11 0.416899 joint13 0.583101
|
| 1685 |
+
skin 1628 joint13 1.000000
|
| 1686 |
+
skin 1629 joint13 1.000000
|
| 1687 |
+
skin 1630 joint13 1.000000
|
| 1688 |
+
skin 1631 joint13 1.000000
|
| 1689 |
+
skin 1632 joint13 1.000000
|
| 1690 |
+
skin 1633 joint13 1.000000
|
| 1691 |
+
skin 1634 joint13 1.000000
|
| 1692 |
+
skin 1635 joint6 0.320629 joint13 0.679371
|
| 1693 |
+
skin 1636 joint6 0.320629 joint13 0.679371
|
| 1694 |
+
skin 1637 joint13 1.000000
|
| 1695 |
+
skin 1638 joint13 1.000000
|
| 1696 |
+
skin 1639 joint13 1.000000
|
| 1697 |
+
skin 1640 joint6 0.276059 joint13 0.723941
|
| 1698 |
+
skin 1641 joint6 0.276059 joint13 0.723941
|
| 1699 |
+
skin 1642 joint6 0.276059 joint13 0.723941
|
| 1700 |
+
skin 1643 joint13 1.000000
|
| 1701 |
+
skin 1644 joint13 1.000000
|
| 1702 |
+
skin 1645 joint13 1.000000
|
| 1703 |
+
skin 1646 joint13 1.000000
|
| 1704 |
+
skin 1647 joint13 1.000000
|
| 1705 |
+
skin 1648 joint13 1.000000
|
| 1706 |
+
skin 1649 joint0 1.000000
|
| 1707 |
+
skin 1650 joint0 0.262984 joint1 0.737016
|
| 1708 |
+
skin 1651 joint1 1.000000
|
| 1709 |
+
skin 1652 joint1 1.000000
|
| 1710 |
+
skin 1653 joint0 0.260180 joint1 0.739820
|
| 1711 |
+
skin 1654 joint4 0.512587 joint10 0.487413
|
| 1712 |
+
skin 1655 joint4 0.406819 joint10 0.593181
|
| 1713 |
+
skin 1656 joint4 0.435487 joint10 0.564513
|
| 1714 |
+
skin 1657 joint1 1.000000
|
| 1715 |
+
skin 1658 joint4 0.615079 joint10 0.384921
|
| 1716 |
+
skin 1659 joint4 0.603936 joint10 0.396064
|
| 1717 |
+
skin 1660 joint4 0.614773 joint10 0.385227
|
| 1718 |
+
skin 1661 joint4 0.602348 joint10 0.397652
|
| 1719 |
+
skin 1662 joint4 0.489159 joint10 0.510841
|
| 1720 |
+
skin 1663 joint2 0.411935 joint3 0.588065
|
| 1721 |
+
skin 1664 joint2 0.417499 joint3 0.582501
|
| 1722 |
+
skin 1665 joint2 0.417499 joint3 0.582501
|
| 1723 |
+
skin 1666 joint4 0.521773 joint10 0.478227
|
| 1724 |
+
skin 1667 joint4 0.521773 joint10 0.478227
|
| 1725 |
+
skin 1668 joint2 0.322339 joint3 0.677661
|
| 1726 |
+
skin 1669 joint2 0.406704 joint3 0.593296
|
| 1727 |
+
skin 1670 joint3 0.420692 joint4 0.579308
|
| 1728 |
+
skin 1671 joint3 0.400532 joint4 0.599468
|
| 1729 |
+
skin 1672 joint3 0.433178 joint4 0.566822
|
| 1730 |
+
skin 1673 joint3 0.405745 joint4 0.594255
|
| 1731 |
+
skin 1674 joint24 1.000000
|
| 1732 |
+
skin 1675 joint24 1.000000
|
| 1733 |
+
skin 1676 joint24 1.000000
|
| 1734 |
+
skin 1677 joint24 1.000000
|
| 1735 |
+
skin 1678 joint24 1.000000
|
| 1736 |
+
skin 1679 joint24 1.000000
|
| 1737 |
+
skin 1680 joint24 1.000000
|
| 1738 |
+
skin 1681 joint24 1.000000
|
| 1739 |
+
skin 1682 joint24 1.000000
|
| 1740 |
+
skin 1683 joint24 1.000000
|
| 1741 |
+
skin 1684 joint24 1.000000
|
| 1742 |
+
skin 1685 joint24 1.000000
|
| 1743 |
+
skin 1686 joint24 1.000000
|
| 1744 |
+
skin 1687 joint24 1.000000
|
| 1745 |
+
skin 1688 joint24 1.000000
|
| 1746 |
+
skin 1689 joint24 1.000000
|
| 1747 |
+
skin 1690 joint1 1.000000
|
| 1748 |
+
skin 1691 joint3 0.361145 joint4 0.638855
|
| 1749 |
+
skin 1692 joint4 0.521773 joint10 0.478227
|
| 1750 |
+
skin 1693 joint4 0.521773 joint10 0.478227
|
| 1751 |
+
skin 1694 joint3 0.614084 joint4 0.385916
|
| 1752 |
+
skin 1695 joint3 0.382379 joint4 0.617621
|
| 1753 |
+
skin 1696 joint4 0.283513 joint10 0.716487
|
| 1754 |
+
skin 1697 joint10 1.000000
|
| 1755 |
+
skin 1698 joint10 1.000000
|
| 1756 |
+
skin 1699 joint24 1.000000
|
| 1757 |
+
skin 1700 joint24 1.000000
|
| 1758 |
+
skin 1701 joint24 1.000000
|
| 1759 |
+
skin 1702 joint24 1.000000
|
| 1760 |
+
skin 1703 joint24 1.000000
|
| 1761 |
+
skin 1704 joint24 1.000000
|
| 1762 |
+
skin 1705 joint24 1.000000
|
| 1763 |
+
skin 1706 joint24 1.000000
|
| 1764 |
+
skin 1707 joint24 1.000000
|
| 1765 |
+
skin 1708 joint24 1.000000
|
| 1766 |
+
skin 1709 joint24 1.000000
|
| 1767 |
+
skin 1710 joint24 1.000000
|
| 1768 |
+
skin 1711 joint24 1.000000
|
| 1769 |
+
skin 1712 joint24 1.000000
|
| 1770 |
+
skin 1713 joint24 1.000000
|
| 1771 |
+
skin 1714 joint24 1.000000
|
| 1772 |
+
skin 1715 joint24 1.000000
|
| 1773 |
+
skin 1716 joint24 1.000000
|
| 1774 |
+
skin 1717 joint24 1.000000
|
| 1775 |
+
skin 1718 joint24 1.000000
|
| 1776 |
+
skin 1719 joint24 1.000000
|
| 1777 |
+
skin 1720 joint24 1.000000
|
| 1778 |
+
skin 1721 joint0 0.711223 joint1 0.288777
|
| 1779 |
+
skin 1722 joint0 0.639444 joint1 0.360556
|
| 1780 |
+
skin 1723 joint0 0.540201 joint1 0.459799
|
| 1781 |
+
skin 1724 joint24 1.000000
|
| 1782 |
+
skin 1725 joint24 1.000000
|
| 1783 |
+
skin 1726 joint24 1.000000
|
| 1784 |
+
skin 1727 joint24 1.000000
|
| 1785 |
+
skin 1728 joint24 1.000000
|
| 1786 |
+
skin 1729 joint24 1.000000
|
| 1787 |
+
skin 1730 joint24 1.000000
|
| 1788 |
+
skin 1731 joint24 1.000000
|
| 1789 |
+
skin 1732 joint24 1.000000
|
| 1790 |
+
skin 1733 joint24 1.000000
|
| 1791 |
+
skin 1734 joint0 0.623245 joint1 0.376755
|
| 1792 |
+
skin 1735 joint0 0.556052 joint1 0.443948
|
| 1793 |
+
skin 1736 joint3 0.652752 joint4 0.347248
|
| 1794 |
+
skin 1737 joint3 0.579789 joint4 0.420211
|
| 1795 |
+
skin 1738 joint3 0.706025 joint4 0.293975
|
| 1796 |
+
skin 1739 joint24 1.000000
|
| 1797 |
+
skin 1740 joint24 1.000000
|
| 1798 |
+
skin 1741 joint24 1.000000
|
| 1799 |
+
skin 1742 joint24 1.000000
|
| 1800 |
+
skin 1743 joint24 1.000000
|
| 1801 |
+
skin 1744 joint24 1.000000
|
| 1802 |
+
skin 1745 joint24 1.000000
|
| 1803 |
+
skin 1746 joint24 1.000000
|
| 1804 |
+
skin 1747 joint1 0.604500 joint2 0.395500
|
| 1805 |
+
skin 1748 joint1 0.624055 joint2 0.375945
|
| 1806 |
+
skin 1749 joint1 0.621038 joint2 0.378963
|
| 1807 |
+
skin 1750 joint1 0.542092 joint2 0.457908
|
| 1808 |
+
skin 1751 joint1 0.379593 joint2 0.620407
|
| 1809 |
+
skin 1752 joint1 0.555733 joint2 0.444267
|
| 1810 |
+
skin 1753 joint3 0.710241 joint4 0.289759
|
| 1811 |
+
skin 1754 joint3 0.620826 joint4 0.379174
|
| 1812 |
+
skin 1755 joint24 1.000000
|
| 1813 |
+
skin 1756 joint24 1.000000
|
| 1814 |
+
skin 1757 joint24 1.000000
|
| 1815 |
+
skin 1758 joint24 1.000000
|
| 1816 |
+
skin 1759 joint24 1.000000
|
| 1817 |
+
skin 1760 joint24 1.000000
|
| 1818 |
+
skin 1761 joint24 1.000000
|
| 1819 |
+
skin 1762 joint24 1.000000
|
| 1820 |
+
skin 1763 joint24 1.000000
|
| 1821 |
+
skin 1764 joint24 1.000000
|
| 1822 |
+
skin 1765 joint24 1.000000
|
| 1823 |
+
skin 1766 joint24 1.000000
|
| 1824 |
+
skin 1767 joint24 1.000000
|
| 1825 |
+
skin 1768 joint24 1.000000
|
| 1826 |
+
skin 1769 joint24 1.000000
|
| 1827 |
+
skin 1770 joint24 1.000000
|
| 1828 |
+
skin 1771 joint24 1.000000
|
| 1829 |
+
skin 1772 joint24 1.000000
|
| 1830 |
+
skin 1773 joint24 1.000000
|
| 1831 |
+
skin 1774 joint24 1.000000
|
| 1832 |
+
skin 1775 joint24 1.000000
|
| 1833 |
+
skin 1776 joint24 1.000000
|
| 1834 |
+
skin 1777 joint24 1.000000
|
| 1835 |
+
skin 1778 joint24 1.000000
|
| 1836 |
+
skin 1779 joint24 1.000000
|
| 1837 |
+
skin 1780 joint24 1.000000
|
| 1838 |
+
skin 1781 joint24 1.000000
|
| 1839 |
+
skin 1782 joint24 1.000000
|
| 1840 |
+
skin 1783 joint24 1.000000
|
| 1841 |
+
skin 1784 joint24 1.000000
|
| 1842 |
+
skin 1785 joint24 1.000000
|
| 1843 |
+
skin 1786 joint24 1.000000
|
| 1844 |
+
skin 1787 joint24 1.000000
|
| 1845 |
+
skin 1788 joint24 1.000000
|
| 1846 |
+
skin 1789 joint24 1.000000
|
| 1847 |
+
skin 1790 joint24 1.000000
|
| 1848 |
+
skin 1791 joint24 1.000000
|
| 1849 |
+
skin 1792 joint24 1.000000
|
| 1850 |
+
skin 1793 joint24 1.000000
|
| 1851 |
+
skin 1794 joint24 1.000000
|
| 1852 |
+
skin 1795 joint24 1.000000
|
| 1853 |
+
skin 1796 joint24 1.000000
|
| 1854 |
+
skin 1797 joint24 1.000000
|
| 1855 |
+
skin 1798 joint24 1.000000
|
| 1856 |
+
skin 1799 joint24 1.000000
|
| 1857 |
+
skin 1800 joint24 1.000000
|
| 1858 |
+
skin 1801 joint24 1.000000
|
| 1859 |
+
skin 1802 joint24 1.000000
|
| 1860 |
+
skin 1803 joint1 1.000000
|
| 1861 |
+
skin 1804 joint24 1.000000
|
| 1862 |
+
skin 1805 joint1 1.000000
|
| 1863 |
+
skin 1806 joint1 1.000000
|
| 1864 |
+
skin 1807 joint1 1.000000
|
| 1865 |
+
skin 1808 joint24 1.000000
|
| 1866 |
+
skin 1809 joint24 1.000000
|
| 1867 |
+
skin 1810 joint24 1.000000
|
| 1868 |
+
skin 1811 joint24 1.000000
|
| 1869 |
+
skin 1812 joint24 1.000000
|
| 1870 |
+
skin 1813 joint24 1.000000
|
| 1871 |
+
skin 1814 joint24 1.000000
|
| 1872 |
+
skin 1815 joint24 1.000000
|
| 1873 |
+
skin 1816 joint24 1.000000
|
| 1874 |
+
skin 1817 joint24 1.000000
|
| 1875 |
+
skin 1818 joint24 1.000000
|
| 1876 |
+
skin 1819 joint24 1.000000
|
| 1877 |
+
skin 1820 joint24 1.000000
|
| 1878 |
+
skin 1821 joint24 1.000000
|
| 1879 |
+
skin 1822 joint24 1.000000
|
| 1880 |
+
skin 1823 joint24 1.000000
|
| 1881 |
+
skin 1824 joint24 1.000000
|
| 1882 |
+
skin 1825 joint24 1.000000
|
| 1883 |
+
skin 1826 joint24 1.000000
|
| 1884 |
+
skin 1827 joint24 1.000000
|
| 1885 |
+
skin 1828 joint24 1.000000
|
| 1886 |
+
skin 1829 joint24 1.000000
|
| 1887 |
+
skin 1830 joint24 1.000000
|
| 1888 |
+
skin 1831 joint24 1.000000
|
| 1889 |
+
skin 1832 joint24 1.000000
|
| 1890 |
+
skin 1833 joint24 1.000000
|
| 1891 |
+
skin 1834 joint24 1.000000
|
| 1892 |
+
skin 1835 joint24 1.000000
|
| 1893 |
+
skin 1836 joint24 1.000000
|
| 1894 |
+
skin 1837 joint22 0.464755 joint24 0.535245
|
| 1895 |
+
skin 1838 joint22 0.422253 joint24 0.577747
|
| 1896 |
+
skin 1839 joint22 0.484273 joint24 0.515727
|
| 1897 |
+
skin 1840 joint22 0.484273 joint24 0.515727
|
| 1898 |
+
skin 1841 joint24 1.000000
|
| 1899 |
+
skin 1842 joint24 1.000000
|
| 1900 |
+
skin 1843 joint24 1.000000
|
| 1901 |
+
skin 1844 joint24 1.000000
|
| 1902 |
+
skin 1845 joint24 1.000000
|
| 1903 |
+
skin 1846 joint24 1.000000
|
| 1904 |
+
skin 1847 joint24 1.000000
|
| 1905 |
+
skin 1848 joint24 1.000000
|
| 1906 |
+
skin 1849 joint24 1.000000
|
| 1907 |
+
skin 1850 joint22 0.389717 joint24 0.610283
|
| 1908 |
+
skin 1851 joint24 1.000000
|
| 1909 |
+
skin 1852 joint24 1.000000
|
| 1910 |
+
skin 1853 joint24 1.000000
|
| 1911 |
+
skin 1854 joint24 1.000000
|
| 1912 |
+
skin 1855 joint24 1.000000
|
| 1913 |
+
skin 1856 joint24 1.000000
|
| 1914 |
+
skin 1857 joint24 1.000000
|
| 1915 |
+
skin 1858 joint24 1.000000
|
| 1916 |
+
skin 1859 joint24 1.000000
|
| 1917 |
+
skin 1860 joint24 1.000000
|
| 1918 |
+
skin 1861 joint24 1.000000
|
| 1919 |
+
skin 1862 joint24 1.000000
|
| 1920 |
+
skin 1863 joint22 0.402314 joint24 0.597686
|
| 1921 |
+
skin 1864 joint24 1.000000
|
| 1922 |
+
skin 1865 joint24 1.000000
|
| 1923 |
+
skin 1866 joint22 0.312778 joint24 0.687222
|
| 1924 |
+
skin 1867 joint22 0.445781 joint24 0.554219
|
| 1925 |
+
skin 1868 joint22 0.599594 joint24 0.400406
|
| 1926 |
+
skin 1869 joint22 0.517124 joint24 0.482876
|
| 1927 |
+
skin 1870 joint13 1.000000
|
| 1928 |
+
skin 1871 joint13 1.000000
|
| 1929 |
+
skin 1872 joint13 1.000000
|
| 1930 |
+
skin 1873 joint13 1.000000
|
| 1931 |
+
skin 1874 joint13 1.000000
|
| 1932 |
+
skin 1875 joint13 1.000000
|
| 1933 |
+
skin 1876 joint13 1.000000
|
| 1934 |
+
skin 1877 joint13 1.000000
|
| 1935 |
+
skin 1878 joint13 1.000000
|
| 1936 |
+
skin 1879 joint13 1.000000
|
| 1937 |
+
skin 1880 joint13 1.000000
|
| 1938 |
+
skin 1881 joint1 1.000000
|
| 1939 |
+
skin 1882 joint4 0.627569 joint10 0.372431
|
| 1940 |
+
skin 1883 joint21 0.349019 joint22 0.650981
|
| 1941 |
+
skin 1884 joint22 1.000000
|
| 1942 |
+
skin 1885 joint22 1.000000
|
| 1943 |
+
skin 1886 joint22 1.000000
|
| 1944 |
+
skin 1887 joint22 1.000000
|
| 1945 |
+
skin 1888 joint22 1.000000
|
| 1946 |
+
skin 1889 joint22 1.000000
|
| 1947 |
+
skin 1890 joint22 1.000000
|
| 1948 |
+
skin 1891 joint22 1.000000
|
| 1949 |
+
skin 1892 joint21 0.289746 joint22 0.710254
|
| 1950 |
+
skin 1893 joint21 0.331204 joint22 0.668796
|
| 1951 |
+
skin 1894 joint6 0.338228 joint13 0.661772
|
| 1952 |
+
skin 1895 joint6 0.338228 joint13 0.661772
|
| 1953 |
+
skin 1896 joint6 0.283203 joint13 0.716797
|
| 1954 |
+
skin 1897 joint6 0.278910 joint8 0.721090
|
| 1955 |
+
skin 1898 joint6 0.278910 joint8 0.721090
|
| 1956 |
+
skin 1899 joint8 1.000000
|
| 1957 |
+
skin 1900 joint8 1.000000
|
| 1958 |
+
skin 1901 joint8 1.000000
|
| 1959 |
+
skin 1902 joint8 1.000000
|
| 1960 |
+
skin 1903 joint8 1.000000
|
| 1961 |
+
skin 1904 joint8 1.000000
|
| 1962 |
+
skin 1905 joint6 0.539860 joint8 0.460140
|
| 1963 |
+
skin 1906 joint6 0.444216 joint13 0.555784
|
| 1964 |
+
skin 1907 joint6 0.582688 joint13 0.417312
|
| 1965 |
+
skin 1908 joint6 0.476989 joint8 0.523011
|
| 1966 |
+
skin 1909 joint6 0.476989 joint8 0.523011
|
| 1967 |
+
skin 1910 joint8 1.000000
|
| 1968 |
+
skin 1911 joint8 1.000000
|
| 1969 |
+
skin 1912 joint6 0.388587 joint8 0.611413
|
| 1970 |
+
skin 1913 joint8 1.000000
|
| 1971 |
+
skin 1914 joint6 1.000000
|
| 1972 |
+
skin 1915 joint8 1.000000
|
| 1973 |
+
skin 1916 joint8 1.000000
|
| 1974 |
+
skin 1917 joint6 0.620252 joint13 0.379748
|
| 1975 |
+
skin 1918 joint6 0.521744 joint8 0.478256
|
| 1976 |
+
skin 1919 joint6 0.476989 joint8 0.523011
|
| 1977 |
+
skin 1920 joint8 1.000000
|
| 1978 |
+
skin 1921 joint8 1.000000
|
| 1979 |
+
skin 1922 joint8 1.000000
|
| 1980 |
+
skin 1923 joint6 0.471003 joint13 0.528997
|
| 1981 |
+
skin 1924 joint6 1.000000
|
| 1982 |
+
skin 1925 joint6 0.725595 joint8 0.274405
|
| 1983 |
+
skin 1926 joint6 0.725595 joint8 0.274405
|
| 1984 |
+
skin 1927 joint6 1.000000
|
| 1985 |
+
skin 1928 joint6 1.000000
|
| 1986 |
+
skin 1929 joint6 1.000000
|
| 1987 |
+
skin 1930 joint6 1.000000
|
| 1988 |
+
skin 1931 joint6 1.000000
|
| 1989 |
+
skin 1932 joint6 1.000000
|
| 1990 |
+
skin 1933 joint6 0.663092 joint13 0.336908
|
| 1991 |
+
skin 1934 joint6 0.663092 joint13 0.336908
|
| 1992 |
+
skin 1935 joint6 0.639587 joint13 0.360413
|
| 1993 |
+
skin 1936 joint6 0.639587 joint13 0.360413
|
| 1994 |
+
skin 1937 joint6 1.000000
|
| 1995 |
+
skin 1938 joint6 0.644948 joint8 0.355052
|
| 1996 |
+
skin 1939 joint6 0.644948 joint8 0.355052
|
| 1997 |
+
skin 1940 joint6 1.000000
|
| 1998 |
+
skin 1941 joint6 0.360567 joint8 0.639433
|
| 1999 |
+
skin 1942 joint8 1.000000
|
| 2000 |
+
skin 1943 joint8 1.000000
|
| 2001 |
+
skin 1944 joint6 0.305065 joint8 0.694935
|
| 2002 |
+
skin 1945 joint6 1.000000
|
| 2003 |
+
skin 1946 joint6 1.000000
|
| 2004 |
+
skin 1947 joint6 0.668396 joint8 0.331604
|
| 2005 |
+
skin 1948 joint6 1.000000
|
| 2006 |
+
skin 1949 joint6 0.668396 joint8 0.331604
|
| 2007 |
+
skin 1950 joint6 1.000000
|
| 2008 |
+
skin 1951 joint6 0.541735 joint8 0.458265
|
| 2009 |
+
skin 1952 joint6 1.000000
|
| 2010 |
+
skin 1953 joint8 1.000000
|
| 2011 |
+
skin 1954 joint8 1.000000
|
| 2012 |
+
skin 1955 joint6 0.720830 joint8 0.279170
|
| 2013 |
+
skin 1956 joint6 0.720830 joint8 0.279170
|
| 2014 |
+
skin 1957 joint6 0.668396 joint8 0.331604
|
| 2015 |
+
skin 1958 joint6 1.000000
|
| 2016 |
+
skin 1959 joint8 1.000000
|
| 2017 |
+
skin 1960 joint8 1.000000
|
| 2018 |
+
skin 1961 joint8 1.000000
|
| 2019 |
+
skin 1962 joint8 1.000000
|
| 2020 |
+
skin 1963 joint8 1.000000
|
| 2021 |
+
skin 1964 joint8 1.000000
|
| 2022 |
+
skin 1965 joint6 0.435757 joint8 0.564243
|
| 2023 |
+
skin 1966 joint6 0.265798 joint8 0.734202
|
| 2024 |
+
skin 1967 joint6 0.731046 joint8 0.268954
|
| 2025 |
+
skin 1968 joint6 1.000000
|
| 2026 |
+
skin 1969 joint6 0.691361 joint8 0.308639
|
| 2027 |
+
skin 1970 joint8 1.000000
|
| 2028 |
+
skin 1971 joint8 1.000000
|
| 2029 |
+
skin 1972 joint8 1.000000
|
| 2030 |
+
skin 1973 joint8 1.000000
|
| 2031 |
+
skin 1974 joint8 1.000000
|
| 2032 |
+
skin 1975 joint6 0.403771 joint8 0.596229
|
| 2033 |
+
skin 1976 joint6 0.403771 joint8 0.596229
|
| 2034 |
+
skin 1977 joint8 1.000000
|
| 2035 |
+
skin 1978 joint8 1.000000
|
| 2036 |
+
skin 1979 joint8 1.000000
|
| 2037 |
+
skin 1980 joint8 1.000000
|
| 2038 |
+
skin 1981 joint6 0.625494 joint13 0.374506
|
| 2039 |
+
skin 1982 joint6 0.625494 joint13 0.374506
|
| 2040 |
+
skin 1983 joint6 0.613941 joint13 0.386059
|
| 2041 |
+
skin 1984 joint6 0.692873 joint13 0.307127
|
| 2042 |
+
skin 1985 joint15 0.368591 joint16 0.631409
|
| 2043 |
+
skin 1986 joint15 0.387886 joint16 0.612114
|
| 2044 |
+
skin 1987 joint10 0.224626 joint14 0.487000 joint15 0.288373
|
| 2045 |
+
skin 1988 joint11 0.266462 joint14 0.375855 joint15 0.357684
|
| 2046 |
+
skin 1989 joint15 0.381174 joint16 0.618826
|
| 2047 |
+
skin 1990 joint16 0.332754 joint20 0.348070 joint21 0.319176
|
| 2048 |
+
skin 1991 joint16 0.193539 joint20 0.486649 joint21 0.319812
|
| 2049 |
+
skin 1992 joint14 0.465451 joint15 0.534549
|
| 2050 |
+
skin 1993 joint20 1.000000
|
| 2051 |
+
skin 1994 joint20 1.000000
|
| 2052 |
+
skin 1995 joint15 0.508063 joint16 0.491937
|
| 2053 |
+
skin 1996 joint16 0.732862 joint20 0.267138
|
| 2054 |
+
skin 1997 joint15 0.556579 joint16 0.443421
|
| 2055 |
+
skin 1998 joint15 0.351211 joint16 0.648789
|
| 2056 |
+
skin 1999 joint14 0.456892 joint15 0.543108
|
| 2057 |
+
skin 2000 joint10 0.257995 joint14 0.549432 joint15 0.192572
|
| 2058 |
+
skin 2001 joint10 0.648769 joint14 0.351231
|
| 2059 |
+
skin 2002 joint10 0.722845 joint11 0.277155
|
| 2060 |
+
skin 2003 joint10 1.000000
|
| 2061 |
+
skin 2004 joint10 1.000000
|
| 2062 |
+
skin 2005 joint10 0.728952 joint11 0.271048
|
| 2063 |
+
skin 2006 joint10 1.000000
|
| 2064 |
+
skin 2007 joint10 1.000000
|
| 2065 |
+
skin 2008 joint10 1.000000
|
| 2066 |
+
skin 2009 joint10 1.000000
|
| 2067 |
+
skin 2010 joint10 1.000000
|
| 2068 |
+
skin 2011 joint10 1.000000
|
| 2069 |
+
skin 2012 joint10 0.459242 joint14 0.540758
|
| 2070 |
+
skin 2013 joint10 0.208439 joint14 0.497395 joint15 0.294166
|
| 2071 |
+
skin 2014 joint10 0.218886 joint14 0.510845 joint15 0.270269
|
| 2072 |
+
skin 2015 joint15 0.390695 joint16 0.609305
|
| 2073 |
+
skin 2016 joint15 0.454478 joint16 0.545522
|
| 2074 |
+
skin 2017 joint16 0.366870 joint20 0.248091 joint21 0.385039
|
| 2075 |
+
skin 2018 joint20 0.446168 joint21 0.553832
|
| 2076 |
+
skin 2019 joint16 0.195849 joint20 0.426099 joint21 0.378052
|
| 2077 |
+
skin 2020 joint16 0.195849 joint20 0.426099 joint21 0.378052
|
| 2078 |
+
skin 2021 joint16 0.238347 joint20 0.401600 joint21 0.168452 joint23 0.191602
|
| 2079 |
+
skin 2022 joint16 0.628525 joint20 0.371475
|
| 2080 |
+
skin 2023 joint16 0.347705 joint20 0.652295
|
| 2081 |
+
skin 2024 joint16 0.206324 joint20 0.445057 joint23 0.348619
|
| 2082 |
+
skin 2025 joint16 0.559325 joint23 0.440675
|
| 2083 |
+
skin 2026 joint16 0.327765 joint23 0.672235
|
| 2084 |
+
skin 2027 joint16 1.000000
|
| 2085 |
+
skin 2028 joint1 1.000000
|
| 2086 |
+
skin 2029 joint14 0.415117 joint15 0.584883
|
| 2087 |
+
skin 2030 joint14 1.000000
|
| 2088 |
+
skin 2031 joint10 0.456116 joint14 0.543884
|
| 2089 |
+
skin 2032 joint10 0.634234 joint14 0.365766
|
| 2090 |
+
skin 2033 joint10 1.000000
|
| 2091 |
+
skin 2034 joint10 0.667443 joint14 0.332557
|
| 2092 |
+
skin 2035 joint20 0.368826 joint23 0.298808 joint26 0.332366
|
| 2093 |
+
skin 2036 joint20 0.191632 joint23 0.282758 joint26 0.525610
|
| 2094 |
+
skin 2037 joint20 1.000000
|
| 2095 |
+
skin 2038 joint20 0.315841 joint23 0.277438 joint26 0.406722
|
| 2096 |
+
skin 2039 joint20 0.430585 joint23 0.387954 joint26 0.181460
|
| 2097 |
+
skin 2040 joint23 0.450581 joint26 0.549419
|
| 2098 |
+
skin 2041 joint23 0.658962 joint26 0.341038
|
| 2099 |
+
skin 2042 joint23 0.619674 joint26 0.380326
|
| 2100 |
+
skin 2043 joint23 0.560156 joint26 0.439845
|
| 2101 |
+
skin 2044 joint20 0.734746 joint23 0.265254
|
| 2102 |
+
skin 2045 joint20 0.404175 joint23 0.329071 joint26 0.266754
|
| 2103 |
+
skin 2046 joint23 0.369979 joint26 0.630021
|
| 2104 |
+
skin 2047 joint16 0.179946 joint20 0.220658 joint23 0.332837 joint26 0.266560
|
| 2105 |
+
skin 2048 joint27 1.000000
|
| 2106 |
+
skin 2049 joint27 1.000000
|
| 2107 |
+
skin 2050 joint26 0.308360 joint27 0.691640
|
| 2108 |
+
skin 2051 joint26 0.308360 joint27 0.691640
|
| 2109 |
+
skin 2052 joint26 0.449192 joint27 0.550808
|
| 2110 |
+
skin 2053 joint26 0.449192 joint27 0.550808
|
| 2111 |
+
skin 2054 joint26 0.532866 joint27 0.467134
|
| 2112 |
+
skin 2055 joint26 0.532866 joint27 0.467134
|
| 2113 |
+
skin 2056 joint26 0.470288 joint27 0.529712
|
| 2114 |
+
skin 2057 joint26 0.470288 joint27 0.529712
|
| 2115 |
+
skin 2058 joint26 0.394216 joint27 0.605784
|
| 2116 |
+
skin 2059 joint26 0.394216 joint27 0.605784
|
| 2117 |
+
skin 2060 joint26 0.266494 joint27 0.733506
|
| 2118 |
+
skin 2061 joint26 0.266494 joint27 0.733506
|
| 2119 |
+
skin 2062 joint27 1.000000
|
| 2120 |
+
skin 2063 joint27 1.000000
|
| 2121 |
+
skin 2064 joint27 1.000000
|
| 2122 |
+
skin 2065 joint27 1.000000
|
| 2123 |
+
skin 2066 joint27 1.000000
|
| 2124 |
+
skin 2067 joint26 0.390937 joint27 0.609063
|
| 2125 |
+
skin 2068 joint26 0.390937 joint27 0.609063
|
| 2126 |
+
skin 2069 joint26 0.390937 joint27 0.609063
|
| 2127 |
+
skin 2070 joint26 0.355879 joint27 0.644121
|
| 2128 |
+
skin 2071 joint27 1.000000
|
| 2129 |
+
skin 2072 joint26 0.595508 joint27 0.404492
|
| 2130 |
+
skin 2073 joint26 0.575541 joint27 0.424459
|
| 2131 |
+
skin 2074 joint26 1.000000
|
| 2132 |
+
skin 2075 joint26 1.000000
|
| 2133 |
+
skin 2076 joint26 1.000000
|
| 2134 |
+
skin 2077 joint26 1.000000
|
| 2135 |
+
skin 2078 joint26 0.632559 joint27 0.367441
|
| 2136 |
+
skin 2079 joint26 1.000000
|
| 2137 |
+
skin 2080 joint26 0.587610 joint27 0.412390
|
| 2138 |
+
skin 2081 joint26 0.587610 joint27 0.412390
|
| 2139 |
+
skin 2082 joint26 0.555829 joint27 0.444171
|
| 2140 |
+
skin 2083 joint26 0.562486 joint27 0.437514
|
| 2141 |
+
skin 2084 joint26 0.595508 joint27 0.404492
|
| 2142 |
+
skin 2085 joint26 1.000000
|
| 2143 |
+
skin 2086 joint26 0.270800 joint27 0.729200
|
| 2144 |
+
skin 2087 joint26 0.483579 joint27 0.516421
|
| 2145 |
+
skin 2088 joint26 0.332141 joint27 0.667859
|
| 2146 |
+
skin 2089 joint26 0.332141 joint27 0.667859
|
| 2147 |
+
skin 2090 joint26 0.431245 joint27 0.568755
|
| 2148 |
+
skin 2091 joint26 0.587235 joint27 0.412765
|
| 2149 |
+
skin 2092 joint26 0.578489 joint27 0.421511
|
| 2150 |
+
skin 2093 joint26 0.670144 joint27 0.329856
|
| 2151 |
+
skin 2094 joint26 0.612061 joint27 0.387939
|
| 2152 |
+
skin 2095 joint26 1.000000
|
| 2153 |
+
skin 2096 joint26 1.000000
|
| 2154 |
+
skin 2097 joint23 0.259785 joint26 0.740215
|
| 2155 |
+
skin 2098 joint26 1.000000
|
| 2156 |
+
skin 2099 joint27 1.000000
|
| 2157 |
+
skin 2100 joint27 1.000000
|
| 2158 |
+
skin 2101 joint27 1.000000
|
| 2159 |
+
skin 2102 joint27 1.000000
|
| 2160 |
+
skin 2103 joint27 1.000000
|
| 2161 |
+
skin 2104 joint27 1.000000
|
| 2162 |
+
skin 2105 joint27 1.000000
|
| 2163 |
+
skin 2106 joint27 1.000000
|
| 2164 |
+
skin 2107 joint27 1.000000
|
| 2165 |
+
skin 2108 joint27 1.000000
|
| 2166 |
+
skin 2109 joint27 1.000000
|
| 2167 |
+
skin 2110 joint27 1.000000
|
| 2168 |
+
skin 2111 joint27 1.000000
|
| 2169 |
+
skin 2112 joint27 1.000000
|
| 2170 |
+
skin 2113 joint27 1.000000
|
| 2171 |
+
skin 2114 joint27 1.000000
|
| 2172 |
+
skin 2115 joint27 1.000000
|
| 2173 |
+
skin 2116 joint27 1.000000
|
| 2174 |
+
skin 2117 joint27 1.000000
|
| 2175 |
+
skin 2118 joint27 1.000000
|
| 2176 |
+
skin 2119 joint27 1.000000
|
| 2177 |
+
skin 2120 joint27 1.000000
|
| 2178 |
+
skin 2121 joint27 1.000000
|
| 2179 |
+
skin 2122 joint27 1.000000
|
| 2180 |
+
skin 2123 joint27 1.000000
|
| 2181 |
+
skin 2124 joint27 1.000000
|
| 2182 |
+
skin 2125 joint27 1.000000
|
| 2183 |
+
skin 2126 joint27 1.000000
|
| 2184 |
+
skin 2127 joint27 1.000000
|
| 2185 |
+
skin 2128 joint27 1.000000
|
| 2186 |
+
skin 2129 joint27 1.000000
|
| 2187 |
+
skin 2130 joint27 1.000000
|
| 2188 |
+
skin 2131 joint27 1.000000
|
| 2189 |
+
skin 2132 joint26 1.000000
|
| 2190 |
+
skin 2133 joint26 1.000000
|
| 2191 |
+
skin 2134 joint26 0.725130 joint27 0.274870
|
| 2192 |
+
skin 2135 joint26 0.731262 joint27 0.268738
|
| 2193 |
+
skin 2136 joint26 0.400097 joint27 0.599903
|
| 2194 |
+
skin 2137 joint26 0.400097 joint27 0.599903
|
| 2195 |
+
skin 2138 joint26 0.608601 joint27 0.391399
|
| 2196 |
+
skin 2139 joint26 0.608601 joint27 0.391399
|
| 2197 |
+
skin 2140 joint26 0.449899 joint27 0.550101
|
| 2198 |
+
skin 2141 joint26 1.000000
|
| 2199 |
+
skin 2142 joint26 1.000000
|
| 2200 |
+
skin 2143 joint26 1.000000
|
| 2201 |
+
skin 2144 joint26 1.000000
|
| 2202 |
+
skin 2145 joint26 1.000000
|
| 2203 |
+
skin 2146 joint26 1.000000
|
| 2204 |
+
skin 2147 joint26 1.000000
|
| 2205 |
+
skin 2148 joint26 1.000000
|
| 2206 |
+
skin 2149 joint26 1.000000
|
| 2207 |
+
skin 2150 joint26 1.000000
|
| 2208 |
+
skin 2151 joint26 1.000000
|
| 2209 |
+
skin 2152 joint26 1.000000
|
| 2210 |
+
skin 2153 joint26 1.000000
|
| 2211 |
+
skin 2154 joint26 1.000000
|
| 2212 |
+
skin 2155 joint26 1.000000
|
| 2213 |
+
skin 2156 joint26 1.000000
|
| 2214 |
+
skin 2157 joint26 1.000000
|
| 2215 |
+
skin 2158 joint26 1.000000
|
| 2216 |
+
skin 2159 joint26 1.000000
|
| 2217 |
+
skin 2160 joint26 1.000000
|
| 2218 |
+
skin 2161 joint26 1.000000
|
| 2219 |
+
skin 2162 joint26 1.000000
|
| 2220 |
+
skin 2163 joint26 1.000000
|
| 2221 |
+
skin 2164 joint26 1.000000
|
| 2222 |
+
skin 2165 joint26 1.000000
|
| 2223 |
+
skin 2166 joint26 1.000000
|
| 2224 |
+
skin 2167 joint26 1.000000
|
| 2225 |
+
skin 2168 joint26 1.000000
|
| 2226 |
+
skin 2169 joint26 1.000000
|
| 2227 |
+
skin 2170 joint26 1.000000
|
| 2228 |
+
skin 2171 joint26 1.000000
|
| 2229 |
+
skin 2172 joint26 1.000000
|
| 2230 |
+
skin 2173 joint26 1.000000
|
| 2231 |
+
skin 2174 joint26 1.000000
|
| 2232 |
+
skin 2175 joint23 0.285930 joint26 0.714070
|
| 2233 |
+
skin 2176 joint26 1.000000
|
| 2234 |
+
skin 2177 joint26 1.000000
|
| 2235 |
+
skin 2178 joint26 1.000000
|
| 2236 |
+
skin 2179 joint26 1.000000
|
| 2237 |
+
skin 2180 joint26 1.000000
|
| 2238 |
+
skin 2181 joint26 1.000000
|
| 2239 |
+
skin 2182 joint26 1.000000
|
| 2240 |
+
skin 2183 joint26 1.000000
|
| 2241 |
+
skin 2184 joint26 1.000000
|
| 2242 |
+
skin 2185 joint26 1.000000
|
| 2243 |
+
skin 2186 joint26 1.000000
|
| 2244 |
+
skin 2187 joint26 1.000000
|
| 2245 |
+
skin 2188 joint26 1.000000
|
| 2246 |
+
skin 2189 joint26 1.000000
|
| 2247 |
+
skin 2190 joint26 1.000000
|
| 2248 |
+
skin 2191 joint26 1.000000
|
| 2249 |
+
skin 2192 joint26 1.000000
|
| 2250 |
+
skin 2193 joint26 1.000000
|
| 2251 |
+
skin 2194 joint26 1.000000
|
| 2252 |
+
skin 2195 joint26 1.000000
|
| 2253 |
+
skin 2196 joint26 1.000000
|
| 2254 |
+
skin 2197 joint26 1.000000
|
| 2255 |
+
skin 2198 joint26 1.000000
|
| 2256 |
+
skin 2199 joint26 1.000000
|
| 2257 |
+
skin 2200 joint26 1.000000
|
| 2258 |
+
skin 2201 joint26 0.682304 joint27 0.317696
|
| 2259 |
+
skin 2202 joint26 0.660284 joint27 0.339716
|
| 2260 |
+
skin 2203 joint26 1.000000
|
| 2261 |
+
skin 2204 joint26 0.690844 joint27 0.309156
|
| 2262 |
+
skin 2205 joint26 0.352197 joint27 0.647803
|
| 2263 |
+
skin 2206 joint26 0.417139 joint27 0.582862
|
| 2264 |
+
skin 2207 joint26 0.446003 joint27 0.553997
|
| 2265 |
+
skin 2208 joint26 0.292975 joint27 0.707025
|
| 2266 |
+
skin 2209 joint27 1.000000
|
| 2267 |
+
skin 2210 joint26 0.395154 joint27 0.604846
|
| 2268 |
+
skin 2211 joint27 1.000000
|
| 2269 |
+
skin 2212 joint10 1.000000
|
| 2270 |
+
skin 2213 joint4 0.308849 joint10 0.691151
|
| 2271 |
+
skin 2214 joint4 0.299881 joint10 0.700119
|
| 2272 |
+
skin 2215 joint4 0.348096 joint10 0.651904
|
| 2273 |
+
skin 2216 joint4 0.377994 joint10 0.622006
|
| 2274 |
+
skin 2217 joint4 0.332323 joint10 0.667677
|
| 2275 |
+
skin 2218 joint4 0.395164 joint10 0.604836
|
| 2276 |
+
skin 2219 joint4 1.000000
|
| 2277 |
+
skin 2220 joint4 1.000000
|
| 2278 |
+
skin 2221 joint4 1.000000
|
| 2279 |
+
skin 2222 joint4 1.000000
|
| 2280 |
+
skin 2223 joint4 1.000000
|
| 2281 |
+
skin 2224 joint4 1.000000
|
| 2282 |
+
skin 2225 joint3 1.000000
|
| 2283 |
+
skin 2226 joint3 1.000000
|
| 2284 |
+
skin 2227 joint3 1.000000
|
| 2285 |
+
skin 2228 joint3 1.000000
|
| 2286 |
+
skin 2229 joint2 0.272448 joint3 0.727553
|
| 2287 |
+
skin 2230 joint3 1.000000
|
| 2288 |
+
skin 2231 joint3 1.000000
|
| 2289 |
+
skin 2232 joint2 0.460008 joint3 0.539992
|
| 2290 |
+
skin 2233 joint2 0.574443 joint3 0.425557
|
| 2291 |
+
skin 2234 joint2 0.598345 joint3 0.401654
|
| 2292 |
+
skin 2235 joint2 0.718878 joint3 0.281122
|
| 2293 |
+
skin 2236 joint2 0.698598 joint3 0.301402
|
| 2294 |
+
skin 2237 joint2 0.688397 joint3 0.311602
|
| 2295 |
+
skin 2238 joint1 0.285785 joint2 0.714215
|
| 2296 |
+
skin 2239 joint1 0.259390 joint2 0.740610
|
| 2297 |
+
skin 2240 joint1 0.286925 joint2 0.713075
|
| 2298 |
+
skin 2241 joint1 0.370112 joint2 0.629888
|
| 2299 |
+
skin 2242 joint1 0.341143 joint2 0.658857
|
| 2300 |
+
skin 2243 joint16 1.000000
|
| 2301 |
+
skin 2244 joint16 1.000000
|
| 2302 |
+
skin 2245 joint0 0.334089 joint1 0.665911
|
| 2303 |
+
skin 2246 joint0 0.348027 joint1 0.651973
|
| 2304 |
+
skin 2247 joint0 0.398704 joint1 0.601296
|
| 2305 |
+
skin 2248 joint0 0.398704 joint1 0.601296
|
| 2306 |
+
skin 2249 joint0 0.394841 joint1 0.605159
|
| 2307 |
+
skin 2250 joint0 0.367642 joint1 0.632358
|
| 2308 |
+
skin 2251 joint0 1.000000
|
| 2309 |
+
skin 2252 joint0 1.000000
|
| 2310 |
+
skin 2253 joint0 1.000000
|
| 2311 |
+
skin 2254 joint0 1.000000
|
| 2312 |
+
skin 2255 joint0 1.000000
|
| 2313 |
+
skin 2256 joint0 1.000000
|
| 2314 |
+
skin 2257 joint4 0.660916 joint10 0.339084
|
| 2315 |
+
skin 2258 joint4 0.705222 joint10 0.294778
|
| 2316 |
+
skin 2259 joint4 0.715013 joint10 0.284987
|
| 2317 |
+
skin 2260 joint4 0.662616 joint10 0.337384
|
| 2318 |
+
skin 2261 joint4 0.299916 joint10 0.700084
|
| 2319 |
+
skin 2262 joint4 0.299916 joint10 0.700084
|
| 2320 |
+
skin 2263 joint0 1.000000
|
| 2321 |
+
skin 2264 joint0 1.000000
|
| 2322 |
+
skin 2265 joint0 1.000000
|
| 2323 |
+
skin 2266 joint0 1.000000
|
| 2324 |
+
skin 2267 joint0 1.000000
|
| 2325 |
+
skin 2268 joint0 1.000000
|
| 2326 |
+
skin 2269 joint4 0.705712 joint10 0.294288
|
| 2327 |
+
skin 2270 joint10 1.000000
|
| 2328 |
+
skin 2271 joint10 1.000000
|
| 2329 |
+
skin 2272 joint0 1.000000
|
| 2330 |
+
skin 2273 joint0 1.000000
|
| 2331 |
+
skin 2274 joint0 1.000000
|
| 2332 |
+
skin 2275 joint10 1.000000
|
| 2333 |
+
skin 2276 joint10 1.000000
|
| 2334 |
+
skin 2277 joint4 0.327294 joint10 0.672706
|
| 2335 |
+
skin 2278 joint4 0.327294 joint10 0.672706
|
| 2336 |
+
skin 2279 joint10 1.000000
|
| 2337 |
+
skin 2280 joint10 1.000000
|
| 2338 |
+
skin 2281 joint10 1.000000
|
| 2339 |
+
skin 2282 joint26 0.455303 joint27 0.544697
|
| 2340 |
+
skin 2283 joint0 1.000000
|
| 2341 |
+
skin 2284 joint0 1.000000
|
| 2342 |
+
skin 2285 joint0 1.000000
|
| 2343 |
+
skin 2286 joint0 1.000000
|
| 2344 |
+
skin 2287 joint0 1.000000
|
| 2345 |
+
skin 2288 joint0 1.000000
|
| 2346 |
+
skin 2289 joint10 1.000000
|
| 2347 |
+
skin 2290 joint10 1.000000
|
| 2348 |
+
skin 2291 joint4 1.000000
|
| 2349 |
+
skin 2292 joint4 0.340051 joint10 0.659949
|
| 2350 |
+
skin 2293 joint10 1.000000
|
| 2351 |
+
skin 2294 joint10 1.000000
|
| 2352 |
+
skin 2295 joint10 1.000000
|
| 2353 |
+
skin 2296 joint0 1.000000
|
| 2354 |
+
skin 2297 joint0 1.000000
|
| 2355 |
+
skin 2298 joint0 1.000000
|
| 2356 |
+
skin 2299 joint0 1.000000
|
| 2357 |
+
skin 2300 joint0 1.000000
|
| 2358 |
+
skin 2301 joint0 1.000000
|
| 2359 |
+
skin 2302 joint0 1.000000
|
| 2360 |
+
skin 2303 joint10 1.000000
|
| 2361 |
+
skin 2304 joint10 1.000000
|
| 2362 |
+
skin 2305 joint10 1.000000
|
| 2363 |
+
skin 2306 joint10 1.000000
|
| 2364 |
+
skin 2307 joint10 0.682966 joint14 0.317034
|
| 2365 |
+
skin 2308 joint10 0.682966 joint14 0.317034
|
| 2366 |
+
skin 2309 joint4 0.294522 joint10 0.705478
|
| 2367 |
+
skin 2310 joint4 0.294522 joint10 0.705478
|
| 2368 |
+
skin 2311 joint10 0.642192 joint14 0.357808
|
| 2369 |
+
skin 2312 joint10 0.642192 joint14 0.357808
|
| 2370 |
+
skin 2313 joint10 1.000000
|
| 2371 |
+
skin 2314 joint0 1.000000
|
| 2372 |
+
skin 2315 joint0 1.000000
|
| 2373 |
+
skin 2316 joint0 1.000000
|
| 2374 |
+
skin 2317 joint0 1.000000
|
| 2375 |
+
skin 2318 joint0 1.000000
|
| 2376 |
+
skin 2319 joint0 1.000000
|
| 2377 |
+
skin 2320 joint0 1.000000
|
| 2378 |
+
skin 2321 joint0 1.000000
|
| 2379 |
+
skin 2322 joint0 1.000000
|
| 2380 |
+
skin 2323 joint0 1.000000
|
| 2381 |
+
skin 2324 joint10 0.530595 joint11 0.469405
|
| 2382 |
+
skin 2325 joint10 0.421398 joint11 0.578602
|
| 2383 |
+
skin 2326 joint10 0.387369 joint11 0.437670 joint14 0.174962
|
| 2384 |
+
skin 2327 joint10 0.481600 joint11 0.518400
|
| 2385 |
+
skin 2328 joint10 0.400061 joint11 0.599939
|
| 2386 |
+
skin 2329 joint10 0.508254 joint11 0.491746
|
| 2387 |
+
skin 2330 joint10 0.581836 joint11 0.418164
|
| 2388 |
+
skin 2331 joint10 0.581836 joint11 0.418164
|
| 2389 |
+
skin 2332 joint10 0.604378 joint11 0.395622
|
| 2390 |
+
skin 2333 joint10 0.634854 joint11 0.365146
|
| 2391 |
+
skin 2334 joint10 0.664536 joint11 0.335464
|
| 2392 |
+
skin 2335 joint11 1.000000
|
| 2393 |
+
skin 2336 joint10 0.279371 joint11 0.720629
|
| 2394 |
+
skin 2337 joint10 0.544400 joint11 0.455600
|
| 2395 |
+
skin 2338 joint10 0.504158 joint14 0.495842
|
| 2396 |
+
skin 2339 joint10 0.300614 joint14 0.699386
|
| 2397 |
+
skin 2340 joint11 0.274838 joint13 0.725162
|
| 2398 |
+
skin 2341 joint13 1.000000
|
| 2399 |
+
skin 2342 joint13 1.000000
|
| 2400 |
+
skin 2343 joint13 1.000000
|
| 2401 |
+
skin 2344 joint6 0.517713 joint13 0.482287
|
| 2402 |
+
skin 2345 joint6 0.539860 joint8 0.460140
|
| 2403 |
+
skin 2346 joint8 1.000000
|
| 2404 |
+
skin 2347 joint8 1.000000
|
| 2405 |
+
skin 2348 joint8 1.000000
|
| 2406 |
+
skin 2349 joint8 1.000000
|
| 2407 |
+
skin 2350 joint6 0.493220 joint13 0.506780
|
| 2408 |
+
skin 2351 joint14 0.604608 joint15 0.395392
|
| 2409 |
+
skin 2352 joint14 0.604608 joint15 0.395392
|
| 2410 |
+
skin 2353 joint10 0.678775 joint14 0.321225
|
| 2411 |
+
skin 2354 joint10 0.678775 joint14 0.321225
|
| 2412 |
+
skin 2355 joint14 0.714992 joint15 0.285008
|
| 2413 |
+
skin 2356 joint14 0.714992 joint15 0.285008
|
| 2414 |
+
skin 2357 joint14 1.000000
|
| 2415 |
+
skin 2358 joint14 1.000000
|
| 2416 |
+
skin 2359 joint14 0.475019 joint15 0.524981
|
| 2417 |
+
skin 2360 joint14 0.475019 joint15 0.524981
|
| 2418 |
+
skin 2361 joint10 0.350061 joint14 0.649939
|
| 2419 |
+
skin 2362 joint10 0.350061 joint14 0.649939
|
| 2420 |
+
skin 2363 joint14 0.198327 joint15 0.563025 joint16 0.238648
|
| 2421 |
+
skin 2364 joint14 0.198327 joint15 0.563025 joint16 0.238648
|
| 2422 |
+
skin 2365 joint14 0.369765 joint15 0.630235
|
| 2423 |
+
skin 2366 joint14 0.369765 joint15 0.630235
|
| 2424 |
+
skin 2367 joint14 0.538558 joint15 0.461442
|
| 2425 |
+
skin 2368 joint14 0.538558 joint15 0.461442
|
| 2426 |
+
skin 2369 joint14 0.399673 joint15 0.600327
|
| 2427 |
+
skin 2370 joint15 0.665318 joint16 0.334682
|
| 2428 |
+
skin 2371 joint15 0.665318 joint16 0.334682
|
| 2429 |
+
skin 2372 joint15 0.550099 joint16 0.449901
|
| 2430 |
+
skin 2373 joint15 0.550099 joint16 0.449901
|
| 2431 |
+
skin 2374 joint14 0.209828 joint15 0.552618 joint16 0.237554
|
| 2432 |
+
skin 2375 joint14 0.209828 joint15 0.552618 joint16 0.237554
|
| 2433 |
+
skin 2376 joint15 0.653134 joint16 0.346867
|
| 2434 |
+
skin 2377 joint15 0.537078 joint16 0.462922
|
| 2435 |
+
skin 2378 joint15 0.537078 joint16 0.462922
|
| 2436 |
+
skin 2379 joint15 0.603984 joint16 0.396016
|
| 2437 |
+
skin 2380 joint15 0.603984 joint16 0.396016
|
| 2438 |
+
skin 2381 joint15 0.682686 joint16 0.317314
|
| 2439 |
+
skin 2382 joint14 0.227709 joint15 0.416470 joint16 0.355820
|
| 2440 |
+
skin 2383 joint14 0.264255 joint15 0.417174 joint16 0.318572
|
| 2441 |
+
skin 2384 joint15 0.489548 joint16 0.510452
|
| 2442 |
+
skin 2385 joint15 0.537250 joint16 0.462750
|
| 2443 |
+
skin 2386 joint14 0.376300 joint15 0.623700
|
| 2444 |
+
skin 2387 joint14 0.376300 joint15 0.623700
|
| 2445 |
+
skin 2388 joint15 0.413000 joint16 0.587000
|
| 2446 |
+
skin 2389 joint15 0.413000 joint16 0.587000
|
| 2447 |
+
skin 2390 joint15 0.521173 joint16 0.478827
|
| 2448 |
+
skin 2391 joint15 0.521173 joint16 0.478827
|
| 2449 |
+
skin 2392 joint15 0.418003 joint16 0.581997
|
| 2450 |
+
skin 2393 joint15 0.654284 joint16 0.345716
|
| 2451 |
+
skin 2394 joint15 0.346536 joint16 0.653464
|
| 2452 |
+
skin 2395 joint15 0.346536 joint16 0.653464
|
| 2453 |
+
skin 2396 joint15 0.447089 joint16 0.552911
|
| 2454 |
+
skin 2397 joint15 0.447089 joint16 0.552911
|
| 2455 |
+
skin 2398 joint15 0.402224 joint16 0.597777
|
| 2456 |
+
skin 2399 joint15 0.402224 joint16 0.597777
|
| 2457 |
+
skin 2400 joint15 0.269685 joint16 0.730315
|
| 2458 |
+
skin 2401 joint15 0.269685 joint16 0.730315
|
| 2459 |
+
skin 2402 joint15 0.334696 joint16 0.665304
|
| 2460 |
+
skin 2403 joint15 0.560017 joint16 0.439983
|
| 2461 |
+
skin 2404 joint16 1.000000
|
| 2462 |
+
skin 2405 joint16 1.000000
|
| 2463 |
+
skin 2406 joint16 0.738790 joint20 0.261210
|
| 2464 |
+
skin 2407 joint16 0.738790 joint20 0.261210
|
| 2465 |
+
skin 2408 joint16 0.689273 joint20 0.310727
|
| 2466 |
+
skin 2409 joint16 0.689273 joint20 0.310727
|
| 2467 |
+
skin 2410 joint16 0.732793 joint20 0.267207
|
| 2468 |
+
skin 2411 joint16 0.732862 joint20 0.267138
|
| 2469 |
+
skin 2412 joint16 0.732862 joint20 0.267138
|
| 2470 |
+
skin 2413 joint16 0.572043 joint20 0.427957
|
| 2471 |
+
skin 2414 joint16 0.572043 joint20 0.427957
|
| 2472 |
+
skin 2415 joint16 0.430138 joint20 0.244822 joint23 0.325040
|
| 2473 |
+
skin 2416 joint16 0.430138 joint20 0.244822 joint23 0.325040
|
| 2474 |
+
skin 2417 joint16 0.290111 joint23 0.519334 joint26 0.190555
|
| 2475 |
+
skin 2418 joint16 0.290111 joint23 0.519334 joint26 0.190555
|
| 2476 |
+
skin 2419 joint16 0.443305 joint20 0.267189 joint23 0.289506
|
| 2477 |
+
skin 2420 joint16 0.209819 joint20 0.162981 joint23 0.445164 joint26 0.182037
|
| 2478 |
+
skin 2421 joint16 0.209819 joint20 0.162981 joint23 0.445164 joint26 0.182037
|
| 2479 |
+
skin 2422 joint16 0.689273 joint20 0.310727
|
| 2480 |
+
skin 2423 joint16 0.689273 joint20 0.310727
|
| 2481 |
+
skin 2424 joint16 0.243890 joint20 0.368583 joint23 0.387527
|
| 2482 |
+
skin 2425 joint16 0.243890 joint20 0.368583 joint23 0.387527
|
| 2483 |
+
skin 2426 joint23 0.700229 joint26 0.299771
|
| 2484 |
+
skin 2427 joint23 0.700229 joint26 0.299771
|
| 2485 |
+
skin 2428 joint23 0.691404 joint26 0.308596
|
| 2486 |
+
skin 2429 joint16 0.377554 joint20 0.408089 joint23 0.214357
|
| 2487 |
+
skin 2430 joint16 0.377554 joint20 0.408089 joint23 0.214357
|
| 2488 |
+
skin 2431 joint23 0.714060 joint26 0.285940
|
| 2489 |
+
skin 2432 joint23 0.714060 joint26 0.285940
|
| 2490 |
+
skin 2433 joint16 0.242225 joint20 0.278370 joint23 0.479405
|
| 2491 |
+
skin 2434 joint16 0.242225 joint20 0.278370 joint23 0.479405
|
| 2492 |
+
skin 2435 joint10 0.302753 joint14 0.697247
|
| 2493 |
+
skin 2436 joint14 1.000000
|
| 2494 |
+
skin 2437 joint14 1.000000
|
| 2495 |
+
skin 2438 joint10 0.282953 joint14 0.717047
|
| 2496 |
+
skin 2439 joint10 0.282953 joint14 0.717047
|
| 2497 |
+
skin 2440 joint10 0.624089 joint14 0.375911
|
| 2498 |
+
skin 2441 joint10 0.624089 joint14 0.375911
|
| 2499 |
+
skin 2442 joint10 0.502827 joint14 0.497173
|
| 2500 |
+
skin 2443 joint10 0.502827 joint14 0.497173
|
| 2501 |
+
skin 2444 joint10 0.567102 joint14 0.432898
|
| 2502 |
+
skin 2445 joint10 0.314389 joint14 0.685611
|
| 2503 |
+
skin 2446 joint10 0.314389 joint14 0.685611
|
| 2504 |
+
skin 2447 joint10 1.000000
|
| 2505 |
+
skin 2448 joint10 1.000000
|
| 2506 |
+
skin 2449 joint10 0.615498 joint14 0.384502
|
| 2507 |
+
skin 2450 joint10 0.615498 joint14 0.384502
|
| 2508 |
+
skin 2451 joint4 0.372509 joint10 0.627491
|
| 2509 |
+
skin 2452 joint4 0.372509 joint10 0.627491
|
| 2510 |
+
skin 2453 joint4 0.484312 joint10 0.515688
|
| 2511 |
+
skin 2454 joint4 0.484312 joint10 0.515688
|
| 2512 |
+
skin 2455 joint4 1.000000
|
| 2513 |
+
skin 2456 joint4 1.000000
|
| 2514 |
+
skin 2457 joint4 0.478780 joint10 0.521220
|
| 2515 |
+
skin 2458 joint4 0.478780 joint10 0.521220
|
| 2516 |
+
skin 2459 joint4 1.000000
|
| 2517 |
+
skin 2460 joint4 1.000000
|
| 2518 |
+
skin 2461 joint4 1.000000
|
| 2519 |
+
skin 2462 joint4 0.679538 joint10 0.320462
|
| 2520 |
+
skin 2463 joint4 0.679538 joint10 0.320462
|
| 2521 |
+
skin 2464 joint3 0.458504 joint4 0.541496
|
| 2522 |
+
skin 2465 joint3 0.458504 joint4 0.541496
|
| 2523 |
+
skin 2466 joint4 1.000000
|
| 2524 |
+
skin 2467 joint4 0.620606 joint10 0.379394
|
| 2525 |
+
skin 2468 joint4 0.478780 joint10 0.521220
|
| 2526 |
+
skin 2469 joint4 0.478780 joint10 0.521220
|
| 2527 |
+
skin 2470 joint4 1.000000
|
| 2528 |
+
skin 2471 joint4 1.000000
|
| 2529 |
+
skin 2472 joint3 0.567504 joint4 0.432496
|
| 2530 |
+
skin 2473 joint3 0.567504 joint4 0.432496
|
| 2531 |
+
skin 2474 joint4 1.000000
|
| 2532 |
+
skin 2475 joint4 1.000000
|
| 2533 |
+
skin 2476 joint3 0.385261 joint4 0.614739
|
| 2534 |
+
skin 2477 joint3 0.385261 joint4 0.614739
|
| 2535 |
+
skin 2478 joint4 1.000000
|
| 2536 |
+
skin 2479 joint3 0.281768 joint4 0.718232
|
| 2537 |
+
skin 2480 joint3 0.499582 joint4 0.500418
|
| 2538 |
+
skin 2481 joint3 0.499582 joint4 0.500418
|
| 2539 |
+
skin 2482 joint3 0.467837 joint4 0.532163
|
| 2540 |
+
skin 2483 joint3 0.405691 joint4 0.594309
|
| 2541 |
+
skin 2484 joint3 0.405691 joint4 0.594309
|
| 2542 |
+
skin 2485 joint3 0.586866 joint4 0.413133
|
| 2543 |
+
skin 2486 joint3 0.586866 joint4 0.413133
|
| 2544 |
+
skin 2487 joint2 1.000000
|
| 2545 |
+
skin 2488 joint3 0.710428 joint4 0.289572
|
| 2546 |
+
skin 2489 joint3 0.710428 joint4 0.289572
|
| 2547 |
+
skin 2490 joint3 0.710428 joint4 0.289572
|
| 2548 |
+
skin 2491 joint3 0.710428 joint4 0.289572
|
| 2549 |
+
skin 2492 joint3 1.000000
|
| 2550 |
+
skin 2493 joint3 1.000000
|
| 2551 |
+
skin 2494 joint3 1.000000
|
| 2552 |
+
skin 2495 joint3 1.000000
|
| 2553 |
+
skin 2496 joint3 1.000000
|
| 2554 |
+
skin 2497 joint3 1.000000
|
| 2555 |
+
skin 2498 joint2 0.520283 joint3 0.479717
|
| 2556 |
+
skin 2499 joint3 1.000000
|
| 2557 |
+
skin 2500 joint2 0.297081 joint3 0.702919
|
| 2558 |
+
skin 2501 joint2 0.297081 joint3 0.702919
|
| 2559 |
+
skin 2502 joint2 0.297081 joint3 0.702919
|
| 2560 |
+
skin 2503 joint2 0.262371 joint3 0.737629
|
| 2561 |
+
skin 2504 joint2 0.262371 joint3 0.737629
|
| 2562 |
+
skin 2505 joint2 0.262371 joint3 0.737629
|
| 2563 |
+
skin 2506 joint2 0.314470 joint3 0.685530
|
| 2564 |
+
skin 2507 joint2 0.262371 joint3 0.737629
|
| 2565 |
+
skin 2508 joint2 0.536357 joint3 0.463643
|
| 2566 |
+
skin 2509 joint2 0.536357 joint3 0.463643
|
| 2567 |
+
skin 2510 joint2 0.536357 joint3 0.463643
|
| 2568 |
+
skin 2511 joint2 0.520283 joint3 0.479717
|
| 2569 |
+
skin 2512 joint2 0.520283 joint3 0.479717
|
| 2570 |
+
skin 2513 joint2 0.520283 joint3 0.479717
|
| 2571 |
+
skin 2514 joint2 1.000000
|
| 2572 |
+
skin 2515 joint2 1.000000
|
| 2573 |
+
skin 2516 joint2 1.000000
|
| 2574 |
+
skin 2517 joint2 1.000000
|
| 2575 |
+
skin 2518 joint2 1.000000
|
| 2576 |
+
skin 2519 joint2 1.000000
|
| 2577 |
+
skin 2520 joint2 1.000000
|
| 2578 |
+
skin 2521 joint1 0.555733 joint2 0.444267
|
| 2579 |
+
skin 2522 joint1 0.555733 joint2 0.444267
|
| 2580 |
+
skin 2523 joint2 1.000000
|
| 2581 |
+
skin 2524 joint3 1.000000
|
| 2582 |
+
skin 2525 joint3 1.000000
|
| 2583 |
+
skin 2526 joint3 1.000000
|
| 2584 |
+
skin 2527 joint2 1.000000
|
| 2585 |
+
skin 2528 joint2 1.000000
|
| 2586 |
+
skin 2529 joint1 1.000000
|
| 2587 |
+
skin 2530 joint1 1.000000
|
| 2588 |
+
skin 2531 joint1 1.000000
|
| 2589 |
+
skin 2532 joint2 1.000000
|
| 2590 |
+
skin 2533 joint2 1.000000
|
| 2591 |
+
skin 2534 joint3 0.591929 joint4 0.408071
|
| 2592 |
+
skin 2535 joint3 0.591929 joint4 0.408071
|
| 2593 |
+
skin 2536 joint1 0.420984 joint2 0.579016
|
| 2594 |
+
skin 2537 joint3 0.385261 joint4 0.614739
|
| 2595 |
+
skin 2538 joint2 1.000000
|
| 2596 |
+
skin 2539 joint2 0.721764 joint3 0.278236
|
| 2597 |
+
skin 2540 joint2 1.000000
|
| 2598 |
+
skin 2541 joint2 1.000000
|
| 2599 |
+
skin 2542 joint2 1.000000
|
| 2600 |
+
skin 2543 joint1 1.000000
|
| 2601 |
+
skin 2544 joint1 1.000000
|
| 2602 |
+
skin 2545 joint1 1.000000
|
| 2603 |
+
skin 2546 joint0 0.350257 joint1 0.649743
|
| 2604 |
+
skin 2547 joint0 0.350257 joint1 0.649743
|
| 2605 |
+
skin 2548 joint0 0.350257 joint1 0.649743
|
| 2606 |
+
skin 2549 joint0 0.436462 joint1 0.563538
|
| 2607 |
+
skin 2550 joint0 0.436462 joint1 0.563538
|
| 2608 |
+
skin 2551 joint0 0.436462 joint1 0.563538
|
| 2609 |
+
skin 2552 joint4 0.376020 joint10 0.623980
|
| 2610 |
+
skin 2553 joint4 0.376020 joint10 0.623980
|
| 2611 |
+
skin 2554 joint14 0.604608 joint15 0.395392
|
animation/inputs/fish/first_frames/render_back.png
ADDED
|
animation/inputs/fish/first_frames/render_front.png
ADDED
|
animation/inputs/fish/first_frames/render_left.png
ADDED
|
animation/inputs/fish/first_frames/render_right.png
ADDED
|
animation/inputs/fish/input.mp4
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:eba1a2f8795f76240ab03b35916a9d11f674b5084bf954dbe58a231eb4f77fa5
|
| 3 |
+
size 2167626
|
animation/inputs/fish/objs/fish_texture.png
ADDED
|
Git LFS Details
|
animation/inputs/fish/objs/material.mtl
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
newmtl fish_texture
|
| 2 |
+
Ka 1 1 1
|
| 3 |
+
Kd 1 1 1
|
| 4 |
+
Ks 0 0 0
|
| 5 |
+
Ns 10
|
| 6 |
+
illum 2
|
| 7 |
+
map_Kd fish_texture.png
|
| 8 |
+
|
animation/inputs/fish/objs/mesh.obj
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
animation/inputs/fish/objs/rig.txt
ADDED
|
@@ -0,0 +1,1204 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
joints joint0 -0.02241507 -0.00288021 0.00819102
|
| 2 |
+
joints joint1 -0.01895133 -0.00703823 0.00957575
|
| 3 |
+
joints joint2 -0.01548758 -0.01120387 0.01165381
|
| 4 |
+
joints joint3 -0.01132956 -0.01813137 0.02066127
|
| 5 |
+
joints joint4 -0.00093451 -0.02991115 0.00611201
|
| 6 |
+
joints joint5 -0.00093451 -0.02783596 0.01927653
|
| 7 |
+
joints joint6 -0.00093451 -0.01950466 0.00125971
|
| 8 |
+
joints joint7 -0.00093451 -0.01674282 -0.00289068
|
| 9 |
+
joints joint8 -0.00093451 -0.01189052 -0.00705633
|
| 10 |
+
joints joint9 -0.00024119 -0.01950466 0.01442519
|
| 11 |
+
joints joint10 -0.00024119 -0.01189052 0.01511851
|
| 12 |
+
joints joint11 0.00114450 -0.00288021 0.03243342
|
| 13 |
+
joints joint12 0.00114450 -0.00288021 0.03521052
|
| 14 |
+
joints joint13 0.00114450 0.00196446 0.01581088
|
| 15 |
+
joints joint14 0.00253019 0.01028050 0.01511851
|
| 16 |
+
joints joint15 0.00460825 0.01859654 0.02758876
|
| 17 |
+
joints joint16 0.00460825 0.02136601 0.01373234
|
| 18 |
+
joints joint17 0.00460825 0.04284276 -0.00012121
|
| 19 |
+
joints joint18 0.00460825 0.04769505 0.02066127
|
| 20 |
+
joints joint19 0.00530252 0.02136601 0.02967158
|
| 21 |
+
joints joint20 0.00599298 0.02413548 0.03106013
|
| 22 |
+
joints joint21 0.00599298 0.02967442 0.01234666
|
| 23 |
+
joints joint22 0.00599298 0.04006566 0.00472346
|
| 24 |
+
joints joint23 0.00599298 0.04354466 0.01511851
|
| 25 |
+
joints joint24 0.00668726 0.03799046 0.01096049
|
| 26 |
+
joints joint25 0.01084146 -0.01881801 0.02135554
|
| 27 |
+
joints joint26 0.01569376 -0.01327907 0.01165381
|
| 28 |
+
joints joint27 0.01985178 -0.00981533 0.00957575
|
| 29 |
+
joints joint28 0.02400217 -0.00703823 0.00819102
|
| 30 |
+
root joint9
|
| 31 |
+
hier joint9 joint6
|
| 32 |
+
hier joint9 joint4
|
| 33 |
+
hier joint9 joint10
|
| 34 |
+
hier joint9 joint5
|
| 35 |
+
hier joint9 joint3
|
| 36 |
+
hier joint9 joint25
|
| 37 |
+
hier joint6 joint7
|
| 38 |
+
hier joint10 joint26
|
| 39 |
+
hier joint10 joint2
|
| 40 |
+
hier joint10 joint13
|
| 41 |
+
hier joint10 joint11
|
| 42 |
+
hier joint7 joint8
|
| 43 |
+
hier joint26 joint27
|
| 44 |
+
hier joint2 joint1
|
| 45 |
+
hier joint13 joint14
|
| 46 |
+
hier joint11 joint12
|
| 47 |
+
hier joint27 joint28
|
| 48 |
+
hier joint1 joint0
|
| 49 |
+
hier joint14 joint16
|
| 50 |
+
hier joint14 joint15
|
| 51 |
+
hier joint16 joint21
|
| 52 |
+
hier joint15 joint19
|
| 53 |
+
hier joint21 joint24
|
| 54 |
+
hier joint19 joint20
|
| 55 |
+
hier joint24 joint22
|
| 56 |
+
hier joint24 joint23
|
| 57 |
+
hier joint22 joint17
|
| 58 |
+
hier joint23 joint18
|
| 59 |
+
skin 0 joint21 0.262297 joint23 0.365876 joint24 0.371826
|
| 60 |
+
skin 1 joint23 1.000000
|
| 61 |
+
skin 2 joint23 1.000000
|
| 62 |
+
skin 3 joint28 1.000000
|
| 63 |
+
skin 4 joint28 1.000000
|
| 64 |
+
skin 5 joint28 1.000000
|
| 65 |
+
skin 6 joint18 1.000000
|
| 66 |
+
skin 7 joint18 1.000000
|
| 67 |
+
skin 8 joint18 1.000000
|
| 68 |
+
skin 9 joint8 1.000000
|
| 69 |
+
skin 10 joint8 1.000000
|
| 70 |
+
skin 11 joint8 1.000000
|
| 71 |
+
skin 12 joint22 1.000000
|
| 72 |
+
skin 13 joint21 0.425780 joint22 0.272057 joint24 0.302163
|
| 73 |
+
skin 14 joint22 1.000000
|
| 74 |
+
skin 15 joint17 1.000000
|
| 75 |
+
skin 16 joint17 1.000000
|
| 76 |
+
skin 17 joint17 1.000000
|
| 77 |
+
skin 18 joint23 0.664864 joint24 0.335136
|
| 78 |
+
skin 19 joint23 1.000000
|
| 79 |
+
skin 20 joint24 1.000000
|
| 80 |
+
skin 21 joint8 1.000000
|
| 81 |
+
skin 22 joint8 1.000000
|
| 82 |
+
skin 23 joint8 1.000000
|
| 83 |
+
skin 24 joint9 1.000000
|
| 84 |
+
skin 25 joint4 0.680850 joint5 0.319150
|
| 85 |
+
skin 26 joint4 1.000000
|
| 86 |
+
skin 27 joint9 1.000000
|
| 87 |
+
skin 28 joint9 1.000000
|
| 88 |
+
skin 29 joint5 1.000000
|
| 89 |
+
skin 30 joint4 0.562491 joint5 0.437509
|
| 90 |
+
skin 31 joint9 1.000000
|
| 91 |
+
skin 32 joint9 1.000000
|
| 92 |
+
skin 33 joint7 0.727924 joint8 0.272076
|
| 93 |
+
skin 34 joint7 0.716745 joint8 0.283255
|
| 94 |
+
skin 35 joint7 1.000000
|
| 95 |
+
skin 36 joint7 1.000000
|
| 96 |
+
skin 37 joint7 0.727924 joint8 0.272076
|
| 97 |
+
skin 38 joint7 1.000000
|
| 98 |
+
skin 39 joint7 0.716745 joint8 0.283255
|
| 99 |
+
skin 40 joint7 0.727924 joint8 0.272076
|
| 100 |
+
skin 41 joint7 0.356090 joint8 0.643911
|
| 101 |
+
skin 42 joint10 0.478152 joint11 0.288492 joint12 0.233357
|
| 102 |
+
skin 43 joint10 0.478152 joint11 0.288492 joint12 0.233357
|
| 103 |
+
skin 44 joint12 1.000000
|
| 104 |
+
skin 45 joint10 0.214828 joint11 0.332789 joint12 0.205216 joint13 0.247167
|
| 105 |
+
skin 46 joint13 0.690154 joint14 0.309846
|
| 106 |
+
skin 47 joint11 0.583502 joint12 0.416498
|
| 107 |
+
skin 48 joint20 1.000000
|
| 108 |
+
skin 49 joint20 1.000000
|
| 109 |
+
skin 50 joint20 1.000000
|
| 110 |
+
skin 51 joint13 0.567822 joint14 0.432178
|
| 111 |
+
skin 52 joint14 1.000000
|
| 112 |
+
skin 53 joint13 0.186613 joint14 0.383197 joint15 0.430190
|
| 113 |
+
skin 54 joint20 1.000000
|
| 114 |
+
skin 55 joint20 1.000000
|
| 115 |
+
skin 56 joint20 1.000000
|
| 116 |
+
skin 57 joint28 1.000000
|
| 117 |
+
skin 58 joint9 1.000000
|
| 118 |
+
skin 59 joint9 0.426263 joint10 0.279269 joint11 0.294468
|
| 119 |
+
skin 60 joint9 0.426263 joint10 0.279269 joint11 0.294468
|
| 120 |
+
skin 61 joint9 0.690532 joint10 0.309468
|
| 121 |
+
skin 62 joint9 0.208503 joint10 0.330417 joint11 0.240938 joint12 0.220142
|
| 122 |
+
skin 63 joint9 0.426263 joint10 0.279269 joint11 0.294468
|
| 123 |
+
skin 64 joint28 1.000000
|
| 124 |
+
skin 65 joint28 1.000000
|
| 125 |
+
skin 66 joint28 1.000000
|
| 126 |
+
skin 67 joint26 1.000000
|
| 127 |
+
skin 68 joint26 1.000000
|
| 128 |
+
skin 69 joint26 1.000000
|
| 129 |
+
skin 70 joint9 1.000000
|
| 130 |
+
skin 71 joint9 1.000000
|
| 131 |
+
skin 72 joint9 1.000000
|
| 132 |
+
skin 73 joint21 0.251236 joint23 0.430250 joint24 0.318514
|
| 133 |
+
skin 74 joint23 1.000000
|
| 134 |
+
skin 75 joint23 1.000000
|
| 135 |
+
skin 76 joint0 1.000000
|
| 136 |
+
skin 77 joint0 1.000000
|
| 137 |
+
skin 78 joint0 1.000000
|
| 138 |
+
skin 79 joint18 1.000000
|
| 139 |
+
skin 80 joint18 1.000000
|
| 140 |
+
skin 81 joint18 1.000000
|
| 141 |
+
skin 82 joint8 1.000000
|
| 142 |
+
skin 83 joint22 1.000000
|
| 143 |
+
skin 84 joint22 1.000000
|
| 144 |
+
skin 85 joint21 0.261513 joint22 0.477951 joint24 0.260536
|
| 145 |
+
skin 86 joint17 1.000000
|
| 146 |
+
skin 87 joint17 1.000000
|
| 147 |
+
skin 88 joint17 0.645273 joint22 0.354727
|
| 148 |
+
skin 89 joint23 1.000000
|
| 149 |
+
skin 90 joint24 1.000000
|
| 150 |
+
skin 91 joint23 1.000000
|
| 151 |
+
skin 92 joint8 1.000000
|
| 152 |
+
skin 93 joint9 1.000000
|
| 153 |
+
skin 94 joint4 1.000000
|
| 154 |
+
skin 95 joint4 1.000000
|
| 155 |
+
skin 96 joint9 1.000000
|
| 156 |
+
skin 97 joint5 1.000000
|
| 157 |
+
skin 98 joint9 1.000000
|
| 158 |
+
skin 99 joint4 1.000000
|
| 159 |
+
skin 100 joint9 1.000000
|
| 160 |
+
skin 101 joint9 1.000000
|
| 161 |
+
skin 102 joint7 0.727924 joint8 0.272076
|
| 162 |
+
skin 103 joint7 1.000000
|
| 163 |
+
skin 104 joint7 1.000000
|
| 164 |
+
skin 105 joint7 0.727924 joint8 0.272076
|
| 165 |
+
skin 106 joint7 0.727924 joint8 0.272076
|
| 166 |
+
skin 107 joint10 1.000000
|
| 167 |
+
skin 108 joint10 0.478152 joint11 0.288492 joint12 0.233357
|
| 168 |
+
skin 109 joint10 0.170328 joint11 0.321706 joint12 0.223083 joint13 0.284883
|
| 169 |
+
skin 110 joint11 0.583502 joint12 0.416498
|
| 170 |
+
skin 111 joint13 0.690154 joint14 0.309846
|
| 171 |
+
skin 112 joint20 1.000000
|
| 172 |
+
skin 113 joint13 0.578767 joint14 0.421233
|
| 173 |
+
skin 114 joint13 0.386634 joint14 0.368246 joint15 0.245120
|
| 174 |
+
skin 115 joint14 1.000000
|
| 175 |
+
skin 116 joint20 1.000000
|
| 176 |
+
skin 117 joint20 1.000000
|
| 177 |
+
skin 118 joint0 1.000000
|
| 178 |
+
skin 119 joint9 1.000000
|
| 179 |
+
skin 120 joint9 0.426263 joint10 0.279269 joint11 0.294468
|
| 180 |
+
skin 121 joint9 0.426263 joint10 0.279269 joint11 0.294468
|
| 181 |
+
skin 122 joint9 1.000000
|
| 182 |
+
skin 123 joint9 0.208503 joint10 0.330417 joint11 0.240938 joint12 0.220142
|
| 183 |
+
skin 124 joint9 0.426263 joint10 0.279269 joint11 0.294468
|
| 184 |
+
skin 125 joint2 0.537824 joint9 0.462176
|
| 185 |
+
skin 126 joint2 1.000000
|
| 186 |
+
skin 127 joint2 1.000000
|
| 187 |
+
skin 128 joint2 1.000000
|
| 188 |
+
skin 129 joint2 1.000000
|
| 189 |
+
skin 130 joint0 1.000000
|
| 190 |
+
skin 131 joint0 1.000000
|
| 191 |
+
skin 132 joint0 1.000000
|
| 192 |
+
skin 133 joint2 1.000000
|
| 193 |
+
skin 134 joint2 1.000000
|
| 194 |
+
skin 135 joint2 1.000000
|
| 195 |
+
skin 136 joint9 1.000000
|
| 196 |
+
skin 137 joint9 1.000000
|
| 197 |
+
skin 138 joint9 1.000000
|
| 198 |
+
skin 139 joint26 1.000000
|
| 199 |
+
skin 140 joint26 1.000000
|
| 200 |
+
skin 141 joint26 1.000000
|
| 201 |
+
skin 142 joint9 0.375908 joint26 0.624092
|
| 202 |
+
skin 143 joint11 0.271511 joint12 0.728489
|
| 203 |
+
skin 144 joint12 1.000000
|
| 204 |
+
skin 145 joint10 0.205166 joint11 0.449742 joint12 0.345092
|
| 205 |
+
skin 146 joint10 0.205166 joint11 0.449742 joint12 0.345092
|
| 206 |
+
skin 147 joint10 0.205166 joint11 0.449742 joint12 0.345092
|
| 207 |
+
skin 148 joint11 0.271511 joint12 0.728489
|
| 208 |
+
skin 149 joint11 0.271511 joint12 0.728489
|
| 209 |
+
skin 150 joint10 0.267198 joint11 0.441405 joint12 0.291397
|
| 210 |
+
skin 151 joint12 1.000000
|
| 211 |
+
skin 152 joint10 0.267198 joint11 0.441405 joint12 0.291397
|
| 212 |
+
skin 153 joint11 0.271511 joint12 0.728489
|
| 213 |
+
skin 154 joint10 0.205166 joint11 0.449742 joint12 0.345092
|
| 214 |
+
skin 155 joint25 1.000000
|
| 215 |
+
skin 156 joint25 1.000000
|
| 216 |
+
skin 157 joint25 1.000000
|
| 217 |
+
skin 158 joint25 1.000000
|
| 218 |
+
skin 159 joint25 1.000000
|
| 219 |
+
skin 160 joint25 1.000000
|
| 220 |
+
skin 161 joint25 1.000000
|
| 221 |
+
skin 162 joint25 1.000000
|
| 222 |
+
skin 163 joint25 1.000000
|
| 223 |
+
skin 164 joint25 1.000000
|
| 224 |
+
skin 165 joint25 1.000000
|
| 225 |
+
skin 166 joint25 1.000000
|
| 226 |
+
skin 167 joint25 1.000000
|
| 227 |
+
skin 168 joint25 1.000000
|
| 228 |
+
skin 169 joint25 1.000000
|
| 229 |
+
skin 170 joint25 1.000000
|
| 230 |
+
skin 171 joint25 1.000000
|
| 231 |
+
skin 172 joint25 1.000000
|
| 232 |
+
skin 173 joint25 1.000000
|
| 233 |
+
skin 174 joint25 1.000000
|
| 234 |
+
skin 175 joint25 1.000000
|
| 235 |
+
skin 176 joint25 1.000000
|
| 236 |
+
skin 177 joint3 1.000000
|
| 237 |
+
skin 178 joint3 1.000000
|
| 238 |
+
skin 179 joint3 1.000000
|
| 239 |
+
skin 180 joint3 1.000000
|
| 240 |
+
skin 181 joint3 1.000000
|
| 241 |
+
skin 182 joint3 1.000000
|
| 242 |
+
skin 183 joint3 1.000000
|
| 243 |
+
skin 184 joint3 1.000000
|
| 244 |
+
skin 185 joint3 1.000000
|
| 245 |
+
skin 186 joint3 1.000000
|
| 246 |
+
skin 187 joint3 1.000000
|
| 247 |
+
skin 188 joint3 1.000000
|
| 248 |
+
skin 189 joint3 1.000000
|
| 249 |
+
skin 190 joint3 1.000000
|
| 250 |
+
skin 191 joint3 1.000000
|
| 251 |
+
skin 192 joint3 1.000000
|
| 252 |
+
skin 193 joint3 1.000000
|
| 253 |
+
skin 194 joint3 1.000000
|
| 254 |
+
skin 195 joint3 1.000000
|
| 255 |
+
skin 196 joint3 1.000000
|
| 256 |
+
skin 197 joint3 1.000000
|
| 257 |
+
skin 198 joint3 1.000000
|
| 258 |
+
skin 199 joint9 0.694518 joint10 0.305482
|
| 259 |
+
skin 200 joint9 1.000000
|
| 260 |
+
skin 201 joint10 1.000000
|
| 261 |
+
skin 202 joint10 1.000000
|
| 262 |
+
skin 203 joint9 0.603015 joint25 0.396985
|
| 263 |
+
skin 204 joint9 1.000000
|
| 264 |
+
skin 205 joint9 0.397865 joint25 0.602135
|
| 265 |
+
skin 206 joint25 1.000000
|
| 266 |
+
skin 207 joint9 1.000000
|
| 267 |
+
skin 208 joint5 1.000000
|
| 268 |
+
skin 209 joint14 0.675239 joint16 0.324761
|
| 269 |
+
skin 210 joint14 0.721331 joint16 0.278669
|
| 270 |
+
skin 211 joint16 0.588517 joint21 0.411483
|
| 271 |
+
skin 212 joint16 0.574832 joint21 0.425168
|
| 272 |
+
skin 213 joint16 0.242048 joint21 0.505221 joint24 0.252731
|
| 273 |
+
skin 214 joint16 0.212593 joint21 0.512866 joint24 0.274541
|
| 274 |
+
skin 215 joint21 0.373133 joint23 0.180209 joint24 0.446658
|
| 275 |
+
skin 216 joint10 0.737821 joint13 0.262179
|
| 276 |
+
skin 217 joint10 0.698837 joint13 0.301163
|
| 277 |
+
skin 218 joint18 0.295758 joint23 0.704242
|
| 278 |
+
skin 219 joint18 0.595656 joint23 0.404344
|
| 279 |
+
skin 220 joint18 0.680603 joint23 0.319397
|
| 280 |
+
skin 221 joint18 1.000000
|
| 281 |
+
skin 222 joint9 1.000000
|
| 282 |
+
skin 223 joint9 1.000000
|
| 283 |
+
skin 224 joint9 1.000000
|
| 284 |
+
skin 225 joint9 1.000000
|
| 285 |
+
skin 226 joint10 0.685158 joint13 0.314842
|
| 286 |
+
skin 227 joint10 0.660655 joint13 0.339345
|
| 287 |
+
skin 228 joint10 1.000000
|
| 288 |
+
skin 229 joint10 1.000000
|
| 289 |
+
skin 230 joint14 0.206046 joint16 0.516888 joint21 0.277066
|
| 290 |
+
skin 231 joint14 1.000000
|
| 291 |
+
skin 232 joint14 0.710628 joint16 0.289372
|
| 292 |
+
skin 233 joint16 0.574550 joint21 0.425450
|
| 293 |
+
skin 234 joint21 0.638922 joint24 0.361078
|
| 294 |
+
skin 235 joint16 0.193716 joint21 0.543759 joint24 0.262526
|
| 295 |
+
skin 236 joint21 0.473811 joint24 0.526189
|
| 296 |
+
skin 237 joint21 0.443432 joint22 0.194031 joint24 0.362537
|
| 297 |
+
skin 238 joint21 0.259270 joint24 0.740730
|
| 298 |
+
skin 239 joint21 0.174437 joint22 0.470058 joint24 0.355505
|
| 299 |
+
skin 240 joint24 1.000000
|
| 300 |
+
skin 241 joint22 0.445350 joint24 0.554650
|
| 301 |
+
skin 242 joint24 1.000000
|
| 302 |
+
skin 243 joint22 0.508803 joint24 0.491197
|
| 303 |
+
skin 244 joint22 0.727923 joint24 0.272077
|
| 304 |
+
skin 245 joint22 1.000000
|
| 305 |
+
skin 246 joint22 1.000000
|
| 306 |
+
skin 247 joint10 0.715887 joint13 0.284113
|
| 307 |
+
skin 248 joint10 1.000000
|
| 308 |
+
skin 249 joint10 1.000000
|
| 309 |
+
skin 250 joint10 0.693259 joint13 0.306741
|
| 310 |
+
skin 251 joint16 0.547463 joint21 0.452537
|
| 311 |
+
skin 252 joint14 1.000000
|
| 312 |
+
skin 253 joint14 0.699422 joint16 0.300578
|
| 313 |
+
skin 254 joint16 0.561545 joint21 0.438455
|
| 314 |
+
skin 255 joint16 0.206677 joint21 0.508607 joint24 0.284716
|
| 315 |
+
skin 256 joint16 0.242048 joint21 0.505221 joint24 0.252731
|
| 316 |
+
skin 257 joint21 0.289230 joint23 0.294837 joint24 0.415933
|
| 317 |
+
skin 258 joint21 0.203666 joint23 0.428347 joint24 0.367986
|
| 318 |
+
skin 259 joint23 0.651283 joint24 0.348717
|
| 319 |
+
skin 260 joint23 0.651133 joint24 0.348867
|
| 320 |
+
skin 261 joint18 0.702936 joint23 0.297064
|
| 321 |
+
skin 262 joint18 1.000000
|
| 322 |
+
skin 263 joint18 1.000000
|
| 323 |
+
skin 264 joint18 1.000000
|
| 324 |
+
skin 265 joint18 1.000000
|
| 325 |
+
skin 266 joint18 1.000000
|
| 326 |
+
skin 267 joint18 1.000000
|
| 327 |
+
skin 268 joint18 1.000000
|
| 328 |
+
skin 269 joint23 1.000000
|
| 329 |
+
skin 270 joint23 1.000000
|
| 330 |
+
skin 271 joint24 1.000000
|
| 331 |
+
skin 272 joint24 1.000000
|
| 332 |
+
skin 273 joint22 1.000000
|
| 333 |
+
skin 274 joint22 1.000000
|
| 334 |
+
skin 275 joint17 1.000000
|
| 335 |
+
skin 276 joint17 1.000000
|
| 336 |
+
skin 277 joint17 1.000000
|
| 337 |
+
skin 278 joint17 1.000000
|
| 338 |
+
skin 279 joint17 1.000000
|
| 339 |
+
skin 280 joint17 1.000000
|
| 340 |
+
skin 281 joint17 0.515771 joint22 0.484229
|
| 341 |
+
skin 282 joint17 1.000000
|
| 342 |
+
skin 283 joint22 1.000000
|
| 343 |
+
skin 284 joint22 1.000000
|
| 344 |
+
skin 285 joint21 0.352148 joint22 0.349603 joint24 0.298248
|
| 345 |
+
skin 286 joint21 0.372905 joint22 0.323083 joint24 0.304011
|
| 346 |
+
skin 287 joint21 0.677182 joint24 0.322818
|
| 347 |
+
skin 288 joint21 0.691543 joint24 0.308457
|
| 348 |
+
skin 289 joint16 0.569784 joint21 0.430216
|
| 349 |
+
skin 290 joint16 0.526272 joint21 0.473728
|
| 350 |
+
skin 291 joint14 0.705448 joint16 0.294552
|
| 351 |
+
skin 292 joint14 0.591743 joint16 0.408257
|
| 352 |
+
skin 293 joint10 1.000000
|
| 353 |
+
skin 294 joint10 1.000000
|
| 354 |
+
skin 295 joint10 1.000000
|
| 355 |
+
skin 296 joint10 0.728167 joint13 0.271833
|
| 356 |
+
skin 297 joint9 1.000000
|
| 357 |
+
skin 298 joint9 0.729531 joint10 0.270469
|
| 358 |
+
skin 299 joint4 1.000000
|
| 359 |
+
skin 300 joint9 1.000000
|
| 360 |
+
skin 301 joint9 1.000000
|
| 361 |
+
skin 302 joint4 1.000000
|
| 362 |
+
skin 303 joint4 1.000000
|
| 363 |
+
skin 304 joint4 1.000000
|
| 364 |
+
skin 305 joint4 1.000000
|
| 365 |
+
skin 306 joint4 1.000000
|
| 366 |
+
skin 307 joint5 1.000000
|
| 367 |
+
skin 308 joint5 1.000000
|
| 368 |
+
skin 309 joint5 1.000000
|
| 369 |
+
skin 310 joint5 1.000000
|
| 370 |
+
skin 311 joint9 1.000000
|
| 371 |
+
skin 312 joint9 1.000000
|
| 372 |
+
skin 313 joint9 1.000000
|
| 373 |
+
skin 314 joint9 1.000000
|
| 374 |
+
skin 315 joint9 1.000000
|
| 375 |
+
skin 316 joint9 1.000000
|
| 376 |
+
skin 317 joint23 0.615999 joint24 0.384001
|
| 377 |
+
skin 318 joint23 0.650847 joint24 0.349153
|
| 378 |
+
skin 319 joint23 0.718173 joint24 0.281827
|
| 379 |
+
skin 320 joint22 1.000000
|
| 380 |
+
skin 321 joint17 0.451022 joint22 0.548978
|
| 381 |
+
skin 322 joint17 1.000000
|
| 382 |
+
skin 323 joint17 1.000000
|
| 383 |
+
skin 324 joint9 0.262200 joint26 0.737800
|
| 384 |
+
skin 325 joint9 1.000000
|
| 385 |
+
skin 326 joint4 1.000000
|
| 386 |
+
skin 327 joint9 1.000000
|
| 387 |
+
skin 328 joint9 1.000000
|
| 388 |
+
skin 329 joint9 1.000000
|
| 389 |
+
skin 330 joint9 1.000000
|
| 390 |
+
skin 331 joint10 1.000000
|
| 391 |
+
skin 332 joint9 0.375908 joint26 0.624092
|
| 392 |
+
skin 333 joint9 0.645738 joint10 0.354262
|
| 393 |
+
skin 334 joint10 1.000000
|
| 394 |
+
skin 335 joint10 0.632309 joint13 0.367691
|
| 395 |
+
skin 336 joint10 0.655192 joint13 0.344809
|
| 396 |
+
skin 337 joint16 0.570315 joint21 0.429685
|
| 397 |
+
skin 338 joint14 1.000000
|
| 398 |
+
skin 339 joint14 0.660557 joint16 0.339443
|
| 399 |
+
skin 340 joint16 0.569784 joint21 0.430216
|
| 400 |
+
skin 341 joint21 0.660712 joint24 0.339288
|
| 401 |
+
skin 342 joint21 0.675866 joint24 0.324134
|
| 402 |
+
skin 343 joint21 0.395294 joint22 0.263171 joint24 0.341535
|
| 403 |
+
skin 344 joint22 0.652752 joint24 0.347248
|
| 404 |
+
skin 345 joint22 1.000000
|
| 405 |
+
skin 346 joint22 1.000000
|
| 406 |
+
skin 347 joint9 1.000000
|
| 407 |
+
skin 348 joint9 1.000000
|
| 408 |
+
skin 349 joint9 1.000000
|
| 409 |
+
skin 350 joint9 1.000000
|
| 410 |
+
skin 351 joint9 1.000000
|
| 411 |
+
skin 352 joint9 1.000000
|
| 412 |
+
skin 353 joint9 1.000000
|
| 413 |
+
skin 354 joint9 1.000000
|
| 414 |
+
skin 355 joint9 1.000000
|
| 415 |
+
skin 356 joint9 1.000000
|
| 416 |
+
skin 357 joint9 1.000000
|
| 417 |
+
skin 358 joint9 1.000000
|
| 418 |
+
skin 359 joint9 1.000000
|
| 419 |
+
skin 360 joint9 1.000000
|
| 420 |
+
skin 361 joint9 1.000000
|
| 421 |
+
skin 362 joint4 1.000000
|
| 422 |
+
skin 363 joint4 1.000000
|
| 423 |
+
skin 364 joint4 1.000000
|
| 424 |
+
skin 365 joint5 1.000000
|
| 425 |
+
skin 366 joint5 1.000000
|
| 426 |
+
skin 367 joint5 1.000000
|
| 427 |
+
skin 368 joint5 1.000000
|
| 428 |
+
skin 369 joint4 0.292918 joint5 0.707082
|
| 429 |
+
skin 370 joint4 0.680850 joint5 0.319150
|
| 430 |
+
skin 371 joint9 1.000000
|
| 431 |
+
skin 372 joint9 1.000000
|
| 432 |
+
skin 373 joint4 0.562491 joint5 0.437509
|
| 433 |
+
skin 374 joint9 1.000000
|
| 434 |
+
skin 375 joint5 1.000000
|
| 435 |
+
skin 376 joint5 1.000000
|
| 436 |
+
skin 377 joint9 1.000000
|
| 437 |
+
skin 378 joint9 1.000000
|
| 438 |
+
skin 379 joint9 1.000000
|
| 439 |
+
skin 380 joint9 1.000000
|
| 440 |
+
skin 381 joint9 1.000000
|
| 441 |
+
skin 382 joint5 1.000000
|
| 442 |
+
skin 383 joint4 1.000000
|
| 443 |
+
skin 384 joint9 1.000000
|
| 444 |
+
skin 385 joint9 1.000000
|
| 445 |
+
skin 386 joint4 0.292918 joint5 0.707082
|
| 446 |
+
skin 387 joint5 1.000000
|
| 447 |
+
skin 388 joint9 1.000000
|
| 448 |
+
skin 389 joint9 1.000000
|
| 449 |
+
skin 390 joint9 1.000000
|
| 450 |
+
skin 391 joint5 1.000000
|
| 451 |
+
skin 392 joint9 1.000000
|
| 452 |
+
skin 393 joint9 1.000000
|
| 453 |
+
skin 394 joint9 1.000000
|
| 454 |
+
skin 395 joint9 1.000000
|
| 455 |
+
skin 396 joint9 1.000000
|
| 456 |
+
skin 397 joint9 1.000000
|
| 457 |
+
skin 398 joint9 1.000000
|
| 458 |
+
skin 399 joint9 1.000000
|
| 459 |
+
skin 400 joint9 1.000000
|
| 460 |
+
skin 401 joint9 1.000000
|
| 461 |
+
skin 402 joint9 1.000000
|
| 462 |
+
skin 403 joint9 1.000000
|
| 463 |
+
skin 404 joint9 1.000000
|
| 464 |
+
skin 405 joint9 1.000000
|
| 465 |
+
skin 406 joint9 1.000000
|
| 466 |
+
skin 407 joint9 1.000000
|
| 467 |
+
skin 408 joint9 1.000000
|
| 468 |
+
skin 409 joint9 1.000000
|
| 469 |
+
skin 410 joint9 1.000000
|
| 470 |
+
skin 411 joint9 1.000000
|
| 471 |
+
skin 412 joint9 1.000000
|
| 472 |
+
skin 413 joint9 1.000000
|
| 473 |
+
skin 414 joint9 1.000000
|
| 474 |
+
skin 415 joint9 1.000000
|
| 475 |
+
skin 416 joint9 1.000000
|
| 476 |
+
skin 417 joint9 1.000000
|
| 477 |
+
skin 418 joint9 1.000000
|
| 478 |
+
skin 419 joint9 1.000000
|
| 479 |
+
skin 420 joint9 1.000000
|
| 480 |
+
skin 421 joint9 1.000000
|
| 481 |
+
skin 422 joint9 1.000000
|
| 482 |
+
skin 423 joint9 1.000000
|
| 483 |
+
skin 424 joint9 1.000000
|
| 484 |
+
skin 425 joint9 1.000000
|
| 485 |
+
skin 426 joint6 0.282354 joint9 0.717646
|
| 486 |
+
skin 427 joint9 1.000000
|
| 487 |
+
skin 428 joint9 1.000000
|
| 488 |
+
skin 429 joint9 1.000000
|
| 489 |
+
skin 430 joint9 1.000000
|
| 490 |
+
skin 431 joint6 0.282354 joint9 0.717646
|
| 491 |
+
skin 432 joint6 1.000000
|
| 492 |
+
skin 433 joint6 0.371620 joint7 0.628380
|
| 493 |
+
skin 434 joint9 1.000000
|
| 494 |
+
skin 435 joint6 0.692325 joint9 0.307675
|
| 495 |
+
skin 436 joint6 0.440112 joint7 0.559888
|
| 496 |
+
skin 437 joint7 1.000000
|
| 497 |
+
skin 438 joint6 0.329658 joint7 0.670342
|
| 498 |
+
skin 439 joint7 1.000000
|
| 499 |
+
skin 440 joint7 0.599154 joint8 0.400846
|
| 500 |
+
skin 441 joint7 1.000000
|
| 501 |
+
skin 442 joint7 0.268704 joint8 0.731296
|
| 502 |
+
skin 443 joint8 1.000000
|
| 503 |
+
skin 444 joint7 1.000000
|
| 504 |
+
skin 445 joint8 1.000000
|
| 505 |
+
skin 446 joint8 1.000000
|
| 506 |
+
skin 447 joint7 0.340589 joint8 0.659411
|
| 507 |
+
skin 448 joint8 1.000000
|
| 508 |
+
skin 449 joint8 1.000000
|
| 509 |
+
skin 450 joint8 1.000000
|
| 510 |
+
skin 451 joint10 0.474217 joint13 0.525783
|
| 511 |
+
skin 452 joint10 0.303360 joint13 0.696640
|
| 512 |
+
skin 453 joint10 0.323897 joint13 0.676103
|
| 513 |
+
skin 454 joint13 1.000000
|
| 514 |
+
skin 455 joint10 0.373846 joint13 0.626154
|
| 515 |
+
skin 456 joint10 0.715887 joint13 0.284113
|
| 516 |
+
skin 457 joint13 1.000000
|
| 517 |
+
skin 458 joint10 0.322595 joint13 0.677405
|
| 518 |
+
skin 459 joint13 1.000000
|
| 519 |
+
skin 460 joint10 0.321339 joint13 0.678661
|
| 520 |
+
skin 461 joint10 0.363426 joint13 0.636574
|
| 521 |
+
skin 462 joint14 1.000000
|
| 522 |
+
skin 463 joint14 1.000000
|
| 523 |
+
skin 464 joint14 1.000000
|
| 524 |
+
skin 465 joint14 1.000000
|
| 525 |
+
skin 466 joint14 1.000000
|
| 526 |
+
skin 467 joint14 1.000000
|
| 527 |
+
skin 468 joint14 1.000000
|
| 528 |
+
skin 469 joint14 1.000000
|
| 529 |
+
skin 470 joint14 1.000000
|
| 530 |
+
skin 471 joint13 0.738273 joint14 0.261727
|
| 531 |
+
skin 472 joint13 0.734905 joint14 0.265095
|
| 532 |
+
skin 473 joint13 0.650703 joint14 0.349297
|
| 533 |
+
skin 474 joint13 0.616660 joint14 0.383340
|
| 534 |
+
skin 475 joint13 0.581995 joint14 0.418005
|
| 535 |
+
skin 476 joint13 1.000000
|
| 536 |
+
skin 477 joint13 1.000000
|
| 537 |
+
skin 478 joint13 0.594157 joint14 0.405843
|
| 538 |
+
skin 479 joint13 0.702545 joint14 0.297455
|
| 539 |
+
skin 480 joint13 1.000000
|
| 540 |
+
skin 481 joint13 1.000000
|
| 541 |
+
skin 482 joint13 0.673040 joint14 0.326960
|
| 542 |
+
skin 483 joint13 0.697584 joint14 0.302416
|
| 543 |
+
skin 484 joint13 1.000000
|
| 544 |
+
skin 485 joint13 1.000000
|
| 545 |
+
skin 486 joint13 0.726238 joint14 0.273762
|
| 546 |
+
skin 487 joint13 0.661546 joint14 0.338454
|
| 547 |
+
skin 488 joint13 0.690067 joint14 0.309933
|
| 548 |
+
skin 489 joint13 1.000000
|
| 549 |
+
skin 490 joint13 1.000000
|
| 550 |
+
skin 491 joint9 1.000000
|
| 551 |
+
skin 492 joint9 1.000000
|
| 552 |
+
skin 493 joint9 1.000000
|
| 553 |
+
skin 494 joint9 1.000000
|
| 554 |
+
skin 495 joint5 1.000000
|
| 555 |
+
skin 496 joint9 1.000000
|
| 556 |
+
skin 497 joint5 1.000000
|
| 557 |
+
skin 498 joint5 1.000000
|
| 558 |
+
skin 499 joint9 1.000000
|
| 559 |
+
skin 500 joint9 1.000000
|
| 560 |
+
skin 501 joint9 1.000000
|
| 561 |
+
skin 502 joint10 1.000000
|
| 562 |
+
skin 503 joint10 0.715887 joint13 0.284113
|
| 563 |
+
skin 504 joint10 0.205166 joint11 0.449742 joint12 0.345092
|
| 564 |
+
skin 505 joint10 0.205166 joint11 0.449742 joint12 0.345092
|
| 565 |
+
skin 506 joint10 0.205166 joint11 0.449742 joint12 0.345092
|
| 566 |
+
skin 507 joint10 0.373846 joint13 0.626154
|
| 567 |
+
skin 508 joint13 1.000000
|
| 568 |
+
skin 509 joint10 0.715887 joint13 0.284113
|
| 569 |
+
skin 510 joint10 0.205166 joint11 0.449742 joint12 0.345092
|
| 570 |
+
skin 511 joint13 0.583229 joint14 0.416771
|
| 571 |
+
skin 512 joint13 0.535044 joint14 0.464956
|
| 572 |
+
skin 513 joint13 0.600756 joint14 0.399244
|
| 573 |
+
skin 514 joint13 0.542939 joint14 0.457061
|
| 574 |
+
skin 515 joint13 0.581995 joint14 0.418005
|
| 575 |
+
skin 516 joint13 0.613381 joint14 0.386619
|
| 576 |
+
skin 517 joint13 0.473555 joint14 0.526445
|
| 577 |
+
skin 518 joint13 0.512948 joint14 0.487052
|
| 578 |
+
skin 519 joint13 0.604574 joint14 0.395426
|
| 579 |
+
skin 520 joint20 1.000000
|
| 580 |
+
skin 521 joint20 1.000000
|
| 581 |
+
skin 522 joint14 1.000000
|
| 582 |
+
skin 523 joint16 0.547463 joint21 0.452537
|
| 583 |
+
skin 524 joint15 0.393240 joint19 0.210277 joint20 0.396483
|
| 584 |
+
skin 525 joint15 1.000000
|
| 585 |
+
skin 526 joint14 1.000000
|
| 586 |
+
skin 527 joint15 1.000000
|
| 587 |
+
skin 528 joint15 0.362388 joint20 0.637612
|
| 588 |
+
skin 529 joint19 1.000000
|
| 589 |
+
skin 530 joint19 1.000000
|
| 590 |
+
skin 531 joint19 1.000000
|
| 591 |
+
skin 532 joint19 1.000000
|
| 592 |
+
skin 533 joint20 1.000000
|
| 593 |
+
skin 534 joint20 1.000000
|
| 594 |
+
skin 535 joint15 1.000000
|
| 595 |
+
skin 536 joint15 1.000000
|
| 596 |
+
skin 537 joint13 0.690067 joint14 0.309933
|
| 597 |
+
skin 538 joint13 0.567822 joint14 0.432178
|
| 598 |
+
skin 539 joint13 0.186613 joint14 0.383197 joint15 0.430190
|
| 599 |
+
skin 540 joint15 1.000000
|
| 600 |
+
skin 541 joint13 0.186613 joint14 0.383197 joint15 0.430190
|
| 601 |
+
skin 542 joint15 1.000000
|
| 602 |
+
skin 543 joint19 1.000000
|
| 603 |
+
skin 544 joint19 1.000000
|
| 604 |
+
skin 545 joint20 1.000000
|
| 605 |
+
skin 546 joint20 1.000000
|
| 606 |
+
skin 547 joint20 1.000000
|
| 607 |
+
skin 548 joint20 1.000000
|
| 608 |
+
skin 549 joint20 1.000000
|
| 609 |
+
skin 550 joint20 1.000000
|
| 610 |
+
skin 551 joint8 1.000000
|
| 611 |
+
skin 552 joint8 1.000000
|
| 612 |
+
skin 553 joint7 0.356090 joint8 0.643911
|
| 613 |
+
skin 554 joint6 0.560591 joint7 0.439409
|
| 614 |
+
skin 555 joint9 1.000000
|
| 615 |
+
skin 556 joint9 0.690532 joint10 0.309468
|
| 616 |
+
skin 557 joint9 1.000000
|
| 617 |
+
skin 558 joint9 1.000000
|
| 618 |
+
skin 559 joint9 1.000000
|
| 619 |
+
skin 560 joint9 1.000000
|
| 620 |
+
skin 561 joint9 1.000000
|
| 621 |
+
skin 562 joint9 1.000000
|
| 622 |
+
skin 563 joint9 1.000000
|
| 623 |
+
skin 564 joint9 1.000000
|
| 624 |
+
skin 565 joint9 0.385334 joint26 0.614666
|
| 625 |
+
skin 566 joint9 0.399137 joint10 0.249145 joint26 0.351717
|
| 626 |
+
skin 567 joint9 0.399137 joint10 0.249145 joint26 0.351717
|
| 627 |
+
skin 568 joint9 0.262200 joint26 0.737800
|
| 628 |
+
skin 569 joint26 1.000000
|
| 629 |
+
skin 570 joint9 0.215381 joint10 0.382661 joint26 0.401958
|
| 630 |
+
skin 571 joint9 0.262200 joint26 0.737800
|
| 631 |
+
skin 572 joint9 0.385334 joint26 0.614666
|
| 632 |
+
skin 573 joint26 1.000000
|
| 633 |
+
skin 574 joint26 1.000000
|
| 634 |
+
skin 575 joint26 1.000000
|
| 635 |
+
skin 576 joint26 1.000000
|
| 636 |
+
skin 577 joint26 0.713933 joint27 0.286067
|
| 637 |
+
skin 578 joint26 1.000000
|
| 638 |
+
skin 579 joint26 0.646180 joint27 0.353820
|
| 639 |
+
skin 580 joint28 1.000000
|
| 640 |
+
skin 581 joint26 1.000000
|
| 641 |
+
skin 582 joint26 0.709178 joint27 0.290822
|
| 642 |
+
skin 583 joint26 0.675012 joint27 0.324988
|
| 643 |
+
skin 584 joint28 1.000000
|
| 644 |
+
skin 585 joint26 0.703568 joint27 0.296432
|
| 645 |
+
skin 586 joint27 1.000000
|
| 646 |
+
skin 587 joint27 1.000000
|
| 647 |
+
skin 588 joint27 1.000000
|
| 648 |
+
skin 589 joint27 1.000000
|
| 649 |
+
skin 590 joint27 1.000000
|
| 650 |
+
skin 591 joint27 1.000000
|
| 651 |
+
skin 592 joint27 1.000000
|
| 652 |
+
skin 593 joint27 1.000000
|
| 653 |
+
skin 594 joint28 1.000000
|
| 654 |
+
skin 595 joint28 1.000000
|
| 655 |
+
skin 596 joint28 1.000000
|
| 656 |
+
skin 597 joint28 1.000000
|
| 657 |
+
skin 598 joint28 1.000000
|
| 658 |
+
skin 599 joint28 1.000000
|
| 659 |
+
skin 600 joint28 1.000000
|
| 660 |
+
skin 601 joint28 1.000000
|
| 661 |
+
skin 602 joint26 0.675012 joint27 0.324988
|
| 662 |
+
skin 603 joint27 1.000000
|
| 663 |
+
skin 604 joint28 1.000000
|
| 664 |
+
skin 605 joint9 0.375908 joint26 0.624092
|
| 665 |
+
skin 606 joint9 0.728602 joint10 0.271398
|
| 666 |
+
skin 607 joint10 1.000000
|
| 667 |
+
skin 608 joint10 1.000000
|
| 668 |
+
skin 609 joint9 1.000000
|
| 669 |
+
skin 610 joint3 1.000000
|
| 670 |
+
skin 611 joint3 1.000000
|
| 671 |
+
skin 612 joint9 1.000000
|
| 672 |
+
skin 613 joint9 1.000000
|
| 673 |
+
skin 614 joint5 1.000000
|
| 674 |
+
skin 615 joint9 1.000000
|
| 675 |
+
skin 616 joint14 0.702236 joint16 0.297764
|
| 676 |
+
skin 617 joint14 0.227175 joint16 0.451183 joint21 0.321642
|
| 677 |
+
skin 618 joint16 0.582119 joint21 0.417881
|
| 678 |
+
skin 619 joint14 0.685442 joint16 0.314558
|
| 679 |
+
skin 620 joint16 0.275828 joint21 0.486825 joint24 0.237347
|
| 680 |
+
skin 621 joint21 0.338346 joint23 0.270485 joint24 0.391169
|
| 681 |
+
skin 622 joint16 0.273324 joint21 0.489760 joint24 0.236916
|
| 682 |
+
skin 623 joint10 0.670372 joint13 0.329629
|
| 683 |
+
skin 624 joint10 0.642745 joint13 0.357255
|
| 684 |
+
skin 625 joint18 0.668339 joint23 0.331660
|
| 685 |
+
skin 626 joint18 0.450729 joint23 0.549271
|
| 686 |
+
skin 627 joint18 1.000000
|
| 687 |
+
skin 628 joint18 1.000000
|
| 688 |
+
skin 629 joint9 1.000000
|
| 689 |
+
skin 630 joint9 1.000000
|
| 690 |
+
skin 631 joint9 1.000000
|
| 691 |
+
skin 632 joint9 1.000000
|
| 692 |
+
skin 633 joint10 0.639283 joint13 0.360717
|
| 693 |
+
skin 634 joint10 1.000000
|
| 694 |
+
skin 635 joint10 1.000000
|
| 695 |
+
skin 636 joint10 0.681133 joint13 0.318867
|
| 696 |
+
skin 637 joint16 0.551804 joint21 0.448196
|
| 697 |
+
skin 638 joint16 0.541026 joint21 0.458974
|
| 698 |
+
skin 639 joint14 0.641115 joint16 0.358885
|
| 699 |
+
skin 640 joint14 0.663113 joint16 0.336887
|
| 700 |
+
skin 641 joint16 0.181038 joint21 0.493535 joint24 0.325427
|
| 701 |
+
skin 642 joint21 0.604101 joint24 0.395899
|
| 702 |
+
skin 643 joint21 0.461364 joint24 0.538636
|
| 703 |
+
skin 644 joint21 0.357057 joint22 0.261946 joint24 0.380998
|
| 704 |
+
skin 645 joint24 1.000000
|
| 705 |
+
skin 646 joint22 0.675702 joint24 0.324298
|
| 706 |
+
skin 647 joint24 1.000000
|
| 707 |
+
skin 648 joint22 0.537869 joint24 0.462131
|
| 708 |
+
skin 649 joint24 1.000000
|
| 709 |
+
skin 650 joint22 0.442868 joint24 0.557132
|
| 710 |
+
skin 651 joint22 0.510160 joint24 0.489840
|
| 711 |
+
skin 652 joint22 1.000000
|
| 712 |
+
skin 653 joint22 1.000000
|
| 713 |
+
skin 654 joint10 1.000000
|
| 714 |
+
skin 655 joint10 0.677829 joint13 0.322171
|
| 715 |
+
skin 656 joint10 1.000000
|
| 716 |
+
skin 657 joint10 1.000000
|
| 717 |
+
skin 658 joint16 0.362043 joint21 0.466512 joint24 0.171445
|
| 718 |
+
skin 659 joint14 0.639190 joint16 0.360810
|
| 719 |
+
skin 660 joint14 1.000000
|
| 720 |
+
skin 661 joint16 0.229313 joint21 0.508014 joint24 0.262674
|
| 721 |
+
skin 662 joint21 0.389153 joint23 0.243379 joint24 0.367469
|
| 722 |
+
skin 663 joint23 0.691928 joint24 0.308071
|
| 723 |
+
skin 664 joint18 1.000000
|
| 724 |
+
skin 665 joint18 1.000000
|
| 725 |
+
skin 666 joint18 1.000000
|
| 726 |
+
skin 667 joint18 1.000000
|
| 727 |
+
skin 668 joint23 1.000000
|
| 728 |
+
skin 669 joint22 1.000000
|
| 729 |
+
skin 670 joint22 1.000000
|
| 730 |
+
skin 671 joint24 1.000000
|
| 731 |
+
skin 672 joint17 1.000000
|
| 732 |
+
skin 673 joint17 1.000000
|
| 733 |
+
skin 674 joint17 1.000000
|
| 734 |
+
skin 675 joint17 1.000000
|
| 735 |
+
skin 676 joint17 1.000000
|
| 736 |
+
skin 677 joint17 1.000000
|
| 737 |
+
skin 678 joint17 0.457205 joint22 0.542795
|
| 738 |
+
skin 679 joint17 1.000000
|
| 739 |
+
skin 680 joint22 1.000000
|
| 740 |
+
skin 681 joint22 1.000000
|
| 741 |
+
skin 682 joint21 0.497599 joint22 0.200865 joint24 0.301536
|
| 742 |
+
skin 683 joint21 0.372905 joint22 0.323083 joint24 0.304011
|
| 743 |
+
skin 684 joint16 0.228620 joint21 0.528135 joint24 0.243245
|
| 744 |
+
skin 685 joint21 0.691543 joint24 0.308457
|
| 745 |
+
skin 686 joint16 0.587257 joint21 0.412743
|
| 746 |
+
skin 687 joint16 0.526272 joint21 0.473728
|
| 747 |
+
skin 688 joint14 0.662990 joint16 0.337010
|
| 748 |
+
skin 689 joint14 0.591743 joint16 0.408257
|
| 749 |
+
skin 690 joint10 1.000000
|
| 750 |
+
skin 691 joint10 0.674454 joint13 0.325546
|
| 751 |
+
skin 692 joint10 1.000000
|
| 752 |
+
skin 693 joint10 1.000000
|
| 753 |
+
skin 694 joint9 1.000000
|
| 754 |
+
skin 695 joint9 1.000000
|
| 755 |
+
skin 696 joint4 1.000000
|
| 756 |
+
skin 697 joint9 1.000000
|
| 757 |
+
skin 698 joint9 1.000000
|
| 758 |
+
skin 699 joint4 1.000000
|
| 759 |
+
skin 700 joint4 1.000000
|
| 760 |
+
skin 701 joint5 1.000000
|
| 761 |
+
skin 702 joint5 1.000000
|
| 762 |
+
skin 703 joint9 1.000000
|
| 763 |
+
skin 704 joint9 1.000000
|
| 764 |
+
skin 705 joint9 1.000000
|
| 765 |
+
skin 706 joint23 0.723264 joint24 0.276736
|
| 766 |
+
skin 707 joint23 1.000000
|
| 767 |
+
skin 708 joint23 1.000000
|
| 768 |
+
skin 709 joint22 1.000000
|
| 769 |
+
skin 710 joint17 0.404049 joint22 0.595951
|
| 770 |
+
skin 711 joint17 0.418287 joint22 0.581713
|
| 771 |
+
skin 712 joint17 1.000000
|
| 772 |
+
skin 713 joint2 0.694080 joint9 0.305920
|
| 773 |
+
skin 714 joint9 1.000000
|
| 774 |
+
skin 715 joint4 1.000000
|
| 775 |
+
skin 716 joint9 1.000000
|
| 776 |
+
skin 717 joint9 1.000000
|
| 777 |
+
skin 718 joint9 1.000000
|
| 778 |
+
skin 719 joint9 1.000000
|
| 779 |
+
skin 720 joint10 1.000000
|
| 780 |
+
skin 721 joint10 1.000000
|
| 781 |
+
skin 722 joint9 0.611840 joint10 0.388160
|
| 782 |
+
skin 723 joint2 0.537824 joint9 0.462176
|
| 783 |
+
skin 724 joint10 0.650893 joint13 0.349107
|
| 784 |
+
skin 725 joint10 0.587039 joint13 0.412961
|
| 785 |
+
skin 726 joint16 0.545183 joint21 0.454817
|
| 786 |
+
skin 727 joint16 0.558118 joint21 0.441882
|
| 787 |
+
skin 728 joint14 0.685706 joint16 0.314294
|
| 788 |
+
skin 729 joint14 0.649977 joint16 0.350023
|
| 789 |
+
skin 730 joint16 0.215473 joint21 0.505594 joint24 0.278933
|
| 790 |
+
skin 731 joint21 0.635847 joint24 0.364153
|
| 791 |
+
skin 732 joint21 0.345232 joint22 0.356821 joint24 0.297947
|
| 792 |
+
skin 733 joint22 1.000000
|
| 793 |
+
skin 734 joint22 1.000000
|
| 794 |
+
skin 735 joint22 1.000000
|
| 795 |
+
skin 736 joint9 1.000000
|
| 796 |
+
skin 737 joint9 1.000000
|
| 797 |
+
skin 738 joint9 1.000000
|
| 798 |
+
skin 739 joint9 1.000000
|
| 799 |
+
skin 740 joint9 1.000000
|
| 800 |
+
skin 741 joint9 1.000000
|
| 801 |
+
skin 742 joint9 1.000000
|
| 802 |
+
skin 743 joint9 1.000000
|
| 803 |
+
skin 744 joint9 1.000000
|
| 804 |
+
skin 745 joint9 1.000000
|
| 805 |
+
skin 746 joint9 1.000000
|
| 806 |
+
skin 747 joint9 1.000000
|
| 807 |
+
skin 748 joint9 1.000000
|
| 808 |
+
skin 749 joint9 1.000000
|
| 809 |
+
skin 750 joint4 1.000000
|
| 810 |
+
skin 751 joint5 1.000000
|
| 811 |
+
skin 752 joint4 0.546934 joint5 0.453066
|
| 812 |
+
skin 753 joint4 1.000000
|
| 813 |
+
skin 754 joint5 1.000000
|
| 814 |
+
skin 755 joint5 1.000000
|
| 815 |
+
skin 756 joint5 1.000000
|
| 816 |
+
skin 757 joint5 1.000000
|
| 817 |
+
skin 758 joint4 1.000000
|
| 818 |
+
skin 759 joint4 1.000000
|
| 819 |
+
skin 760 joint9 1.000000
|
| 820 |
+
skin 761 joint9 1.000000
|
| 821 |
+
skin 762 joint9 1.000000
|
| 822 |
+
skin 763 joint9 1.000000
|
| 823 |
+
skin 764 joint5 1.000000
|
| 824 |
+
skin 765 joint5 1.000000
|
| 825 |
+
skin 766 joint9 1.000000
|
| 826 |
+
skin 767 joint9 1.000000
|
| 827 |
+
skin 768 joint9 1.000000
|
| 828 |
+
skin 769 joint9 1.000000
|
| 829 |
+
skin 770 joint5 1.000000
|
| 830 |
+
skin 771 joint9 1.000000
|
| 831 |
+
skin 772 joint9 1.000000
|
| 832 |
+
skin 773 joint4 0.546934 joint5 0.453066
|
| 833 |
+
skin 774 joint5 1.000000
|
| 834 |
+
skin 775 joint9 1.000000
|
| 835 |
+
skin 776 joint9 1.000000
|
| 836 |
+
skin 777 joint5 1.000000
|
| 837 |
+
skin 778 joint9 1.000000
|
| 838 |
+
skin 779 joint9 1.000000
|
| 839 |
+
skin 780 joint9 1.000000
|
| 840 |
+
skin 781 joint5 1.000000
|
| 841 |
+
skin 782 joint9 1.000000
|
| 842 |
+
skin 783 joint9 1.000000
|
| 843 |
+
skin 784 joint9 1.000000
|
| 844 |
+
skin 785 joint9 1.000000
|
| 845 |
+
skin 786 joint9 1.000000
|
| 846 |
+
skin 787 joint9 1.000000
|
| 847 |
+
skin 788 joint9 1.000000
|
| 848 |
+
skin 789 joint9 1.000000
|
| 849 |
+
skin 790 joint9 1.000000
|
| 850 |
+
skin 791 joint9 1.000000
|
| 851 |
+
skin 792 joint9 1.000000
|
| 852 |
+
skin 793 joint9 1.000000
|
| 853 |
+
skin 794 joint9 1.000000
|
| 854 |
+
skin 795 joint9 1.000000
|
| 855 |
+
skin 796 joint9 1.000000
|
| 856 |
+
skin 797 joint9 1.000000
|
| 857 |
+
skin 798 joint9 1.000000
|
| 858 |
+
skin 799 joint9 1.000000
|
| 859 |
+
skin 800 joint9 1.000000
|
| 860 |
+
skin 801 joint9 1.000000
|
| 861 |
+
skin 802 joint9 1.000000
|
| 862 |
+
skin 803 joint9 1.000000
|
| 863 |
+
skin 804 joint9 1.000000
|
| 864 |
+
skin 805 joint9 1.000000
|
| 865 |
+
skin 806 joint9 1.000000
|
| 866 |
+
skin 807 joint9 1.000000
|
| 867 |
+
skin 808 joint9 1.000000
|
| 868 |
+
skin 809 joint9 1.000000
|
| 869 |
+
skin 810 joint9 1.000000
|
| 870 |
+
skin 811 joint9 1.000000
|
| 871 |
+
skin 812 joint6 0.315529 joint9 0.684471
|
| 872 |
+
skin 813 joint9 1.000000
|
| 873 |
+
skin 814 joint9 1.000000
|
| 874 |
+
skin 815 joint9 1.000000
|
| 875 |
+
skin 816 joint9 1.000000
|
| 876 |
+
skin 817 joint6 0.607192 joint7 0.392808
|
| 877 |
+
skin 818 joint6 1.000000
|
| 878 |
+
skin 819 joint6 0.315529 joint9 0.684471
|
| 879 |
+
skin 820 joint6 0.692325 joint9 0.307675
|
| 880 |
+
skin 821 joint9 1.000000
|
| 881 |
+
skin 822 joint7 1.000000
|
| 882 |
+
skin 823 joint6 0.425269 joint7 0.574731
|
| 883 |
+
skin 824 joint6 0.329658 joint7 0.670342
|
| 884 |
+
skin 825 joint7 0.696263 joint8 0.303737
|
| 885 |
+
skin 826 joint7 1.000000
|
| 886 |
+
skin 827 joint7 1.000000
|
| 887 |
+
skin 828 joint7 0.391699 joint8 0.608301
|
| 888 |
+
skin 829 joint7 0.396205 joint8 0.603795
|
| 889 |
+
skin 830 joint7 1.000000
|
| 890 |
+
skin 831 joint8 1.000000
|
| 891 |
+
skin 832 joint8 1.000000
|
| 892 |
+
skin 833 joint7 0.340589 joint8 0.659411
|
| 893 |
+
skin 834 joint8 1.000000
|
| 894 |
+
skin 835 joint8 1.000000
|
| 895 |
+
skin 836 joint8 1.000000
|
| 896 |
+
skin 837 joint10 0.317720 joint13 0.682280
|
| 897 |
+
skin 838 joint10 0.268468 joint13 0.731532
|
| 898 |
+
skin 839 joint13 1.000000
|
| 899 |
+
skin 840 joint13 1.000000
|
| 900 |
+
skin 841 joint10 1.000000
|
| 901 |
+
skin 842 joint10 0.435552 joint13 0.564448
|
| 902 |
+
skin 843 joint10 0.324518 joint13 0.675481
|
| 903 |
+
skin 844 joint13 1.000000
|
| 904 |
+
skin 845 joint10 0.285953 joint13 0.714047
|
| 905 |
+
skin 846 joint10 0.272896 joint13 0.727104
|
| 906 |
+
skin 847 joint10 0.305642 joint13 0.694358
|
| 907 |
+
skin 848 joint14 1.000000
|
| 908 |
+
skin 849 joint14 1.000000
|
| 909 |
+
skin 850 joint14 1.000000
|
| 910 |
+
skin 851 joint13 0.270947 joint14 0.729053
|
| 911 |
+
skin 852 joint14 1.000000
|
| 912 |
+
skin 853 joint14 1.000000
|
| 913 |
+
skin 854 joint14 1.000000
|
| 914 |
+
skin 855 joint14 1.000000
|
| 915 |
+
skin 856 joint14 1.000000
|
| 916 |
+
skin 857 joint13 1.000000
|
| 917 |
+
skin 858 joint13 0.698907 joint14 0.301093
|
| 918 |
+
skin 859 joint13 0.650703 joint14 0.349297
|
| 919 |
+
skin 860 joint13 0.734905 joint14 0.265095
|
| 920 |
+
skin 861 joint13 0.650524 joint14 0.349476
|
| 921 |
+
skin 862 joint13 0.605069 joint14 0.394931
|
| 922 |
+
skin 863 joint13 0.713076 joint14 0.286924
|
| 923 |
+
skin 864 joint13 1.000000
|
| 924 |
+
skin 865 joint13 0.664489 joint14 0.335511
|
| 925 |
+
skin 866 joint13 0.671822 joint14 0.328178
|
| 926 |
+
skin 867 joint13 1.000000
|
| 927 |
+
skin 868 joint13 1.000000
|
| 928 |
+
skin 869 joint13 0.650472 joint14 0.349528
|
| 929 |
+
skin 870 joint13 1.000000
|
| 930 |
+
skin 871 joint13 0.724570 joint14 0.275430
|
| 931 |
+
skin 872 joint13 0.600140 joint14 0.399860
|
| 932 |
+
skin 873 joint13 0.535198 joint14 0.464802
|
| 933 |
+
skin 874 joint13 1.000000
|
| 934 |
+
skin 875 joint9 1.000000
|
| 935 |
+
skin 876 joint9 1.000000
|
| 936 |
+
skin 877 joint9 1.000000
|
| 937 |
+
skin 878 joint9 1.000000
|
| 938 |
+
skin 879 joint5 1.000000
|
| 939 |
+
skin 880 joint9 1.000000
|
| 940 |
+
skin 881 joint5 1.000000
|
| 941 |
+
skin 882 joint5 1.000000
|
| 942 |
+
skin 883 joint9 0.729904 joint10 0.270096
|
| 943 |
+
skin 884 joint9 1.000000
|
| 944 |
+
skin 885 joint9 1.000000
|
| 945 |
+
skin 886 joint10 1.000000
|
| 946 |
+
skin 887 joint10 0.267198 joint11 0.441405 joint12 0.291397
|
| 947 |
+
skin 888 joint10 1.000000
|
| 948 |
+
skin 889 joint10 0.267198 joint11 0.441405 joint12 0.291397
|
| 949 |
+
skin 890 joint10 0.205166 joint11 0.449742 joint12 0.345092
|
| 950 |
+
skin 891 joint10 0.435552 joint13 0.564448
|
| 951 |
+
skin 892 joint13 1.000000
|
| 952 |
+
skin 893 joint10 1.000000
|
| 953 |
+
skin 894 joint10 0.267198 joint11 0.441405 joint12 0.291397
|
| 954 |
+
skin 895 joint13 0.489497 joint14 0.510503
|
| 955 |
+
skin 896 joint13 0.613198 joint14 0.386802
|
| 956 |
+
skin 897 joint13 0.600756 joint14 0.399244
|
| 957 |
+
skin 898 joint13 0.605069 joint14 0.394931
|
| 958 |
+
skin 899 joint13 0.580390 joint14 0.419610
|
| 959 |
+
skin 900 joint13 0.610133 joint14 0.389867
|
| 960 |
+
skin 901 joint13 0.565442 joint14 0.434558
|
| 961 |
+
skin 902 joint13 0.597059 joint14 0.402941
|
| 962 |
+
skin 903 joint13 0.499283 joint14 0.500717
|
| 963 |
+
skin 904 joint20 1.000000
|
| 964 |
+
skin 905 joint14 1.000000
|
| 965 |
+
skin 906 joint15 1.000000
|
| 966 |
+
skin 907 joint15 0.393240 joint19 0.210277 joint20 0.396483
|
| 967 |
+
skin 908 joint16 0.547463 joint21 0.452537
|
| 968 |
+
skin 909 joint14 1.000000
|
| 969 |
+
skin 910 joint15 1.000000
|
| 970 |
+
skin 911 joint19 0.442401 joint20 0.557599
|
| 971 |
+
skin 912 joint15 0.362388 joint20 0.637612
|
| 972 |
+
skin 913 joint19 1.000000
|
| 973 |
+
skin 914 joint19 0.344938 joint20 0.655062
|
| 974 |
+
skin 915 joint19 1.000000
|
| 975 |
+
skin 916 joint15 1.000000
|
| 976 |
+
skin 917 joint13 0.578767 joint14 0.421233
|
| 977 |
+
skin 918 joint15 1.000000
|
| 978 |
+
skin 919 joint13 0.386634 joint14 0.368246 joint15 0.245120
|
| 979 |
+
skin 920 joint13 0.386634 joint14 0.368246 joint15 0.245120
|
| 980 |
+
skin 921 joint15 1.000000
|
| 981 |
+
skin 922 joint19 1.000000
|
| 982 |
+
skin 923 joint19 1.000000
|
| 983 |
+
skin 924 joint20 1.000000
|
| 984 |
+
skin 925 joint20 1.000000
|
| 985 |
+
skin 926 joint20 1.000000
|
| 986 |
+
skin 927 joint20 1.000000
|
| 987 |
+
skin 928 joint20 1.000000
|
| 988 |
+
skin 929 joint8 1.000000
|
| 989 |
+
skin 930 joint8 1.000000
|
| 990 |
+
skin 931 joint7 0.356090 joint8 0.643911
|
| 991 |
+
skin 932 joint6 0.560591 joint7 0.439409
|
| 992 |
+
skin 933 joint9 1.000000
|
| 993 |
+
skin 934 joint9 1.000000
|
| 994 |
+
skin 935 joint9 1.000000
|
| 995 |
+
skin 936 joint9 1.000000
|
| 996 |
+
skin 937 joint9 1.000000
|
| 997 |
+
skin 938 joint9 1.000000
|
| 998 |
+
skin 939 joint9 1.000000
|
| 999 |
+
skin 940 joint9 1.000000
|
| 1000 |
+
skin 941 joint9 1.000000
|
| 1001 |
+
skin 942 joint9 1.000000
|
| 1002 |
+
skin 943 joint2 0.690712 joint9 0.309288
|
| 1003 |
+
skin 944 joint2 0.208580 joint9 0.218358 joint10 0.573062
|
| 1004 |
+
skin 945 joint2 0.208580 joint9 0.218358 joint10 0.573062
|
| 1005 |
+
skin 946 joint2 0.609748 joint10 0.390252
|
| 1006 |
+
skin 947 joint2 1.000000
|
| 1007 |
+
skin 948 joint2 0.694080 joint9 0.305920
|
| 1008 |
+
skin 949 joint2 0.694080 joint9 0.305920
|
| 1009 |
+
skin 950 joint2 1.000000
|
| 1010 |
+
skin 951 joint2 0.723693 joint10 0.276307
|
| 1011 |
+
skin 952 joint2 0.690712 joint9 0.309288
|
| 1012 |
+
skin 953 joint1 0.327214 joint2 0.672786
|
| 1013 |
+
skin 954 joint1 0.343899 joint2 0.656101
|
| 1014 |
+
skin 955 joint1 0.343899 joint2 0.656101
|
| 1015 |
+
skin 956 joint2 1.000000
|
| 1016 |
+
skin 957 joint0 1.000000
|
| 1017 |
+
skin 958 joint0 1.000000
|
| 1018 |
+
skin 959 joint1 0.358279 joint2 0.641721
|
| 1019 |
+
skin 960 joint2 1.000000
|
| 1020 |
+
skin 961 joint0 1.000000
|
| 1021 |
+
skin 962 joint1 0.373054 joint2 0.626946
|
| 1022 |
+
skin 963 joint1 1.000000
|
| 1023 |
+
skin 964 joint1 1.000000
|
| 1024 |
+
skin 965 joint1 1.000000
|
| 1025 |
+
skin 966 joint1 1.000000
|
| 1026 |
+
skin 967 joint1 0.523196 joint2 0.476804
|
| 1027 |
+
skin 968 joint1 1.000000
|
| 1028 |
+
skin 969 joint1 1.000000
|
| 1029 |
+
skin 970 joint1 0.303925 joint2 0.696075
|
| 1030 |
+
skin 971 joint1 1.000000
|
| 1031 |
+
skin 972 joint1 1.000000
|
| 1032 |
+
skin 973 joint0 1.000000
|
| 1033 |
+
skin 974 joint0 1.000000
|
| 1034 |
+
skin 975 joint0 1.000000
|
| 1035 |
+
skin 976 joint0 1.000000
|
| 1036 |
+
skin 977 joint0 1.000000
|
| 1037 |
+
skin 978 joint0 1.000000
|
| 1038 |
+
skin 979 joint0 1.000000
|
| 1039 |
+
skin 980 joint0 1.000000
|
| 1040 |
+
skin 981 joint1 0.303925 joint2 0.696075
|
| 1041 |
+
skin 982 joint1 1.000000
|
| 1042 |
+
skin 983 joint0 1.000000
|
| 1043 |
+
skin 984 joint2 0.537824 joint9 0.462176
|
| 1044 |
+
skin 985 joint9 1.000000
|
| 1045 |
+
skin 986 joint9 1.000000
|
| 1046 |
+
skin 987 joint9 1.000000
|
| 1047 |
+
skin 988 joint10 0.478152 joint11 0.288492 joint12 0.233357
|
| 1048 |
+
skin 989 joint10 0.478152 joint11 0.288492 joint12 0.233357
|
| 1049 |
+
skin 990 joint10 0.205166 joint11 0.449742 joint12 0.345092
|
| 1050 |
+
skin 991 joint12 1.000000
|
| 1051 |
+
skin 992 joint10 0.478152 joint11 0.288492 joint12 0.233357
|
| 1052 |
+
skin 993 joint12 1.000000
|
| 1053 |
+
skin 994 joint10 0.267198 joint11 0.441405 joint12 0.291397
|
| 1054 |
+
skin 995 joint10 1.000000
|
| 1055 |
+
skin 996 joint25 1.000000
|
| 1056 |
+
skin 997 joint25 1.000000
|
| 1057 |
+
skin 998 joint25 1.000000
|
| 1058 |
+
skin 999 joint25 1.000000
|
| 1059 |
+
skin 1000 joint25 1.000000
|
| 1060 |
+
skin 1001 joint25 1.000000
|
| 1061 |
+
skin 1002 joint25 1.000000
|
| 1062 |
+
skin 1003 joint25 1.000000
|
| 1063 |
+
skin 1004 joint25 1.000000
|
| 1064 |
+
skin 1005 joint25 1.000000
|
| 1065 |
+
skin 1006 joint25 1.000000
|
| 1066 |
+
skin 1007 joint25 1.000000
|
| 1067 |
+
skin 1008 joint25 1.000000
|
| 1068 |
+
skin 1009 joint25 1.000000
|
| 1069 |
+
skin 1010 joint9 0.306658 joint25 0.693342
|
| 1070 |
+
skin 1011 joint25 1.000000
|
| 1071 |
+
skin 1012 joint25 1.000000
|
| 1072 |
+
skin 1013 joint25 1.000000
|
| 1073 |
+
skin 1014 joint25 1.000000
|
| 1074 |
+
skin 1015 joint25 1.000000
|
| 1075 |
+
skin 1016 joint25 1.000000
|
| 1076 |
+
skin 1017 joint25 1.000000
|
| 1077 |
+
skin 1018 joint25 1.000000
|
| 1078 |
+
skin 1019 joint25 1.000000
|
| 1079 |
+
skin 1020 joint25 1.000000
|
| 1080 |
+
skin 1021 joint25 1.000000
|
| 1081 |
+
skin 1022 joint25 1.000000
|
| 1082 |
+
skin 1023 joint25 1.000000
|
| 1083 |
+
skin 1024 joint25 1.000000
|
| 1084 |
+
skin 1025 joint25 1.000000
|
| 1085 |
+
skin 1026 joint25 1.000000
|
| 1086 |
+
skin 1027 joint25 1.000000
|
| 1087 |
+
skin 1028 joint25 1.000000
|
| 1088 |
+
skin 1029 joint25 1.000000
|
| 1089 |
+
skin 1030 joint25 1.000000
|
| 1090 |
+
skin 1031 joint25 1.000000
|
| 1091 |
+
skin 1032 joint25 1.000000
|
| 1092 |
+
skin 1033 joint25 1.000000
|
| 1093 |
+
skin 1034 joint25 1.000000
|
| 1094 |
+
skin 1035 joint25 1.000000
|
| 1095 |
+
skin 1036 joint25 1.000000
|
| 1096 |
+
skin 1037 joint25 1.000000
|
| 1097 |
+
skin 1038 joint25 1.000000
|
| 1098 |
+
skin 1039 joint25 1.000000
|
| 1099 |
+
skin 1040 joint25 1.000000
|
| 1100 |
+
skin 1041 joint25 1.000000
|
| 1101 |
+
skin 1042 joint25 1.000000
|
| 1102 |
+
skin 1043 joint25 1.000000
|
| 1103 |
+
skin 1044 joint25 1.000000
|
| 1104 |
+
skin 1045 joint25 1.000000
|
| 1105 |
+
skin 1046 joint25 1.000000
|
| 1106 |
+
skin 1047 joint25 1.000000
|
| 1107 |
+
skin 1048 joint25 1.000000
|
| 1108 |
+
skin 1049 joint25 1.000000
|
| 1109 |
+
skin 1050 joint25 1.000000
|
| 1110 |
+
skin 1051 joint25 1.000000
|
| 1111 |
+
skin 1052 joint25 1.000000
|
| 1112 |
+
skin 1053 joint25 1.000000
|
| 1113 |
+
skin 1054 joint25 1.000000
|
| 1114 |
+
skin 1055 joint25 1.000000
|
| 1115 |
+
skin 1056 joint25 1.000000
|
| 1116 |
+
skin 1057 joint25 1.000000
|
| 1117 |
+
skin 1058 joint25 1.000000
|
| 1118 |
+
skin 1059 joint25 1.000000
|
| 1119 |
+
skin 1060 joint25 1.000000
|
| 1120 |
+
skin 1061 joint25 1.000000
|
| 1121 |
+
skin 1062 joint25 1.000000
|
| 1122 |
+
skin 1063 joint25 1.000000
|
| 1123 |
+
skin 1064 joint25 1.000000
|
| 1124 |
+
skin 1065 joint25 1.000000
|
| 1125 |
+
skin 1066 joint25 1.000000
|
| 1126 |
+
skin 1067 joint25 1.000000
|
| 1127 |
+
skin 1068 joint25 1.000000
|
| 1128 |
+
skin 1069 joint25 1.000000
|
| 1129 |
+
skin 1070 joint25 1.000000
|
| 1130 |
+
skin 1071 joint3 1.000000
|
| 1131 |
+
skin 1072 joint3 1.000000
|
| 1132 |
+
skin 1073 joint3 1.000000
|
| 1133 |
+
skin 1074 joint3 1.000000
|
| 1134 |
+
skin 1075 joint3 1.000000
|
| 1135 |
+
skin 1076 joint3 1.000000
|
| 1136 |
+
skin 1077 joint3 1.000000
|
| 1137 |
+
skin 1078 joint3 1.000000
|
| 1138 |
+
skin 1079 joint3 1.000000
|
| 1139 |
+
skin 1080 joint3 1.000000
|
| 1140 |
+
skin 1081 joint3 1.000000
|
| 1141 |
+
skin 1082 joint3 1.000000
|
| 1142 |
+
skin 1083 joint3 1.000000
|
| 1143 |
+
skin 1084 joint3 1.000000
|
| 1144 |
+
skin 1085 joint3 0.665906 joint9 0.334094
|
| 1145 |
+
skin 1086 joint3 0.332876 joint9 0.667124
|
| 1146 |
+
skin 1087 joint3 0.467223 joint9 0.532777
|
| 1147 |
+
skin 1088 joint3 1.000000
|
| 1148 |
+
skin 1089 joint3 1.000000
|
| 1149 |
+
skin 1090 joint3 1.000000
|
| 1150 |
+
skin 1091 joint3 1.000000
|
| 1151 |
+
skin 1092 joint3 1.000000
|
| 1152 |
+
skin 1093 joint3 1.000000
|
| 1153 |
+
skin 1094 joint3 1.000000
|
| 1154 |
+
skin 1095 joint3 1.000000
|
| 1155 |
+
skin 1096 joint3 0.332876 joint9 0.667124
|
| 1156 |
+
skin 1097 joint3 0.467223 joint9 0.532777
|
| 1157 |
+
skin 1098 joint3 1.000000
|
| 1158 |
+
skin 1099 joint3 1.000000
|
| 1159 |
+
skin 1100 joint3 1.000000
|
| 1160 |
+
skin 1101 joint3 1.000000
|
| 1161 |
+
skin 1102 joint3 1.000000
|
| 1162 |
+
skin 1103 joint3 1.000000
|
| 1163 |
+
skin 1104 joint3 1.000000
|
| 1164 |
+
skin 1105 joint3 1.000000
|
| 1165 |
+
skin 1106 joint3 1.000000
|
| 1166 |
+
skin 1107 joint3 1.000000
|
| 1167 |
+
skin 1108 joint3 1.000000
|
| 1168 |
+
skin 1109 joint3 1.000000
|
| 1169 |
+
skin 1110 joint3 1.000000
|
| 1170 |
+
skin 1111 joint3 1.000000
|
| 1171 |
+
skin 1112 joint3 1.000000
|
| 1172 |
+
skin 1113 joint3 1.000000
|
| 1173 |
+
skin 1114 joint3 1.000000
|
| 1174 |
+
skin 1115 joint3 1.000000
|
| 1175 |
+
skin 1116 joint3 1.000000
|
| 1176 |
+
skin 1117 joint3 1.000000
|
| 1177 |
+
skin 1118 joint3 1.000000
|
| 1178 |
+
skin 1119 joint3 1.000000
|
| 1179 |
+
skin 1120 joint3 1.000000
|
| 1180 |
+
skin 1121 joint3 1.000000
|
| 1181 |
+
skin 1122 joint3 1.000000
|
| 1182 |
+
skin 1123 joint3 1.000000
|
| 1183 |
+
skin 1124 joint3 1.000000
|
| 1184 |
+
skin 1125 joint3 1.000000
|
| 1185 |
+
skin 1126 joint3 1.000000
|
| 1186 |
+
skin 1127 joint3 1.000000
|
| 1187 |
+
skin 1128 joint3 1.000000
|
| 1188 |
+
skin 1129 joint3 1.000000
|
| 1189 |
+
skin 1130 joint3 1.000000
|
| 1190 |
+
skin 1131 joint3 1.000000
|
| 1191 |
+
skin 1132 joint3 1.000000
|
| 1192 |
+
skin 1133 joint3 1.000000
|
| 1193 |
+
skin 1134 joint3 1.000000
|
| 1194 |
+
skin 1135 joint3 1.000000
|
| 1195 |
+
skin 1136 joint3 1.000000
|
| 1196 |
+
skin 1137 joint3 1.000000
|
| 1197 |
+
skin 1138 joint3 1.000000
|
| 1198 |
+
skin 1139 joint3 1.000000
|
| 1199 |
+
skin 1140 joint3 1.000000
|
| 1200 |
+
skin 1141 joint3 1.000000
|
| 1201 |
+
skin 1142 joint3 1.000000
|
| 1202 |
+
skin 1143 joint3 1.000000
|
| 1203 |
+
skin 1144 joint3 1.000000
|
| 1204 |
+
skin 1145 joint3 1.000000
|
animation/model.py
ADDED
|
@@ -0,0 +1,199 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
|
| 2 |
+
#
|
| 3 |
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
| 4 |
+
# you may not use this file except in compliance with the License.
|
| 5 |
+
# You may obtain a copy of the License at
|
| 6 |
+
#
|
| 7 |
+
# http://www.apache.org/licenses/LICENSE-2.0
|
| 8 |
+
#
|
| 9 |
+
# Unless required by applicable law or agreed to in writing, software
|
| 10 |
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
| 11 |
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| 12 |
+
# See the License for the specific language governing permissions and
|
| 13 |
+
# limitations under the License.
|
| 14 |
+
|
| 15 |
+
import torch
|
| 16 |
+
from typing import List, Optional, Tuple, Union
|
| 17 |
+
from collections import deque
|
| 18 |
+
from pytorch3d.structures import Meshes, join_meshes_as_scene
|
| 19 |
+
from pytorch3d.renderer import TexturesVertex, TexturesUV
|
| 20 |
+
|
| 21 |
+
from utils.quat_utils import quat_to_transform_matrix, quat_multiply, quat_rotate_vector
|
| 22 |
+
|
| 23 |
+
class RiggingModel:
|
| 24 |
+
"""
|
| 25 |
+
A 3D rigged model supporting skeletal animation.
|
| 26 |
+
|
| 27 |
+
Handles mesh geometry, skeletal hierarchy, skinning weights, and
|
| 28 |
+
linear blend skinning (LBS) deformation.
|
| 29 |
+
"""
|
| 30 |
+
def __init__(self, device = "cuda:0"):
|
| 31 |
+
self.device = device
|
| 32 |
+
# Mesh data
|
| 33 |
+
self.vertices: List[torch.Tensor] = []
|
| 34 |
+
self.faces: List[torch.Tensor] = []
|
| 35 |
+
self.textures: List[Union[TexturesVertex, TexturesUV]] = []
|
| 36 |
+
|
| 37 |
+
# Skeletal data
|
| 38 |
+
self.bones: Optional[torch.Tensor] = None # (N, 2) [parent, child] pairs
|
| 39 |
+
self.parent_indices: Optional[torch.Tensor] = None # (J,) parent index for each joint
|
| 40 |
+
self.root_index: Optional[int] = None # Root joint index
|
| 41 |
+
self.joints_rest: Optional[torch.Tensor] = None # (J, 3) rest pose positions
|
| 42 |
+
self.skin_weights: List[torch.Tensor] = [] # List of (V_i, J) skinning weights
|
| 43 |
+
|
| 44 |
+
# Fixed local positions
|
| 45 |
+
self.rest_local_positions: Optional[torch.Tensor] = None # (J, 3)
|
| 46 |
+
|
| 47 |
+
# Computed data
|
| 48 |
+
self.bind_matrices_inv: Optional[torch.Tensor] = None # (J, 4, 4) inverse bind matrices
|
| 49 |
+
self.deformed_vertices: Optional[List[torch.Tensor]] = None # List of (T, V_i, 3)
|
| 50 |
+
self.joint_positions: Optional[torch.Tensor] = None # (T, J, 3) current joint positions
|
| 51 |
+
|
| 52 |
+
# Validation flags
|
| 53 |
+
self._bind_matrices_initialized = False
|
| 54 |
+
|
| 55 |
+
def initialize_bind_matrices(self, rest_local_pos):
|
| 56 |
+
"""Initialize bind matrices and store rest local positions."""
|
| 57 |
+
self.rest_local_positions = rest_local_pos.to(self.device)
|
| 58 |
+
|
| 59 |
+
J = rest_local_pos.shape[0]
|
| 60 |
+
rest_global_quats, rest_global_pos = self.forward_kinematics(
|
| 61 |
+
torch.tensor([[[1.0, 0.0, 0.0, 0.0]] * J], device=self.device), # unit quaternion
|
| 62 |
+
self.parent_indices,
|
| 63 |
+
self.root_index
|
| 64 |
+
)
|
| 65 |
+
|
| 66 |
+
bind_matrices = quat_to_transform_matrix(rest_global_quats, rest_global_pos) # (1,J,4,4)
|
| 67 |
+
self.bind_matrices_inv = torch.inverse(bind_matrices.squeeze(0)) # (J,4,4)
|
| 68 |
+
|
| 69 |
+
self._bind_matrices_initialized = True
|
| 70 |
+
|
| 71 |
+
def animate(self, local_quaternions, root_quaternion = None, root_position = None):
|
| 72 |
+
"""
|
| 73 |
+
Animate the model using local joint transformations.
|
| 74 |
+
|
| 75 |
+
Args:
|
| 76 |
+
local_quaternions: (T, J, 4) local rotations per frame
|
| 77 |
+
root_quaternion: (T, 4) global root rotation
|
| 78 |
+
root_position: (T, 3) global root translation
|
| 79 |
+
"""
|
| 80 |
+
if not self._bind_matrices_initialized:
|
| 81 |
+
raise RuntimeError("Bind matrices not initialized. Call initialize_bind_matrices() first.")
|
| 82 |
+
|
| 83 |
+
# Forward kinematics
|
| 84 |
+
global_quats, global_pos = self.forward_kinematics(
|
| 85 |
+
local_quaternions,
|
| 86 |
+
self.parent_indices,
|
| 87 |
+
self.root_index
|
| 88 |
+
)
|
| 89 |
+
self.joint_positions = global_pos
|
| 90 |
+
|
| 91 |
+
joint_transforms = quat_to_transform_matrix(global_quats, global_pos) # (T, J, 4, 4)
|
| 92 |
+
|
| 93 |
+
# Apply global root transformation if provided
|
| 94 |
+
if root_quaternion is not None and root_position is not None:
|
| 95 |
+
root_transform = quat_to_transform_matrix(root_quaternion, root_position)
|
| 96 |
+
joint_transforms = root_transform[:, None] @ joint_transforms
|
| 97 |
+
self.joint_positions = joint_transforms[..., :3, 3]
|
| 98 |
+
|
| 99 |
+
# Linear blend skinning
|
| 100 |
+
self.deformed_vertices = []
|
| 101 |
+
for i, vertices in enumerate(self.vertices):
|
| 102 |
+
deformed = self._linear_blend_skinning(
|
| 103 |
+
vertices,
|
| 104 |
+
joint_transforms,
|
| 105 |
+
self.skin_weights[i],
|
| 106 |
+
self.bind_matrices_inv
|
| 107 |
+
)
|
| 108 |
+
self.deformed_vertices.append(deformed)
|
| 109 |
+
|
| 110 |
+
|
| 111 |
+
def get_mesh(self, frame_idx=None):
|
| 112 |
+
meshes = []
|
| 113 |
+
for i in range(len(self.vertices)):
|
| 114 |
+
mesh = Meshes(
|
| 115 |
+
verts=[self.vertices[i]] if frame_idx is None or self.deformed_vertices is None else [self.deformed_vertices[i][frame_idx]],
|
| 116 |
+
faces=[self.faces[i]],
|
| 117 |
+
textures=self.textures[i]
|
| 118 |
+
)
|
| 119 |
+
meshes.append(mesh)
|
| 120 |
+
return join_meshes_as_scene(meshes)
|
| 121 |
+
|
| 122 |
+
def _linear_blend_skinning(self, vertices, joint_transforms, skin_weights, bind_matrices_inv):
|
| 123 |
+
"""
|
| 124 |
+
Apply linear blend skinning to vertices.
|
| 125 |
+
|
| 126 |
+
Args:
|
| 127 |
+
vertices: (V, 3) vertex positions
|
| 128 |
+
joint_transforms: (T, J, 4, 4) joint transformation matrices
|
| 129 |
+
skin_weights: (V, J) per-vertex joint weights
|
| 130 |
+
bind_matrices_inv: (J, 4, 4) inverse bind matrices
|
| 131 |
+
|
| 132 |
+
Returns:
|
| 133 |
+
(T, V, 3) deformed vertices
|
| 134 |
+
"""
|
| 135 |
+
# Compute final transformation matrices
|
| 136 |
+
transforms = torch.matmul(joint_transforms, bind_matrices_inv) # (T, J, 4, 4)
|
| 137 |
+
|
| 138 |
+
# Weight and blend transformations
|
| 139 |
+
weighted_transforms = torch.einsum('vj,tjab->tvab', skin_weights, transforms) # (T, V, 4, 4)
|
| 140 |
+
|
| 141 |
+
# Apply to vertices
|
| 142 |
+
vertices_hom = torch.cat([vertices, torch.ones(vertices.shape[0], 1, device=vertices.device)], dim=-1)
|
| 143 |
+
deformed = torch.matmul(weighted_transforms, vertices_hom.unsqueeze(-1)).squeeze(-1)
|
| 144 |
+
|
| 145 |
+
return deformed[..., :3]
|
| 146 |
+
|
| 147 |
+
def forward_kinematics(self, local_quaternions, parent_indices, root_index = 0):
|
| 148 |
+
"""
|
| 149 |
+
Compute global joint transformations from local ones.
|
| 150 |
+
|
| 151 |
+
Args:
|
| 152 |
+
local_quaternions: (B, J, 4) local rotations
|
| 153 |
+
parent_indices: (J,) parent index for each joint
|
| 154 |
+
root_index: Root joint index
|
| 155 |
+
|
| 156 |
+
Returns:
|
| 157 |
+
Tuple of (global_quaternions, global_positions)
|
| 158 |
+
"""
|
| 159 |
+
B, J = local_quaternions.shape[:2]
|
| 160 |
+
local_positions = self.rest_local_positions.unsqueeze(0).expand(B, -1, -1)
|
| 161 |
+
|
| 162 |
+
|
| 163 |
+
# Initialize storage
|
| 164 |
+
global_quats = [None] * J
|
| 165 |
+
global_positions = [None] * J
|
| 166 |
+
|
| 167 |
+
# Build children mapping
|
| 168 |
+
children = [[] for _ in range(J)]
|
| 169 |
+
for child_idx in range(J):
|
| 170 |
+
parent_idx = parent_indices[child_idx]
|
| 171 |
+
if parent_idx >= 0:
|
| 172 |
+
children[parent_idx].append(child_idx)
|
| 173 |
+
|
| 174 |
+
# Breadth-first traversal from root
|
| 175 |
+
queue = deque([root_index])
|
| 176 |
+
visited = {root_index}
|
| 177 |
+
|
| 178 |
+
# Process root
|
| 179 |
+
global_quats[root_index] = local_quaternions[:, root_index]
|
| 180 |
+
global_positions[root_index] = local_positions[:, root_index]
|
| 181 |
+
|
| 182 |
+
while queue:
|
| 183 |
+
current = queue.popleft()
|
| 184 |
+
current_quat = global_quats[current]
|
| 185 |
+
current_pos = global_positions[current]
|
| 186 |
+
|
| 187 |
+
for child in children[current]:
|
| 188 |
+
if child not in visited:
|
| 189 |
+
visited.add(child)
|
| 190 |
+
queue.append(child)
|
| 191 |
+
|
| 192 |
+
# Transform child to global space
|
| 193 |
+
child_quat = quat_multiply(current_quat, local_quaternions[:, child])
|
| 194 |
+
child_pos = quat_rotate_vector(current_quat, local_positions[:, child]) + current_pos
|
| 195 |
+
|
| 196 |
+
global_quats[child] = child_quat
|
| 197 |
+
global_positions[child] = child_pos
|
| 198 |
+
|
| 199 |
+
return torch.stack(global_quats, dim=1), torch.stack(global_positions, dim=1)
|
animation/optimization.py
ADDED
|
@@ -0,0 +1,626 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
|
| 2 |
+
#
|
| 3 |
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
| 4 |
+
# you may not use this file except in compliance with the License.
|
| 5 |
+
# You may obtain a copy of the License at
|
| 6 |
+
#
|
| 7 |
+
# http://www.apache.org/licenses/LICENSE-2.0
|
| 8 |
+
#
|
| 9 |
+
# Unless required by applicable law or agreed to in writing, software
|
| 10 |
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
| 11 |
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| 12 |
+
# See the License for the specific language governing permissions and
|
| 13 |
+
# limitations under the License.
|
| 14 |
+
|
| 15 |
+
|
| 16 |
+
import os
|
| 17 |
+
import argparse
|
| 18 |
+
import json
|
| 19 |
+
import numpy as np
|
| 20 |
+
import logging
|
| 21 |
+
import glob
|
| 22 |
+
import torch
|
| 23 |
+
import torch.nn.functional as F
|
| 24 |
+
from PIL import Image
|
| 25 |
+
from tqdm import tqdm
|
| 26 |
+
|
| 27 |
+
from renderer import MeshRenderer3D
|
| 28 |
+
from model import RiggingModel
|
| 29 |
+
from utils.quat_utils import (
|
| 30 |
+
compute_rest_local_positions, quat_inverse, quat_log, quat_multiply
|
| 31 |
+
)
|
| 32 |
+
from utils.loss_utils import (
|
| 33 |
+
DepthModule, compute_reprojection_loss, geodesic_loss, root_motion_reg,
|
| 34 |
+
calculate_flow_loss, compute_depth_loss_normalized, joint_motion_coherence
|
| 35 |
+
)
|
| 36 |
+
from utils.data_loader import load_model_from_obj_and_rig, prepare_depth
|
| 37 |
+
from utils.save_utils import (
|
| 38 |
+
save_args, visualize_joints_on_mesh, save_final_video,
|
| 39 |
+
save_and_smooth_results, visualize_points_on_mesh, save_track_points
|
| 40 |
+
)
|
| 41 |
+
from utils.misc import warmup_then_decay
|
| 42 |
+
from third_partys.co_tracker.save_track import save_track
|
| 43 |
+
|
| 44 |
+
class AnimationOptimizer:
|
| 45 |
+
"""Main class for animation optimization with video guidance."""
|
| 46 |
+
|
| 47 |
+
def __init__(self, args, device = 'cuda:0'):
|
| 48 |
+
self.args = args
|
| 49 |
+
self.device = device
|
| 50 |
+
self.logger = self._setup_logger()
|
| 51 |
+
|
| 52 |
+
# Training parameters
|
| 53 |
+
self.reinit_patience_threshold = 20
|
| 54 |
+
self.loss_divergence_factor = 2.0
|
| 55 |
+
self.gradient_clip_norm = 1.0
|
| 56 |
+
|
| 57 |
+
# Loss weights
|
| 58 |
+
self.target_ratios = {
|
| 59 |
+
'rgb': args.rgb_wt,
|
| 60 |
+
'flow': args.flow_wt,
|
| 61 |
+
'proj_joint': args.proj_joint_wt,
|
| 62 |
+
'proj_vert': args.proj_vert_wt,
|
| 63 |
+
'depth': args.depth_wt,
|
| 64 |
+
'mask': args.mask_wt
|
| 65 |
+
}
|
| 66 |
+
self.loss_weights = {
|
| 67 |
+
'rgb': 1.0,
|
| 68 |
+
'flow': 1.0,
|
| 69 |
+
'proj_joint': 1.0,
|
| 70 |
+
'proj_vert': 1.0,
|
| 71 |
+
'depth': 1.0,
|
| 72 |
+
'mask': 1.0
|
| 73 |
+
}
|
| 74 |
+
|
| 75 |
+
def _setup_logger(self):
|
| 76 |
+
"""Set up logging configuration."""
|
| 77 |
+
logger = logging.getLogger("animation_optimizer")
|
| 78 |
+
logger.setLevel(logging.INFO)
|
| 79 |
+
|
| 80 |
+
if not logger.handlers:
|
| 81 |
+
formatter = logging.Formatter(
|
| 82 |
+
"%(asctime)s - %(name)s - %(levelname)s - %(message)s"
|
| 83 |
+
)
|
| 84 |
+
console_handler = logging.StreamHandler()
|
| 85 |
+
console_handler.setFormatter(formatter)
|
| 86 |
+
logger.addHandler(console_handler)
|
| 87 |
+
|
| 88 |
+
return logger
|
| 89 |
+
def _add_file_handler(self, log_path):
|
| 90 |
+
"""Add file handler to logger."""
|
| 91 |
+
file_handler = logging.FileHandler(log_path)
|
| 92 |
+
formatter = logging.Formatter("%(asctime)s %(message)s")
|
| 93 |
+
file_handler.setFormatter(formatter)
|
| 94 |
+
self.logger.addHandler(file_handler)
|
| 95 |
+
|
| 96 |
+
def _initialize_parameters(self, batch_size, num_joints):
|
| 97 |
+
"""Initialize optimization parameters."""
|
| 98 |
+
|
| 99 |
+
# Fixed first frame quaternions (identity)
|
| 100 |
+
fixed_quat_0 = torch.zeros((1, num_joints, 4), device=self.device)
|
| 101 |
+
fixed_quat_0[..., 0] = 1.0
|
| 102 |
+
|
| 103 |
+
# Initialize learnable quaternions for frames 1 to B-1
|
| 104 |
+
learn_quats_init = torch.zeros((batch_size - 1, num_joints, 4), device=self.device)
|
| 105 |
+
learn_quats_init[..., 0] = 1.0
|
| 106 |
+
quats_to_optimize = learn_quats_init.clone().detach().requires_grad_(True)
|
| 107 |
+
|
| 108 |
+
# Initialize global transformations
|
| 109 |
+
fixed_global_quat_0 = torch.zeros((1, 4), device=self.device)
|
| 110 |
+
fixed_global_quat_0[:, 0] = 1.0
|
| 111 |
+
fixed_global_trans_0 = torch.zeros((1, 3), device=self.device)
|
| 112 |
+
|
| 113 |
+
# Initialize learnable global transformations
|
| 114 |
+
global_quats_init = torch.zeros((batch_size - 1, 4), device=self.device)
|
| 115 |
+
global_quats_init[:, 0] = 1.0
|
| 116 |
+
global_trans_init = torch.zeros((batch_size - 1, 3), device=self.device)
|
| 117 |
+
|
| 118 |
+
global_quats = global_quats_init.clone().detach().requires_grad_(True)
|
| 119 |
+
global_trans = global_trans_init.clone().detach().requires_grad_(True)
|
| 120 |
+
|
| 121 |
+
return quats_to_optimize, global_quats, global_trans, fixed_quat_0, fixed_global_quat_0, fixed_global_trans_0
|
| 122 |
+
|
| 123 |
+
def _setup_optimizer_and_scheduler(self, quats_to_optimize, global_quats, global_trans, n_iters):
|
| 124 |
+
"""Set up optimizer and learning rate scheduler."""
|
| 125 |
+
|
| 126 |
+
base_lr = self.args.warm_lr
|
| 127 |
+
max_lr = self.args.lr
|
| 128 |
+
warmup_steps = 20
|
| 129 |
+
|
| 130 |
+
min_lr = self.args.min_lr
|
| 131 |
+
quat_lr = base_lr # *2
|
| 132 |
+
|
| 133 |
+
optimizer = torch.optim.AdamW([
|
| 134 |
+
{'params': quats_to_optimize, 'lr': quat_lr},
|
| 135 |
+
{'params': global_quats, 'lr': quat_lr},
|
| 136 |
+
{'params': global_trans, 'lr': base_lr}
|
| 137 |
+
])
|
| 138 |
+
|
| 139 |
+
scheduler = warmup_then_decay(
|
| 140 |
+
optimizer=optimizer,
|
| 141 |
+
total_steps=n_iters,
|
| 142 |
+
warmup_steps=warmup_steps,
|
| 143 |
+
max_lr=max_lr,
|
| 144 |
+
min_lr=min_lr,
|
| 145 |
+
base_lr=base_lr
|
| 146 |
+
)
|
| 147 |
+
|
| 148 |
+
return optimizer, scheduler
|
| 149 |
+
|
| 150 |
+
def _compute_smoothness_losses(self, quats_normed, all_global_quats_normed, all_global_trans, model):
|
| 151 |
+
"""Compute various smoothness losses."""
|
| 152 |
+
|
| 153 |
+
# Rotation smoothness loss using geodesic distance
|
| 154 |
+
theta = geodesic_loss(quats_normed[1:], quats_normed[:-1])
|
| 155 |
+
rot_smoothness_loss = (theta ** 2).mean()
|
| 156 |
+
|
| 157 |
+
# Second-order rotation smoothness (acceleration)
|
| 158 |
+
omega = quat_log(quat_multiply(quat_inverse(quats_normed[:-1]), quats_normed[1:]))
|
| 159 |
+
rot_acc = omega[1:] - omega[:-1]
|
| 160 |
+
rot_acc_smoothness_loss = rot_acc.pow(2).mean()
|
| 161 |
+
|
| 162 |
+
# Joint motion coherence loss (parent-child relative motion smoothness)
|
| 163 |
+
joint_coherence_loss = joint_motion_coherence(quats_normed, model.parent_indices)
|
| 164 |
+
|
| 165 |
+
# Root motion regularization
|
| 166 |
+
root_pos_smooth_loss, root_quat_smooth_loss = root_motion_reg(
|
| 167 |
+
all_global_quats_normed, all_global_trans
|
| 168 |
+
)
|
| 169 |
+
|
| 170 |
+
return rot_smoothness_loss, rot_acc_smoothness_loss, joint_coherence_loss, root_pos_smooth_loss + root_quat_smooth_loss
|
| 171 |
+
|
| 172 |
+
def pre_calibrate_loss_weights(self, loss_components, target_ratios=None):
|
| 173 |
+
""" calibrate loss weights """
|
| 174 |
+
loss_for_ratio = {name: loss.detach().clone() for name, loss in loss_components.items()}
|
| 175 |
+
|
| 176 |
+
rgb_loss = loss_for_ratio['rgb'].item()
|
| 177 |
+
|
| 178 |
+
for name, loss_val in loss_for_ratio.items():
|
| 179 |
+
if name == 'rgb':
|
| 180 |
+
continue
|
| 181 |
+
|
| 182 |
+
if loss_val > 1e-8:
|
| 183 |
+
scale_factor = rgb_loss / loss_val.item()
|
| 184 |
+
target_ratio = target_ratios.get(name, 1.0)
|
| 185 |
+
new_weight = self.loss_weights.get(name, 1.0) * scale_factor * target_ratio
|
| 186 |
+
|
| 187 |
+
self.loss_weights[name] = new_weight
|
| 188 |
+
|
| 189 |
+
def _compute_losses(
|
| 190 |
+
self,
|
| 191 |
+
model,
|
| 192 |
+
renderer,
|
| 193 |
+
images_batch,
|
| 194 |
+
tracked_joints_2d,
|
| 195 |
+
joint_vis_mask,
|
| 196 |
+
track_verts_2d,
|
| 197 |
+
vert_vis_mask,
|
| 198 |
+
sampled_vertex_indices,
|
| 199 |
+
track_indices,
|
| 200 |
+
flow_dirs,
|
| 201 |
+
depth_gt_raw,
|
| 202 |
+
mask,
|
| 203 |
+
out_dir,
|
| 204 |
+
iteration
|
| 205 |
+
):
|
| 206 |
+
"""Compute all losses for the optimization."""
|
| 207 |
+
|
| 208 |
+
batch_size = images_batch.shape[0]
|
| 209 |
+
meshes = [model.get_mesh(t) for t in range(batch_size)]
|
| 210 |
+
pred_images_all = renderer.render_batch(meshes)
|
| 211 |
+
|
| 212 |
+
# 2D projection losses
|
| 213 |
+
pred_joints_3d = model.joint_positions
|
| 214 |
+
proj_joint_loss = compute_reprojection_loss(
|
| 215 |
+
renderer, joint_vis_mask, pred_joints_3d,
|
| 216 |
+
tracked_joints_2d, self.args.img_size
|
| 217 |
+
)
|
| 218 |
+
|
| 219 |
+
pred_points_3d = model.deformed_vertices[0]
|
| 220 |
+
proj_vert_loss = compute_reprojection_loss(
|
| 221 |
+
renderer, vert_vis_mask,
|
| 222 |
+
pred_points_3d[:, sampled_vertex_indices],
|
| 223 |
+
track_verts_2d[:, track_indices],
|
| 224 |
+
self.args.img_size
|
| 225 |
+
)
|
| 226 |
+
|
| 227 |
+
# RGB loss
|
| 228 |
+
pred_rgb = pred_images_all[..., :3]
|
| 229 |
+
real_rgb = images_batch[..., :3]
|
| 230 |
+
diff_rgb_masked = (pred_rgb - real_rgb) * mask.unsqueeze(-1)
|
| 231 |
+
|
| 232 |
+
mse_rgb_num = (diff_rgb_masked ** 2).sum()
|
| 233 |
+
mse_rgb_den = mask.sum() * 3
|
| 234 |
+
rgb_loss = mse_rgb_num / mse_rgb_den.clamp_min(1e-8)
|
| 235 |
+
|
| 236 |
+
# Mask loss
|
| 237 |
+
silhouette_soft = renderer.render_silhouette_batch(meshes).squeeze()
|
| 238 |
+
mask_loss = F.binary_cross_entropy(silhouette_soft, mask)
|
| 239 |
+
|
| 240 |
+
# Depth losses
|
| 241 |
+
fragments = renderer.get_rasterization_fragments(meshes)
|
| 242 |
+
zbuf_depths = fragments.zbuf[..., 0]
|
| 243 |
+
depth_loss = compute_depth_loss_normalized(depth_gt_raw, zbuf_depths, mask)
|
| 244 |
+
|
| 245 |
+
# Flow losses
|
| 246 |
+
flow_loss = calculate_flow_loss(flow_dirs, self.device, mask, renderer, model)
|
| 247 |
+
|
| 248 |
+
loss_components = {
|
| 249 |
+
'rgb': rgb_loss,
|
| 250 |
+
'proj_joint': proj_joint_loss,
|
| 251 |
+
'proj_vert': proj_vert_loss,
|
| 252 |
+
'depth': depth_loss,
|
| 253 |
+
'flow': flow_loss,
|
| 254 |
+
'mask': mask_loss
|
| 255 |
+
}
|
| 256 |
+
|
| 257 |
+
return loss_components
|
| 258 |
+
|
| 259 |
+
def optimization(
|
| 260 |
+
self,
|
| 261 |
+
images_batch,
|
| 262 |
+
model,
|
| 263 |
+
renderer,
|
| 264 |
+
tracked_joints_2d,
|
| 265 |
+
joint_vis_mask,
|
| 266 |
+
track_verts_2d,
|
| 267 |
+
vert_vis_mask,
|
| 268 |
+
sampled_vertex_indices,
|
| 269 |
+
track_indices,
|
| 270 |
+
flow_dirs,
|
| 271 |
+
n_iters,
|
| 272 |
+
out_dir):
|
| 273 |
+
"""
|
| 274 |
+
Optimize animation parameters with fixed first frame.
|
| 275 |
+
"""
|
| 276 |
+
torch.autograd.set_detect_anomaly(True)
|
| 277 |
+
|
| 278 |
+
batch_size, _, _, _ = images_batch.shape
|
| 279 |
+
num_joints = model.joints_rest.shape[0]
|
| 280 |
+
|
| 281 |
+
# Setup output directory and logging
|
| 282 |
+
os.makedirs(out_dir, exist_ok=True)
|
| 283 |
+
log_path = os.path.join(out_dir, "optimization.log")
|
| 284 |
+
self._add_file_handler(log_path)
|
| 285 |
+
|
| 286 |
+
# Initialize parameters
|
| 287 |
+
(quats_to_optimize, global_quats, global_trans,
|
| 288 |
+
fixed_quat_0, fixed_global_quat_0, fixed_global_trans_0) = self._initialize_parameters(batch_size, num_joints)
|
| 289 |
+
|
| 290 |
+
# Setup rest positions and bind matrices
|
| 291 |
+
rest_local_pos = compute_rest_local_positions(model.joints_rest, model.parent_indices)
|
| 292 |
+
model.initialize_bind_matrices(rest_local_pos)
|
| 293 |
+
|
| 294 |
+
# Setup optimizer and scheduler
|
| 295 |
+
optimizer, scheduler = self._setup_optimizer_and_scheduler(
|
| 296 |
+
quats_to_optimize, global_quats, global_trans, n_iters
|
| 297 |
+
)
|
| 298 |
+
|
| 299 |
+
# Initialize depth module and flow weights
|
| 300 |
+
depth_module = DepthModule(
|
| 301 |
+
encoder='vitl',
|
| 302 |
+
device=self.device,
|
| 303 |
+
input_size=images_batch.shape[1],
|
| 304 |
+
fp32=False
|
| 305 |
+
)
|
| 306 |
+
|
| 307 |
+
# Prepare masks
|
| 308 |
+
real_rgb = images_batch[..., :3]
|
| 309 |
+
threshold = 0.95
|
| 310 |
+
with torch.no_grad():
|
| 311 |
+
background_mask = (real_rgb > threshold).all(dim=-1)
|
| 312 |
+
mask = (~background_mask).float()
|
| 313 |
+
|
| 314 |
+
depth_gt_raw = prepare_depth(
|
| 315 |
+
flow_dirs.replace('flow', 'depth'), real_rgb, self.device, depth_module
|
| 316 |
+
)
|
| 317 |
+
|
| 318 |
+
# Optimization tracking
|
| 319 |
+
best_loss = float('inf')
|
| 320 |
+
patience = 0
|
| 321 |
+
best_params = None
|
| 322 |
+
|
| 323 |
+
pbar = tqdm(total=n_iters, desc="Optimizing animation")
|
| 324 |
+
|
| 325 |
+
for iteration in range(n_iters):
|
| 326 |
+
# Combine fixed and learnable parameters
|
| 327 |
+
quats_all = torch.cat([fixed_quat_0, quats_to_optimize], dim=0)
|
| 328 |
+
|
| 329 |
+
# Normalize quaternions
|
| 330 |
+
reshaped = quats_all.reshape(-1, 4)
|
| 331 |
+
norm = torch.norm(reshaped, dim=1, keepdim=True).clamp_min(1e-8)
|
| 332 |
+
quats_normed = (reshaped / norm).reshape(batch_size, num_joints, 4)
|
| 333 |
+
|
| 334 |
+
# Global transformations
|
| 335 |
+
all_global_quats = torch.cat([fixed_global_quat_0, global_quats], dim=0)
|
| 336 |
+
all_global_trans = torch.cat([fixed_global_trans_0, global_trans], dim=0)
|
| 337 |
+
all_global_quats_normed = all_global_quats / torch.norm(
|
| 338 |
+
all_global_quats, dim=-1, keepdim=True
|
| 339 |
+
).clamp_min(1e-8)
|
| 340 |
+
|
| 341 |
+
# Compute smoothness losses
|
| 342 |
+
(rot_smoothness_loss, rot_acc_smoothness_loss, joint_coherence_loss,
|
| 343 |
+
root_smooth_loss) = self._compute_smoothness_losses(
|
| 344 |
+
quats_normed, all_global_quats_normed, all_global_trans, model
|
| 345 |
+
)
|
| 346 |
+
|
| 347 |
+
# animate model
|
| 348 |
+
model.animate(quats_normed, all_global_quats_normed, all_global_trans)
|
| 349 |
+
|
| 350 |
+
# Verify first frame hasn't changed
|
| 351 |
+
verts0 = model.vertices[0]
|
| 352 |
+
de0 = model.deformed_vertices[0][0]
|
| 353 |
+
assert torch.allclose(de0, verts0, atol=1e-2), "First frame vertices have changed!"
|
| 354 |
+
|
| 355 |
+
# Compute all losses
|
| 356 |
+
loss_components = self._compute_losses(
|
| 357 |
+
model, renderer, images_batch, tracked_joints_2d, joint_vis_mask,
|
| 358 |
+
track_verts_2d, vert_vis_mask, sampled_vertex_indices, track_indices,
|
| 359 |
+
flow_dirs, depth_gt_raw, mask, out_dir, iteration
|
| 360 |
+
)
|
| 361 |
+
|
| 362 |
+
total_smoothness_loss = rot_smoothness_loss + rot_acc_smoothness_loss * 10
|
| 363 |
+
|
| 364 |
+
if iteration == 0:
|
| 365 |
+
self.pre_calibrate_loss_weights(loss_components, self.target_ratios)
|
| 366 |
+
|
| 367 |
+
total_loss = (
|
| 368 |
+
loss_components['rgb'] +
|
| 369 |
+
self.loss_weights['mask'] * loss_components['mask'] +
|
| 370 |
+
self.loss_weights['flow'] * loss_components['flow'] +
|
| 371 |
+
self.loss_weights['proj_joint'] * loss_components['proj_joint'] +
|
| 372 |
+
self.loss_weights['proj_vert'] * loss_components['proj_vert'] +
|
| 373 |
+
self.loss_weights['depth'] * loss_components['depth'] +
|
| 374 |
+
self.args.smooth_weight * total_smoothness_loss +
|
| 375 |
+
self.args.coherence_weight * joint_coherence_loss +
|
| 376 |
+
self.args.root_smooth_weight * root_smooth_loss
|
| 377 |
+
)
|
| 378 |
+
|
| 379 |
+
# Optimization step
|
| 380 |
+
optimizer.zero_grad()
|
| 381 |
+
total_loss.backward()
|
| 382 |
+
torch.nn.utils.clip_grad_norm_(
|
| 383 |
+
[quats_to_optimize, global_quats, global_trans],
|
| 384 |
+
max_norm=self.gradient_clip_norm
|
| 385 |
+
)
|
| 386 |
+
optimizer.step()
|
| 387 |
+
scheduler.step()
|
| 388 |
+
|
| 389 |
+
# Update progress bar and logging
|
| 390 |
+
loss_desc = (
|
| 391 |
+
f"Loss: {total_loss.item():.4f}, "
|
| 392 |
+
f"RGB: {loss_components['rgb'].item():.4f}, "
|
| 393 |
+
f"Mask: {self.loss_weights['mask'] * loss_components['mask'].item():.4f}, "
|
| 394 |
+
f"Flow: {self.loss_weights['flow'] * loss_components['flow'].item():.4f}, "
|
| 395 |
+
f"Proj_joint: {self.loss_weights['proj_joint'] * loss_components['proj_joint'].item():.4f}, "
|
| 396 |
+
f"Proj_vert: {self.loss_weights['proj_vert'] * loss_components['proj_vert'].item():.4f}, "
|
| 397 |
+
f"Depth: {self.loss_weights['depth'] * loss_components['depth'].item():.4f}, "
|
| 398 |
+
f"Smooth: {self.args.smooth_weight * total_smoothness_loss.item():.4f}, "
|
| 399 |
+
f"Joint smooth: {self.args.coherence_weight * joint_coherence_loss.item():.4f}, "
|
| 400 |
+
f"Root smooth: {self.args.root_smooth_weight * root_smooth_loss.item():.4f}"
|
| 401 |
+
)
|
| 402 |
+
pbar.set_description(loss_desc)
|
| 403 |
+
|
| 404 |
+
if iteration % 5 == 0:
|
| 405 |
+
self.logger.info(f"Iter {iteration}: {loss_desc}")
|
| 406 |
+
|
| 407 |
+
# Adaptive reinitialization
|
| 408 |
+
current_loss = total_loss.item()
|
| 409 |
+
if current_loss < best_loss:
|
| 410 |
+
best_loss = current_loss
|
| 411 |
+
best_params = {
|
| 412 |
+
'quats': quats_to_optimize.clone().detach(),
|
| 413 |
+
'global_quats': global_quats.clone().detach(),
|
| 414 |
+
'global_trans': global_trans.clone().detach()
|
| 415 |
+
}
|
| 416 |
+
patience = 0
|
| 417 |
+
elif (current_loss > best_loss * self.loss_divergence_factor or
|
| 418 |
+
patience > self.reinit_patience_threshold * 2):
|
| 419 |
+
# Reinitialize with best parameters
|
| 420 |
+
quats_to_optimize = best_params['quats'].clone().requires_grad_(True)
|
| 421 |
+
global_quats = best_params['global_quats'].clone().requires_grad_(True)
|
| 422 |
+
global_trans = best_params['global_trans'].clone().requires_grad_(True)
|
| 423 |
+
|
| 424 |
+
optimizer, scheduler = self._setup_optimizer_and_scheduler(
|
| 425 |
+
quats_to_optimize, global_quats, global_trans, n_iters
|
| 426 |
+
)
|
| 427 |
+
patience = 0
|
| 428 |
+
self.logger.info(f'Adaptive reset at iteration {iteration} with best loss: {best_loss:.6f}')
|
| 429 |
+
else:
|
| 430 |
+
patience += 1
|
| 431 |
+
|
| 432 |
+
pbar.update(1)
|
| 433 |
+
|
| 434 |
+
pbar.close()
|
| 435 |
+
|
| 436 |
+
# Prepare final results
|
| 437 |
+
quats_final = torch.cat([fixed_quat_0, best_params['quats']], dim=0)
|
| 438 |
+
|
| 439 |
+
# Final normalization
|
| 440 |
+
reshaped = quats_final.reshape(-1, 4)
|
| 441 |
+
norm = torch.norm(reshaped, dim=1, keepdim=True).clamp_min(1e-8)
|
| 442 |
+
quats_final = (reshaped / norm).reshape(batch_size, num_joints, 4)
|
| 443 |
+
|
| 444 |
+
global_quats_final = torch.cat([fixed_global_quat_0, best_params['global_quats']], dim=0)
|
| 445 |
+
global_trans_final = torch.cat([fixed_global_trans_0, best_params['global_trans']], dim=0)
|
| 446 |
+
global_quats_final = global_quats_final / torch.norm(
|
| 447 |
+
global_quats_final, dim=-1, keepdim=True
|
| 448 |
+
).clamp_min(1e-8)
|
| 449 |
+
|
| 450 |
+
return quats_final, global_quats_final, global_trans_final
|
| 451 |
+
|
| 452 |
+
def load_and_prepare_data(args):
|
| 453 |
+
"""Load and prepare all necessary data for optimization."""
|
| 454 |
+
|
| 455 |
+
# Define paths
|
| 456 |
+
base_path = f'{args.input_path}/{args.seq_name}'
|
| 457 |
+
mesh_path = f'{base_path}/objs/mesh.obj'
|
| 458 |
+
rig_path = f'{base_path}/objs/rig.txt'
|
| 459 |
+
img_path = f'{base_path}/imgs'
|
| 460 |
+
flow_dirs = f'{base_path}/flow'
|
| 461 |
+
|
| 462 |
+
# Load model
|
| 463 |
+
model = load_model_from_obj_and_rig(mesh_path, rig_path, device=args.device)
|
| 464 |
+
|
| 465 |
+
# Load images
|
| 466 |
+
img_files = sorted(glob.glob(os.path.join(img_path, "*.png")))
|
| 467 |
+
images = []
|
| 468 |
+
for f in img_files:
|
| 469 |
+
img = Image.open(f).convert("RGBA")
|
| 470 |
+
arr = np.array(img, dtype=np.float32) / 255.0
|
| 471 |
+
t = torch.from_numpy(arr).to(args.device)
|
| 472 |
+
images.append(t)
|
| 473 |
+
|
| 474 |
+
images_batch = torch.stack(images, dim=0)
|
| 475 |
+
|
| 476 |
+
return model, images_batch, flow_dirs, img_path
|
| 477 |
+
|
| 478 |
+
def setup_renderers(args):
|
| 479 |
+
"""Setup multiple renderers for different camera views."""
|
| 480 |
+
|
| 481 |
+
available_views = [
|
| 482 |
+
"front", "back", "left", "right",
|
| 483 |
+
"front_left", "front_right", "back_left", "back_right"
|
| 484 |
+
]
|
| 485 |
+
|
| 486 |
+
if args.main_renderer not in available_views:
|
| 487 |
+
raise ValueError(f"Main renderer '{args.main_renderer}' not found in available cameras: {available_views}")
|
| 488 |
+
|
| 489 |
+
main_cam_config = json.load(open(f"utils/cameras/{args.main_renderer}.json"))
|
| 490 |
+
main_renderer = MeshRenderer3D(args.device, image_size=args.img_size, cam_params=main_cam_config)
|
| 491 |
+
|
| 492 |
+
additional_views = [view.strip() for view in args.additional_renderers.split(',') if view.strip()]
|
| 493 |
+
if len(additional_views) > 3:
|
| 494 |
+
print(f"Warning: Only first 3 additional renderers will be used. Got: {additional_views}")
|
| 495 |
+
additional_views = additional_views[:3]
|
| 496 |
+
|
| 497 |
+
additional_renderers = {}
|
| 498 |
+
for view_name in additional_views:
|
| 499 |
+
if view_name in available_views and view_name != args.main_renderer:
|
| 500 |
+
cam_config = json.load(open(f"utils/cameras/{view_name}.json"))
|
| 501 |
+
renderer = MeshRenderer3D(args.device, image_size=args.img_size, cam_params=cam_config)
|
| 502 |
+
additional_renderers[f"{view_name}_renderer"] = renderer
|
| 503 |
+
elif view_name == args.main_renderer:
|
| 504 |
+
print(f"Warning: '{view_name}' is already the main renderer, skipping...")
|
| 505 |
+
elif view_name not in available_views:
|
| 506 |
+
print(f"Warning: Camera view '{view_name}' not found, skipping...")
|
| 507 |
+
|
| 508 |
+
return main_renderer, additional_renderers
|
| 509 |
+
|
| 510 |
+
def get_parser():
|
| 511 |
+
"""Create argument parser with all configuration options."""
|
| 512 |
+
|
| 513 |
+
parser = argparse.ArgumentParser(description="3D Rigging Optimization")
|
| 514 |
+
|
| 515 |
+
# Training parameters
|
| 516 |
+
training_group = parser.add_argument_group('Training')
|
| 517 |
+
training_group.add_argument("--iter", type=int, default=500, help="Number of training iterations")
|
| 518 |
+
training_group.add_argument("--img_size", type=int, default=512, help="Image resolution")
|
| 519 |
+
training_group.add_argument("--device", type=str, default="cuda:0", help="Device to use")
|
| 520 |
+
training_group.add_argument("--img_fps", type=int, default=15, help="Image frame rate")
|
| 521 |
+
training_group.add_argument('--main_renderer', type=str, default='front', help='Main renderer camera view (default: front)')
|
| 522 |
+
training_group.add_argument('--additional_renderers', type=str, default="back, right, left", help='Additional renderer views (max 3), comma-separated (e.g., "back,left,right"). ')
|
| 523 |
+
|
| 524 |
+
# Learning rates
|
| 525 |
+
lr_group = parser.add_argument_group('Learning Rates')
|
| 526 |
+
lr_group.add_argument("--lr", type=float, default=2e-3, help="Base learning rate")
|
| 527 |
+
lr_group.add_argument("--min_lr", type=float, default=1e-5, help="Minimum learning rate")
|
| 528 |
+
lr_group.add_argument("--warm_lr", type=float, default=1e-5, help="Warmup learning rate")
|
| 529 |
+
|
| 530 |
+
# Loss weights
|
| 531 |
+
loss_group = parser.add_argument_group('Loss Weights')
|
| 532 |
+
loss_group.add_argument("--smooth_weight", type=float, default=0.2)
|
| 533 |
+
loss_group.add_argument("--root_smooth_weight", type=float, default=1.0)
|
| 534 |
+
loss_group.add_argument("--coherence_weight", type=float, default=10)
|
| 535 |
+
loss_group.add_argument("--rgb_wt", type=float, default=1.0, help="RGB loss target ratio (relative importance)")
|
| 536 |
+
loss_group.add_argument("--mask_wt", type=float, default=1.0, help="Mask loss target ratio")
|
| 537 |
+
loss_group.add_argument("--proj_joint_wt", type=float, default=1.5, help="Joint projection loss target ratio")
|
| 538 |
+
loss_group.add_argument("--proj_vert_wt", type=float, default=3.0, help="Point projection loss target ratio")
|
| 539 |
+
loss_group.add_argument("--depth_wt", type=float, default=0.8, help="Depth loss target ratio")
|
| 540 |
+
loss_group.add_argument("--flow_wt", type=float, default=0.8, help="Flow loss target ratio")
|
| 541 |
+
|
| 542 |
+
# Data and output
|
| 543 |
+
data_group = parser.add_argument_group('Data and Output')
|
| 544 |
+
data_group.add_argument("--input_path", type=str, default="inputs")
|
| 545 |
+
data_group.add_argument("--save_path", type=str, default="results")
|
| 546 |
+
data_group.add_argument("--save_name", type=str, default="results")
|
| 547 |
+
data_group.add_argument("--seq_name", type=str, default=None)
|
| 548 |
+
|
| 549 |
+
# Flags
|
| 550 |
+
flag_group = parser.add_argument_group('Flags')
|
| 551 |
+
flag_group.add_argument('--gauss_filter', action='store_true', default=False)
|
| 552 |
+
return parser
|
| 553 |
+
|
| 554 |
+
def main():
|
| 555 |
+
parser = get_parser()
|
| 556 |
+
args = parser.parse_args()
|
| 557 |
+
|
| 558 |
+
# Setup output directory
|
| 559 |
+
out_dir = f'{args.save_path}/{args.seq_name}/{args.save_name}'
|
| 560 |
+
save_args(args, out_dir)
|
| 561 |
+
|
| 562 |
+
# Initialize optimizer
|
| 563 |
+
ani_optimizer = AnimationOptimizer(args, device=args.device)
|
| 564 |
+
|
| 565 |
+
# Setup renderers
|
| 566 |
+
renderer, additional_renderers = setup_renderers(args)
|
| 567 |
+
|
| 568 |
+
# Load and prepare data
|
| 569 |
+
model, images_batch, flow_dirs, img_path = load_and_prepare_data(args)
|
| 570 |
+
|
| 571 |
+
# Setup tracking
|
| 572 |
+
joint_vis_mask = visualize_joints_on_mesh(model, renderer, args.seq_name, out_dir=out_dir)
|
| 573 |
+
joint_vis_mask = torch.from_numpy(joint_vis_mask).float().to(args.device)
|
| 574 |
+
|
| 575 |
+
joint_project_2d = renderer.project_points(model.joints_rest)
|
| 576 |
+
|
| 577 |
+
# Setup track paths
|
| 578 |
+
track_2d_path = img_path.replace('imgs', 'track_2d_joints')
|
| 579 |
+
os.makedirs(track_2d_path, exist_ok=True)
|
| 580 |
+
|
| 581 |
+
# Load or generate tracks
|
| 582 |
+
if not os.listdir(track_2d_path):
|
| 583 |
+
print("Generating joint tracks")
|
| 584 |
+
tracked_joints_2d = save_track(args.seq_name, joint_project_2d, img_path, track_2d_path, out_dir)
|
| 585 |
+
else:
|
| 586 |
+
print("Loading existing joint tracks")
|
| 587 |
+
tracked_joints_2d = np.load(f'{track_2d_path}/pred_tracks.npy')
|
| 588 |
+
|
| 589 |
+
# Setup point tracking
|
| 590 |
+
vert_vis_mask = visualize_points_on_mesh(model, renderer, args.seq_name, out_dir=out_dir)
|
| 591 |
+
vert_vis_mask = torch.from_numpy(vert_vis_mask).float().to(args.device)
|
| 592 |
+
|
| 593 |
+
track_verts_2d, track_indices, sampled_vertex_indices = save_track_points(
|
| 594 |
+
vert_vis_mask, renderer, model, img_path, out_dir, args
|
| 595 |
+
)
|
| 596 |
+
vert_vis_mask = vert_vis_mask[sampled_vertex_indices]
|
| 597 |
+
|
| 598 |
+
# Run optimization
|
| 599 |
+
print(f"Starting optimization")
|
| 600 |
+
final_quats, root_quats, root_pos = ani_optimizer.optimization(
|
| 601 |
+
images_batch=images_batch,
|
| 602 |
+
model=model,
|
| 603 |
+
renderer=renderer,
|
| 604 |
+
tracked_joints_2d=tracked_joints_2d,
|
| 605 |
+
joint_vis_mask=joint_vis_mask,
|
| 606 |
+
track_verts_2d=track_verts_2d,
|
| 607 |
+
vert_vis_mask=vert_vis_mask,
|
| 608 |
+
sampled_vertex_indices=sampled_vertex_indices,
|
| 609 |
+
track_indices=track_indices,
|
| 610 |
+
flow_dirs=flow_dirs,
|
| 611 |
+
n_iters=args.iter,
|
| 612 |
+
out_dir=out_dir
|
| 613 |
+
)
|
| 614 |
+
|
| 615 |
+
# Save results
|
| 616 |
+
save_and_smooth_results(
|
| 617 |
+
args, model, renderer, final_quats, root_quats, root_pos,
|
| 618 |
+
out_dir, additional_renderers, fps=10
|
| 619 |
+
)
|
| 620 |
+
|
| 621 |
+
print("Optimization completed successfully")
|
| 622 |
+
save_final_video(args)
|
| 623 |
+
|
| 624 |
+
|
| 625 |
+
if __name__ == "__main__":
|
| 626 |
+
main()
|
animation/renderer.py
ADDED
|
@@ -0,0 +1,348 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
|
| 2 |
+
#
|
| 3 |
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
| 4 |
+
# you may not use this file except in compliance with the License.
|
| 5 |
+
# You may obtain a copy of the License at
|
| 6 |
+
#
|
| 7 |
+
# http://www.apache.org/licenses/LICENSE-2.0
|
| 8 |
+
#
|
| 9 |
+
# Unless required by applicable law or agreed to in writing, software
|
| 10 |
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
| 11 |
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| 12 |
+
# See the License for the specific language governing permissions and
|
| 13 |
+
# limitations under the License.
|
| 14 |
+
|
| 15 |
+
import numpy as np
|
| 16 |
+
import torch
|
| 17 |
+
import cv2
|
| 18 |
+
|
| 19 |
+
from pytorch3d.structures import join_meshes_as_scene, join_meshes_as_batch, Meshes
|
| 20 |
+
from pytorch3d.renderer import (
|
| 21 |
+
FoVPerspectiveCameras, look_at_view_transform,
|
| 22 |
+
RasterizationSettings, MeshRenderer, MeshRasterizer,
|
| 23 |
+
SoftPhongShader, PointLights, BlendParams, SoftSilhouetteShader
|
| 24 |
+
)
|
| 25 |
+
from utils.loss_utils import compute_visibility_mask_igl
|
| 26 |
+
|
| 27 |
+
def create_camera_from_blender_params(cam_params, device):
|
| 28 |
+
"""
|
| 29 |
+
Convert Blender camera parameters to PyTorch3D camera
|
| 30 |
+
|
| 31 |
+
Args:
|
| 32 |
+
cam_params (dict): Camera parameters from Blender JSON
|
| 33 |
+
device: Device to create camera on
|
| 34 |
+
|
| 35 |
+
Returns:
|
| 36 |
+
FoVPerspectiveCameras: Converted camera
|
| 37 |
+
"""
|
| 38 |
+
# Extract matrix world and convert to rotation and translation
|
| 39 |
+
matrix_world = torch.tensor(cam_params['matrix_world'], dtype=torch.float32)
|
| 40 |
+
|
| 41 |
+
# Extract field of view (use x_fov, assuming symmetric FOV)
|
| 42 |
+
fov = cam_params['x_fov'] * 180 / np.pi # Convert radians to degrees
|
| 43 |
+
|
| 44 |
+
rotation_matrix = torch.tensor([
|
| 45 |
+
[1, 0, 0, 0],
|
| 46 |
+
[0, 0, 1, 0],
|
| 47 |
+
[0, -1, 0, 0],
|
| 48 |
+
[0, 0, 0, 1]
|
| 49 |
+
], dtype=torch.float32)
|
| 50 |
+
|
| 51 |
+
# Apply transformations
|
| 52 |
+
adjusted_matrix = rotation_matrix @ matrix_world
|
| 53 |
+
world2cam_matrix_tensor = torch.linalg.inv(adjusted_matrix)
|
| 54 |
+
|
| 55 |
+
aligned_matrix = torch.tensor([
|
| 56 |
+
[-1.0, 0.0, 0.0, 0.0],
|
| 57 |
+
[0.0, 1.0, 0.0, 0.0],
|
| 58 |
+
[0.0, 0.0, -1.0, 0.0],
|
| 59 |
+
[0.0, 0.0, 0.0, 1.0]
|
| 60 |
+
], dtype=torch.float32, device=device)
|
| 61 |
+
world2cam_matrix = aligned_matrix @ world2cam_matrix_tensor.to(device)
|
| 62 |
+
cam2world_matrix = torch.linalg.inv(world2cam_matrix)
|
| 63 |
+
|
| 64 |
+
# Extract rotation and translation
|
| 65 |
+
R = cam2world_matrix[:3, :3]
|
| 66 |
+
T = torch.tensor([
|
| 67 |
+
world2cam_matrix[0, 3],
|
| 68 |
+
world2cam_matrix[1, 3],
|
| 69 |
+
world2cam_matrix[2, 3]
|
| 70 |
+
], device=device, dtype=torch.float32)
|
| 71 |
+
|
| 72 |
+
return FoVPerspectiveCameras(
|
| 73 |
+
device=device,
|
| 74 |
+
fov=fov,
|
| 75 |
+
R=R[None],
|
| 76 |
+
T=T[None],
|
| 77 |
+
znear=0.1,
|
| 78 |
+
zfar=100.0
|
| 79 |
+
)
|
| 80 |
+
|
| 81 |
+
class MeshRenderer3D:
|
| 82 |
+
"""
|
| 83 |
+
PyTorch3D mesh renderer with support for various rendering modes.
|
| 84 |
+
|
| 85 |
+
Features:
|
| 86 |
+
- Standard mesh rendering with Phong shading
|
| 87 |
+
- Silhouette rendering
|
| 88 |
+
- Multi-frame batch rendering
|
| 89 |
+
- Point projection with visibility computation
|
| 90 |
+
"""
|
| 91 |
+
def __init__(self, device, image_size=1024, cam_params=None, light_params=None, raster_params=None):
|
| 92 |
+
self.device = device
|
| 93 |
+
# Initialize camera
|
| 94 |
+
self.camera = self._setup_camera(cam_params)
|
| 95 |
+
|
| 96 |
+
# Initialize light
|
| 97 |
+
self.light = self._setup_light(light_params)
|
| 98 |
+
|
| 99 |
+
# Initialize rasterization settings
|
| 100 |
+
self.raster_settings = self._setup_raster_settings(raster_params, image_size)
|
| 101 |
+
self.camera.image_size = self.raster_settings.image_size
|
| 102 |
+
|
| 103 |
+
# Initialize renderers
|
| 104 |
+
self._setup_renderers()
|
| 105 |
+
|
| 106 |
+
def _setup_camera(self, cam_params):
|
| 107 |
+
"""Setup camera based on parameters."""
|
| 108 |
+
if cam_params is None:
|
| 109 |
+
# Default camera
|
| 110 |
+
R, T = look_at_view_transform(3.0, 30, 20, at=[[0.0, 1.0, 0.0]])
|
| 111 |
+
return FoVPerspectiveCameras(device=self.device, R=R, T=T)
|
| 112 |
+
|
| 113 |
+
# Check if Blender parameters
|
| 114 |
+
if "matrix_world" in cam_params and "x_fov" in cam_params:
|
| 115 |
+
return create_camera_from_blender_params(cam_params, self.device)
|
| 116 |
+
else:
|
| 117 |
+
raise ValueError("Need to provide blender parameters.")
|
| 118 |
+
|
| 119 |
+
def _setup_light(self, light_params):
|
| 120 |
+
"""Setup light source."""
|
| 121 |
+
if light_params is None:
|
| 122 |
+
return PointLights(device=self.device, location=[[0.0, 0.0, 3.0]])
|
| 123 |
+
|
| 124 |
+
location = [[
|
| 125 |
+
light_params.get('light_x', 0.0),
|
| 126 |
+
light_params.get('light_y', 0.0),
|
| 127 |
+
light_params.get('light_z', 3.0)
|
| 128 |
+
]]
|
| 129 |
+
return PointLights(device=self.device, location=location)
|
| 130 |
+
|
| 131 |
+
def _setup_raster_settings(self, raster_params, default_size):
|
| 132 |
+
"""Setup rasterization settings."""
|
| 133 |
+
if raster_params is None:
|
| 134 |
+
raster_params = {
|
| 135 |
+
"image_size": [default_size, default_size],
|
| 136 |
+
"blur_radius": 0.0,
|
| 137 |
+
"faces_per_pixel": 1,
|
| 138 |
+
"bin_size": 0,
|
| 139 |
+
"cull_backfaces": False
|
| 140 |
+
}
|
| 141 |
+
|
| 142 |
+
return RasterizationSettings(**raster_params)
|
| 143 |
+
|
| 144 |
+
def _setup_renderers(self) -> None:
|
| 145 |
+
"""Initialize main and silhouette renderers."""
|
| 146 |
+
rasterizer = MeshRasterizer(
|
| 147 |
+
cameras=self.camera,
|
| 148 |
+
raster_settings=self.raster_settings
|
| 149 |
+
)
|
| 150 |
+
|
| 151 |
+
# Main renderer with Phong shading
|
| 152 |
+
self.renderer = MeshRenderer(
|
| 153 |
+
rasterizer=rasterizer,
|
| 154 |
+
shader=SoftPhongShader(
|
| 155 |
+
device=self.device,
|
| 156 |
+
cameras=self.camera,
|
| 157 |
+
lights=self.light
|
| 158 |
+
)
|
| 159 |
+
)
|
| 160 |
+
|
| 161 |
+
# Silhouette renderer
|
| 162 |
+
blend_params = BlendParams(
|
| 163 |
+
sigma=1e-4,
|
| 164 |
+
gamma=1e-4,
|
| 165 |
+
background_color=(0.0, 0.0, 0.0)
|
| 166 |
+
)
|
| 167 |
+
|
| 168 |
+
self.silhouette_renderer = MeshRenderer(
|
| 169 |
+
rasterizer=rasterizer,
|
| 170 |
+
shader=SoftSilhouetteShader(blend_params=blend_params)
|
| 171 |
+
)
|
| 172 |
+
|
| 173 |
+
def render(self, meshes):
|
| 174 |
+
"""
|
| 175 |
+
Render meshes with Phong shading.
|
| 176 |
+
|
| 177 |
+
Args:
|
| 178 |
+
meshes: Single mesh or list of meshes
|
| 179 |
+
|
| 180 |
+
Returns:
|
| 181 |
+
Rendered images tensor of shape (1, H, W, C)
|
| 182 |
+
"""
|
| 183 |
+
scene_mesh = self._prepare_scene_mesh(meshes)
|
| 184 |
+
return self.renderer(scene_mesh)
|
| 185 |
+
|
| 186 |
+
def render_batch(self, mesh_list):
|
| 187 |
+
"""
|
| 188 |
+
Render multiple frames as a batch.
|
| 189 |
+
|
| 190 |
+
Args:
|
| 191 |
+
mesh_list: List of mesh lists (one per frame)
|
| 192 |
+
|
| 193 |
+
Returns:
|
| 194 |
+
Batch of rendered images of shape (B, H, W, C)
|
| 195 |
+
"""
|
| 196 |
+
assert isinstance(mesh_list, list)
|
| 197 |
+
|
| 198 |
+
batch_meshes = []
|
| 199 |
+
for frame_meshes in mesh_list:
|
| 200 |
+
scene_mesh = self._prepare_scene_mesh(frame_meshes)
|
| 201 |
+
batch_meshes.append(scene_mesh)
|
| 202 |
+
|
| 203 |
+
batch_mesh = join_meshes_as_batch(batch_meshes)
|
| 204 |
+
return self.renderer(batch_mesh)
|
| 205 |
+
|
| 206 |
+
def get_rasterization_fragments(self, mesh_list):
|
| 207 |
+
"""
|
| 208 |
+
Get rasterization fragments for batch of meshes.
|
| 209 |
+
|
| 210 |
+
Args:
|
| 211 |
+
mesh_list: List of mesh lists (one per frame)
|
| 212 |
+
|
| 213 |
+
Returns:
|
| 214 |
+
Rasterization fragments
|
| 215 |
+
"""
|
| 216 |
+
assert isinstance(mesh_list, list)
|
| 217 |
+
|
| 218 |
+
batch_meshes = []
|
| 219 |
+
for frame_meshes in mesh_list:
|
| 220 |
+
scene_mesh = self._prepare_scene_mesh(frame_meshes)
|
| 221 |
+
batch_meshes.append(scene_mesh)
|
| 222 |
+
|
| 223 |
+
batch_mesh = join_meshes_as_batch(batch_meshes)
|
| 224 |
+
return self.renderer.rasterizer(batch_mesh)
|
| 225 |
+
|
| 226 |
+
def render_silhouette_batch(self, mesh_list):
|
| 227 |
+
"""
|
| 228 |
+
Render silhouette masks for multiple frames.
|
| 229 |
+
|
| 230 |
+
Args:
|
| 231 |
+
mesh_list: List of mesh lists (one per frame)
|
| 232 |
+
|
| 233 |
+
Returns:
|
| 234 |
+
Batch of silhouette masks of shape (B, H, W, 1)
|
| 235 |
+
"""
|
| 236 |
+
assert isinstance(mesh_list, list)
|
| 237 |
+
|
| 238 |
+
batch_meshes = []
|
| 239 |
+
for frame_meshes in mesh_list:
|
| 240 |
+
scene_mesh = self._prepare_scene_mesh(frame_meshes)
|
| 241 |
+
batch_meshes.append(scene_mesh)
|
| 242 |
+
|
| 243 |
+
batch_mesh = join_meshes_as_batch(batch_meshes)
|
| 244 |
+
silhouette = self.silhouette_renderer(batch_mesh)
|
| 245 |
+
return silhouette[..., 3:] # Return alpha channel
|
| 246 |
+
|
| 247 |
+
def tensor_to_image(self, tensor):
|
| 248 |
+
"""
|
| 249 |
+
Convert rendered tensor to numpy image array.
|
| 250 |
+
|
| 251 |
+
Args:
|
| 252 |
+
tensor: Rendered tensor of shape (B, H, W, C)
|
| 253 |
+
|
| 254 |
+
Returns:
|
| 255 |
+
Numpy array of shape (H, W, 3) with values in [0, 255]
|
| 256 |
+
"""
|
| 257 |
+
return (tensor[0, ..., :3].cpu().numpy() * 255).astype(np.uint8)
|
| 258 |
+
|
| 259 |
+
def project_points(self, points_3d):
|
| 260 |
+
"""
|
| 261 |
+
Project 3D joints/vertices to 2D image plane
|
| 262 |
+
|
| 263 |
+
Args:
|
| 264 |
+
points_3d: shape (N, 3) or (B, N, 3) tensor of 3D points
|
| 265 |
+
|
| 266 |
+
Returns:
|
| 267 |
+
points_2d: shape (N, 2) or (B, N, 2) tensor of 2D projected points
|
| 268 |
+
"""
|
| 269 |
+
if not torch.is_tensor(points_3d):
|
| 270 |
+
points_3d = torch.tensor(points_3d, device=self.device, dtype=torch.float32)
|
| 271 |
+
|
| 272 |
+
|
| 273 |
+
if len(points_3d.shape) == 2:
|
| 274 |
+
points_3d = points_3d.unsqueeze(0) # (1, N, 3)
|
| 275 |
+
|
| 276 |
+
# project points
|
| 277 |
+
projected = self.camera.transform_points_screen(points_3d, image_size=self.raster_settings.image_size)
|
| 278 |
+
|
| 279 |
+
if projected.shape[0] == 1:
|
| 280 |
+
projected_points = projected.squeeze(0)[:, :2]
|
| 281 |
+
else:
|
| 282 |
+
projected_points = projected[:, :, :2]
|
| 283 |
+
return projected_points
|
| 284 |
+
|
| 285 |
+
def render_with_points(self, meshes, points_3d, point_radius=3, for_vertices=False):
|
| 286 |
+
"""
|
| 287 |
+
render the mesh and visualize the joints/vertices on the image
|
| 288 |
+
|
| 289 |
+
Args:
|
| 290 |
+
meshes: mesh or list of meshes to be rendered
|
| 291 |
+
points_3d: shape (N, 3) tensor of 3D joints/vertices
|
| 292 |
+
point_radius: radius of the drawn points
|
| 293 |
+
for_vertices: if True, compute visibility for vertices, else for joints
|
| 294 |
+
|
| 295 |
+
Returns:
|
| 296 |
+
Image with joints/vertices drawn, visibility mask
|
| 297 |
+
"""
|
| 298 |
+
rendered_image = self.render(meshes)
|
| 299 |
+
|
| 300 |
+
# project 3D points to 2D
|
| 301 |
+
points_2d = self.project_points(points_3d)
|
| 302 |
+
|
| 303 |
+
image_np = rendered_image[0, ..., :3].cpu().numpy()
|
| 304 |
+
image_with_points = image_np.copy()
|
| 305 |
+
height, width = image_np.shape[:2]
|
| 306 |
+
|
| 307 |
+
ray_origins = self.camera.get_camera_center() # (B, 3)
|
| 308 |
+
ray_origins = np.tile(ray_origins.detach().cpu().numpy(), (points_3d.shape[0], 1))
|
| 309 |
+
|
| 310 |
+
verts = meshes.verts_packed().detach().cpu().numpy()
|
| 311 |
+
faces = meshes.faces_packed().detach().cpu().numpy()
|
| 312 |
+
|
| 313 |
+
ray_dirs = points_3d.detach().cpu().numpy() - ray_origins # calculate ray directions
|
| 314 |
+
distances = np.linalg.norm(ray_dirs, axis=1) # distances from camera to points
|
| 315 |
+
ray_dirs = (ray_dirs.T / distances).T # normalize to unit vectors
|
| 316 |
+
|
| 317 |
+
vis_mask = compute_visibility_mask_igl(ray_origins, ray_dirs, distances, verts, faces, distance_tolerance=1e-6, for_vertices=for_vertices)
|
| 318 |
+
|
| 319 |
+
# draw points
|
| 320 |
+
visible_color=(1, 0, 0) # visible points are red
|
| 321 |
+
invisible_color=(0, 0, 1) # invisible points are blue
|
| 322 |
+
for i, point in enumerate(points_2d):
|
| 323 |
+
x, y = int(point[0].item()), int(point[1].item())
|
| 324 |
+
|
| 325 |
+
if 0 <= x < width and 0 <= y < height:
|
| 326 |
+
point_color = visible_color if vis_mask[i] else invisible_color
|
| 327 |
+
cv2.circle(image_with_points, (x, y), point_radius, point_color, -1)
|
| 328 |
+
|
| 329 |
+
result = torch.from_numpy(image_with_points).to(self.device)
|
| 330 |
+
result = result.unsqueeze(0)
|
| 331 |
+
|
| 332 |
+
if rendered_image.shape[-1] == 4:
|
| 333 |
+
alpha = rendered_image[..., 3:]
|
| 334 |
+
result = torch.cat([result, alpha], dim=-1)
|
| 335 |
+
|
| 336 |
+
return result, vis_mask
|
| 337 |
+
|
| 338 |
+
def _prepare_scene_mesh(self, meshes):
|
| 339 |
+
"""Convert meshes to a single scene mesh."""
|
| 340 |
+
if isinstance(meshes, Meshes):
|
| 341 |
+
return meshes
|
| 342 |
+
elif isinstance(meshes, list):
|
| 343 |
+
return join_meshes_as_scene(meshes)
|
| 344 |
+
else:
|
| 345 |
+
raise ValueError("meshes must be Meshes object or list of Meshes")
|
| 346 |
+
|
| 347 |
+
|
| 348 |
+
|
animation/third_partys/.DS_Store
ADDED
|
Binary file (6.15 kB). View file
|
|
|
animation/utils/cameras/back.json
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
{"matrix_world": [[-1.0, -8.742277657347586e-08, -8.742277657347586e-08, 0.0], [-8.742277657347586e-08, 4.371138118131057e-08, 1.0, 2.0], [-8.74227694680485e-08, 1.0, -4.371138828673793e-08, 0.0], [0.0, 0.0, 0.0, 1.0]], "format_version": 6, "max_depth": 5.0, "bbox": [[-0.14632226526737213, -0.15228690207004547, -0.5013949275016785], [0.18149489164352417, 0.24675098061561584, 0.4873228073120117]], "origin": [0.0, 2.0, 0.0], "x_fov": 0.6911112070083618, "y_fov": 0.6911112070083618, "x": [-1.0, -8.742277657347586e-08, -8.74227694680485e-08], "y": [8.742277657347586e-08, -4.371138118131057e-08, -1.0], "z": [8.742277657347586e-08, -1.0, 4.371138828673793e-08]}
|
animation/utils/cameras/back_left.json
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"matrix_world": [
|
| 3 |
+
[
|
| 4 |
+
-0.7071067235853873,
|
| 5 |
+
-1.5015359289272112e-08,
|
| 6 |
+
-0.7071068387877032,
|
| 7 |
+
-1.4142136775754064
|
| 8 |
+
],
|
| 9 |
+
[
|
| 10 |
+
-0.7071068387877031,
|
| 11 |
+
-1.1886282763606815e-08,
|
| 12 |
+
0.7071067235853874,
|
| 13 |
+
1.4142134471707748
|
| 14 |
+
],
|
| 15 |
+
[
|
| 16 |
+
-1.9022333375140477e-08,
|
| 17 |
+
1.0,
|
| 18 |
+
-2.2125928034189e-09,
|
| 19 |
+
-4.4251856068378e-09
|
| 20 |
+
],
|
| 21 |
+
[
|
| 22 |
+
0.0,
|
| 23 |
+
0.0,
|
| 24 |
+
0.0,
|
| 25 |
+
1.0
|
| 26 |
+
]
|
| 27 |
+
],
|
| 28 |
+
"format_version": 6,
|
| 29 |
+
"max_depth": 5.0,
|
| 30 |
+
"bbox": [
|
| 31 |
+
[
|
| 32 |
+
-0.14632226526737213,
|
| 33 |
+
-0.15228690207004547,
|
| 34 |
+
-0.5013949275016785
|
| 35 |
+
],
|
| 36 |
+
[
|
| 37 |
+
0.18149489164352417,
|
| 38 |
+
0.24675098061561584,
|
| 39 |
+
0.4873228073120117
|
| 40 |
+
]
|
| 41 |
+
],
|
| 42 |
+
"origin": [
|
| 43 |
+
-1.0,
|
| 44 |
+
1.0,
|
| 45 |
+
0.0
|
| 46 |
+
],
|
| 47 |
+
"x_fov": 0.6911112070083618,
|
| 48 |
+
"y_fov": 0.6911112070083618,
|
| 49 |
+
"x": [
|
| 50 |
+
-0.7071067235853873,
|
| 51 |
+
-1.5015359289272112e-08,
|
| 52 |
+
-0.7071068387877032
|
| 53 |
+
],
|
| 54 |
+
"y": [
|
| 55 |
+
-0.7071068387877031,
|
| 56 |
+
-1.1886282763606815e-08,
|
| 57 |
+
0.7071067235853874
|
| 58 |
+
],
|
| 59 |
+
"z": [
|
| 60 |
+
-1.9022333375140477e-08,
|
| 61 |
+
1.0,
|
| 62 |
+
-2.2125928034189e-09
|
| 63 |
+
]
|
| 64 |
+
}
|
animation/utils/cameras/back_right.json
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"matrix_world": [
|
| 3 |
+
[
|
| 4 |
+
-0.7071067854026265,
|
| 5 |
+
-7.240741267677819e-08,
|
| 6 |
+
0.7071067769704649,
|
| 7 |
+
1.4142135539409297
|
| 8 |
+
],
|
| 9 |
+
[
|
| 10 |
+
0.7071067769704653,
|
| 11 |
+
2.4325415404202744e-08,
|
| 12 |
+
0.7071067854026294,
|
| 13 |
+
1.4142135708052588
|
| 14 |
+
],
|
| 15 |
+
[
|
| 16 |
+
-6.840043892397674e-08,
|
| 17 |
+
0.9999999999999971,
|
| 18 |
+
3.399910591950217e-08,
|
| 19 |
+
6.799821183900434e-08
|
| 20 |
+
],
|
| 21 |
+
[
|
| 22 |
+
0.0,
|
| 23 |
+
0.0,
|
| 24 |
+
0.0,
|
| 25 |
+
1.0
|
| 26 |
+
]
|
| 27 |
+
],
|
| 28 |
+
"format_version": 6,
|
| 29 |
+
"max_depth": 5.0,
|
| 30 |
+
"bbox": [
|
| 31 |
+
[
|
| 32 |
+
-0.14632226526737213,
|
| 33 |
+
-0.15228690207004547,
|
| 34 |
+
-0.5013949275016785
|
| 35 |
+
],
|
| 36 |
+
[
|
| 37 |
+
0.18149489164352417,
|
| 38 |
+
0.24675098061561584,
|
| 39 |
+
0.4873228073120117
|
| 40 |
+
]
|
| 41 |
+
],
|
| 42 |
+
"origin": [
|
| 43 |
+
1.0,
|
| 44 |
+
1.0,
|
| 45 |
+
0.0
|
| 46 |
+
],
|
| 47 |
+
"x_fov": 0.6911112070083618,
|
| 48 |
+
"y_fov": 0.6911112070083618,
|
| 49 |
+
"x": [
|
| 50 |
+
-0.7071067854026265,
|
| 51 |
+
-7.240741267677819e-08,
|
| 52 |
+
0.7071067769704649
|
| 53 |
+
],
|
| 54 |
+
"y": [
|
| 55 |
+
0.7071067769704653,
|
| 56 |
+
2.4325415404202744e-08,
|
| 57 |
+
0.7071067854026294
|
| 58 |
+
],
|
| 59 |
+
"z": [
|
| 60 |
+
-6.840043892397674e-08,
|
| 61 |
+
0.9999999999999971,
|
| 62 |
+
3.399910591950217e-08
|
| 63 |
+
]
|
| 64 |
+
}
|
animation/utils/cameras/front.json
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
{"matrix_world": [[1.0, 0.0, 0.0, 0.0], [0.0, -4.371138828673793e-08, -1.0, -2.0], [0.0, 1.0, -4.371138828673793e-08, 0.0], [0.0, 0.0, 0.0, 1.0]], "format_version": 6, "max_depth": 5.0, "bbox": [[-0.14632226526737213, -0.15228690207004547, -0.5013949275016785], [0.18149489164352417, 0.24675098061561584, 0.4873228073120117]], "origin": [0.0, -2.0, 0.0], "x_fov": 0.6911112070083618, "y_fov": 0.6911112070083618, "x": [1.0, 0.0, 0.0], "y": [-0.0, 4.371138828673793e-08, -1.0], "z": [-0.0, 1.0, 4.371138828673793e-08]}
|
animation/utils/cameras/front_left.json
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"matrix_world": [
|
| 3 |
+
[
|
| 4 |
+
0.7071068078790848,
|
| 5 |
+
2.869602372390645e-08,
|
| 6 |
+
-0.7071067544940086,
|
| 7 |
+
-1.4142135089880172
|
| 8 |
+
],
|
| 9 |
+
[
|
| 10 |
+
-0.7071067544940088,
|
| 11 |
+
-6.21956508517485e-09,
|
| 12 |
+
-0.7071068078790852,
|
| 13 |
+
-1.4142136157581704
|
| 14 |
+
],
|
| 15 |
+
[
|
| 16 |
+
-2.468905024866075e-08,
|
| 17 |
+
0.9999999999999996,
|
| 18 |
+
1.589325537842967e-08,
|
| 19 |
+
3.178651075685934e-08
|
| 20 |
+
],
|
| 21 |
+
[
|
| 22 |
+
0.0,
|
| 23 |
+
0.0,
|
| 24 |
+
0.0,
|
| 25 |
+
1.0
|
| 26 |
+
]
|
| 27 |
+
],
|
| 28 |
+
"format_version": 6,
|
| 29 |
+
"max_depth": 5.0,
|
| 30 |
+
"bbox": [
|
| 31 |
+
[
|
| 32 |
+
-0.14632226526737213,
|
| 33 |
+
-0.15228690207004547,
|
| 34 |
+
-0.5013949275016785
|
| 35 |
+
],
|
| 36 |
+
[
|
| 37 |
+
0.18149489164352417,
|
| 38 |
+
0.24675098061561584,
|
| 39 |
+
0.4873228073120117
|
| 40 |
+
]
|
| 41 |
+
],
|
| 42 |
+
"origin": [
|
| 43 |
+
-1.0,
|
| 44 |
+
-1.0,
|
| 45 |
+
0.0
|
| 46 |
+
],
|
| 47 |
+
"x_fov": 0.6911112070083618,
|
| 48 |
+
"y_fov": 0.6911112070083618,
|
| 49 |
+
"x": [
|
| 50 |
+
0.7071068078790848,
|
| 51 |
+
2.869602372390645e-08,
|
| 52 |
+
-0.7071067544940086
|
| 53 |
+
],
|
| 54 |
+
"y": [
|
| 55 |
+
-0.7071067544940088,
|
| 56 |
+
-6.21956508517485e-09,
|
| 57 |
+
-0.7071068078790852
|
| 58 |
+
],
|
| 59 |
+
"z": [
|
| 60 |
+
-2.468905024866075e-08,
|
| 61 |
+
0.9999999999999996,
|
| 62 |
+
1.589325537842967e-08
|
| 63 |
+
]
|
| 64 |
+
}
|
animation/utils/cameras/front_right.json
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"matrix_world": [
|
| 3 |
+
[
|
| 4 |
+
0.7071068078790848,
|
| 5 |
+
-2.869602372390645e-08,
|
| 6 |
+
0.7071067544940086,
|
| 7 |
+
1.4142135089880172
|
| 8 |
+
],
|
| 9 |
+
[
|
| 10 |
+
0.7071067544940088,
|
| 11 |
+
-6.21956508517485e-09,
|
| 12 |
+
-0.7071068078790852,
|
| 13 |
+
-1.4142136157581704
|
| 14 |
+
],
|
| 15 |
+
[
|
| 16 |
+
2.468905024866075e-08,
|
| 17 |
+
0.9999999999999996,
|
| 18 |
+
1.589325537842967e-08,
|
| 19 |
+
3.178651075685934e-08
|
| 20 |
+
],
|
| 21 |
+
[
|
| 22 |
+
0.0,
|
| 23 |
+
0.0,
|
| 24 |
+
0.0,
|
| 25 |
+
1.0
|
| 26 |
+
]
|
| 27 |
+
],
|
| 28 |
+
"format_version": 6,
|
| 29 |
+
"max_depth": 5.0,
|
| 30 |
+
"bbox": [
|
| 31 |
+
[
|
| 32 |
+
-0.14632226526737213,
|
| 33 |
+
-0.15228690207004547,
|
| 34 |
+
-0.5013949275016785
|
| 35 |
+
],
|
| 36 |
+
[
|
| 37 |
+
0.18149489164352417,
|
| 38 |
+
0.24675098061561584,
|
| 39 |
+
0.4873228073120117
|
| 40 |
+
]
|
| 41 |
+
],
|
| 42 |
+
"origin": [
|
| 43 |
+
1.0,
|
| 44 |
+
-1.0,
|
| 45 |
+
0.0
|
| 46 |
+
],
|
| 47 |
+
"x_fov": 0.6911112070083618,
|
| 48 |
+
"y_fov": 0.6911112070083618,
|
| 49 |
+
"x": [
|
| 50 |
+
0.7071068078790848,
|
| 51 |
+
-2.869602372390645e-08,
|
| 52 |
+
0.7071067544940086
|
| 53 |
+
],
|
| 54 |
+
"y": [
|
| 55 |
+
0.7071067544940088,
|
| 56 |
+
-6.21956508517485e-09,
|
| 57 |
+
-0.7071068078790852
|
| 58 |
+
],
|
| 59 |
+
"z": [
|
| 60 |
+
2.468905024866075e-08,
|
| 61 |
+
0.9999999999999996,
|
| 62 |
+
1.589325537842967e-08
|
| 63 |
+
]
|
| 64 |
+
}
|
animation/utils/cameras/left.json
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
{"matrix_world": [[7.549790126404332e-08, 7.549790126404332e-08, -1.0, -2.0], [-1.0, 5.6999328827277325e-15, -7.549790126404332e-08, 0.0], [0.0, 1.0, 7.549790126404332e-08, 0.0], [0.0, 0.0, 0.0, 1.0]], "format_version": 6, "max_depth": 5.0, "bbox": [[-0.14632226526737213, -0.15228690207004547, -0.5013949275016785], [0.18149489164352417, 0.24675098061561584, 0.4873228073120117]], "origin": [-2.0, 0.0, 0.0], "x_fov": 0.6911112070083618, "y_fov": 0.6911112070083618, "x": [7.549790126404332e-08, -1.0, 0.0], "y": [-7.549790126404332e-08, -5.6999328827277325e-15, -1.0], "z": [1.0, 7.549790126404332e-08, -7.549790126404332e-08]}
|
animation/utils/cameras/right.json
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
{"matrix_world": [[7.549790126404332e-08, -7.549790126404332e-08, 1.0, 2.0], [1.0, 5.6999328827277325e-15, -7.549790126404332e-08, 0.0], [0.0, 1.0, 7.549790126404332e-08, 0.0], [0.0, 0.0, 0.0, 1.0]], "format_version": 6, "max_depth": 5.0, "bbox": [[-0.14632226526737213, -0.15228690207004547, -0.5013949275016785], [0.18149489164352417, 0.24675098061561584, 0.4873228073120117]], "origin": [2.0, 0.0, 0.0], "x_fov": 0.6911112070083618, "y_fov": 0.6911112070083618, "x": [7.549790126404332e-08, 1.0, 0.0], "y": [7.549790126404332e-08, -5.6999328827277325e-15, -1.0], "z": [-1.0, 7.549790126404332e-08, -7.549790126404332e-08]}
|
animation/utils/data_loader.py
ADDED
|
@@ -0,0 +1,170 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
|
| 2 |
+
#
|
| 3 |
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
| 4 |
+
# you may not use this file except in compliance with the License.
|
| 5 |
+
# You may obtain a copy of the License at
|
| 6 |
+
#
|
| 7 |
+
# http://www.apache.org/licenses/LICENSE-2.0
|
| 8 |
+
#
|
| 9 |
+
# Unless required by applicable law or agreed to in writing, software
|
| 10 |
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
| 11 |
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| 12 |
+
# See the License for the specific language governing permissions and
|
| 13 |
+
# limitations under the License.
|
| 14 |
+
|
| 15 |
+
import os
|
| 16 |
+
import numpy as np
|
| 17 |
+
import torch
|
| 18 |
+
import random
|
| 19 |
+
from pytorch3d.io import load_objs_as_meshes, load_obj
|
| 20 |
+
from pytorch3d.renderer import TexturesAtlas
|
| 21 |
+
from pytorch3d.structures import Meshes
|
| 22 |
+
from model import RiggingModel
|
| 23 |
+
|
| 24 |
+
def prepare_depth(depth_path, input_frames, device, depth_model):
|
| 25 |
+
os.makedirs(depth_path, exist_ok=True)
|
| 26 |
+
depth_path = f"{depth_path}/depth_gt_raw.pt"
|
| 27 |
+
if os.path.exists(depth_path):
|
| 28 |
+
print("load GT depth...")
|
| 29 |
+
depth_gt_raw = torch.load(depth_path, map_location=device)
|
| 30 |
+
else:
|
| 31 |
+
print("run VideoDepthAnything and save.")
|
| 32 |
+
with torch.no_grad():
|
| 33 |
+
depth_gt_raw = depth_model.get_depth_maps(input_frames)
|
| 34 |
+
torch.save(depth_gt_raw.cpu(), depth_path)
|
| 35 |
+
depth_gt_raw = depth_gt_raw.to(device)
|
| 36 |
+
return depth_gt_raw
|
| 37 |
+
|
| 38 |
+
def normalize_vertices(verts):
|
| 39 |
+
"""Normalize vertices to a unit cube."""
|
| 40 |
+
vmin, vmax = verts.min(dim=0).values, verts.max(dim=0).values
|
| 41 |
+
center = (vmax + vmin) / 2.0
|
| 42 |
+
scale = (vmax - vmin).max()
|
| 43 |
+
verts_norm = (verts - center) / scale
|
| 44 |
+
return verts_norm, center, scale
|
| 45 |
+
|
| 46 |
+
def build_atlas_texture(obj_path, atlas_size, device):
|
| 47 |
+
"""Load OBJ + materials and bake all textures into a single atlas."""
|
| 48 |
+
verts, faces, aux = load_obj(
|
| 49 |
+
obj_path,
|
| 50 |
+
device=device,
|
| 51 |
+
load_textures=True,
|
| 52 |
+
create_texture_atlas=True,
|
| 53 |
+
texture_atlas_size=atlas_size,
|
| 54 |
+
texture_wrap="repeat",
|
| 55 |
+
)
|
| 56 |
+
atlas = aux.texture_atlas # (F, R, R, 3)
|
| 57 |
+
verts_norm, _, _ = normalize_vertices(verts)
|
| 58 |
+
mesh_atlas = Meshes(
|
| 59 |
+
verts=[verts_norm],
|
| 60 |
+
faces=[faces.verts_idx],
|
| 61 |
+
textures=TexturesAtlas(atlas=[atlas]),
|
| 62 |
+
)
|
| 63 |
+
return mesh_atlas
|
| 64 |
+
|
| 65 |
+
def read_rig_file(file_path):
|
| 66 |
+
"""
|
| 67 |
+
Read rig from txt file, our format is the same as RigNet:
|
| 68 |
+
joints joint_name x y z
|
| 69 |
+
root root_joint_name
|
| 70 |
+
skin vertex_idx joint_name weight joint_name weight ...
|
| 71 |
+
hier parent_joint_name child_joint_name
|
| 72 |
+
"""
|
| 73 |
+
joints = []
|
| 74 |
+
bones = []
|
| 75 |
+
joint_names = []
|
| 76 |
+
|
| 77 |
+
joint_mapping = {}
|
| 78 |
+
joint_index = 0
|
| 79 |
+
|
| 80 |
+
skinning_data = {} # Dictionary to store vertex index -> [(joint_idx, weight), ...]
|
| 81 |
+
|
| 82 |
+
with open(file_path, 'r') as file:
|
| 83 |
+
lines = file.readlines()
|
| 84 |
+
|
| 85 |
+
for line in lines:
|
| 86 |
+
parts = line.split()
|
| 87 |
+
if line.startswith('joints'):
|
| 88 |
+
name = parts[1]
|
| 89 |
+
position = [float(parts[2]), float(parts[3]), float(parts[4])]
|
| 90 |
+
joints.append(position)
|
| 91 |
+
joint_names.append(name)
|
| 92 |
+
joint_mapping[name] = joint_index
|
| 93 |
+
joint_index += 1
|
| 94 |
+
elif line.startswith('hier'):
|
| 95 |
+
parent_joint = joint_mapping[parts[1]]
|
| 96 |
+
child_joint = joint_mapping[parts[2]]
|
| 97 |
+
bones.append([parent_joint, child_joint])
|
| 98 |
+
elif line.startswith('root'):
|
| 99 |
+
root = joint_mapping[parts[1]]
|
| 100 |
+
elif line.startswith('skin'):
|
| 101 |
+
vertex_idx = int(parts[1])
|
| 102 |
+
|
| 103 |
+
if vertex_idx not in skinning_data:
|
| 104 |
+
skinning_data[vertex_idx] = []
|
| 105 |
+
|
| 106 |
+
for i in range(2, len(parts), 2):
|
| 107 |
+
if i+1 < len(parts):
|
| 108 |
+
joint_name = parts[i]
|
| 109 |
+
weight = float(parts[i+1])
|
| 110 |
+
|
| 111 |
+
if joint_name in joint_mapping:
|
| 112 |
+
joint_idx = joint_mapping[joint_name]
|
| 113 |
+
skinning_data[vertex_idx].append((joint_idx, weight))
|
| 114 |
+
|
| 115 |
+
return np.array(joints), np.array(bones), root, joint_names, skinning_data
|
| 116 |
+
|
| 117 |
+
def load_model_from_obj_and_rig(
|
| 118 |
+
mesh_path: str,
|
| 119 |
+
rig_path: str,
|
| 120 |
+
device: str | torch.device = "cuda",
|
| 121 |
+
use_skin_color: bool = True,
|
| 122 |
+
atlas_size: int = 8,
|
| 123 |
+
):
|
| 124 |
+
"""Load a 3D model from OBJ and rig files."""
|
| 125 |
+
|
| 126 |
+
# 1) read raw mesh
|
| 127 |
+
raw_mesh = load_objs_as_meshes([mesh_path], device=device)
|
| 128 |
+
verts_raw = raw_mesh.verts_packed() # (V,3)
|
| 129 |
+
faces_idx = raw_mesh.faces_packed() # (F,3)
|
| 130 |
+
|
| 131 |
+
# 2) read rig data
|
| 132 |
+
joints_np, bones_np, root_idx, joint_names, skinning_data = read_rig_file(rig_path)
|
| 133 |
+
J = joints_np.shape[0]
|
| 134 |
+
|
| 135 |
+
# parent indices, default -1
|
| 136 |
+
parent_idx = [-1] * J
|
| 137 |
+
for p, c in bones_np:
|
| 138 |
+
parent_idx[c] = p
|
| 139 |
+
|
| 140 |
+
verts_norm, center, scale = normalize_vertices(verts_raw)
|
| 141 |
+
joints_t = torch.as_tensor(joints_np, dtype=torch.float32, device=device)
|
| 142 |
+
joints_norm = (joints_t - center) / scale
|
| 143 |
+
|
| 144 |
+
# skin weights tensor (V,J)
|
| 145 |
+
V = verts_raw.shape[0]
|
| 146 |
+
skin_weights = torch.zeros(V, J, dtype=torch.float32, device=device)
|
| 147 |
+
for v_idx, lst in skinning_data.items():
|
| 148 |
+
for j_idx, w in lst:
|
| 149 |
+
skin_weights[v_idx, j_idx] = w
|
| 150 |
+
|
| 151 |
+
# 3) texture strategy
|
| 152 |
+
mesh_norm = build_atlas_texture(mesh_path, atlas_size, device)
|
| 153 |
+
tex = mesh_norm.textures
|
| 154 |
+
|
| 155 |
+
# 4) pack into Model class
|
| 156 |
+
model = RiggingModel(device=device)
|
| 157 |
+
model.vertices = [mesh_norm.verts_packed()]
|
| 158 |
+
model.faces = [faces_idx]
|
| 159 |
+
model.textures = [tex]
|
| 160 |
+
|
| 161 |
+
# rig meta
|
| 162 |
+
model.bones = bones_np # (B,2)
|
| 163 |
+
model.parent_indices = parent_idx
|
| 164 |
+
model.root_index = root_idx
|
| 165 |
+
model.skin_weights = [skin_weights]
|
| 166 |
+
|
| 167 |
+
model.bind_matrices_inv = torch.eye(4, device=device).unsqueeze(0).expand(J, -1, -1).contiguous()
|
| 168 |
+
model.joints_rest = joints_norm
|
| 169 |
+
|
| 170 |
+
return model
|
animation/utils/loss_utils.py
ADDED
|
@@ -0,0 +1,420 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
|
| 2 |
+
#
|
| 3 |
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
| 4 |
+
# you may not use this file except in compliance with the License.
|
| 5 |
+
# You may obtain a copy of the License at
|
| 6 |
+
#
|
| 7 |
+
# http://www.apache.org/licenses/LICENSE-2.0
|
| 8 |
+
#
|
| 9 |
+
# Unless required by applicable law or agreed to in writing, software
|
| 10 |
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
| 11 |
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| 12 |
+
# See the License for the specific language governing permissions and
|
| 13 |
+
# limitations under the License.
|
| 14 |
+
|
| 15 |
+
from third_partys.Video_Depth_Anything.video_depth_anything.video_depth import VideoDepthAnything
|
| 16 |
+
import torch
|
| 17 |
+
import torch.nn as nn
|
| 18 |
+
import numpy as np
|
| 19 |
+
import igl
|
| 20 |
+
import cv2
|
| 21 |
+
import time
|
| 22 |
+
import torch.nn.functional as F
|
| 23 |
+
from utils.quat_utils import quat_inverse, quat_log, quat_multiply, normalize_quaternion
|
| 24 |
+
from pytorch3d.structures import join_meshes_as_scene, join_meshes_as_batch
|
| 25 |
+
import os
|
| 26 |
+
from pathlib import Path
|
| 27 |
+
|
| 28 |
+
class DepthModule:
|
| 29 |
+
def __init__(self, encoder='vitl', device='cuda', input_size=518, fp32=False):
|
| 30 |
+
"""
|
| 31 |
+
Initialize the depth loss module with Video Depth Anything
|
| 32 |
+
|
| 33 |
+
Args:
|
| 34 |
+
encoder: 'vitl' or 'vits'
|
| 35 |
+
device: device to run the model on
|
| 36 |
+
input_size: input size for the model
|
| 37 |
+
fp32: whether to use float32 for inference
|
| 38 |
+
"""
|
| 39 |
+
self.device = 'cuda' if torch.cuda.is_available() else 'cpu'
|
| 40 |
+
self.input_size = input_size
|
| 41 |
+
self.fp32 = fp32
|
| 42 |
+
|
| 43 |
+
# Initialize model configuration
|
| 44 |
+
model_configs = {
|
| 45 |
+
'vits': {'encoder': 'vits', 'features': 64, 'out_channels': [48, 96, 192, 384]},
|
| 46 |
+
'vitl': {'encoder': 'vitl', 'features': 256, 'out_channels': [256, 512, 1024, 1024]},
|
| 47 |
+
}
|
| 48 |
+
|
| 49 |
+
# Load Video Depth Anything model
|
| 50 |
+
self.video_depth_model = VideoDepthAnything(**model_configs[encoder])
|
| 51 |
+
self.video_depth_model.load_state_dict(
|
| 52 |
+
torch.load(f'./third_partys/Video_Depth_Anything/ckpt/video_depth_anything_{encoder}.pth', map_location='cpu'),
|
| 53 |
+
strict=True
|
| 54 |
+
)
|
| 55 |
+
self.video_depth_model = self.video_depth_model.to(self.device).eval()
|
| 56 |
+
for param in self.video_depth_model.parameters():
|
| 57 |
+
param.requires_grad = False
|
| 58 |
+
|
| 59 |
+
def get_depth_maps(self, frames, target_fps=30):
|
| 60 |
+
"""
|
| 61 |
+
Get depth maps for video frames
|
| 62 |
+
"""
|
| 63 |
+
depths, _ = self.video_depth_model.infer_video_depth(
|
| 64 |
+
frames,
|
| 65 |
+
target_fps,
|
| 66 |
+
input_size=self.input_size,
|
| 67 |
+
device=self.device,
|
| 68 |
+
fp32=self.fp32
|
| 69 |
+
)
|
| 70 |
+
return depths
|
| 71 |
+
|
| 72 |
+
def save_depth_as_images(depth_np, output_dir='./depth_images'):
|
| 73 |
+
"""save depth images"""
|
| 74 |
+
os.makedirs(output_dir, exist_ok=True)
|
| 75 |
+
|
| 76 |
+
for i, depth_map in enumerate(depth_np):
|
| 77 |
+
depth_map = depth_map.detach().cpu().numpy()
|
| 78 |
+
valid_mask = (depth_map > 0)
|
| 79 |
+
if not valid_mask.any():
|
| 80 |
+
continue
|
| 81 |
+
|
| 82 |
+
valid_min = depth_map[valid_mask].min()
|
| 83 |
+
valid_max = depth_map[valid_mask].max()
|
| 84 |
+
|
| 85 |
+
normalized = np.zeros_like(depth_map)
|
| 86 |
+
normalized[valid_mask] = 255.0 * (depth_map[valid_mask] - valid_min) / (valid_max - valid_min)
|
| 87 |
+
|
| 88 |
+
depth_img = normalized.astype(np.uint8)
|
| 89 |
+
|
| 90 |
+
cv2.imwrite(os.path.join(output_dir, f'depth_{i:04d}.png'), depth_img)
|
| 91 |
+
|
| 92 |
+
print(f"Save {len(depth_np)} depth images to {output_dir}")
|
| 93 |
+
|
| 94 |
+
def compute_visibility_mask_igl(ray_origins, ray_dirs, distances, verts, faces, distance_tolerance=1e-6, for_vertices=False):
|
| 95 |
+
"""
|
| 96 |
+
Compute visibility mask using IGL ray-mesh intersection.
|
| 97 |
+
"""
|
| 98 |
+
num_rays = ray_origins.shape[0]
|
| 99 |
+
visibility_mask = np.ones(num_rays, dtype=bool)
|
| 100 |
+
|
| 101 |
+
for i in range(num_rays):
|
| 102 |
+
ray_origin = ray_origins[i].reshape(1, 3)
|
| 103 |
+
ray_dir = ray_dirs[i].reshape(1, 3)
|
| 104 |
+
intersections = igl.ray_mesh_intersect(ray_origin, ray_dir, verts, faces)
|
| 105 |
+
if intersections:
|
| 106 |
+
# Count intersections that occur before the target point
|
| 107 |
+
count = sum(1 for h in intersections if h[4] < distances[i] - distance_tolerance)
|
| 108 |
+
# count=0 → ray completely missed the mesh; count=1 → ray stops exactly at the face containing the joint
|
| 109 |
+
# count>1 → ray was blocked by other faces along the way
|
| 110 |
+
if for_vertices:
|
| 111 |
+
if count != 1:
|
| 112 |
+
visibility_mask[i] = False
|
| 113 |
+
else: # for joints
|
| 114 |
+
if count > 2:
|
| 115 |
+
visibility_mask[i] = False
|
| 116 |
+
|
| 117 |
+
return visibility_mask
|
| 118 |
+
|
| 119 |
+
def compute_reprojection_loss(renderer, vis_mask, predicted_joints, tracked_joints_2d, image_size):
|
| 120 |
+
"""
|
| 121 |
+
Compute reprojection loss between predicted 3D points and tracked 2D points.
|
| 122 |
+
"""
|
| 123 |
+
if predicted_joints.dim() != 3:
|
| 124 |
+
raise ValueError(f"predicted_joints must be 3D tensor, got shape {predicted_joints.shape}")
|
| 125 |
+
|
| 126 |
+
B, J, _ = predicted_joints.shape
|
| 127 |
+
device = predicted_joints.device
|
| 128 |
+
|
| 129 |
+
# Project 3D joints to 2D screen coordinates
|
| 130 |
+
projected = renderer.camera.transform_points_screen(
|
| 131 |
+
predicted_joints,
|
| 132 |
+
image_size=[image_size, image_size]
|
| 133 |
+
)
|
| 134 |
+
projected_2d = projected[..., :2] # (B, J, 2)
|
| 135 |
+
|
| 136 |
+
# Convert and validate tracked joints
|
| 137 |
+
if not isinstance(tracked_joints_2d, torch.Tensor):
|
| 138 |
+
tracked_joints_2d = torch.from_numpy(tracked_joints_2d).float()
|
| 139 |
+
tracked_joints_2d = tracked_joints_2d.to(device)
|
| 140 |
+
|
| 141 |
+
if tracked_joints_2d.dim() == 2:
|
| 142 |
+
tracked_joints_2d = tracked_joints_2d.unsqueeze(0).expand(B, -1, -1)
|
| 143 |
+
|
| 144 |
+
vis_mask = vis_mask.to(device).float()
|
| 145 |
+
|
| 146 |
+
num_visible = vis_mask.sum()
|
| 147 |
+
if num_visible == 0:
|
| 148 |
+
# No visible joints - return zero loss
|
| 149 |
+
return torch.tensor(0.0, device=device, requires_grad=True)
|
| 150 |
+
|
| 151 |
+
squared_diff = (projected_2d - tracked_joints_2d).pow(2).sum(dim=-1) # (B, J)
|
| 152 |
+
|
| 153 |
+
vis_mask_expanded = vis_mask.unsqueeze(0) # (1, J)
|
| 154 |
+
masked_loss = squared_diff * vis_mask_expanded # (B, J)
|
| 155 |
+
per_frame_loss = masked_loss.sum(dim=1) / num_visible # (B,)
|
| 156 |
+
final_loss = per_frame_loss.mean() # scalar
|
| 157 |
+
|
| 158 |
+
return final_loss
|
| 159 |
+
|
| 160 |
+
def geodesic_loss(q1, q2, eps=1e-6):
|
| 161 |
+
"""
|
| 162 |
+
Compute geodesic distance loss between batches of quaternions for rot smooth loss.
|
| 163 |
+
"""
|
| 164 |
+
q1_norm = normalize_quaternion(q1, eps=eps)
|
| 165 |
+
q2_norm = normalize_quaternion(q2, eps=eps)
|
| 166 |
+
|
| 167 |
+
dot_product = (q1_norm * q2_norm).sum(dim=-1, keepdim=True)
|
| 168 |
+
q2_corrected = torch.where(dot_product < 0, -q2_norm, q2_norm)
|
| 169 |
+
inner_product = (q1_norm * q2_corrected).sum(dim=-1)
|
| 170 |
+
|
| 171 |
+
# Clamp to valid range for arccos to avoid numerical issues
|
| 172 |
+
inner_product_clamped = torch.clamp(inner_product, min=-1.0 + eps, max=1.0 - eps)
|
| 173 |
+
theta = 2.0 * torch.arccos(torch.abs(inner_product_clamped))
|
| 174 |
+
|
| 175 |
+
return theta
|
| 176 |
+
|
| 177 |
+
def root_motion_reg(root_quats, root_pos):
|
| 178 |
+
return ((root_pos[1:] - root_pos[:-1])**2).mean(), (geodesic_loss(root_quats[1:], root_quats[:-1])**2).mean()
|
| 179 |
+
|
| 180 |
+
def joint_motion_coherence(quats_normed, parent_idx):
|
| 181 |
+
"""
|
| 182 |
+
Compute joint motion coherence loss to enforce smooth relative motion between parent-child joints.
|
| 183 |
+
"""
|
| 184 |
+
coherence_loss = 0
|
| 185 |
+
|
| 186 |
+
for j, parent in enumerate(parent_idx):
|
| 187 |
+
if parent != -1: # Skip root joint
|
| 188 |
+
parent_rot = quats_normed[:, parent] # (T, 4)
|
| 189 |
+
child_rot = quats_normed[:, j] # (T, 4)
|
| 190 |
+
|
| 191 |
+
# Compute relative rotation of child w.r.t. parent's local frame
|
| 192 |
+
# local_rot = parent_rot^(-1) * child_rot
|
| 193 |
+
local_rot = quat_multiply(quat_inverse(parent_rot), child_rot)
|
| 194 |
+
local_rot_velocity = local_rot[1:] - local_rot[:-1] # (T-1, 4)
|
| 195 |
+
|
| 196 |
+
coherence_loss += local_rot_velocity.pow(2).mean()
|
| 197 |
+
|
| 198 |
+
return coherence_loss
|
| 199 |
+
|
| 200 |
+
def read_flo_file(file_path):
|
| 201 |
+
"""
|
| 202 |
+
Read optical flow from .flo format file.
|
| 203 |
+
"""
|
| 204 |
+
with open(file_path, 'rb') as f:
|
| 205 |
+
magic = np.fromfile(f, np.float32, count=1)
|
| 206 |
+
if len(magic) == 0 or magic[0] != 202021.25:
|
| 207 |
+
raise ValueError(f'Invalid .flo file format: magic number {magic}')
|
| 208 |
+
|
| 209 |
+
w = np.fromfile(f, np.int32, count=1)[0]
|
| 210 |
+
h = np.fromfile(f, np.int32, count=1)[0]
|
| 211 |
+
data = np.fromfile(f, np.float32, count=2*w*h)
|
| 212 |
+
flow = data.reshape(h, w, 2)
|
| 213 |
+
return flow
|
| 214 |
+
|
| 215 |
+
def load_optical_flows(flow_dir, num_frames):
|
| 216 |
+
"""
|
| 217 |
+
Load sequence of optical flow files.
|
| 218 |
+
"""
|
| 219 |
+
flow_dir = Path(flow_dir)
|
| 220 |
+
flows = []
|
| 221 |
+
|
| 222 |
+
for i in range(num_frames - 1):
|
| 223 |
+
flow_path = flow_dir / f'flow_{i:04d}.flo'
|
| 224 |
+
if flow_path.exists():
|
| 225 |
+
flow = read_flo_file(flow_path)
|
| 226 |
+
flows.append(flow)
|
| 227 |
+
else:
|
| 228 |
+
raise ValueError("No flow files found")
|
| 229 |
+
|
| 230 |
+
return np.stack(flows, axis=0)
|
| 231 |
+
|
| 232 |
+
def rasterize_vertex_flow(flow_vertices, meshes, faces, image_size, renderer, eps = 1e-8):
|
| 233 |
+
"""
|
| 234 |
+
Rasterize per-vertex flow to dense flow field using barycentric interpolation.
|
| 235 |
+
"""
|
| 236 |
+
B, V, _ = flow_vertices.shape
|
| 237 |
+
device = flow_vertices.device
|
| 238 |
+
|
| 239 |
+
if isinstance(image_size, int):
|
| 240 |
+
H = W = image_size
|
| 241 |
+
else:
|
| 242 |
+
H, W = image_size
|
| 243 |
+
|
| 244 |
+
batch_meshes = join_meshes_as_batch([join_meshes_as_scene(m) for m in meshes]).to(device)
|
| 245 |
+
fragments = renderer.renderer.rasterizer(batch_meshes)
|
| 246 |
+
|
| 247 |
+
pix_to_face = fragments.pix_to_face # (B, H, W, K)
|
| 248 |
+
bary_coords = fragments.bary_coords # (B, H, W, K, 3)
|
| 249 |
+
|
| 250 |
+
flow_scene_list = []
|
| 251 |
+
for mesh_idx in range(B):
|
| 252 |
+
mesh = meshes[mesh_idx]
|
| 253 |
+
V_mesh = mesh.verts_packed().shape[0]
|
| 254 |
+
|
| 255 |
+
if V_mesh > flow_vertices.shape[1]:
|
| 256 |
+
raise ValueError(f"Mesh {mesh_idx} has {V_mesh} vertices but flow has {flow_vertices.shape[1]}")
|
| 257 |
+
|
| 258 |
+
flow_scene_list.append(flow_vertices[mesh_idx, :V_mesh])
|
| 259 |
+
|
| 260 |
+
|
| 261 |
+
flow_vertices_scene = torch.cat(flow_scene_list, dim=0).to(device)
|
| 262 |
+
faces_scene = batch_meshes.faces_packed()
|
| 263 |
+
|
| 264 |
+
flow_pred = torch.zeros(B, H, W, 2, device=device)
|
| 265 |
+
valid = pix_to_face[..., 0] >= 0
|
| 266 |
+
|
| 267 |
+
for b in range(B):
|
| 268 |
+
b_valid = valid[b] # (H,W)
|
| 269 |
+
if torch.count_nonzero(b_valid) == 0:
|
| 270 |
+
print(f"No valid pixels found for batch {b}")
|
| 271 |
+
continue
|
| 272 |
+
|
| 273 |
+
valid_indices = torch.nonzero(b_valid, as_tuple=True)
|
| 274 |
+
h_indices, w_indices = valid_indices
|
| 275 |
+
|
| 276 |
+
face_idxs = pix_to_face[b, h_indices, w_indices, 0] # (N,)
|
| 277 |
+
bary = bary_coords[b, h_indices, w_indices, 0] # (N,3)
|
| 278 |
+
|
| 279 |
+
max_face_idx = faces_scene.shape[0] - 1
|
| 280 |
+
if face_idxs.max() > max_face_idx:
|
| 281 |
+
raise RuntimeError(f"Face index {face_idxs.max()} exceeds max {max_face_idx}")
|
| 282 |
+
|
| 283 |
+
face_verts = faces_scene[face_idxs] # (N, 3)
|
| 284 |
+
f0, f1, f2 = face_verts.unbind(-1) # Each (N,)
|
| 285 |
+
|
| 286 |
+
max_vert_idx = flow_vertices_scene.shape[0] - 1
|
| 287 |
+
if max(f0.max(), f1.max(), f2.max()) > max_vert_idx:
|
| 288 |
+
raise RuntimeError(f"Vertex index exceeds flow_vertices_scene size {max_vert_idx}")
|
| 289 |
+
|
| 290 |
+
v0_flow = flow_vertices_scene[f0] # (N, 2)
|
| 291 |
+
v1_flow = flow_vertices_scene[f1] # (N, 2)
|
| 292 |
+
v2_flow = flow_vertices_scene[f2] # (N, 2)
|
| 293 |
+
|
| 294 |
+
# Interpolate using barycentric coordinates
|
| 295 |
+
b0, b1, b2 = bary.unbind(-1) # Each (N,)
|
| 296 |
+
|
| 297 |
+
# Ensure barycentric coordinates sum to 1 (numerical stability)
|
| 298 |
+
bary_sum = b0 + b1 + b2
|
| 299 |
+
b0 = b0 / (bary_sum + eps)
|
| 300 |
+
b1 = b1 / (bary_sum + eps)
|
| 301 |
+
b2 = b2 / (bary_sum + eps)
|
| 302 |
+
|
| 303 |
+
flow_interpolated = (
|
| 304 |
+
b0.unsqueeze(-1) * v0_flow +
|
| 305 |
+
b1.unsqueeze(-1) * v1_flow +
|
| 306 |
+
b2.unsqueeze(-1) * v2_flow
|
| 307 |
+
) # (N, 2)
|
| 308 |
+
|
| 309 |
+
# Update flow prediction
|
| 310 |
+
flow_pred[b, h_indices, w_indices] = flow_interpolated
|
| 311 |
+
|
| 312 |
+
return flow_pred
|
| 313 |
+
|
| 314 |
+
def calculate_flow_loss(flow_dir, device, mask, renderer, model):
|
| 315 |
+
"""
|
| 316 |
+
Calculate optical flow loss with improved error handling and flexibility.
|
| 317 |
+
"""
|
| 318 |
+
if device is None:
|
| 319 |
+
device = mask.device
|
| 320 |
+
|
| 321 |
+
T = mask.shape[0]
|
| 322 |
+
H, W = mask.shape[1:3]
|
| 323 |
+
|
| 324 |
+
if mask.shape[0] == T:
|
| 325 |
+
flow_mask = mask[1:] # Use frames 1 to T-1
|
| 326 |
+
else:
|
| 327 |
+
flow_mask = mask
|
| 328 |
+
|
| 329 |
+
flows_np = load_optical_flows(flow_dir, T)
|
| 330 |
+
flow_gt = torch.from_numpy(flows_np).float().to(device) # [T-1, H, W, 2]
|
| 331 |
+
|
| 332 |
+
vertices = model.deformed_vertices[0] # (T,V,3)
|
| 333 |
+
# Project vertices to get 2D flow
|
| 334 |
+
proj_t = renderer.project_points(vertices[:-1]) # (T-1,V,2) in pixels
|
| 335 |
+
proj_tp = renderer.project_points(vertices[1:])
|
| 336 |
+
vertex_flow = proj_tp - proj_t # (T-1,V,2) Δx,Δy
|
| 337 |
+
|
| 338 |
+
meshes = [model.get_mesh(t) for t in range(T)]
|
| 339 |
+
flow_pred = rasterize_vertex_flow(vertex_flow, meshes, model.faces[0], (H,W), renderer) # (B,H,W,2)
|
| 340 |
+
|
| 341 |
+
eps = 1e-3
|
| 342 |
+
diff = (flow_pred - flow_gt) * flow_mask.unsqueeze(-1) # (T-1, H, W, 2)
|
| 343 |
+
loss = torch.sqrt(diff.pow(2).sum(dim=-1) + eps**2) # Charbonnier loss
|
| 344 |
+
loss = loss.sum() / (flow_mask.sum() + 1e-6)
|
| 345 |
+
|
| 346 |
+
return loss
|
| 347 |
+
|
| 348 |
+
def normalize_depth_from_reference(depth_maps, reference_idx=0, invalid_value=-1.0, invert=False, eps = 1e-8):
|
| 349 |
+
"""
|
| 350 |
+
Normalize depth maps based on a reference frame with improved robustness.
|
| 351 |
+
"""
|
| 352 |
+
if depth_maps.dim() != 3:
|
| 353 |
+
raise ValueError(f"Expected depth_maps with 3 dimensions, got {depth_maps.dim()}")
|
| 354 |
+
|
| 355 |
+
T, H, W = depth_maps.shape
|
| 356 |
+
device = depth_maps.device
|
| 357 |
+
|
| 358 |
+
reference_depth = depth_maps[reference_idx]
|
| 359 |
+
valid_mask = (
|
| 360 |
+
(reference_depth != invalid_value) &
|
| 361 |
+
(reference_depth > 1e-8) & # Avoid very small positive values
|
| 362 |
+
torch.isfinite(reference_depth) # Exclude inf/nan
|
| 363 |
+
)
|
| 364 |
+
|
| 365 |
+
valid_values = reference_depth[valid_mask]
|
| 366 |
+
min_depth = torch.quantile(valid_values, 0.01) # 1st percentile
|
| 367 |
+
max_depth = torch.quantile(valid_values, 0.99) # 99th percentile
|
| 368 |
+
|
| 369 |
+
depth_range = max_depth - min_depth
|
| 370 |
+
if depth_range < eps:
|
| 371 |
+
logger.warning(f"Very small depth range ({depth_range:.6f}), using fallback normalization")
|
| 372 |
+
min_depth = valid_values.min()
|
| 373 |
+
max_depth = valid_values.max()
|
| 374 |
+
depth_range = max(max_depth - min_depth, eps)
|
| 375 |
+
|
| 376 |
+
scale = 1.0 / (max_depth - min_depth)
|
| 377 |
+
offset = -min_depth * scale
|
| 378 |
+
|
| 379 |
+
all_valid_mask = (
|
| 380 |
+
(depth_maps != invalid_value) &
|
| 381 |
+
(depth_maps > eps) &
|
| 382 |
+
torch.isfinite(depth_maps)
|
| 383 |
+
)
|
| 384 |
+
|
| 385 |
+
normalized_depths = torch.full_like(depth_maps, invalid_value)
|
| 386 |
+
|
| 387 |
+
if all_valid_mask.any():
|
| 388 |
+
normalized_values = depth_maps[all_valid_mask] * scale + offset
|
| 389 |
+
|
| 390 |
+
if invert:
|
| 391 |
+
normalized_values = 1.0 - normalized_values
|
| 392 |
+
|
| 393 |
+
normalized_depths[all_valid_mask] = normalized_values
|
| 394 |
+
|
| 395 |
+
return normalized_depths, scale.item(), offset.item()
|
| 396 |
+
|
| 397 |
+
def compute_depth_loss_normalized(mono_depths, zbuf_depths, mask):
|
| 398 |
+
"""
|
| 399 |
+
Compute normalized depth loss.
|
| 400 |
+
"""
|
| 401 |
+
device = zbuf_depths.device
|
| 402 |
+
# Normalize both depth types
|
| 403 |
+
zbuf_norm, z_scale, z_offset = normalize_depth_from_reference(zbuf_depths)
|
| 404 |
+
mono_norm, m_scale, m_offset = normalize_depth_from_reference(mono_depths, invert=True)
|
| 405 |
+
|
| 406 |
+
valid_zbuf = (zbuf_norm >= 0) & (zbuf_norm <= 1)
|
| 407 |
+
valid_mono = (mono_norm >= 0) & (mono_norm <= 1)
|
| 408 |
+
if mask.dtype != torch.bool:
|
| 409 |
+
mask = mask > 0.5
|
| 410 |
+
combined_mask = mask & valid_zbuf & valid_mono
|
| 411 |
+
|
| 412 |
+
num_valid = combined_mask.sum().item()
|
| 413 |
+
if num_valid == 0:
|
| 414 |
+
print("No valid pixels for depth loss computation")
|
| 415 |
+
return torch.tensor(0.0, device=device, requires_grad=True)
|
| 416 |
+
|
| 417 |
+
depth_diff = (zbuf_norm - mono_norm) * combined_mask.float()
|
| 418 |
+
loss = (depth_diff**2).sum() / num_valid
|
| 419 |
+
|
| 420 |
+
return loss
|
animation/utils/misc.py
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
|
| 2 |
+
#
|
| 3 |
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
| 4 |
+
# you may not use this file except in compliance with the License.
|
| 5 |
+
# You may obtain a copy of the License at
|
| 6 |
+
#
|
| 7 |
+
# http://www.apache.org/licenses/LICENSE-2.0
|
| 8 |
+
#
|
| 9 |
+
# Unless required by applicable law or agreed to in writing, software
|
| 10 |
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
| 11 |
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| 12 |
+
# See the License for the specific language governing permissions and
|
| 13 |
+
# limitations under the License.
|
| 14 |
+
|
| 15 |
+
from torch.optim.lr_scheduler import LambdaLR
|
| 16 |
+
|
| 17 |
+
def warmup_then_decay(optimizer, total_steps, warmup_steps, max_lr=1e-3, min_lr=1e-5, base_lr=1e-5):
|
| 18 |
+
"""
|
| 19 |
+
Create a learning rate scheduler with warmup followed by decay.
|
| 20 |
+
"""
|
| 21 |
+
def lr_lambda(current_step):
|
| 22 |
+
if current_step < warmup_steps:
|
| 23 |
+
# warmup: min_lr -> max_lr
|
| 24 |
+
progress = float(current_step) / float(max(1, warmup_steps))
|
| 25 |
+
# LR(t) = min_lr + (max_lr - min_lr)*progress
|
| 26 |
+
return (min_lr + (max_lr - min_lr)*progress) / base_lr
|
| 27 |
+
else:
|
| 28 |
+
# decay: warmup_steps -> total_steps
|
| 29 |
+
progress = float(current_step - warmup_steps) / float(max(1, total_steps - warmup_steps))
|
| 30 |
+
# LR(t) = max_lr + (min_lr - max_lr)*progress
|
| 31 |
+
return (max_lr + (min_lr - max_lr)*progress) / base_lr
|
| 32 |
+
|
| 33 |
+
scheduler = LambdaLR(optimizer, lr_lambda)
|
| 34 |
+
return scheduler
|
animation/utils/quat_utils.py
ADDED
|
@@ -0,0 +1,179 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
|
| 2 |
+
#
|
| 3 |
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
| 4 |
+
# you may not use this file except in compliance with the License.
|
| 5 |
+
# You may obtain a copy of the License at
|
| 6 |
+
#
|
| 7 |
+
# http://www.apache.org/licenses/LICENSE-2.0
|
| 8 |
+
#
|
| 9 |
+
# Unless required by applicable law or agreed to in writing, software
|
| 10 |
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
| 11 |
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| 12 |
+
# See the License for the specific language governing permissions and
|
| 13 |
+
# limitations under the License.
|
| 14 |
+
|
| 15 |
+
import torch
|
| 16 |
+
from typing import List, Tuple, Optional
|
| 17 |
+
|
| 18 |
+
EPS = 1e-8
|
| 19 |
+
|
| 20 |
+
def normalize_quaternion(quat: torch.Tensor, eps: float = EPS) -> torch.Tensor:
|
| 21 |
+
"""
|
| 22 |
+
Normalize quaternions to unit length.
|
| 23 |
+
|
| 24 |
+
Args:
|
| 25 |
+
quat: Quaternion tensor of shape (..., 4) with (w, x, y, z) format
|
| 26 |
+
eps: Small value for numerical stability
|
| 27 |
+
|
| 28 |
+
Returns:
|
| 29 |
+
Normalized quaternions of same shape
|
| 30 |
+
"""
|
| 31 |
+
norm = torch.norm(quat, dim=-1, keepdim=True)
|
| 32 |
+
return quat / torch.clamp(norm, min=eps)
|
| 33 |
+
|
| 34 |
+
def quat_multiply(q1: torch.Tensor, q2: torch.Tensor) -> torch.Tensor:
|
| 35 |
+
"""
|
| 36 |
+
Multiply two quaternions using Hamilton product.
|
| 37 |
+
"""
|
| 38 |
+
w1, x1, y1, z1 = torch.unbind(q1, dim=-1)
|
| 39 |
+
w2, x2, y2, z2 = torch.unbind(q2, dim=-1)
|
| 40 |
+
|
| 41 |
+
w = w1 * w2 - x1 * x2 - y1 * y2 - z1 * z2
|
| 42 |
+
x = w1 * x2 + x1 * w2 + y1 * z2 - z1 * y2
|
| 43 |
+
y = w1 * y2 - x1 * z2 + y1 * w2 + z1 * x2
|
| 44 |
+
z = w1 * z2 + x1 * y2 - y1 * x2 + z1 * w2
|
| 45 |
+
|
| 46 |
+
return torch.stack((w, x, y, z), dim=-1)
|
| 47 |
+
|
| 48 |
+
def quat_conjugate(quat: torch.Tensor) -> torch.Tensor:
|
| 49 |
+
"""
|
| 50 |
+
Compute quaternion conjugate.
|
| 51 |
+
"""
|
| 52 |
+
w, xyz = quat[..., :1], quat[..., 1:]
|
| 53 |
+
return torch.cat([w, -xyz], dim=-1)
|
| 54 |
+
|
| 55 |
+
def quat_inverse(quat: torch.Tensor, eps: float = EPS) -> torch.Tensor:
|
| 56 |
+
"""
|
| 57 |
+
Compute quaternion inverse.
|
| 58 |
+
"""
|
| 59 |
+
conjugate = quat_conjugate(quat)
|
| 60 |
+
norm_squared = torch.sum(quat * quat, dim=-1, keepdim=True)
|
| 61 |
+
return conjugate / torch.clamp(norm_squared, min=eps)
|
| 62 |
+
|
| 63 |
+
def quat_log(quat: torch.Tensor, eps: float = 1e-6) -> torch.Tensor:
|
| 64 |
+
"""
|
| 65 |
+
Compute quaternion logarithm, mapping to rotation vectors (axis-angle).
|
| 66 |
+
"""
|
| 67 |
+
# quat_norm = normalize_quaternion(quat, eps)
|
| 68 |
+
q_norm = torch.sqrt(torch.sum(quat * quat, dim=-1, keepdim=True))
|
| 69 |
+
quat_norm = quat / torch.clamp(q_norm, min=eps)
|
| 70 |
+
|
| 71 |
+
w = quat_norm[..., 0:1] # Scalar part
|
| 72 |
+
xyz = quat_norm[..., 1:] # Vector part
|
| 73 |
+
|
| 74 |
+
xyz_norm = torch.norm(xyz, dim=-1, keepdim=True)
|
| 75 |
+
w_clamped = torch.clamp(w, min=-1.0 + eps, max=1.0 - eps)
|
| 76 |
+
|
| 77 |
+
# half-angle
|
| 78 |
+
half_angle = torch.acos(torch.abs(w_clamped))
|
| 79 |
+
|
| 80 |
+
safe_xyz_norm = torch.clamp(xyz_norm, min=eps)
|
| 81 |
+
|
| 82 |
+
# Scale factor
|
| 83 |
+
scale = torch.where(
|
| 84 |
+
xyz_norm < eps,
|
| 85 |
+
torch.ones_like(xyz_norm),
|
| 86 |
+
half_angle / safe_xyz_norm
|
| 87 |
+
)
|
| 88 |
+
|
| 89 |
+
# Handle quaternion sign ambiguity (q and -q represent same rotation)
|
| 90 |
+
sign = torch.where(w >= 0, torch.ones_like(w), -torch.ones_like(w))
|
| 91 |
+
|
| 92 |
+
rotation_vector = sign * scale * xyz
|
| 93 |
+
|
| 94 |
+
return rotation_vector
|
| 95 |
+
|
| 96 |
+
def quat_rotate_vector(quat: torch.Tensor, vec: torch.Tensor) -> torch.Tensor:
|
| 97 |
+
"""
|
| 98 |
+
Rotate a 3D vector by a quaternion.
|
| 99 |
+
"""
|
| 100 |
+
q_vec = quat[..., 1:] # vector part
|
| 101 |
+
q_w = quat[..., 0:1] # scalar part
|
| 102 |
+
|
| 103 |
+
cross1 = torch.cross(q_vec, vec, dim=-1)
|
| 104 |
+
cross2 = torch.cross(q_vec, cross1, dim=-1)
|
| 105 |
+
|
| 106 |
+
# Apply the rotation formula
|
| 107 |
+
rotated_vec = vec + 2.0 * q_w * cross1 + 2.0 * cross2
|
| 108 |
+
|
| 109 |
+
return rotated_vec
|
| 110 |
+
|
| 111 |
+
def quat_to_rotation_matrix(quat: torch.Tensor, eps: float = EPS) -> torch.Tensor:
|
| 112 |
+
"""
|
| 113 |
+
Convert quaternions to rotation matrices.
|
| 114 |
+
"""
|
| 115 |
+
quat_norm = normalize_quaternion(quat, eps)
|
| 116 |
+
w, x, y, z = torch.unbind(quat_norm, dim=-1)
|
| 117 |
+
|
| 118 |
+
xx, yy, zz = x * x, y * y, z * z
|
| 119 |
+
xy, xz, yz = x * y, x * z, y * z
|
| 120 |
+
wx, wy, wz = w * x, w * y, w * z
|
| 121 |
+
|
| 122 |
+
r00 = 1.0 - 2.0 * (yy + zz)
|
| 123 |
+
r01 = 2.0 * (xy - wz)
|
| 124 |
+
r02 = 2.0 * (xz + wy)
|
| 125 |
+
|
| 126 |
+
r10 = 2.0 * (xy + wz)
|
| 127 |
+
r11 = 1.0 - 2.0 * (xx + zz)
|
| 128 |
+
r12 = 2.0 * (yz - wx)
|
| 129 |
+
|
| 130 |
+
r20 = 2.0 * (xz - wy)
|
| 131 |
+
r21 = 2.0 * (yz + wx)
|
| 132 |
+
r22 = 1.0 - 2.0 * (xx + yy)
|
| 133 |
+
|
| 134 |
+
rotation_matrix = torch.stack([
|
| 135 |
+
r00, r01, r02,
|
| 136 |
+
r10, r11, r12,
|
| 137 |
+
r20, r21, r22
|
| 138 |
+
], dim=-1)
|
| 139 |
+
|
| 140 |
+
return rotation_matrix.reshape(quat.shape[:-1] + (3, 3))
|
| 141 |
+
|
| 142 |
+
def quat_to_transform_matrix(quat: torch.Tensor, pos: torch.Tensor) -> torch.Tensor:
|
| 143 |
+
"""
|
| 144 |
+
Convert quaternion and position to 4x4 transformation matrix.
|
| 145 |
+
"""
|
| 146 |
+
# rotation part
|
| 147 |
+
rotation = quat_to_rotation_matrix(quat)
|
| 148 |
+
batch_shape = rotation.shape[:-2]
|
| 149 |
+
|
| 150 |
+
# homogeneous transformation matrix
|
| 151 |
+
transform = torch.zeros(batch_shape + (4, 4), dtype=rotation.dtype, device=rotation.device)
|
| 152 |
+
transform[..., :3, :3] = rotation
|
| 153 |
+
transform[..., :3, 3] = pos
|
| 154 |
+
transform[..., 3, 3] = 1.0
|
| 155 |
+
|
| 156 |
+
return transform
|
| 157 |
+
|
| 158 |
+
def compute_rest_local_positions(
|
| 159 |
+
joint_positions: torch.Tensor,
|
| 160 |
+
parent_indices: List[int]
|
| 161 |
+
) -> torch.Tensor:
|
| 162 |
+
"""
|
| 163 |
+
Compute local positions relative to parent joints from global joint positions.
|
| 164 |
+
"""
|
| 165 |
+
|
| 166 |
+
num_joints = joint_positions.shape[0]
|
| 167 |
+
local_positions = torch.zeros_like(joint_positions)
|
| 168 |
+
|
| 169 |
+
for j in range(num_joints):
|
| 170 |
+
parent_idx = parent_indices[j]
|
| 171 |
+
|
| 172 |
+
if parent_idx >= 0 and parent_idx != j and parent_idx < num_joints:
|
| 173 |
+
# Child joint: local offset = global_pos - parent_global_pos
|
| 174 |
+
local_positions[j] = joint_positions[j] - joint_positions[parent_idx]
|
| 175 |
+
else:
|
| 176 |
+
# Root joint: use global position as local position
|
| 177 |
+
local_positions[j] = joint_positions[j]
|
| 178 |
+
|
| 179 |
+
return local_positions
|
animation/utils/render_first_frame.py
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
|
| 2 |
+
#
|
| 3 |
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
| 4 |
+
# you may not use this file except in compliance with the License.
|
| 5 |
+
# You may obtain a copy of the License at
|
| 6 |
+
#
|
| 7 |
+
# http://www.apache.org/licenses/LICENSE-2.0
|
| 8 |
+
#
|
| 9 |
+
# Unless required by applicable law or agreed to in writing, software
|
| 10 |
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
| 11 |
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| 12 |
+
# See the License for the specific language governing permissions and
|
| 13 |
+
# limitations under the License.
|
| 14 |
+
|
| 15 |
+
import os
|
| 16 |
+
import json
|
| 17 |
+
import argparse
|
| 18 |
+
from pathlib import Path
|
| 19 |
+
|
| 20 |
+
import torch
|
| 21 |
+
from pytorch3d.io import load_objs_as_meshes
|
| 22 |
+
from pytorch3d.renderer import TexturesVertex
|
| 23 |
+
from pytorch3d.structures import Meshes
|
| 24 |
+
from PIL import Image
|
| 25 |
+
|
| 26 |
+
from renderer import MeshRenderer3D
|
| 27 |
+
from utils.save_utils import render_single_mesh
|
| 28 |
+
|
| 29 |
+
|
| 30 |
+
def render_mesh_all_cameras(mesh_path, cameras_dir, output_dir="renders", image_size=512, device="cuda:0"):
|
| 31 |
+
"""
|
| 32 |
+
Render mesh from all camera viewpoints in the cameras directory.
|
| 33 |
+
|
| 34 |
+
Args:
|
| 35 |
+
mesh_path: Path to OBJ mesh file
|
| 36 |
+
cameras_dir: Directory containing camera JSON config files
|
| 37 |
+
output_dir: Output directory for rendered images
|
| 38 |
+
image_size: Output image size
|
| 39 |
+
device: Device to use
|
| 40 |
+
"""
|
| 41 |
+
cameras_dir = Path(cameras_dir)
|
| 42 |
+
output_dir = Path(output_dir)
|
| 43 |
+
|
| 44 |
+
# Find all JSON camera config files
|
| 45 |
+
json_files = list(cameras_dir.glob("*.json"))
|
| 46 |
+
if not json_files:
|
| 47 |
+
print(f"No JSON camera files found in {cameras_dir}")
|
| 48 |
+
return
|
| 49 |
+
|
| 50 |
+
print(f"Found {len(json_files)} camera configurations")
|
| 51 |
+
|
| 52 |
+
# Render from each camera viewpoint
|
| 53 |
+
for json_file in json_files:
|
| 54 |
+
# Load camera config
|
| 55 |
+
with open(json_file, 'r') as f:
|
| 56 |
+
cam_params = json.load(f)
|
| 57 |
+
|
| 58 |
+
# Setup renderer for this camera
|
| 59 |
+
renderer = MeshRenderer3D(device=device, image_size=image_size, cam_params=cam_params)
|
| 60 |
+
|
| 61 |
+
camera_name = json_file.stem
|
| 62 |
+
output_path = output_dir / f"render_{camera_name}.png"
|
| 63 |
+
|
| 64 |
+
render_single_mesh(renderer, mesh_path, str(output_path))
|
| 65 |
+
|
| 66 |
+
print(f"All renders saved to: {output_dir}")
|
| 67 |
+
|
| 68 |
+
def main():
|
| 69 |
+
parser = argparse.ArgumentParser(description="Render a mesh to an image")
|
| 70 |
+
parser.add_argument('--input_path', type=str, help="base input path")
|
| 71 |
+
parser.add_argument('--seq_name', type=str, help="sequence name")
|
| 72 |
+
parser.add_argument("--cameras_dir", default="utils/cameras", help="Camera config JSON file")
|
| 73 |
+
parser.add_argument("-s", "--size", type=int, default=512, help="Image size")
|
| 74 |
+
parser.add_argument("-d", "--device", default="cuda:0", help="Device to use")
|
| 75 |
+
|
| 76 |
+
args = parser.parse_args()
|
| 77 |
+
|
| 78 |
+
mesh_path = f'{args.input_path}/{args.seq_name}/objs/mesh.obj'
|
| 79 |
+
if not os.path.exists(mesh_path):
|
| 80 |
+
print(f"Error: Mesh file not found: {mesh_path}")
|
| 81 |
+
output_dir = f'{args.input_path}/{args.seq_name}/first_frames/'
|
| 82 |
+
os.makedirs(output_dir, exist_ok=True)
|
| 83 |
+
|
| 84 |
+
render_mesh_all_cameras(
|
| 85 |
+
mesh_path=mesh_path,
|
| 86 |
+
cameras_dir=args.cameras_dir,
|
| 87 |
+
output_dir=output_dir,
|
| 88 |
+
image_size=args.size,
|
| 89 |
+
device=args.device
|
| 90 |
+
)
|
| 91 |
+
|
| 92 |
+
if __name__ == "__main__":
|
| 93 |
+
main()
|
animation/utils/save_flow.py
ADDED
|
@@ -0,0 +1,288 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
|
| 2 |
+
|
| 3 |
+
#!/usr/bin/env python3
|
| 4 |
+
# -*- coding: utf-8 -*-
|
| 5 |
+
"""
|
| 6 |
+
This module processes PNG frame sequences to generate optical flow using PTLFlow,
|
| 7 |
+
with support for visualization and video generation.
|
| 8 |
+
"""
|
| 9 |
+
|
| 10 |
+
import argparse
|
| 11 |
+
import os
|
| 12 |
+
import subprocess
|
| 13 |
+
import shutil
|
| 14 |
+
import logging
|
| 15 |
+
from pathlib import Path
|
| 16 |
+
from typing import List, Tuple, Optional, Union
|
| 17 |
+
|
| 18 |
+
import cv2 as cv
|
| 19 |
+
import torch
|
| 20 |
+
import numpy as np
|
| 21 |
+
from tqdm import tqdm
|
| 22 |
+
|
| 23 |
+
from third_partys.ptlflow.ptlflow.utils import flow_utils
|
| 24 |
+
from third_partys.ptlflow.ptlflow.utils.io_adapter import IOAdapter
|
| 25 |
+
import third_partys.ptlflow.ptlflow as ptlflow
|
| 26 |
+
|
| 27 |
+
class OpticalFlowProcessor:
|
| 28 |
+
"""Handles optical flow computation and visualization."""
|
| 29 |
+
|
| 30 |
+
def __init__(
|
| 31 |
+
self,
|
| 32 |
+
model_name: str = 'dpflow',
|
| 33 |
+
checkpoint: str = 'sintel',
|
| 34 |
+
device: Optional[str] = None,
|
| 35 |
+
resize_to: Optional[Tuple[int, int]] = None
|
| 36 |
+
):
|
| 37 |
+
"""
|
| 38 |
+
Initialize optical flow processor.
|
| 39 |
+
|
| 40 |
+
Args:
|
| 41 |
+
model_name: Name of the flow model to use
|
| 42 |
+
checkpoint: Checkpoint/dataset name for the model
|
| 43 |
+
device: Device to run on (auto-detect if None)
|
| 44 |
+
resize_to: Optional (width, height) to resize frames
|
| 45 |
+
"""
|
| 46 |
+
self.model_name = model_name
|
| 47 |
+
self.checkpoint = checkpoint
|
| 48 |
+
self.device = device or ('cuda' if torch.cuda.is_available() else 'cpu')
|
| 49 |
+
self.resize_to = resize_to
|
| 50 |
+
|
| 51 |
+
# Initialize model
|
| 52 |
+
self.model = ptlflow.get_model(model_name, ckpt_path=checkpoint).to(self.device).eval()
|
| 53 |
+
print(f"Loaded {model_name} model on {self.device}")
|
| 54 |
+
|
| 55 |
+
self.io_adapter = None
|
| 56 |
+
|
| 57 |
+
def load_frame_sequence(self, frames_dir: Union[str, Path]) -> Tuple[List[np.ndarray], List[Path]]:
|
| 58 |
+
"""
|
| 59 |
+
Load PNG frame sequence from directory.
|
| 60 |
+
"""
|
| 61 |
+
frames_dir = Path(frames_dir)
|
| 62 |
+
|
| 63 |
+
if not frames_dir.exists():
|
| 64 |
+
raise FileNotFoundError(f"Frames directory not found: {frames_dir}")
|
| 65 |
+
|
| 66 |
+
# Find PNG files and sort naturally
|
| 67 |
+
png_files = list(frames_dir.glob('*.png'))
|
| 68 |
+
if len(png_files) < 2:
|
| 69 |
+
raise ValueError(f"Need at least 2 PNG frames, found {len(png_files)} in {frames_dir}")
|
| 70 |
+
|
| 71 |
+
# Natural sorting for proper frame order
|
| 72 |
+
png_files.sort(key=lambda x: self._natural_sort_key(x.name))
|
| 73 |
+
|
| 74 |
+
frames = []
|
| 75 |
+
for png_path in tqdm(png_files, desc="Loading frames"):
|
| 76 |
+
# Load image in color
|
| 77 |
+
img_bgr = cv.imread(str(png_path), cv.IMREAD_COLOR)
|
| 78 |
+
|
| 79 |
+
if self.resize_to:
|
| 80 |
+
img_bgr = cv.resize(img_bgr, self.resize_to, cv.INTER_LINEAR)
|
| 81 |
+
|
| 82 |
+
img_rgb = cv.cvtColor(img_bgr, cv.COLOR_BGR2RGB)
|
| 83 |
+
frames.append(img_rgb)
|
| 84 |
+
|
| 85 |
+
return frames, png_files
|
| 86 |
+
|
| 87 |
+
def _natural_sort_key(self, filename: str) -> List[Union[int, str]]:
|
| 88 |
+
"""Natural sorting key for filenames with numbers."""
|
| 89 |
+
import re
|
| 90 |
+
return [int(text) if text.isdigit() else text.lower()
|
| 91 |
+
for text in re.split('([0-9]+)', filename)]
|
| 92 |
+
|
| 93 |
+
def compute_optical_flow_sequence(
|
| 94 |
+
self,
|
| 95 |
+
frames: List[np.ndarray],
|
| 96 |
+
flow_vis_dir: Union[str, Path],
|
| 97 |
+
flow_save_dir: Optional[Union[str, Path]] = None,
|
| 98 |
+
save_visualizations: bool = True
|
| 99 |
+
) -> List[torch.Tensor]:
|
| 100 |
+
"""
|
| 101 |
+
Compute optical flow for entire frame sequence.
|
| 102 |
+
"""
|
| 103 |
+
if len(frames) < 2:
|
| 104 |
+
raise ValueError("Need at least 2 frames for optical flow")
|
| 105 |
+
|
| 106 |
+
flow_vis_dir = Path(flow_vis_dir)
|
| 107 |
+
flow_save_dir = Path(flow_save_dir) if flow_save_dir else flow_vis_dir
|
| 108 |
+
|
| 109 |
+
H, W = frames[0].shape[:2]
|
| 110 |
+
|
| 111 |
+
# Initialize IO adapter
|
| 112 |
+
if self.io_adapter is None:
|
| 113 |
+
self.io_adapter = IOAdapter(self.model, (H, W))
|
| 114 |
+
|
| 115 |
+
flows = []
|
| 116 |
+
for i in tqdm(range(len(frames) - 1), desc="Computing optical flow"):
|
| 117 |
+
# Prepare frame pair
|
| 118 |
+
frame_pair = [frames[i], frames[i + 1]]
|
| 119 |
+
raw_inputs = self.io_adapter.prepare_inputs(frame_pair)
|
| 120 |
+
|
| 121 |
+
imgs = raw_inputs['images'][0] # (2, 3, H, W)
|
| 122 |
+
|
| 123 |
+
pair_tensor = torch.stack((imgs[0:1], imgs[1:2]), dim=1).squeeze(0) # (1, 2, 3, H, W)
|
| 124 |
+
pair_tensor = pair_tensor.to(self.device, non_blocking=True).contiguous()
|
| 125 |
+
|
| 126 |
+
with torch.no_grad():
|
| 127 |
+
flow_result = self.model({'images': pair_tensor.unsqueeze(0)})
|
| 128 |
+
flow = flow_result['flows'][0] # (1, 2, H, W)
|
| 129 |
+
|
| 130 |
+
flows.append(flow)
|
| 131 |
+
|
| 132 |
+
if save_visualizations:
|
| 133 |
+
self._save_flow_outputs(flow, i, flow_vis_dir, flow_save_dir)
|
| 134 |
+
|
| 135 |
+
return flows
|
| 136 |
+
|
| 137 |
+
def _save_flow_outputs(
|
| 138 |
+
self,
|
| 139 |
+
flow_tensor: torch.Tensor,
|
| 140 |
+
frame_idx: int,
|
| 141 |
+
viz_dir: Path,
|
| 142 |
+
flow_dir: Path
|
| 143 |
+
) -> None:
|
| 144 |
+
"""Save flow outputs in both .flo and visualization formats."""
|
| 145 |
+
# Save raw flow (.flo format)
|
| 146 |
+
flow_hw2 = flow_tensor[0] # (2, H, W)
|
| 147 |
+
flow_np = flow_hw2.permute(1, 2, 0).cpu().numpy() # (H, W, 2)
|
| 148 |
+
|
| 149 |
+
flow_path = flow_dir / f'flow_{frame_idx:04d}.flo'
|
| 150 |
+
flow_utils.flow_write(flow_path, flow_np)
|
| 151 |
+
|
| 152 |
+
# Save visualization
|
| 153 |
+
flow_rgb = flow_utils.flow_to_rgb(flow_tensor)[0] # Remove batch dimension
|
| 154 |
+
|
| 155 |
+
if flow_rgb.dim() == 4: # (Npred, 3, H, W)
|
| 156 |
+
flow_rgb = flow_rgb[0]
|
| 157 |
+
|
| 158 |
+
flow_rgb_np = (flow_rgb * 255).byte().permute(1, 2, 0).cpu().numpy() # (H, W, 3)
|
| 159 |
+
viz_bgr = cv.cvtColor(flow_rgb_np, cv.COLOR_RGB2BGR)
|
| 160 |
+
|
| 161 |
+
viz_path = viz_dir / f'flow_viz_{frame_idx:04d}.png'
|
| 162 |
+
cv.imwrite(str(viz_path), viz_bgr)
|
| 163 |
+
|
| 164 |
+
def create_flow_video(
|
| 165 |
+
image_dir: Union[str, Path],
|
| 166 |
+
output_filename: str = 'flow.mp4',
|
| 167 |
+
fps: int = 10,
|
| 168 |
+
pattern: str = 'flow_viz_*.png',
|
| 169 |
+
cleanup_temp: bool = True
|
| 170 |
+
) -> bool:
|
| 171 |
+
"""
|
| 172 |
+
Create MP4 video from flow visualization images.
|
| 173 |
+
"""
|
| 174 |
+
image_dir = Path(image_dir)
|
| 175 |
+
|
| 176 |
+
if not image_dir.exists():
|
| 177 |
+
print(f"Image directory not found: {image_dir}")
|
| 178 |
+
|
| 179 |
+
image_files = sorted(image_dir.glob(pattern))
|
| 180 |
+
if not image_files:
|
| 181 |
+
print(f"No images found matching pattern '{pattern}' in {image_dir}")
|
| 182 |
+
|
| 183 |
+
temp_dir = image_dir / 'temp_sequence'
|
| 184 |
+
temp_dir.mkdir(exist_ok=True)
|
| 185 |
+
|
| 186 |
+
try:
|
| 187 |
+
# Copy files with sequential naming
|
| 188 |
+
for i, img_file in enumerate(image_files):
|
| 189 |
+
temp_name = temp_dir / f'frame_{i:05d}.png'
|
| 190 |
+
shutil.copy2(img_file, temp_name)
|
| 191 |
+
|
| 192 |
+
# Create video using ffmpeg
|
| 193 |
+
output_path = image_dir / output_filename
|
| 194 |
+
|
| 195 |
+
cmd = [
|
| 196 |
+
'ffmpeg', '-y',
|
| 197 |
+
'-framerate', str(fps),
|
| 198 |
+
'-i', str(temp_dir / 'frame_%05d.png'),
|
| 199 |
+
'-c:v', 'libx264',
|
| 200 |
+
'-pix_fmt', 'yuv420p',
|
| 201 |
+
str(output_path)
|
| 202 |
+
]
|
| 203 |
+
|
| 204 |
+
subprocess.run(
|
| 205 |
+
cmd,
|
| 206 |
+
capture_output=True,
|
| 207 |
+
text=True,
|
| 208 |
+
check=True
|
| 209 |
+
)
|
| 210 |
+
return True
|
| 211 |
+
except Exception as e:
|
| 212 |
+
print(f"Video creation failed: {e}")
|
| 213 |
+
return False
|
| 214 |
+
finally:
|
| 215 |
+
if cleanup_temp and temp_dir.exists():
|
| 216 |
+
shutil.rmtree(temp_dir)
|
| 217 |
+
|
| 218 |
+
def main(
|
| 219 |
+
frames_dir: Union[str, Path],
|
| 220 |
+
flow_vis_dir: Union[str, Path] = 'flow_out',
|
| 221 |
+
flow_save_dir: Optional[Union[str, Path]] = None,
|
| 222 |
+
resize_to: Optional[Tuple[int, int]] = None,
|
| 223 |
+
model_name: str = 'dpflow',
|
| 224 |
+
checkpoint: str = 'sintel'
|
| 225 |
+
) -> bool:
|
| 226 |
+
|
| 227 |
+
# Initialize processor
|
| 228 |
+
processor = OpticalFlowProcessor(
|
| 229 |
+
model_name=model_name,
|
| 230 |
+
checkpoint=checkpoint,
|
| 231 |
+
resize_to=resize_to
|
| 232 |
+
)
|
| 233 |
+
|
| 234 |
+
# Load frames
|
| 235 |
+
frames, png_paths = processor.load_frame_sequence(frames_dir)
|
| 236 |
+
|
| 237 |
+
# Compute optical flow
|
| 238 |
+
flows = processor.compute_optical_flow_sequence(
|
| 239 |
+
frames=frames,
|
| 240 |
+
flow_vis_dir=flow_vis_dir,
|
| 241 |
+
flow_save_dir=flow_save_dir,
|
| 242 |
+
save_visualizations=True
|
| 243 |
+
)
|
| 244 |
+
|
| 245 |
+
# Create video
|
| 246 |
+
create_flow_video(flow_vis_dir)
|
| 247 |
+
|
| 248 |
+
def get_parser():
|
| 249 |
+
parser = argparse.ArgumentParser(description="Optical flow inference on frame sequences")
|
| 250 |
+
|
| 251 |
+
parser.add_argument('--input_path', type=str, help="base input path")
|
| 252 |
+
parser.add_argument('--seq_name', type=str, help="sequence name")
|
| 253 |
+
parser.add_argument('--model_name', type=str, default='dpflow', help="Optical flow model to use")
|
| 254 |
+
parser.add_argument('--checkpoint', type=str, default='sintel', help="Model checkpoint/dataset name")
|
| 255 |
+
parser.add_argument('--resize_width', type=int, default=None, help="Resize frame width (must specify both width and height)")
|
| 256 |
+
parser.add_argument('--resize_height', type=int, default=None, help="Resize frame height (must specify both width and height)")
|
| 257 |
+
parser.add_argument('--fps', type=int, default=10, help="Frame rate for output video")
|
| 258 |
+
|
| 259 |
+
return parser
|
| 260 |
+
|
| 261 |
+
if __name__ == '__main__':
|
| 262 |
+
parser = get_parser()
|
| 263 |
+
args = parser.parse_args()
|
| 264 |
+
|
| 265 |
+
# Path
|
| 266 |
+
frames_dir = f'{args.input_path}/{args.seq_name}/imgs'
|
| 267 |
+
flow_vis_dir = frames_dir.replace("imgs", "flow_vis")
|
| 268 |
+
flow_save_dir = frames_dir.replace("imgs", "flow")
|
| 269 |
+
|
| 270 |
+
os.makedirs(flow_vis_dir, exist_ok=True)
|
| 271 |
+
os.makedirs(flow_save_dir, exist_ok=True)
|
| 272 |
+
|
| 273 |
+
# Prepare resize parameter
|
| 274 |
+
resize_to = None
|
| 275 |
+
if args.resize_width and args.resize_height:
|
| 276 |
+
resize_to = (args.resize_width, args.resize_height)
|
| 277 |
+
|
| 278 |
+
# Process optical flow
|
| 279 |
+
success = main(
|
| 280 |
+
frames_dir=frames_dir,
|
| 281 |
+
flow_vis_dir=flow_vis_dir,
|
| 282 |
+
flow_save_dir=flow_save_dir,
|
| 283 |
+
resize_to=resize_to,
|
| 284 |
+
model_name=args.model_name,
|
| 285 |
+
checkpoint=args.checkpoint
|
| 286 |
+
)
|
| 287 |
+
|
| 288 |
+
print("Optical flow processing completed successfully")
|
animation/utils/save_utils.py
ADDED
|
@@ -0,0 +1,374 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
|
| 2 |
+
#
|
| 3 |
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
| 4 |
+
# you may not use this file except in compliance with the License.
|
| 5 |
+
# You may obtain a copy of the License at
|
| 6 |
+
#
|
| 7 |
+
# http://www.apache.org/licenses/LICENSE-2.0
|
| 8 |
+
#
|
| 9 |
+
# Unless required by applicable law or agreed to in writing, software
|
| 10 |
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
| 11 |
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| 12 |
+
# See the License for the specific language governing permissions and
|
| 13 |
+
# limitations under the License.
|
| 14 |
+
|
| 15 |
+
from pytorch3d.io import load_obj
|
| 16 |
+
from pytorch3d.renderer import TexturesAtlas
|
| 17 |
+
from pytorch3d.structures import Meshes
|
| 18 |
+
|
| 19 |
+
import os
|
| 20 |
+
import torch
|
| 21 |
+
import json
|
| 22 |
+
import numpy as np
|
| 23 |
+
from tqdm import tqdm
|
| 24 |
+
from pathlib import Path
|
| 25 |
+
import subprocess
|
| 26 |
+
from PIL import Image
|
| 27 |
+
from scipy.ndimage import gaussian_filter1d
|
| 28 |
+
from third_partys.co_tracker.save_track import save_track
|
| 29 |
+
|
| 30 |
+
def render_single_mesh(renderer, mesh_path, out_path="render_result.png", atlas_size=8):
|
| 31 |
+
"""
|
| 32 |
+
Test render a single mesh and save the result.
|
| 33 |
+
"""
|
| 34 |
+
device = renderer.device
|
| 35 |
+
|
| 36 |
+
verts, faces, aux = load_obj(
|
| 37 |
+
mesh_path,
|
| 38 |
+
device=device,
|
| 39 |
+
load_textures=True,
|
| 40 |
+
create_texture_atlas=True,
|
| 41 |
+
texture_atlas_size=atlas_size,
|
| 42 |
+
texture_wrap="repeat"
|
| 43 |
+
)
|
| 44 |
+
atlas = aux.texture_atlas # (F, atlas_size, atlas_size, 3)
|
| 45 |
+
|
| 46 |
+
vmin, vmax = verts.min(0).values, verts.max(0).values
|
| 47 |
+
center = (vmax + vmin) / 2.
|
| 48 |
+
scale = (vmax - vmin).max()
|
| 49 |
+
verts = (verts - center) / scale
|
| 50 |
+
|
| 51 |
+
mesh_norm = Meshes(
|
| 52 |
+
verts=[verts],
|
| 53 |
+
faces=[faces.verts_idx],
|
| 54 |
+
textures=TexturesAtlas(atlas=[atlas])
|
| 55 |
+
)
|
| 56 |
+
with torch.no_grad():
|
| 57 |
+
rendered = renderer.render(mesh_norm) # shape=[1, H, W, 4]
|
| 58 |
+
|
| 59 |
+
rendered_img = renderer.tensor_to_image(rendered)
|
| 60 |
+
|
| 61 |
+
pil_img = Image.fromarray(rendered_img)
|
| 62 |
+
pil_img.save(out_path)
|
| 63 |
+
print(f"Saved render to {out_path}")
|
| 64 |
+
|
| 65 |
+
def apply_gaussian_smoothing(data, sigma = 1.0, preserve_first_frame = True, eps = 1e-8):
|
| 66 |
+
"""
|
| 67 |
+
Apply Gaussian smoothing along the time axis with quaternion normalization.
|
| 68 |
+
"""
|
| 69 |
+
smoothed = gaussian_filter1d(data, sigma=sigma, axis=0)
|
| 70 |
+
|
| 71 |
+
# Preserve first frame if requested
|
| 72 |
+
if preserve_first_frame and data.shape[0] > 0:
|
| 73 |
+
smoothed[0] = data[0]
|
| 74 |
+
|
| 75 |
+
if data.shape[-1] == 4:
|
| 76 |
+
norms = np.linalg.norm(smoothed, axis=-1, keepdims=True)
|
| 77 |
+
smoothed = smoothed / np.maximum(norms, eps)
|
| 78 |
+
|
| 79 |
+
return smoothed
|
| 80 |
+
|
| 81 |
+
def render_single_view_sequence(quats, root_quats, root_pos, renderer, model, output_dir, view_name, fps = 25):
|
| 82 |
+
"""
|
| 83 |
+
Render animation sequence from a single viewpoint.
|
| 84 |
+
"""
|
| 85 |
+
output_dir = Path(output_dir)
|
| 86 |
+
output_dir.mkdir(parents=True, exist_ok=True)
|
| 87 |
+
|
| 88 |
+
T = quats.shape[0]
|
| 89 |
+
|
| 90 |
+
model.animate(quats, root_quats, root_pos)
|
| 91 |
+
|
| 92 |
+
for i in tqdm(range(T), desc=f"Rendering {view_name}"):
|
| 93 |
+
mesh = model.get_mesh(i)
|
| 94 |
+
rendered = renderer.render(mesh)
|
| 95 |
+
|
| 96 |
+
img_array = renderer.tensor_to_image(rendered)
|
| 97 |
+
img = Image.fromarray(img_array)
|
| 98 |
+
|
| 99 |
+
frame_path = output_dir / f"{view_name}_frame_{i:04d}.png"
|
| 100 |
+
img.save(frame_path)
|
| 101 |
+
|
| 102 |
+
# Create video
|
| 103 |
+
video_path = output_dir / f"{view_name}_output_video.mp4"
|
| 104 |
+
cmd = f"ffmpeg -y -framerate {fps} -i {output_dir}/{view_name}_frame_%04d.png -c:v libx264 -pix_fmt yuv420p {video_path}"
|
| 105 |
+
subprocess.call(cmd, shell=True)
|
| 106 |
+
|
| 107 |
+
def save_and_smooth_results(args, model, renderer, final_quats, root_quats, root_pos, out_dir, additional_renderers = None, load_pt = False, sigma = 1.0, fps = 25):
|
| 108 |
+
"""
|
| 109 |
+
Save and smooth animation results with multi-view rendering.
|
| 110 |
+
"""
|
| 111 |
+
device = final_quats.device
|
| 112 |
+
T = final_quats.shape[0]
|
| 113 |
+
# Save Raw Results
|
| 114 |
+
if not load_pt:
|
| 115 |
+
raw_dir = os.path.join(out_dir, "raw")
|
| 116 |
+
os.makedirs(raw_dir, exist_ok=True)
|
| 117 |
+
|
| 118 |
+
torch.save(final_quats, os.path.join(raw_dir, "local_quats.pt"))
|
| 119 |
+
torch.save(root_quats, os.path.join(raw_dir, "root_quats.pt"))
|
| 120 |
+
torch.save(root_pos, os.path.join(raw_dir, "root_pos.pt"))
|
| 121 |
+
if hasattr(model, 'rest_local_positions'):
|
| 122 |
+
torch.save(model.rest_local_positions, os.path.join(raw_dir, "rest_local_positions.pt"))
|
| 123 |
+
|
| 124 |
+
print(f"Saved raw motion to {raw_dir}")
|
| 125 |
+
|
| 126 |
+
quats_np = final_quats.cpu().numpy()
|
| 127 |
+
root_quats_np = root_quats.cpu().numpy()
|
| 128 |
+
root_pos_np = root_pos.cpu().numpy()
|
| 129 |
+
|
| 130 |
+
# Apply Gaussian smoothing if enabled
|
| 131 |
+
if args.gauss_filter:
|
| 132 |
+
print(f"Applying Gaussian smoothing (sigma={sigma})")
|
| 133 |
+
|
| 134 |
+
smooth_quats_np = apply_gaussian_smoothing(
|
| 135 |
+
quats_np, sigma=sigma, preserve_first_frame=True
|
| 136 |
+
)
|
| 137 |
+
smooth_root_quats_np = apply_gaussian_smoothing(
|
| 138 |
+
root_quats_np, sigma=sigma, preserve_first_frame=True
|
| 139 |
+
)
|
| 140 |
+
smooth_root_pos_np = apply_gaussian_smoothing(
|
| 141 |
+
root_pos_np, sigma=sigma, preserve_first_frame=True
|
| 142 |
+
)
|
| 143 |
+
smooth_dir = os.path.join(out_dir, "smoothed")
|
| 144 |
+
os.makedirs(smooth_dir, exist_ok=True)
|
| 145 |
+
save_dir = smooth_dir
|
| 146 |
+
|
| 147 |
+
else:
|
| 148 |
+
smooth_quats_np = quats_np
|
| 149 |
+
smooth_root_quats_np = root_quats_np
|
| 150 |
+
smooth_root_pos_np = root_pos_np
|
| 151 |
+
save_dir = raw_dir
|
| 152 |
+
|
| 153 |
+
smooth_quats = torch.tensor(smooth_quats_np, dtype=torch.float32, device=device)
|
| 154 |
+
smooth_root_quats = torch.tensor(smooth_root_quats_np, dtype=torch.float32, device=device)
|
| 155 |
+
smooth_root_pos = torch.tensor(smooth_root_pos_np, dtype=torch.float32, device=device)
|
| 156 |
+
|
| 157 |
+
# Render Sequences
|
| 158 |
+
if not load_pt and args.gauss_filter:
|
| 159 |
+
smooth_dir_path = Path(smooth_dir)
|
| 160 |
+
torch.save(smooth_quats, smooth_dir_path / "local_quats.pt")
|
| 161 |
+
torch.save(smooth_root_quats, smooth_dir_path / "root_quats.pt")
|
| 162 |
+
torch.save(smooth_root_pos, smooth_dir_path / "root_pos.pt")
|
| 163 |
+
print(f"Saved smoothed motion to {smooth_dir}")
|
| 164 |
+
|
| 165 |
+
# Render main view
|
| 166 |
+
print(f"Rendering {args.main_renderer} view ({T} frames)")
|
| 167 |
+
render_single_view_sequence(
|
| 168 |
+
smooth_quats, smooth_root_quats, smooth_root_pos,
|
| 169 |
+
renderer, model, save_dir, args.main_renderer, fps
|
| 170 |
+
)
|
| 171 |
+
|
| 172 |
+
# Render additional views if provided
|
| 173 |
+
if additional_renderers:
|
| 174 |
+
for renderer_key, view_renderer in additional_renderers.items():
|
| 175 |
+
view_name = renderer_key.replace("_renderer", "")
|
| 176 |
+
render_single_view_sequence(
|
| 177 |
+
smooth_quats, smooth_root_quats, smooth_root_pos,
|
| 178 |
+
view_renderer, model, save_dir, view_name, fps
|
| 179 |
+
)
|
| 180 |
+
|
| 181 |
+
def save_args(args, output_dir, filename="config.json"):
|
| 182 |
+
args_dict = vars(args)
|
| 183 |
+
os.makedirs(output_dir, exist_ok=True)
|
| 184 |
+
|
| 185 |
+
config_path = os.path.join(output_dir, filename)
|
| 186 |
+
with open(config_path, 'w') as f:
|
| 187 |
+
json.dump(args_dict, f, indent=4)
|
| 188 |
+
|
| 189 |
+
def visualize_joints_on_mesh(model, renderer, seq_name, out_dir):
|
| 190 |
+
"""
|
| 191 |
+
Render mesh with joint visualizations and return visibility mask.
|
| 192 |
+
"""
|
| 193 |
+
joints_2d = renderer.project_points(model.joints_rest)
|
| 194 |
+
|
| 195 |
+
mesh = model.get_mesh()
|
| 196 |
+
image_with_joints, vis_mask = renderer.render_with_points(mesh, model.joints_rest)
|
| 197 |
+
image_np = image_with_joints[0].cpu().numpy()
|
| 198 |
+
if image_np.shape[2] == 4:
|
| 199 |
+
image_rgb = image_np[..., :3]
|
| 200 |
+
else:
|
| 201 |
+
image_rgb = image_np
|
| 202 |
+
if image_rgb.max() <= 1.0:
|
| 203 |
+
image_rgb = (image_rgb * 255).astype(np.uint8)
|
| 204 |
+
img = Image.fromarray(image_rgb)
|
| 205 |
+
output_path = f"{out_dir}/mesh_with_joints_{seq_name}_visible.png"
|
| 206 |
+
img.save(output_path)
|
| 207 |
+
return vis_mask
|
| 208 |
+
|
| 209 |
+
def visualize_points_on_mesh(model, renderer, seq_name, out_dir):
|
| 210 |
+
"""
|
| 211 |
+
Render mesh with point visualizations and return visibility mask.
|
| 212 |
+
"""
|
| 213 |
+
points_2d = renderer.project_points(model.vertices[0])
|
| 214 |
+
|
| 215 |
+
mesh = model.get_mesh()
|
| 216 |
+
image_with_points, vis_mask = renderer.render_with_points(mesh, model.vertices[0], for_vertices=True)
|
| 217 |
+
image_np = image_with_points[0].cpu().numpy()
|
| 218 |
+
if image_np.shape[2] == 4:
|
| 219 |
+
image_rgb = image_np[..., :3]
|
| 220 |
+
else:
|
| 221 |
+
image_rgb = image_np
|
| 222 |
+
if image_rgb.max() <= 1.0:
|
| 223 |
+
image_rgb = (image_rgb * 255).astype(np.uint8)
|
| 224 |
+
img = Image.fromarray(image_rgb)
|
| 225 |
+
output_path = f"{out_dir}/mesh_with_verts_{seq_name}_visible.png"
|
| 226 |
+
img.save(output_path)
|
| 227 |
+
return vis_mask
|
| 228 |
+
|
| 229 |
+
def save_track_points(point_vis_mask, renderer, model, img_path, out_dir, args):
|
| 230 |
+
"""
|
| 231 |
+
Save and track selected points on the mesh with intelligent sampling.
|
| 232 |
+
"""
|
| 233 |
+
|
| 234 |
+
vertex_project_2d = renderer.project_points(model.vertices[0])
|
| 235 |
+
visible_indices = torch.where(point_vis_mask)[0]
|
| 236 |
+
|
| 237 |
+
track_2d_point_path = img_path.replace('imgs', 'track_2d_verts')
|
| 238 |
+
os.makedirs(track_2d_point_path, exist_ok=True)
|
| 239 |
+
|
| 240 |
+
num_visible = len(visible_indices)
|
| 241 |
+
MAX_VISIBLE_POINTS = 15000
|
| 242 |
+
MAX_SAMPLE_POINTS = 4000
|
| 243 |
+
|
| 244 |
+
# Determine tracking strategy
|
| 245 |
+
tracking_mode = "full" if num_visible <= MAX_VISIBLE_POINTS else "sampled"
|
| 246 |
+
|
| 247 |
+
if not os.listdir(track_2d_point_path):
|
| 248 |
+
# Generate new tracking data
|
| 249 |
+
if tracking_mode == "full":
|
| 250 |
+
print(f"Saving tracks for all visible vertices (count: {num_visible})")
|
| 251 |
+
|
| 252 |
+
# Track all visible points
|
| 253 |
+
visible_vertex_project_2d = vertex_project_2d[visible_indices]
|
| 254 |
+
track_2d_point = save_track(
|
| 255 |
+
args.seq_name, visible_vertex_project_2d, img_path,
|
| 256 |
+
track_2d_point_path, out_dir, for_point=True
|
| 257 |
+
)
|
| 258 |
+
|
| 259 |
+
np.save(f'{track_2d_point_path}/visible_indices.npy',
|
| 260 |
+
visible_indices.cpu().numpy())
|
| 261 |
+
|
| 262 |
+
# Sample subset for final use
|
| 263 |
+
num_sample = min(MAX_SAMPLE_POINTS, num_visible)
|
| 264 |
+
sampled_local_indices = torch.randperm(num_visible)[:num_sample]
|
| 265 |
+
sampled_vertex_indices = visible_indices[sampled_local_indices]
|
| 266 |
+
np.save(f'{track_2d_point_path}/sampled_indices.npy',
|
| 267 |
+
sampled_vertex_indices.cpu().numpy())
|
| 268 |
+
|
| 269 |
+
else:
|
| 270 |
+
print(f"Too many visible vertices ({num_visible} > {MAX_VISIBLE_POINTS}), "
|
| 271 |
+
f"tracking only {MAX_SAMPLE_POINTS} sampled vertices")
|
| 272 |
+
|
| 273 |
+
# Sample points directly from visible set
|
| 274 |
+
num_sample = min(MAX_SAMPLE_POINTS, num_visible)
|
| 275 |
+
sampled_local_indices = torch.randperm(num_visible)[:num_sample]
|
| 276 |
+
sampled_vertex_indices = visible_indices[sampled_local_indices]
|
| 277 |
+
|
| 278 |
+
# Track only sampled points
|
| 279 |
+
sampled_vertex_project_2d = vertex_project_2d[sampled_vertex_indices]
|
| 280 |
+
track_2d_point = save_track(
|
| 281 |
+
args.seq_name, sampled_vertex_project_2d, img_path,
|
| 282 |
+
track_2d_point_path, out_dir, for_point=True
|
| 283 |
+
)
|
| 284 |
+
|
| 285 |
+
np.save(f'{track_2d_point_path}/visible_indices.npy',
|
| 286 |
+
visible_indices.cpu().numpy())
|
| 287 |
+
np.save(f'{track_2d_point_path}/sampled_indices.npy',
|
| 288 |
+
sampled_vertex_indices.cpu().numpy())
|
| 289 |
+
|
| 290 |
+
else:
|
| 291 |
+
# Load existing tracking data
|
| 292 |
+
print("Loading existing vertex tracks")
|
| 293 |
+
track_2d_point = np.load(f'{track_2d_point_path}/pred_tracks.npy')
|
| 294 |
+
|
| 295 |
+
visible_indices = np.load(f'{track_2d_point_path}/visible_indices.npy')
|
| 296 |
+
visible_indices = torch.from_numpy(visible_indices).long().to(args.device)
|
| 297 |
+
|
| 298 |
+
sampled_vertex_indices = np.load(f'{track_2d_point_path}/sampled_indices.npy')
|
| 299 |
+
sampled_vertex_indices = torch.from_numpy(sampled_vertex_indices).long().to(args.device)
|
| 300 |
+
|
| 301 |
+
track_2d_point = torch.from_numpy(track_2d_point).float().to(args.device)
|
| 302 |
+
|
| 303 |
+
# Create index mapping for tracking data
|
| 304 |
+
if tracking_mode == "full":
|
| 305 |
+
# Map from original vertex indices to positions in tracking data
|
| 306 |
+
vertex_to_track_idx = {idx.item(): i for i, idx in enumerate(visible_indices)}
|
| 307 |
+
|
| 308 |
+
track_indices = torch.tensor(
|
| 309 |
+
[vertex_to_track_idx[idx.item()] for idx in sampled_vertex_indices],
|
| 310 |
+
device=args.device, dtype=torch.long
|
| 311 |
+
)
|
| 312 |
+
else:
|
| 313 |
+
# Direct mapping for sampled-only tracking
|
| 314 |
+
track_indices = torch.arange(len(sampled_vertex_indices),
|
| 315 |
+
device=args.device, dtype=torch.long)
|
| 316 |
+
|
| 317 |
+
return track_2d_point, track_indices, sampled_vertex_indices
|
| 318 |
+
|
| 319 |
+
def save_final_video(args):
|
| 320 |
+
|
| 321 |
+
additional_views = [view.strip() for view in args.additional_renderers.split(',') if view.strip()]
|
| 322 |
+
if len(additional_views) > 3:
|
| 323 |
+
additional_views = additional_views[:3]
|
| 324 |
+
additional_views = [view for view in additional_views if view != args.main_renderer]
|
| 325 |
+
|
| 326 |
+
save_dir = 'raw' if not args.gauss_filter else 'smoothed'
|
| 327 |
+
import subprocess
|
| 328 |
+
cmd = (
|
| 329 |
+
f'ffmpeg '
|
| 330 |
+
f'-i {args.input_path}/{args.seq_name}/input.mp4 '
|
| 331 |
+
f'-i {args.save_path}/{args.seq_name}/{args.save_name}/{save_dir}/{args.main_renderer}_output_video.mp4 '
|
| 332 |
+
'-filter_complex "'
|
| 333 |
+
'[0:v][1:v]hstack=inputs=2[stacked]; '
|
| 334 |
+
'[stacked]drawtext=fontfile=/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf:text=\'gt\':x=(w/4-text_w/2):y=20:fontsize=24:fontcolor=white:box=1:boxcolor=black:boxborderw=10, '
|
| 335 |
+
f'drawtext=fontfile=/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf:text=\'ours\':x=(3*w/4-text_w/2):y=20:fontsize=24:fontcolor=white:box=1:boxcolor=black:boxborderw=10" '
|
| 336 |
+
f'-c:a copy {args.save_path}/{args.seq_name}/{args.save_name}/concat_output.mp4'
|
| 337 |
+
)
|
| 338 |
+
|
| 339 |
+
subprocess.call(cmd, shell=True)
|
| 340 |
+
cmd = (
|
| 341 |
+
f'ffmpeg '
|
| 342 |
+
f'-i {args.input_path}/{args.seq_name}/input.mp4 '
|
| 343 |
+
f'-i {args.save_path}/{args.seq_name}/{args.save_name}/{save_dir}/{args.main_renderer}_output_video.mp4 '
|
| 344 |
+
f'-i {args.save_path}/{args.seq_name}/{args.save_name}/{save_dir}/{additional_views[0]}_output_video.mp4 '
|
| 345 |
+
f'-i {args.save_path}/{args.seq_name}/{args.save_name}/{save_dir}/{additional_views[1]}_output_video.mp4 '
|
| 346 |
+
f'-i {args.save_path}/{args.seq_name}/{args.save_name}/{save_dir}/{additional_views[2]}_output_video.mp4 '
|
| 347 |
+
'-filter_complex "'
|
| 348 |
+
'[0:v][1:v][2:v][3:v][4:v]hstack=inputs=5[stacked]; '
|
| 349 |
+
'[stacked]drawtext=fontfile=/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf:text=\'gt\':x=(w/10-text_w/2):y=20:fontsize=24:fontcolor=white:box=1:boxcolor=black:boxborderw=10, '
|
| 350 |
+
f'drawtext=fontfile=/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf:text=\'{args.main_renderer}\':x=(3*w/10-text_w/2):y=20:fontsize=24:fontcolor=white:box=1:boxcolor=black:boxborderw=10, '
|
| 351 |
+
f'drawtext=fontfile=/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf:text=\'{additional_views[0]}\':x=(5*w/10-text_w/2):y=20:fontsize=24:fontcolor=white:box=1:boxcolor=black:boxborderw=10, '
|
| 352 |
+
f'drawtext=fontfile=/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf:text=\'{additional_views[1]}\':x=(7*w/10-text_w/2):y=20:fontsize=24:fontcolor=white:box=1:boxcolor=black:boxborderw=10, '
|
| 353 |
+
f'drawtext=fontfile=/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf:text=\'{additional_views[2]}\':x=(9*w/10-text_w/2):y=20:fontsize=24:fontcolor=white:box=1:boxcolor=black:boxborderw=10" '
|
| 354 |
+
f'-c:a copy {args.save_path}/{args.seq_name}/{args.save_name}/concat_output_4view.mp4'
|
| 355 |
+
)
|
| 356 |
+
subprocess.call(cmd, shell=True)
|
| 357 |
+
|
| 358 |
+
def load_motion_data(motion_dir, device="cuda:0"):
|
| 359 |
+
"""
|
| 360 |
+
Load saved motion data.
|
| 361 |
+
"""
|
| 362 |
+
local_quats = torch.load(os.path.join(motion_dir, "local_quats.pt"), map_location=device)
|
| 363 |
+
root_quats = torch.load(os.path.join(motion_dir, "root_quats.pt"), map_location=device)
|
| 364 |
+
root_pos = torch.load(os.path.join(motion_dir, "root_pos.pt"), map_location=device)
|
| 365 |
+
|
| 366 |
+
# Load rest positions if available (for reference)
|
| 367 |
+
rest_pos_path = os.path.join(motion_dir, "rest_local_positions.pt")
|
| 368 |
+
if os.path.exists(rest_pos_path):
|
| 369 |
+
rest_positions = torch.load(rest_pos_path, map_location=device)
|
| 370 |
+
else:
|
| 371 |
+
rest_positions = None
|
| 372 |
+
print("Warning: rest_local_positions.pt not found, model should have them initialized")
|
| 373 |
+
|
| 374 |
+
return local_quats, root_quats, root_pos, rest_positions
|