游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4701|回复: 8

请问用shader的话怎么计算骨骼动画两帧间的矩阵插值

[复制链接]

5

主题

6

帖子

10

积分

新手上路

Rank: 1

积分
10
发表于 2011-5-3 10:45:00 | 显示全部楼层 |阅读模式
RT

1

主题

49

帖子

49

积分

注册会员

Rank: 2

积分
49
发表于 2011-5-8 11:09:00 | 显示全部楼层

Re:请问用shader的话怎么计算骨骼动画两帧间的矩阵插值

v*M1*(1-f)+v*M2*f;
f为插值参数,v为目标点向量,M1,M2分别为变换矩阵。
cg里面专用函数lerp。

或者自己算一下,有插值矩阵算法:M1-M1*f+M2+f = (M2-M1)*f+M1
Matrix4 temp = mat2 - mat1;
temp *= f;
temp += mat1;
return temp;

0

主题

398

帖子

577

积分

高级会员

Rank: 4

积分
577
发表于 2011-5-9 11:46:00 | 显示全部楼层

Re: Re:请问用shader的话怎么计算骨骼动画两帧间的矩阵插值

??b我心: Re:请问用shader的话怎么计算骨骼动画两帧间的矩阵插值

v*M1*(1-f)+v*M2*f;
f为插值参数,v为目标点向量,M1,M2分别为变换矩阵。
cg里面专用函数lerp。

或者自己...

你确定这样做吗? 我看我们公司的引擎里是把矩阵拆开后分别插值的....旋转方向线性插值好像会不对.

22

主题

98

帖子

98

积分

注册会员

Rank: 2

积分
98
QQ
发表于 2011-5-9 13:40:00 | 显示全部楼层

Re:请问用shader的话怎么计算骨骼动画两帧间的矩阵插值

直接这样乘不行的,比如有时候前一帧是旋转350度,后一帧是旋转10度,本来的含意是转满一圈后再转10度,应该插值到350-370度之间,直接插值就会变成10-350度之间了。其实MAX的骨骼动画帧数够高了,不插值也没多大关系。

1

主题

49

帖子

49

积分

注册会员

Rank: 2

积分
49
发表于 2011-5-10 13:28:00 | 显示全部楼层

Re:请问用shader的话怎么计算骨骼动画两帧间的矩阵插值

楼上说得对。我算错了。
但举例不是很恰当,出现例子中所举出的情况,是因为矩阵乘法的不可交换性。

而旋转直接插值出来的结果是线性变化的,跟我们需要的沿圆弧变化的结果并不相符。
比较方便的旋转变换插值算法应该是用四元数进行的。

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
发表于 2011-5-14 15:05:00 | 显示全部楼层

Re:请问用shader的话怎么计算骨骼动画两帧间的矩阵插值

是啊,骨骼计算不要直接用矩阵进行插值,线性差值有很大偏差的,特别是旋转本来是弧线位移,矩阵插值会拉成直线位移,正确做法是用四元素进行插值

1

主题

14

帖子

17

积分

新手上路

Rank: 1

积分
17
发表于 2011-5-15 00:54:00 | 显示全部楼层

Re:请问用shader的话怎么计算骨骼动画两帧间的矩阵插值

可以用四元组保证光滑插值

13

主题

74

帖子

74

积分

注册会员

Rank: 2

积分
74
发表于 2011-5-19 11:05:00 | 显示全部楼层

Re:请问用shader的话怎么计算骨骼动画两帧间的矩阵插值

用shader去计算骨骼矩阵插值,出发点就错了,应该是外部做好,然后在传给shader才合适,完全违背了optimization的准则。

5

主题

6

帖子

10

积分

新手上路

Rank: 1

积分
10
 楼主| 发表于 2011-5-19 14:07:00 | 显示全部楼层

Re:请问用shader的话怎么计算骨骼动画两帧间的矩阵插值

在cpu计算插值我是用四元数插值的
但是不知道用shader能不能实现插值功能
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-8 05:31

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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