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

本文深入探讨了骨骼蒙皮动画的原理,包括Skin info、Bone Offset Matrix和顶点混合(Vertex Blending)过程。通过Skin info连接顶点与骨骼,结合Bone Offset Matrix进行坐标变换,实现模型的变形动画。顶点世界坐标的计算涉及多个骨骼的权重混合,是骨骼动画的关键。

低功耗蓝牙项目,需要一块懂省电的板

思澈 SF32LB52 芯片,BLE 协议栈深度优化,上手即开发

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

DX技术 2009-09-06 14:56:06 阅读211 评论1 字号:

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

 

2)蒙皮信息和蒙皮过程

 

2-1Skin info的定义

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

 

#define MAX_BONE_PER_VERTEX 4

class Vertex

{

    float m_x, m_y, m_z; //local pos in mesh space

    float m_wX, m_wY, m_wZ;//blended vertex pos, in world space

 

    //skin info

    int m_boneNum;

    Bone* m_bones[MAX_BONE_PER_VERTEX];

    float m_boneWeights[MAX_BONE_PER_VERTEX];

};

 

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

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

 

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

 

Skin i

低功耗蓝牙项目,需要一块懂省电的板

思澈 SF32LB52 芯片,BLE 协议栈深度优化,上手即开发

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值