骨骼蒙皮动画(Skinned_Mesh)的原理解析(二).doc

骨骼蒙皮动画(Skinned_Mesh)的原理解析(二).doc

ID:48530031

大小:44.00 KB

页数:10页

时间:2020-02-25

骨骼蒙皮动画(Skinned_Mesh)的原理解析(二).doc_第1页
骨骼蒙皮动画(Skinned_Mesh)的原理解析(二).doc_第2页
骨骼蒙皮动画(Skinned_Mesh)的原理解析(二).doc_第3页
骨骼蒙皮动画(Skinned_Mesh)的原理解析(二).doc_第4页
骨骼蒙皮动画(Skinned_Mesh)的原理解析(二).doc_第5页
资源描述:

《骨骼蒙皮动画(Skinned_Mesh)的原理解析(二).doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、专业.专注骨骼蒙皮动画(SkinnedMesh)的原理解析(二)2)蒙皮信息和蒙皮过程2-1)Skininfo的定义上文曾讨论过,SkinnedMesh中Mesh是作为皮肤使用,蒙在骨骼之上的。为了让普通的Mesh具有蒙皮的功能,必须添加蒙皮信息,即Skininfo。我们知道Mesh是由顶点构成的,建模时顶点是定义在模型自身坐标系的,即相对于Mesh原点的,而骨骼动画中决定模型顶点最终世界坐标的是骨骼,所以要让骨骼决定顶点的世界坐标,这就要将顶点和骨骼联系起来,Skininfo正是起了这个作用。下面是

2、DEMO中顶点类的定义的代码片段:#defineMAX_BONE_PER_VERTEX4      //用来设置可同时影响该顶点的最大骨骼数classVertex{floatm_x,m_y,m_z;//localposinmeshspacefloatm_wX,m_wY,m_wZ;//blendedvertexpos,inworldspace//skininfointm_boneNum;       //影响该顶点的骨骼数目Bone*m_bones[MAX_BONE_PER_VERTEX]; //指向这

3、些骨骼的指针floatm_boneWeights[MAX_BONE_PER_VERTEX]; //这些骨骼作用于该点的权重};顶点的Skininfo包含影响该顶点的骨骼数目,指向这些骨骼的指针,这些骨骼作用于该顶点的权重(Skinweight)。由于只是一个简单的例子,这儿没有考虑优化,所以用静态数组存放骨骼指针和权重,且实际引擎中Skininfo的定义方式不一定是这样的,但基本原理一致。.学习参考.专业.专注MAX_BONE_PER_VERTEX在这儿用来设置可同时影响顶点的最大骨骼数,实际上由于这

4、个DEMO是手工进行VertexBlending并且也没用硬件加速,可影响顶点的骨骼数量并没有限制,只是恰好需要一个常量来定义数组,所以定义了一下。在实际引擎中由于要使用硬件加速,以及为了确保速度,一般会定义最大骨骼数。另外在本DEMO中,Skininfo是手工设定的,而在实际项目中,一般是在建模软件中生成这些信息并导出。Skininfo的作用是使用各个骨骼的变换矩阵对顶点进行变换并乘以权重,这样某块骨骼只能对该顶点产生部分影响。各骨骼权重之和应该为1。Skininfo是针对顶点的,然而在使用Skin

5、info前我们必须要使用BoneOffsetMatrix对顶点进行变换,下面具体讨论BoneoffsetMatrix。(写下这句话的时候我感觉有些不妥,因为实际是先将所有的矩阵相乘最后再作用于顶点,这儿是按照理论上的顺序进行讲述吧,请不要与实际情况混淆,其实他们也并不矛盾。而且在我们的DEMO中由于没有使用矩阵,所以变换的顺序和理论顺序是一致的)2-2)BoneOffsetMatrix的含义和计算方法上文已经说过:“骨骼动画中决定模型顶点最终世界坐标的是骨骼,所以要让骨骼决定顶点的世界坐标”,现在让我

6、们看下顶点受一块骨骼的作用时的坐标变换过程:meshvertex(definedinmeshspace)------>Bonespace------>World从这个过程中可看出,需要首先将模型顶点从模型空间变换到某块骨骼自身的骨骼空间,然后才能利用骨骼的世界变换计算顶点的世界坐标。BoneOffsetMatrix的作用正是将模型从顶点空间变换到骨骼空间。那么BoneOffsetMatrix如何得到呢?下面具

7、体分析:Meshspace是建模时使用的空间,mesh中顶点的位置相对于这个空间的原点定义。比如在3d.学习参考.专业.专注max中建模时(视xy平面为地面,+z朝上),可将模型两脚之间的中点作为Mesh空间的原点,并将其放置在世界原点,这样左脚上某一顶点坐标是(10,10,2),右脚上对称的一点坐标是(-10,10,2),头顶上某一顶点的坐标是(0,0,170)。由于此时Mesh空间和世界空间重合,上述坐标既在Mesh空间也在世界空间,换句话说,此时实际是以世界空间作为Mesh空间了。在骨骼动画中,

8、在世界中放置的是骨骼而不是Mesh,所以这个区别并不重要。在3dmax中添加骨骼的时候,也是将骨骼放入世界空间中,并调整骨骼的相对位置使得和mesh相吻合(即设置骨骼的TransformMatrix),得到骨架的初始姿势以及相应的TransformMatrix(按惯例模型做成两臂侧平举直立,骨骼也要适合这个姿态)。由于骨骼的TransformMatrix(作用是将顶点从骨骼空间变换到上层空间)是基于其父骨骼空间的,只有根骨骼的Transform是基于世界

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。