角色动画与运动仿真 03 Character Kinematics
Character Kinematics
- 基本假设:人体是刚体,通过关节连接形成骨骼
How to create a pose
Joint 不会自动生效…
我们需要仔细计算每个骨骼的位置和方向
Kinematics of a Chain
Qi:关节i方向(全局坐标系下)
Ri:关节i旋转(局部坐标系下)
问题:在诶出旋转后如何关节连接处的位置?
首先初始化Q1-Q4为I
从后往前考虑:先找到Q4相对其父结点Q3的局部旋转R4:
- 再考虑Q3相对于Q2的局部旋转R3,这里R3也要叠加到Q4,每次叠加都是旋转关节本身+作用于其所有的自关节:
- 继续上述过程直到算到启示的关节:
- 同时,已知两个朝向也可以计算中间的旋转:
- 计算关节位置要从前往后算:Pi+1 = Pi + QiLi。可以从上一步的世界坐标系位置计算下一步的位置
- 考察终点x,可以对其进行展开得到x相对于祖先结点的相对运动
若没有给出旋转矩阵而是给出旋转角θ:可以利用罗德里格公式计算旋转矩阵R
旋轴带动:
- 局部坐标系
- 旋转轴
- 位置
可以将人体关节抽象为树结构:
Types of Joints
- 不同的骨骼转动轴不同,旋转的自由度也不同
Degrees of Freedom (DoF)
自由度描述了表示状态所需要的参数
3D场景中,刚体的自由度为6:
- 表示位置DoF=3
- 表示旋转DoF=4
- 在2D平面上移动,刚体的自由度为3:
- 平移DoF=2
- 旋转DoF=1
T-Pose? A-Pose?
Retargeting between reference poses
- 先考虑单个物体的重定向:计算RB的时候可以通过旋转的叠加求解,求解路径:B -> A -> C
- 考虑整个关节链的重定向,首先根据单个物体的重定向公式可得:
- 然后再根据父结点子结点关系旋转可得:
- 最终求解可得: