骨骼动画的基本原理【注:自撰技术文档】
- 格式:doc
- 大小:25.50 KB
- 文档页数:2
骨骼动画的基本原理【注:自撰技术文档】.txt骗子太多,傻子明显不够用了。
我就是在路上斩棘杀龙游江过河攀上塔顶负责吻醒你的公主。
本文由shilxfly贡献
doc文档可能在WAP端浏览体验不佳。
建议您优先选择TXT,或下载源文件到本机查看。
骨骼动画的基本原理
Tuesday, August 31, 2010 By Lixing Shi
一、3DS MAX 建模软件的骨骼动画制作过程首先,在 3DS MAX 中绘制角色的网格模型,然后,创建角色的脊椎关节。
一般是在角色模型的背部曲线上依次单击鼠标,创建出一根根骨骼。
先创建的骨骼为随后创建的骨骼的父骨骼,而后者为前者的子骨骼,如此形成一条具有父子层次关系的骨骼链。
用同样的方法,可建立更多的骨骼链。
单击“Select and Link”工具按钮,将各条骨骼链连接在一起,建立起角色的完整骨骼架构。
接着,进行曲面与骨骼的绑定。
选择某部分的角色曲面,利用“Add”按钮添加该曲面的各个骨骼。
单击“Dummy”命令按钮,在骨骼位置上创建虚拟物体,即控制手柄,这样就可以利用这个控制手柄对骨骼进行旋转,从而测试出角色动画的效果。
从以上 3DS MAX 建模软件中骨骼动画制作的基本流程可以了解到,骨骼和蒙皮顶点的关系、骨骼之间的父子关系的构成方法以及如何利用骨骼的运动来带动蒙皮顶点的运动。
二、.X 文件中骨骼动画的存储方式与 Direct3D 对模型的控制原理
y z x 关节点1 (骨骼1的坐标系) 机器手网格骨骼1 (骨骼2的坐标系) 骨骼2 (骨骼3的坐标系) 关节点2
(世界坐标系)
皮肤网格、关节点、骨骼以及相关坐标系
关节点3
骨骼3
如 3 个部分。
次在上、前和手的 Mesh 部选定骨骼,形成中的 3 条骨骼。
中,骨骼 1 是骨骼 2 的父骨骼,骨骼 2 是骨骼 3 的父骨骼。
角色网格的一个顶点有一个部坐标,这顶点部坐标构成.X 文件的 Mesh 对的。
在角色网格中点击鼠标,为角色网格置一系的骨骼。
鼠标的首次点击位置
1 ,上角顶的坐标系为世界坐标系。
机器手的网格分为上、前和手
就是该骨骼的首关节点,尾关节点由再次点击鼠标选定子骨骼时确定,尾关节点则是子骨骼的首关节点。
在每一条骨骼上建立一个骨骼坐标系。
由于骨骼坐标系会随着骨骼的运动而运动,骨骼上的皮肤顶点的骨骼坐标在骨骼的运动过程中保持不变。
y z x
(世界坐标系)
皮肤网格、关
点P’
机器手网格骨骼1 骨骼2
节点、骨骼以及相关坐标系
点P
骨骼3
2 中的点 P,在骨骼 2 的坐标系的坐标保持不变。
由于个子骨骼的坐标系,一定在一个坐标变 Aframe,子骨骼关系皮上顶点的骨骼坐标 Xchild 该顶点在骨骼坐标系中的坐标 Xfather Xfather = Xchild*Aframe, Aframe 子骨骼的骨骼。
骨骼次关系中网格顶点坐标的 Frame 于上的骨骼的骨骼坐标系定世界坐标系在的坐标系就是的坐标系,,每个骨骼一个骨骼,就是在.X 中的一系次关系的 Frame 中的变。
骨骼,骨骼皮顶点在骨骼坐标系的坐标世界坐标。
世界根Frame
世界坐标系
注:矩阵An为骨骼矩阵矩阵AN为局部变换矩阵
世界坐标系(顶点的世界坐标Xworld) *(A1)
第2层Frame ……第M层Frame(整体组合)……第m层Frame(局部组合)
局部坐标系1 *(AMAM-1…A2) 局部坐标系M(网格顶点的局部坐标<原始坐标>Xlocal)*(AmAm-1…AM+1) *(AnAn-1…Am…AM+1)
某高层骨骼坐标系m(网格顶点的骨骼坐标Xm ) *(AnAn-1…Am-1) *(AnAn-1…Am…AM+1)-1 某低层骨骼坐标系n(网格顶点的骨骼坐标Xn )
……
第n层Frame(低层骨骼)
图 3 其中,矩阵“(AnAn-1…Am…AM+1) ”称为骨骼的权重矩阵,是从局部坐标系所在的框架开始遍历到该骨骼,通过各层的骨骼矩阵左乘,然后求逆计算出来的。
骨骼的权重矩阵就是在.X 文件中各个骨骼的 Skin Weights 对象中的偏移矩阵,用来反响求出顶点在所属骨骼的坐标系下的坐标。
现在烤炉骨骼绕关节点的旋转。
如图 2 所示,骨骼 2 绕关节点2 抬起,即骨骼 2 绕关节点 2 轴线的一个旋转变换。
旋转后,骨骼 2 的骨骼矩阵(即相对于父骨骼 1 的坐标系)发生改变,而其他子骨骼的骨骼矩阵维持不变。
由此看出,应用反应父子相对关系的骨骼矩阵来存储骨骼动画的运动变化,需要较少的数据更新。
在.X 文件中,骨骼在某一帧时刻的 Animation Key 矩阵对象就是这些骨骼矩阵。
此时,通过骨骼矩阵自定向下进行乘法累积,可获得旋转后的各个骨骼的世界坐标变换矩阵。
设旋转后的骨骼 2 世界坐标变换矩阵为W2,顶点旋转后的世界坐标Xworld_new 和骨骼坐标Xframe_new 满足关系式 Xworld_new = Xframe_new*W2,由于顶点相对于它的骨骼坐标系的坐标在旋转过程中保持不变,从而 Xframe_new = Xframe_0,因此有 Xworld_new = Xframe_0*W2。
顶点坐在骨骼的权重矩阵为 H,顶点最初始的 Mesh 局部坐标为 X0。
根据权重矩阵的定义,有 Xframe_0 = X0*H。
从而 Xworld_new = Xframe_0*W2 = X0*H*W2,这说明旋转后的顶点世界坐标等于顶点最初始状态下的局部坐标与权重矩阵以及所在骨骼的世界坐标变换矩阵的乘积。
通常,关节点附近的网格顶点可以收到多个骨骼的控制。
如下图的点 P
-1
y
z x
(世界坐标系)
皮肤网格、关节点、骨
P’
机器手网格骨骼1 骨骼2
骼以及相关坐标系
P 骨骼3
4 机器手手 3 骨骼 3D weights 骨骼坐标骨骼坐标坐标骨骼 P P 骨骼 2 骨骼 3 骨骼 2 手骨骼 3 坐标 .X 骨骼 SkinWeights 骨骼 2 骨骼坐标骨骼坐标骨骼骨骼网格坐标
[1]
. 2006. Visual C++/DirectX9 3D
.
:。