WOW技术---2, 骨骼动画
首先是实现的Demo图
根据wowmodelviewer的源码,把数据导成自己的格式,修改了一些bug, 实现的骨骼动画。
骨骼动画的实现还是一个顶点受最多4根骨骼影响, 然后计算出这个顶点在最多4根骨骼下影响的位置,这里没什么特别的东西
不过wow也有一些不同的地方,例如数据存储方面.
1, 数据存储的优势
拿这个动画来说,看他骨骼的总时间表,有800000ms, 就是有800s动画,他的骨骼在关键点是33ms存一帧,也就是说理论上也是1s存30帧动画。
假如说全部存取的话, 每根骨骼就是得保持 800 * 30 = 24000 个关键帧信息, 对于每个关键帧信息, 假如说保存 一个Pos, 一个Scale, 一个Quat,
以float类型保存的话,就是一个关键帧信息有 10 * 4 = 40个字节的量, 然后 每根骨骼就得保存40 * 24000 = 0.915MB 数据, 现在有190根骨骼,
0.915MB * 190 = 173.85MB, 就是说全部保存的话有173.85MB数据! 这个是理论上的情况。
我按它的数据信息导出,导出的骨骼文件大小是3.47MB, 如图, 这个还没有完全压缩,Quat还没有压缩,是4个float的,Quat压缩后
文件大小估计在2.5MB左右。现在的情况就是173.85MB到2.5MB的压缩量。是在哪里实现的。
分析:
拿一根骨骼举例,总共有800000ms的时间,24000个信息,它实际保存的信息远远没有这么多。有的骨骼Pos只保存100多个关键点,Scale绝大多数情况
下是没有保存,也就是默认值1.0, Quat保存的稍微多些,最多有4000多帧信息,保存了 1 / 6 的信息。按照这样的数据存储法,信息量就大大减少了。
(当然还有一些附加的信息,如时间表,范围表, 但总量不大), 然尔它在3dmax导出plugin中是如何实现的?
猜想:
在3dmax的plugin中,首先他也导出全部帧信息,就是24000帧Pos, 24000帧Scale, 24000帧Quat, 然后用程序优化,像24000帧Scale, 基本可以不保存,
大部分的情况下,Scale为1.0, 只要保持少数不为1.0的情况, 这段数据是省略了。 Pos, Quat用排序法,一个一个查找,从第一个位置开始,假如第二个
位置和第一个位置相同,则省略,相应的时间表上也省略,直到不相同为止,然后第二个位置。。。。。。。。。。
这样几圈下来,所存储的信息量就大大减少了。
提问: 为什么会很多帧数据会一样呢?
原因可能是导出的相对矩阵的情况, 假如插件中导出的绝对矩阵,那么每帧信息是不一样,而现在导出的相对矩阵, 在一个动画中,可能手对于手臂是不动的,
假如是导出绝对矩阵的话,他的世界位置是肯定变化的,而对于相对矩阵,这些位置都是一样的。(这应就是plugin导出相对矩阵的好处)
总结:
当然他还用了一些其他的压缩技巧,就是Quat是4个float,压成了4个short, 范围(-32768 ~ + 32767) 实际上精度损失不大。
WOW技术---2, 骨骼动画相关推荐
- 基于可编程图形处理器的骨骼动画算法及其比较
2009-10-19 作者: 季卓尔 张景峤 来源: 万方数据 关键字: 骨骼动画 可编程图形处理器 计算机图形 蒙皮网格 统一 骨骼动画相对于之前的动画方法具有占用空间小的优点,但是其代价是计算量的 ...
- Skeletal Animation(骨骼动画)
Skeletal Animation(骨骼动画) 有关骨骼动画的东西都放在这里好了. http://en.wikipedia.org/wiki/Skeletal_animation Skeletal ...
- 模型的骨骼动画技术讲解
笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D ...
- 关于骨骼动画及微软示例Skinned Mesh的解析
这是我自个写的,第一次发. 没想到这个贴子编辑器极差. 原文是有字体字色的.现在只能清一色了. 版主,发贴的编辑器太难用! 你有必要向上反映一下. 下面的字体是我敲html标记加上的,大家凑和看 ...
- cocos2d-x 3.8.1的骨骼动画加载方法addArmatureFileInfo仍然存在问题
提出如题所示的问题,心里非常别扭,但的确是事实.因此,Cocos Studio(我目前使用的是 2.3.2)在许多方面还有改进的地方,包括与之相对应的cocos2d-x中的代码操作部分. 问题 目前, ...
- 尝试优化骨骼动画计算的意外收获——使用嵌入式汇编对float转int进行优化
本文为大便一箩筐的原创内容,转载请注明出处,谢谢:http://www.cnblogs.com/dbylk/p/4984530.html 公司引擎目前是使用CPU计算骨骼动画(采用了D3DX提供的函数 ...
- 基于canvas的骨骼动画
最近学习到了一种关于canvas的骨骼动画,听这个名字就知道他和canvas之前的动画不同,不知道你有没有兴趣了解一下呢? 关于骨骼动画最初是无意间在腾讯团队上看到的,但是由于他官网的教程是在是少之又 ...
- DirectX12(D3D12)基础教程(十七)——让小姐姐翩翩起舞(3D骨骼动画渲染【1】)
目录 1.前言 2.本章代码简要说明 1.前言 经过了一系列比较枯燥的命令行式的"外篇"系列教程后,这一篇起回归主干,继续我们的D3D12之旅,本章就利用已经学习的assimp ...
- Unity 2D骨骼动画2:创建真实动画
http://bbs.9ria.com/thread-401781-1-1.html 在这个系列,我们将关注Unity引擎提供的基于骨骼动画工具.它的主要思想是为了把它应用到你自己的游戏来介绍和教基本 ...
最新文章
- Oracle 11g AMM与ASMM切换
- RabbitMQ 消息队列六种模式
- 前端学习(2014)vue之电商管理系统电商系统之监听on-remove事件
- 【多线程】:Synchronized和ReentrantLock的对比
- 微服务下的应用架构设计(COLA架构)
- 四种方式话Equal
- python怎么读写文件-python3 excle(python怎么读写excel文件)
- iOS 程序 main函数之前发生什么
- 一共有多少种操作系统
- android获取系统剪贴板内容,android系统如何如何恢复剪贴板内容
- 三节串联锂电池充电管理芯片,IC电路图,BOM表
- MongoDB学习笔记(五) MongoDB文件存取操作
- Android音频播放
- 通用Excel表格导出(Map类型数据导出为表格)
- Coreldraw绘画看了这个才算是真正明白了什么叫绘图
- win、linux、unix查看系统主机名
- top,ps,pstree工具介绍及举例
- python用turtle画月亮_使用python turtle画高达
- vi 跳到文件最后一行
- rocketdock 修改隐藏快捷键