骨骼蒙皮动画(Skinned Mesh)的原理解析(二)

本文深入解析骨骼蒙皮动画的原理,包括Skin info的定义,如何通过Bone Offset Matrix将顶点从模型空间变换到骨骼空间,以及顶点混合(Vertex Blending)的过程,展示了骨骼动画如何消除关节处的裂缝,形成动画所需的模型变形。
摘要由CSDN通过智能技术生成

2)蒙皮信息和蒙皮过程

2-1)Skin info的定义

上文曾讨论过,SkinnedMesh中Mesh是作为皮肤使用,蒙在骨骼之上的。为了让普通的Mesh具有蒙皮的功能,必须添加蒙皮信息,即Skininfo。我们知道Mesh是由顶点构成的,建模时顶点是定义在模型自身坐标系的,即相对于Mesh原点的,而骨骼动画中决定模型顶点最终世界坐标的是骨骼,所以要让骨骼决定顶点的世界坐标,这就要将顶点和骨骼联系起来,Skininfo正是起了这个作用。下面是DEMO中顶点类的定义的代码片段:

#defineMAX_BONE_PER_VERTEX 4       //用来设置可同时影响该顶点的最大骨骼数

classVertex

{

floatm_x, m_y, m_z; //local pos in mesh space

floatm_wX, m_wY, m_wZ;//blended vertex pos, in world space

//skininfo

intm_boneNum;        //影响该顶点的骨骼数目

Bone*m_bones[MAX_BONE_PER_VERTEX];  //指向这些骨骼的指针

floatm_boneWeights[MAX_BONE_PER_VERTEX];  //这些骨骼作用于该点的权重

};

顶点的Skininfo包含影响该顶点的骨骼数目,指向这些骨骼的指针,这些骨骼作用于该顶点的权重(Skinweight)由于只是一个简单的例子,这儿没有考虑优化,所以用静态数组存放骨骼指针和权重,且实际引擎中Skin info的定义方式不一定是这样的,但基本原理一致。

MAX_BONE_PER_VERTEX在这儿用来设置可同时影响顶点的最大骨骼数,实际上由于这个DEMO是手工进行VertexBlending并且也没用硬件加速,可影响顶点的骨骼数量并没有限制,只是恰好需要一个常量来定义数组,所以定义了一下。在实际引擎中由于要使用硬件加速,以及为了确保速度,一般会定义最大骨骼数。另外在本DEMO中,Skin info是手工设定的,而在实际项目中,一般是在建模软件中生成这些信息并导出。

Skin info的作用是使用各个骨骼的变换矩阵对顶点进行变换并乘以权重,这样某块骨骼只能对该顶点产生部分影响。各骨骼权重之和应该为1

Skin info是针对顶点的,然而在使用Skininfo前我们必须要使用Bone OffsetMatrix对顶点进行变换,下面具体讨论Bon

  • 5
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值