Skinned Animation Theory
对于Skinned Animation中的Bone最初是在Bone空间的,而Bone空间的原点就是这个Bone和自己Parent Bone的连接点,注意:原点和该连接点重合是必须的,因为在Bone在自己的Bone空间变换的时候,链接点不能够变化。否则,在变换过后,Bone会和Parent Bone脱节。
一个Bone在Bone空间的本地变换,记为L,L负责该Bone自身的动作和将该Bone平移到Parent Bone的Bone空间。
比如:
图中,上两个图是原始图和每一个Bone在Bone Space中的图。
下半部图是将原图中的Bone 2进行内部动作得到的结果,以及这个过程的描述。
这里L首先将Bone 2进行自己的动作变换,然后将自己变换到Bone 1的Bone空间中
对于每一个Bone都有自己的 L 矩阵。
对于一个Bone,他的L矩阵不仅仅施加于自己,他将施加到自己的整个一个分支上。这样对于子Bone才会跟随Parent Bone一起动作。
所以一个Bone的另一个矩阵 C, C负责将整个Bone从Bone Space变换到Character Space中。
C = L*P
这里P就是该Bone 的Parent Bone的C。
那么假设Bone0-->Bone1-->Bone2-->...-->Bonei,这里Bonei是Bonej的Parent Bone(i
那么Ci = Li*Li-1...*L0
对于这个过程的描述:
1:Bone i在自己的Bone Space中动作,然后变换到Parent Bone的Bone Space
2:Bone i跟随Parent Bone一起变换,最终变换到Character Space
在上面的过程中,基于一个条件,就是每一根Bone最初都在Bone Space中,但是通常给出的Bone并不是在Bone Space中,那么要施加上面的过程,必须首先将该Bone变换到Bone Space中,这就引出了偏移矩阵O,O将模型中的Bone变换到Bone Space。
所以最终一个施加的Bone的矩阵记为Fi
Fi = Oi*Ci = Oi*Li*Pi
Reference:
Frank Luna . "Skinned Mesh Character Animation with Direct3D 9.0C"
阅读(1006) | 评论(0) | 转发(0) |