游戏开发论坛

 找回密码
 立即注册
搜索
查看: 11860|回复: 9

第一次写技术文献。Collision AI

[复制链接]

197

主题

1041

帖子

1104

积分

金牌会员

Rank: 6Rank: 6

积分
1104
QQ
发表于 2006-9-19 14:29:00 | 显示全部楼层 |阅读模式

前段时间开始开发新游戏引擎,目前也是正在开发状态。我常说,碰撞+空间算法部分是3D游戏中的核心,也是最难制作的一部分。抱歉,这样说恐怕有点不够准确,准确来说,Collision AI是最难得一块。难点在于,在制作过程中,那些数字很抽象,往往要思考很久才敢下手。

Collision的实现非常简单,Collision检测目前资料众多,算法也很成熟。往往在游戏运行中,Collision都有个和它对应的AI系统,我简称Collision AI。因为碰撞可以机械化的检测,并且准确率很高。在碰撞检测的下一步,就是发生对应的处理。因为我在制作一部实时引擎,目前正处于碰撞流程的制作过程,这一步直接涉及到很多物理计算,很多错综复发的逻辑处理。为了下一步开发能够更好的进行,所以把这一步直接规划到AI模块中。目前做了有些时间了,摸索出了一些AI方面的心得,同时又在网上又很少看到有这方面的文献。专业点的可以说目前没有,全是保留技术。

制作Collision AI首先是必须换脑。不要用简单的概念去思考它。否则实际做到那地方时,你会感到完全摸不着边。

碰撞流程主要依靠事件触发为主。碰撞检测部分应该放在刷贞时实现,否则来一个快速运动的object,那是很容易检测丢的。而刷贞部分,应该做一个专用的刷贞器,逻辑贞按每秒固定刷30FPS或则更好,而物理贞可以任意。因为检测运动object必须要保证检测频率是集中式的,而不是离散的。每秒的固定刷贞技术可以在刷贞器中用deltaTime的减法实现。这样就可以准确无误的检测碰撞了。你可以根据喜好制定检测的方式,比如先在地图系统中实现区域检测,然后再进一步执行外围的碰撞盒检测,最后再进行精确的Tri检测。不过目前都用接近的几何体来代替Tri检测。

然后就是最关键的碰撞AI处理了。在制作这一部分时,首先要有很完善的数据来源,可以很方便的计算。比如2个object发生碰撞时,obj1位于obj2的什么方向?obj1要向何处去?obj2要向何处去?是obj1让obj2先过,还是obj2让obj1先过?如果要让obj2过去,obj2应该怎么绕过obj1?向下绕?万一向下绕不通怎么办?那么向上绕,可是这时上面又有另一个obj3,这时候怎么办?这些问题只算整个Collision AI的九牛一毛,微不足道,可见碰撞流程何其复杂,我将之规划到AI模块中,完全不算过份。

而我要再次说明,在Collision AI的处理上,数据来源可算重中之重。

其次是,空间运动框架。你想想,我要控制obj2向某个方向移动,如果只给引擎一条指令,那是何其方便?可是在开发空间运动时,我们往往把全部精力集中在算法上,而忽略了后面的碰撞流程系统,碰撞流程系统会大量的用到空间运动引擎,而且几乎每次都是平滑运动,并不是一次到位。我为碰撞流程系统,从新写了空间运动部分,现在控制起来虽然还是比较吃力,那些逻辑很绕脑子,但这样结合运动+碰撞的空间运动引擎已经比以前进步了太多太多了,大大的方便的Collision AI部分的开发。

再其次,是逻辑判断的支持部分。我举个例子,obj1向obj2方向运动,obj2又向obj1方向运动,这种碰撞在碰撞引擎中我将之称为对碰,obj2延0度方向运动,obj2延90度方向运动,我将之称为直角碰,在实时的RTS引擎中这些都是要区分的,用来为后面的AI判定打下基础。

再其次,才是简单到不能再简单的Finding path之类的,什么A*,D*,V*,顶点寻路等等。这些是目前非常成熟的技术,索性我就不予以详谈了。

Collision AI我目前算是成功在望,虽然地球上以前有过一些高手,他们开发C&C,开发StarCraft,RedAlert,Warcraft,他们都走过了Collision AI这艰深的一步,最后迈向成功殿堂。虽然我不算什么鸟名人,但步其后尘,可以预见的游戏引擎成功在望,心里十分舒适。大有成功感。

总结一下。Collision AI引擎不要小看它,它和空间运动引擎这两块真的是RTS+ARPG游戏引擎中最难得两块。注意数据来源,运动框架,以及逻辑判断支持这三部分。开发时,应该保持六根清净,五蕴皆空状态。如果你会被那些逻辑判断搅到神经衰弱,应该立即stop,喝喝酒,玩玩女人,但不要沉迷其中,关键是让身心松弛。否则很难完成一个庞大的游戏引擎系统。

最后小声说一句。游戏引擎即将完成,规模不小。有同仁愿同学,愿一起做事。欢迎与我联系。在下张某,各方同行只要是同行,做程序的,美术的,策划的,一律收下了。大家慢慢想办法合作。

第一次写技术文献。望站长将之甩进精华区。多谢。

交流长存。阿门~~

7

主题

438

