请选择 进入手机版 | 继续访问电脑版

开源计算机图形学社区(Open Source Computer Graphics Community) |OpenGPU Forum (2007-2013)| OpenGPU Project

 找回密码
 注册
搜索
查看: 324|回复: 3

请教骨骼动画该怎样做计算? [复制链接]

Rank: 9Rank: 9Rank: 9

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

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

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

正常的做法应该是怎样做?

Rank: 5Rank: 5

注册时间
2015-6-8
积分
58
发表于 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。

使用道具 举报

Rank: 9Rank: 9Rank: 9

注册时间
2012-5-18
积分
370
发表于 2017-11-15 11:52:57 |显示全部楼层
所以四元数相乘比矩阵相乘还要快的这个优点
在骨骼动画这里无法发挥就是了
四元数一定要先转成矩阵才能计算
感谢ylara的回答

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

只有遮蔽物特别多的刺客信条跟神秘海域才感觉比较热闹

使用道具 举报

Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

注册时间
2010-3-27
积分
6093
发表于 3 天前 |显示全部楼层
如果用DX9,有模块用;如果要原理性的代码,看大神的Z3DEngine(没有编译过,有骨骼动画的例子)。

使用道具 举报

最近看过此主题的会员

您需要登录后才可以回帖 登录 | 注册

‹‹
我的工具栏

关于我们|手机版|Archiver|开源计算机图形学社区(Open Source Computer Graphics Community) | OpenGPU Project | OpenGPU Forum (2007-2013)

GMT+8, 2017-11-23 07:57 , Processed in 0.046000 second(s), 11 queries .

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部