关键帧逐帧蒙皮动画原理

一、关键帧动画怎么插件的,还有GPU蒙皮

关键帧动画也称为属性插值动画,一般用于2d非图像质变的动画,主要是对图像的大小,旋转,移动进行插值的关键帧动画,只需要一幅图片就可以,插值方式有线性插值,样条插值。

二、逐帧动画

是每个帧都有图片,用一个图片序列,按照时间间隔来播放动画,用动画设计软件进行动画设计时候使用关键帧动画设计,但是输出为逐帧动画,2d动画很多采用这个模式。

三、3D 蒙皮动画

1)初始数据和骨骼基于模型坐标系的逆矩阵:
蒙皮顶点位置从编辑器导出是相对于模型坐标系的,导出时候就可以将骨骼相对于模型坐标系的矩阵的逆导出。

2)通过动作插值每帧更新只是插值不转换:
coco2dx每帧更新时候,会先选取一个之前加载的静态动画曲线数据,然后每帧插值骨骼节点bone的本地Ms, Mr(四元数基于球面插值),Mt。这里的更新也支持反向动画的插值(其实是0-1变化转换为1-0变化)。这个任务由coco2dx的CCAnimate3D动作实现,在drawScene Update时候调用。

3)递归计算每个骨骼的世界坐标系(连续变换,权重,父子节点变换):
Sprite3D的draw函数会更新整个骨骼根节点的世界坐标系,和计算bone骨骼的骨骼本地坐标(基于opengl的右手坐标系单个节点的连续变化是Mt*Mr(四元数转换为矩阵)*Ms),计算根骨骼的多骨骼融合的世界坐标系(weight权重也在基于骨骼做了),再从根节点到末尾节点递归的计算每个骨骼的世界坐标系。后面会调用mesh进行draw。

4)更新VBO中蒙皮的位置,提交渲染子类给渲染管理器队列:
mesh进行draw,主要是纹理对象,是否透明,深度测试开启否,合并批次否,材质信息,VBO,VAO信息,将这些信息封装为一个MeshCommand的Render管理的渲染子类,更重要的是在mesh这里利用了MeshSkin将bone基于模型坐标系的逆矩阵和每个当前bone节点的世界坐标系矩阵相乘得到了顶点基于模型坐标系的顶点位置,得到蒙皮的顶点坐标系该操作通过uniform更新VBO顶点。提交给renderer->addCommand(&_meshCommand); renderer会根据渲染类型排序进行后面的排序渲染。

其实是V模型*BoneT-pose模型逆*Bone插值新模型位置*M模型根节点在世界坐标系位置,化简为:V模型*BoneT-pose模型逆*Bone新插值在世界坐标系位置。之所以要每次乘以BoneT-pose模型逆应该是有其它原因,因为顶点相对于很多个动画,每个动画一个骨骼序列,为了减少内存,简单和统一处理,而不求出顶点基于每个BindPose的骨骼坐标位置。骨骼用骨骼融合权重,顶点有蒙皮权重。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值