中文第一计算机图形学社区OpenGPU 版权所有2007-2018

 找回密码
 注册

扫一扫,访问微社区

搜索
查看: 1453|回复: 3

请教骨骼动画该怎样做计算?

[复制链接]
发表于 2017-11-13 22:17:35 | 显示全部楼层 |阅读模式
最近开始接触骨骼动画
我的想法是每根骨头都有自己的4x4矩阵以及一个四元数
四元数负责旋转,4x4矩阵就记录该骨骼与子骨骼相黏位置(也就是从旋转点平移至下个关节的平移矩阵)

计算上我不确定这样做对不对
感觉浪费了四元数快速计算的优点
因为过程里没有四元数之间的相乘
每个四元数都先转成矩阵才加入计算
这样子四元数就只有内插旋转让动画好看的作用了

我这样有浪费吗?
感觉人物一多会花费可观的时间来做计算
而且要传递非常多4x4矩阵给GPU
还是应该每根骨头都有自己的座标点以及一个四元数?

正常的做法应该是怎样做?
发表于 2017-11-15 09:56:25 | 显示全部楼层
刚好之前做了一个骨骼动画。

我的骨骼长度是固定的,所以对于一个骨骼(等一下,到底是骨骼还是关节??),它的scale和translation matrix是固定的,也就是相对于parent的offset。

所以变化的只有骨骼的旋转。这个旋转值来自四元数。

整一个动画是一个hierarchy的,从root读到end。每一次都要先把当前骨骼的translation*rotation(来自四元数)*scale matrix得到一个变换矩阵。然后这个矩阵需要和parent传递下来的matrxi再次相乘,得到final的变化矩阵。

推荐你看这个tutorial:http://ogldev.atspace.co.uk/index.html
第38章。

其中还涉及了skinning。读取模型是用的assimp。
 楼主| 发表于 2017-11-15 11:52:57 | 显示全部楼层
所以四元数相乘比矩阵相乘还要快的这个优点
在骨骼动画这里无法发挥就是了
四元数一定要先转成矩阵才能计算
感谢ylara的回答

原来一个角色会需要这么多CPU计算
难怪GTA5,热血无赖(睡犬),看门狗等等游戏里的路人会那么少
尤其热血无赖的香港路人比现实要少太多了

只有遮蔽物特别多的刺客信条跟神秘海域才感觉比较热闹
发表于 2017-11-20 18:59:41 | 显示全部楼层
如果用DX9,有模块用;如果要原理性的代码,看大神的Z3DEngine(没有编译过,有骨骼动画的例子)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|小黑屋|Archiver|手机版|中文第一计算机图形学社区OpenGPU

GMT+8, 2018-2-25 05:49 , Processed in 0.063831 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表