navmesh 生成网格信息 总 (更新中 )

The general process is as follows:

Voxelization - Create a solid heightfield from the source geometry.

体素化,根据几何体创建solid heightfield(recast里面的rcHeightField)

 

Generate Regions - Detect the top surface area of the solid heightfield and divide it up into regions of contiguous spans.

生成区域,决定哪一部分表面是可通过的。然后把这些可通过区域划分为邻近的 regions of spans,最终可以用它们形成凸多边形。

 

第一步,把solid heightfiled转成open heightfield(对应recast里面的rcHeightField转成rcCompactHeightField),open heightfield 也就是表示上表面开阔区域的heightfiled

创建Neighbor Links

比如上面这些,桌子下面这些,在生成solid heightfiled的过程就已经被排除了,因为一个体素中有多边形的面穿过而被认为是solid的。

然而在这个时刻桌子上面还是被认为是可行走的。

第二步,进一步排除 un-walkable spans ,排除条件:1 距离阻挡够远 2 上面能走人而不会碰撞到物体

 

为所有的open spans会产生邻居信息,算法:

所有邻居columns 为候选对象,只考虑四个方向的,而不考虑diagonal方向的,满足以下两条的span会被认为是neibour span:

1 两个spanfloor的高度差够小

2 agent通过的时候不会撞到头

如上图,我们每一个独立的span是能放下一个人的,但是在邻居间移动的过程中没办法保证gap足够大。

 

生成distance field

distance field是什么:包含每个span距离最近的border span的距离。在生成regions的过程中这个算法会用到。

Border span:没有8neighborspan。是用来表示原始geometry的可行走表面与阻挡或者empty space之间的boundary

 

 

生成regions

Regions的很重要一点是他们在映射到xz平面的时候会是简单多边形。

初始的生成region的算法:分水岭算法。

分水岭算法会从最低点的span开始慢慢地开始“floods”,进行迭代,每次迭代有一个当前的水平线,当前水平线以下的spans会被增加到现有的regions或者创建出新的regions。在region扩张的过程中如果一个被flood到的span临接一个已经存在的region,那么它会被加入

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值