smpl_core/common/
metadata.rs1use super::{
2 pose_hands::{HandPair, HandType},
3 pose_parts::PosePart,
4 types::SmplType,
5};
6use crate::{
7 smpl_h::{smpl_h, smpl_h_pose_parts},
8 smpl_x::{smpl_x, smpl_x_hands::SmplXHands, smpl_x_pose_parts},
9};
10use enum_map::EnumMap;
11use std::ops::Range;
12#[derive(Default)]
13pub struct SmplMetadata {
14 pub num_body_joints: usize,
15 pub num_hand_joints: usize,
16 pub num_face_joints: usize,
17 pub num_joints: usize,
18 pub num_pose_blend_shapes: usize,
19 pub expression_space_dim: usize,
20 pub num_verts: usize,
21 pub num_verts_uv_mesh: usize,
22 pub num_faces: usize,
23 pub shape_space_dim: usize,
24 pub hand_poses: EnumMap<HandType, HandPair>,
25 pub parts2jointranges: EnumMap<PosePart, Range<usize>>,
26 pub joint_parents: Vec<u32>,
27 pub joint_names: Vec<String>,
28 pub pose_dim: usize,
29}
30pub fn smpl_metadata(smpl_type: &SmplType) -> SmplMetadata {
33 match smpl_type {
34 SmplType::SmplH => {
35 let parts = smpl_h_pose_parts::PosePartRanges::empty();
36 SmplMetadata {
37 num_body_joints: smpl_h::NUM_BODY_JOINTS,
38 num_hand_joints: smpl_h::NUM_HAND_JOINTS,
39 num_joints: smpl_h::NUM_JOINTS,
40 num_pose_blend_shapes: smpl_h::NUM_POSE_BLEND_SHAPES,
41 parts2jointranges: parts.parts2jointranges,
42 joint_parents: smpl_h::PARENT_ID_PER_JOINT.to_vec(),
43 joint_names: smpl_h::JOINT_NAMES.map(std::string::ToString::to_string).to_vec(),
44 ..Default::default()
45 }
46 }
47 SmplType::SmplX => {
48 let parts = smpl_x_pose_parts::PosePartRanges::empty();
49 SmplMetadata {
50 num_body_joints: smpl_x::NUM_BODY_JOINTS,
51 num_hand_joints: smpl_x::NUM_HAND_JOINTS,
52 num_face_joints: smpl_x::NUM_FACE_JOINTS,
53 num_joints: smpl_x::NUM_JOINTS,
54 num_pose_blend_shapes: smpl_x::NUM_POSE_BLEND_SHAPES,
55 expression_space_dim: smpl_x::EXPRESSION_SPACE_DIM,
56 num_verts: smpl_x::NUM_VERTS,
57 num_verts_uv_mesh: smpl_x::NUM_VERTS_UV_MESH,
58 num_faces: smpl_x::NUM_FACES,
59 shape_space_dim: smpl_x::SHAPE_SPACE_DIM,
60 hand_poses: SmplXHands::default().type2pose,
61 parts2jointranges: parts.parts2jointranges,
62 joint_parents: smpl_x::PARENT_ID_PER_JOINT.to_vec(),
63 joint_names: smpl_x::JOINT_NAMES.map(std::string::ToString::to_string).to_vec(),
64 ..Default::default()
65 }
66 }
67 _ => panic!("Unknown Smpl Model"),
68 }
69}