I can convert motions in SMPL format into FBX files.
-
Install Python FBX.
-
Download the SMPL fbx model for unity. Keep the male model
SMPL_m_unityDoubleBlends_lbs_10_scale5_207_v1.0.0.fbx. -
pip install -r requirements.txt -
Here's the file structure:
<root> |--Convert.py |--SmplObject.py |--FbxReadWriter.py |--<pkl_path>/ | |--*.pkl |--<fbx_path>/ | |--SMPL_m_unityDoubleBlends_lbs_10_scale5_207_v1.0.0.fbx |--<output_path>/ -
python3 Convert.py --input_pkl_base <pkl_path> --fbx_source_path <fbx_path>/SMPL_m_unityDoubleBlends_lbs_10_scale5_207_v1.0.0.fbx --output_base <output_path>to start converting.Optional Argument:
--fps <60/30>*60 fps is the default.
A pkl file contains a dictionary with two keys: smpl_poses and smpl_trans. There's a sample pkl file in ./Pkls/sample.pkl.
Dict["smpl_poses"]: A(N, 72)ndarray, whereNis the frame number.- Joint order:
0:Pelves 1:L hip 2:R hip" 3:Spine1" 4:L_Knee" 5:R_Knee" 6:Spine2" 7:L_Ankle" 8:R_Ankle" 9:Spine3" 10:L_Foot" 11:R_Foot" 12:Neck" 13:L_Collar" 14:R_Collar" 15:Head" 16:L_Shoulder" 17:R_Shoulder" 18:L_Elbow" 19:R_Elbow" 20:L_Wrist" 21:R_Wrist" 22:L_Hand" 23:R_Hand" 72is from24joints*3;3is the dimension for the rotation vector of each joint.
- Joint order:
Dict["smpl_trans"]: A(N, 3)ndarray. The translation of the Pelvis in each frame.- Basically following the AIST++ naming rule. The code is designed specifically to convert the AIST++ dance motions into fbx files.
I got a translation vector [d0, d1, d2] of a frame. How do I assign each dimension to the correct axis?
bones=[(0,1), (1,4), (4,7), (7,10), # R leg
(0,2), (2,5), (5,8), (8,11), # L leg
(0,3), (3,6), (6,9), # Spine
(9,12), (12,15), # Head
(9,13), (13,16), (16,18), (18,20), (20,22), # R arm
(9,14), (14,17), (17,19), (19,21), (21,23)] # L arm
