服务器3D场景建模(六):RecastNavigation介绍

RecastNavigation

RecastNavigation是一款非常强大的寻路系统,被广泛的应用于各大游戏引擎中。如Unreal, Unity等。

github网址:https://github.com/recastnavigation/recastnavigation

与体素的关系

在前面章节,介绍过《天涯明月刀》中,使用了体素的概念,来实现服务器端3D场景。

理解了RecastNavigation的实现后,对比下,前者太简单粗暴了!

RecastNavigation在体素概念的基础上,进一步提炼,最终使用NavMesh的概念来表达3D场景。

提炼过程如下:

3D场景 => 多层体素 集合 => 邻接凸多边形 集合

RecastNavigation最终输出的,也是基于运作的数据是:邻接的凸多边形集合

即使用了邻接的凸多边形集合描述了一个3D场景。

加之A*寻路算法,使3D场景的可达性得到保证。

NavMesh中文名称:导航网格

A*寻路算法即为导航;凸多边形即为网格。

因此 NavMesh = A* + Convex Polygon

RecastNavigation有哪些内容

主要包含2大类:

  1. Recast,用于生成邻接的凸多边形集合数据
  2. Detour,基于邻接的凸多边形集合的A*寻路算法

细分Recast生成的数据,又有3类:

  1. Solo Mesh,纯粹的邻接凸多边形集合
  2. Tile Mesh,基于tile划分的N个邻接凸多边形集合
  3. Temp Obstacles,支持动态障碍物的,基于tile划分的N个邻接凸多边形集合

以上3种各有各的适合场景,按业务需求选择,或结合之。

RecastNavigation能做啥

  • 能表达一个3D场景
  • 能接近精确的赋予游戏对象(x、y、z)属性
  • 能判断3D场景表面2个点的可达性
  • 能动态改变3D场景地形

RecastNavigation不足

RecastNavigation所有操作都基于地表面。

因此,对空中的对象的交互,用它是无法完成的。

通常这时会结合其他引擎,如physx。

下面是引用作者的原话

Recast raycast checks “walkability” along the navmesh. You will need a starting point on the navmesh for that. To raycast against level geometry, you should use some other system, i.e. physics or roll your own.

RecastNavigation使用例子

本人的RecastNavigation封装库:

github地址:https://github.com/fananchong/NavMeshScene

欢迎指正错误与不足

猜你喜欢

转载自blog.csdn.net/u013272009/article/details/80086833