平民程序 - linghuye's blog

天下风云出我辈,一入江湖岁月催。皇图霸业谈笑中,不胜人生一场醉。提剑跨骑挥鬼雨,白骨如山鸟惊飞。尘事如潮人如水,只笑江湖几人回。

随笔 - 221, 文章 - 0, 评论 - 680, 引用 - 0
数据加载中……

魔兽世界的碰撞检测方案推测

1.花花草草,灌木丛,片状树叶,布幅等等不作碰撞检测(实际上是由模型的数据定义,模型若不定义Polygon soup则该模型无碰撞检测).
2.可移动的玩家,NPC,Mobs之间不作碰撞检测(出于游戏设计和服务器性能考虑).
3.地形系统上的碰撞检测:可基于高度图实现.人站立在地形三角片的插值高度点上,若行走坡度太陡(从一个三角片到另一个相邻的三角片)则禁止行走.由于地形本质是基于等分的2维网格,很容易从人的平面位置算出所处网格位置,从而得到该网格处的地形高度,进而精确地计算所站立的三角片的点高度.
4.野外场景: 由角色所处的512*512的MapArea始,采用4叉树包围球/包围盒层次裁减该MapArea内的物体.
5.室内场景: 由角色所处的BSP节点开始,采用BSP层次裁减该Portal内的物体.(室内场景处理技术在Camac手里基本已成定型).
6.角色周围可能的碰撞物体: 先作OBB包围盒粗略检测,然后是 Polygon soup 精确的三角片对人物圆柱体碰撞检测,这样角色才可以站在凹凸不平的投石车上,可以走在桥面上,可以跳到船舱面上,可以进入类电梯的内凹物体(游戏编程精粹1有文讲述三角片碰撞).
7.模型的Polygon soup是简化的物理模型形状.
8.AI寻路基于地形三角片?方形网格!?BSP的portal?


9.此间台风大作,呼啸肆意,书以记之.

posted on 2005-09-01 22:21 linghuye 阅读(3776) 评论(14)  编辑 收藏 引用 所属分类: 3D图形学研究

评论

# re: 魔兽世界的碰撞检测方案推测  回复  更多评论   

看起来魔兽只有碰撞检测,没有AI寻路。碰撞导致停止行走后,由玩家自己来调整角色朝向,直到能够继续行走。所以你就算点击鼠标,游戏不会自动到达你点击的位置,而是会停在障碍处,需要你自己动作才能继续行走。而其他游戏如天堂2就不同,游戏会为你算好到你鼠标点击处的路径,绕过任何障碍物,自动到达你点击的位置。
2005-09-17 09:55 | cimons

# re: 魔兽世界的碰撞检测方案推测  回复  更多评论   

从地形数据上确实没有发现直接可用于寻路的三角片节点数据.

怪物追人,可以延循人逃跑的路线进行.
宠物跟跑可以跟随主人的路线.
怪物主动攻击,大部分是不管地形直接冲到你面前,但有时确实会懂得绕开障碍.

猎人的宠物似乎有明显的寻路,之前猎人跳崖,宠物不懂得跟着跳,而是沿着正确的平坦的路线跑到猎人身边,从而拉了一火车怪. 还有,发起宠物攻击,有时他也会懂得寻路的.

所以很可能有内建寻路系统,但出于服务器效率考虑,大部分被屏蔽.



2005-09-17 12:25 | 平民程序

# re: 魔兽世界的碰撞检测方案推测  回复  更多评论   

我还是认为没有寻路。有的只是简单的两点连线,然后就沿着连线走,遇碰撞则在一个较小的扇形区内作转动避让,如果还不能避开就停止。当然这也可以算作一种寻路,但遇到大一点的障碍就无法自动到达目的地,必须玩家的操作介入。
至于宠物不跟着跳崖,不能说明有寻路,沿最短距离走也能导致不跳崖,只要没大障碍还能顺利到达目的地。如果能自动绕开大的障碍物,如建筑物、栅栏或直径大的树,才能说明有寻路,似乎在魔兽里没见到这种现象。
还有魔兽的所有与移动有关的算法都放在本地,不在服务器。但服务器也作一些校验,比如单位时间内的移动距离。
2005-09-17 20:39 | cimons

# re: 魔兽世界的碰撞检测方案推测  回复  更多评论   

"由角色所处的BSP节点开始,采用BSP层次裁减该Portal内的物体"

请问怎么判断角色当前处在哪个BSP节点里面?谢谢
2005-11-14 16:11 | kokk

# re: 魔兽世界的碰撞检测方案推测  回复  更多评论   

这个是个逻辑思路问题,我的做法,角色应该维护自身所处的位置,BPS节点,而不是瞬时去判断自身的位置. 在行动过程中穿越portal,不断更新自身的位置和相对BSP关系.
不过在BSP的数据结构下,判断某点在哪个BSP叶点内也是很基本的实现.
2005-11-14 16:25 | 平民程序

# re: 魔兽世界的碰撞检测方案推测  回复  更多评论   

谢谢你的答案,受益非浅。

还问你个问题

"先作OBB包围盒粗略检测,然后是 Polygon soup 精确的三角片对人物圆柱体碰撞检测"
这个OBB是根据Polygon soup里面提供得顶点计算出来的吗?计算OBB会不会导致效率很低?(相对于计算AABB来说)
2005-11-15 12:06 | kokk

# re: 魔兽世界的碰撞检测方案推测  回复  更多评论   

这个我是想错的,对于3D网游世界, 并且在这种假想方案下,AABB应该足够了.
OBB多余了,会导致效率降低.
另外m2里有额外的数据表明人物的包围盒大小,wowmodelviewer有显示它的功能.
2005-11-15 12:42 | 平民程序

# re: 魔兽世界的碰撞检测方案推测  回复  更多评论   

明白了,谢谢你热心的解答。
2005-11-18 10:37 | kokk

# re: 魔兽世界的碰撞检测方案推测  回复  更多评论   

AI寻路估计是因为在服务器端做,所以客户端不需要对应的数据。
2006-03-13 21:46 | nil

# re: 魔兽世界的碰撞检测方案推测  回复  更多评论   

我以前用过一有个外挂可以爬到树上去,


怪物好象都在用这个外挂,因为人爬不上去的地方它们都能爬上去的
2006-03-18 11:53 | Ori

# re: 魔兽世界的碰撞检测方案推测  回复  更多评论   

我认为魔兽所有寻路都是在客户端进行的,
黑客写了一个小小的服务端就能做私服太可怕了
2006-03-18 12:01 | ori

# re: 魔兽世界的碰撞检测方案推测  回复  更多评论   

我想做一个虚拟场景漫游中的碰撞检测,能给点建议吗
2006-04-15 23:15 | panxq

# re: 魔兽世界的碰撞检测方案推测  回复  更多评论   

乱说,魔兽世界的地形是用3ds max做的。
高度图是纹理,山与山之间是不可能存在可以通过的山洞的,而强暗夜精灵到兽族之间是可以利用一个山洞通行的等等等等。。。。。。
2007-11-30 11:48 | asd

# re: 魔兽世界的碰撞检测方案推测  回复  更多评论   

暴雪用的是 havok 物理引擎
2009-02-12 16:41 | zorro
只有注册用户登录后才能发表评论。