游戏开发论坛

 找回密码
 立即注册
搜索
查看: 8370|回复: 30

碰撞流程,处理精确碰撞,骨骼动画或则mesh动画随时在变

[复制链接]

197

主题

1041

帖子

1104

积分

金牌会员

Rank: 6Rank: 6

积分
1104
QQ
发表于 2006-9-6 09:58:00 | 显示全部楼层 |阅读模式

我在外面加了一层cube的模糊碰撞,然后内层做精确检测的时候,每次重新组织tri结构,然后按静态模型的tri方法计算。

我发现一个问题,两个动画的碰撞,在进入了模糊检测层以后,每刷一贞,然后重组tri,然后检测。这非常慢。目前两个测试动画mesh数分别是1200,800

游戏中如果多个角色完全靠在一起。光是碰撞检测就要吃掉一半cpu。

另外,我在模糊碰撞外层还加了一层地图的区域判断。用来隔离做模糊碰撞检测的频率。

左想右想都没个好方法。

你有经验吗?拿出来谈谈吧

59

主题

1104

帖子

1199

积分

金牌会员

Rank: 6Rank: 6

积分
1199
发表于 2006-9-6 10:29:00 | 显示全部楼层

Re:碰撞流程,处理精确碰撞,骨骼动画或则mesh动画随时

动画在变,模型的拓扑结构不会变,你可以通过骨骼父子结构来生成OBB tree,外面那层你说的cube模糊碰撞就是obb tree的root。
大体的思想就是先碰大的大的碰上了再碰大的里面的小的。。。。
不用tri-tri-collision detection,那样太慢了。

14

主题

131

帖子

136

积分

注册会员

Rank: 2

积分
136
发表于 2006-9-6 22:14:00 | 显示全部楼层

Re:碰撞流程,处理精确碰撞,骨骼动画或则mesh动画随时

cube是个凸体,使用统一凸体碰撞检测法GJK(Havok,DynaForce都是用这方法),这是目前为止最快的统一凸体检测法了,将这个算法讲清楚,你需要给我500页A4纸,如果你有兴趣可以自己下英文论文来看,不过我推荐你使用物理引擎处理,为什么摆那不会用?ode,dynaforce,bullet都行啊。

197

主题

1041

帖子

1104

积分

金牌会员

Rank: 6Rank: 6

积分
1104
QQ
 楼主| 发表于 2006-9-7 09:26:00 | 显示全部楼层

Re:碰撞流程,处理精确碰撞,骨骼动画或则mesh动画随时

我做的游戏只是个开阔的场景,其中有很多角色运动,我根本不会用物理引擎的。因为以前我用过,给了很多摩擦,地阻,空阻,引擎等等定义,结果跑下来,在800x600分辨率下只剩下十几贞。

我看过的物理引擎大都是基于空间动力控制。在单一obj vs obj的碰撞方面,我从来没在ode和dynaforce看见过有动画/骨骼碰撞的例子,demo/我看见的都是静态模型的空间阻力之类的控制。

我现在很想有个函数,能高校简单的检测到骨骼碰撞。

刚才我google了一下论文,好像骨骼动画碰撞有专门的方法。但又找不到现成可参考的代码。

楼上二位,能否提供一些实用简单的方法?我不相信你们做的碰撞,全用物理引擎解决,obj vs obj的碰撞就是个算法,完全用不着驱动一个空间引擎来检测,你们说是不是?

197

主题

1041

帖子

1104

积分

金牌会员

Rank: 6Rank: 6

积分
1104
QQ
 楼主| 发表于 2006-9-7 09:36:00 | 显示全部楼层

Re:碰撞流程,处理精确碰撞,骨骼动画或则mesh动画随时

我需要的碰撞,会涉及到碰撞的坐标,而且必须很精确,像tri matrix的内部坐标一样精确。

我对sk系统做了外部的martix坐标焊接。比如角色被一只弓箭射中,我要让弓箭插在角色体内,所以这时需要一个碰撞的精确坐标。以及实实在在tri vs tri的碰撞。

但是tri vs tri效率实在令人担忧。我在mesh分别是1200,800上做检测,其频率就是1200*800的循环,其中每个循环会轮流处理三次tri的顶点坐标。非常慢。!!!!!

36

主题

1047

帖子

1147

积分

金牌会员

Rank: 6Rank: 6

积分
1147
发表于 2006-9-7 09:47:00 | 显示全部楼层

Re:碰撞流程,处理精确碰撞,骨骼动画或则mesh动画随时

2楼说的就可以了。

197

主题

1041

帖子

1104

积分

金牌会员

Rank: 6Rank: 6

积分
1104
QQ
 楼主| 发表于 2006-9-7 09:54:00 | 显示全部楼层

Re:碰撞流程,处理精确碰撞,骨骼动画或则mesh动画随时

如果在root bone的part生成一个类似cube或则椭圆来检测,那么我这是可以做到的,完全没问题,

但是下一步呢,我检测到root以后,可是有的角色的sk结构是链型的,非父子关系,这么部分我又该怎么处理呢?

如果要算出坐标,单单检测接近sk块高宽的模拟cube还是不够吧?最后还是要算到tri里面去。

你们做过的,请谈谈这个流程。详细讲解一下

59

主题

1104

帖子

1199

积分

金牌会员

Rank: 6Rank: 6

积分
1199
发表于 2006-9-7 10:19:00 | 显示全部楼层

Re:碰撞流程,处理精确碰撞,骨骼动画或则mesh动画随时

关键是你的tri-tri碰撞次数太多,把这个解决就可以了。
我说的用obb tree的方法就是减少tri-tri的碰撞次数,如果sk的结构不是父子关系的话就不太好办了,不过还是可以做到一层obb 节点,也能有效的减少检测的次数。

实质上你可以这样理解,用了obb tree进行检测的话,就是先检测是否碰上了手臂之类的身体部位,如果碰上了那个部位,再把那个部位里的tri取出来碰。

另外根据你说的应用来说,如果不是两个sk的模型碰的话,你可以把另一个非sk的碰撞模型简化。

197

主题

1041

帖子

1104

积分

金牌会员

Rank: 6Rank: 6

积分
1104
QQ
 楼主| 发表于 2006-9-7 10:36:00 | 显示全部楼层

Re: 碰撞流程,处理精确碰撞,骨骼动画或则mesh动画随时

刚才我做了副图,然后把模拟出近似cube显出,

在碰撞时,检测这些和sk块的高宽相等的cube以后呢?从碰撞的触发源取得那块触发碰撞的tri在matrix的位置,然后在这时,我从和单块的骨骼对应的skin mesh每贞重组tri结构,然后再检测

这个方法可以行得通,就是感觉有点麻烦。如果我用你的obb tree能够很简单的检测出精确碰撞的matrix坐标吗?
sf_200697103541.jpg

65

主题

518

帖子

521

积分

高级会员

Rank: 4

积分
521
发表于 2006-9-7 10:38:00 | 显示全部楼层

Re:碰撞流程,处理精确碰撞,骨骼动画或则mesh动画随时

事先声明,我菜鸟,刚接触碰撞。(别骂我...)

你们所述的利用父子关系减少检测计算是怎么回事?
如果箭射向一个人物,先跟root的方盒检测,如果碰撞就在跟躯干,手臂,腿等身体部件检测,然后手臂又可以再分成上臂和下臂和手等部分来继续检测。是这个意思么?

那非父子结构的模型又会怎样呢?(什么样的结构是非父子结构的呢?)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-25 08:49

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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