帖子

438

积分

中级会员

Rank: 3Rank: 3

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

Re:第一次写技术文献。Collision AI

这位大哥,你这篇帖子什么核心的内容都没有提到,要什么精华?

34

主题

629

帖子

629

积分

高级会员

Rank: 4

积分
629
发表于 2006-9-19 17:20:00 | 显示全部楼层

Re:第一次写技术文献。Collision AI

楼主有些钻牛角尖,其实这跟完美主义是两回事,不过还是支持一下

35

主题

1735

帖子

1739

积分

金牌会员

Rank: 6Rank: 6

积分
1739
QQ
发表于 2006-9-20 00:18:00 | 显示全部楼层

Re: Re:第一次写技术文献。Collision AI

justlikethewind: Re:第一次写技术文献。Collision AI

这位大哥,你这篇帖子什么核心的内容都没有提到,要什么精华?


同意你的看法,楼主似乎没说出什么所以然。 [em18]

5

主题

71

帖子

71

积分

注册会员

Rank: 2

积分
71
发表于 2006-9-20 18:26:00 | 显示全部楼层

Re:第一次写技术文献。Collision AI

兄台,本人策划,颇喜欢研究AI,有空交流交流。
QQ:273966073
MSN:lffq@163.com

197

主题

1041

帖子

1104

积分

金牌会员

Rank: 6Rank: 6

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

Re:第一次写技术文献。Collision AI

第一次写技术文献,不了解大家的意愿,见谅!我最近几天有时间的话,我会抽空写篇详细的ai流程。尽量做到,既可以拿来交流,也可以为大家提供学习。

楼上,qq我用得很少,熟人多,闲事多。email很合适。阁下不在成都吧?那么我先在网上拜见阁下了。我现在正在写碰撞的细节处理。晚点给你去信

噢对了,以后只要看见是passbyyou搞的原创,应使劲支持

24

主题

213

帖子

220

积分

中级会员

Rank: 3Rank: 3

积分
220
QQ
发表于 2006-9-21 22:06:00 | 显示全部楼层

Re:第一次写技术文献。Collision AI

楼主虽然没有写实现的细节,但是有些想法有些思想与大家交流,这也是非常好的,动不动就要求人放代码,这不一定是件好事,掌握了理论,再在实现的时候与大家交流也是件好事情。关注楼主的续作。

7

主题

438

帖子

438

积分

中级会员

Rank: 3Rank: 3

积分
438
发表于 2006-9-22 10:39:00 | 显示全部楼层

Re:第一次写技术文献。Collision AI

恩,恩,楼上说的对。我说话语气的确生硬。

楼主至少愿意写一些东西来分享,这个还是值得鼓励的。至少比我强,我一直都懒得动笔。

不过楼主还是注意一下,代码不一定要拿出来,但是至少要给出一些关键算法的设计思想。这篇帖子至少是什么都没说,只是说了一些设计上会遇到的问题。我想,这样的帖子应该是拿不到精华的。

197

主题

1041

帖子

1104

积分

金牌会员

Rank: 6Rank: 6

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

Re:第一次写技术文献。Collision AI

楼上所说有道理。

但我想,楼上恐怕是看不惯我在技术文章中穿插私人问题吧?

因为我那几天被ai算法搞到很累,因为我在主写引擎,很多东西都只有自己才知道,有时你头大了,身边连个商讨的人都没有,游戏引擎的很多东西一般都搞不明白。然后我那天看了下论文,感觉collision ai资料少之又少,所以在趁休息时间,随手写了篇理论。

其实我不是空谈,我也不是不写详细内幕。因为碰撞涉及了很多空间运动,很多东西要理清楚,要从几何原理开始,比如angle lert,vector lert,vector subtract原理。同时运动+碰撞又涉及了很多其它结构,比如地图,还有object数据原模。就这几样东西,光是要理清楚细节已经很麻烦了,况且是说清楚。当时左右思考了一下,干脆就思想上的东西谈了谈。光与碰撞流程的关键算法,关键在于分析碰撞的方式,能够分析出碰撞得方式,对碰,碰尾巴,斜碰,直角碰,然后再分析出绕行的最佳方式,比如小体积永远是让大体积停,自己旁边绕。那是一个大循环。

另外,阁下说,懒得动笔,这点其实是和我类似的,大家都是肚子里面的话一大堆,但就是不想说出来。比如我的博克现在都是一个月才更新一篇超过500字的文章。但阁下说我得不到精华,我就很不爽了,因为我有精华癖。

7

主题

438

帖子

438

积分

中级会员

Rank: 3Rank: 3

积分
438
发表于 2006-9-23 20:20:00 | 显示全部楼层

Re:第一次写技术文献。Collision AI

回楼上的:
    其实你说什么私人的内容,我丝毫不介意。只要这篇文章有价值,我很乐意看作者在文章里顺便扯扯蛋。只是什么有帮助的内容都没看到,光是扯淡就无聊了。
    楼主希望和大家分享引擎成功在即的喜悦,这是一件好事。我完全能够理解那种解决了困难问题之后,身边却无人喝彩的寂寞心情。我很愿意在帖子里面表达一下对楼主的祝贺。但是就这样就要求精华,貌似不太现实。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-25 11:32

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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