千家信息网

NavMesh的生成原理

发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,本篇内容介绍了"NavMesh的生成原理"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!简述本篇文章介
千家信息网最后更新 2025年12月01日NavMesh的生成原理

本篇内容介绍了"NavMesh的生成原理"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

简述

本篇文章介绍了NMGen的核心处理流程。NMGen用于生成多边形数据,代表了导航网格的表面。有很多种网格生成方式,但是他们都包含了下面的一些步骤。

主要流程如下所示:

1. 体素化。从源几何体构造实心的高度场,用来表示不可行走的空间。

2. 生成地区。将实心高度场的上表面中连续的区间合并为地区。

3. 生成轮廓。检测地区的轮廓,并构造成简单多边形。

4. 生成多边形网格。将轮廓分割成凸多边形。

5. 生成高度细节。将多边形网格三角化,得到高度细节。

一、Voxelization(体素化)

核心类:Heightfield

在体素(体素是空间中的一个有大小的点)化阶段,源几何体被转换成高度场,用来表示不可行走的空间。一些不可走的表面在这个阶段会被剔除掉(比如坡度过大的面 )。

对于源几何体上的每个三角形,使用"保守体素化算法"(Conservative Voxelization)分割成体素,并加入到高度场中。保守体素化算法确保了每个三角形面,都会被生成的体素完全包围。

体素化阶段后,实心高度场(solid heightfield)包含了很多的区间(span),覆盖了源几何体上的所有面。

二、Region Generation(生成地区)

核心类:CompactHeightfield

这一阶段的目标是,近一步定义实体表面上哪部分是可以行走的,以及将这些可行走的部分划分成连续的地区,这些地区可以最终构成简单多边形。

首先,将实心的高度场,转换成一个开放的高度场(open heightfield),用来表示实体表面上那些可以行走的部分。一个开放的高度场,表示位于实体空间表面的地表部分。

在下图中,绿色部分代表开放区间(span)中的地表。这相当于是实心高度场上所有可行走的上表面。注意那些墙,桌子下面的区域,以及走廊扶手上那些比较窄的区域,已经在实心高度场生成的时候被剔除掉了。一些不可行走的区域,比如桌面,楼梯扶手,墙边较窄的位置,目前仍然显示为可行走的。

然后,进一步剔除掉不可行走的区域。在计算完成的时候,开放区间中那些认为可以行走的部分,应该通过下面的测试:
+ 该区域不能紧挨着障碍物(如,墙,家具等)(使用WalkableRadius作为距离阀值)
+ 该区域在表面之上没有足够的开放空间(非碰撞区域)。(人在不碰撞到其他物体的情况下,能够合法的移动)(使用WalkableHeight作为高度阀值)

为剩下的所有区间生成邻接信息,用于把他们合并成一个大的面片。该算法使用一个最大垂直步长(WalkableStep4)来决定哪些区间是可以连在一起的。这允许一些特殊的结构能够被考虑进来,比如楼梯,路边,桌面等。例如,构成阶梯的区间能够当做邻居被连接在一起,而桌面上的区间就不能和地板连接在一起。

下图显示的是地区。注意看阶梯上的那些地区,尽管构成的区间并没有直接相连。也需要注意那些桌子上,楼梯扶手,以及所有其他实心高度场上不可走的面,在这个阶段后已经被成功剔除了(黑色表示被剔除的区间)。

在该阶段后,这些相连的地区代表了可行走的面。

三、Contour Generation(生成轮廓)

核心类:ContourSet

轮廓就是沿着地区边缘"行走",构成简单多边形。这是从体素空间转换回向量空间的第一步处理。

首先,从地区生成非常精细的多边形。

然后,使用多种算法来完成下面的步骤:

+ 简化相邻多边形的边缘(地区之间的部分)

+ 简化边界(边界是没有邻接或邻接了障碍物的轮廓)(EdgeMaxDeviation)

+ 优化边界的长度。(边界如果太长,不能得到最优的三角形)

下图展示了执行此算法后的轮廓

在该阶段结尾,简单多边形代表了可行走的表面。

四、Convex Polygon Generation(生成凸多边形)

核心类:PolyMesh

许多算法只能用于凸多边形。因此,这一步需要把轮廓构成的简单多边形转换成凸多边形网格。

下图中,你可以看到由轮廓形成的凸多边形。

在该阶段的结尾,一个凸多边形网格代表了可以行走的表面。

五、Height Detail Generation(生成高度细节)

核心类:PolyMeshDetail

在这最后的阶段,凸多边形网格会被Delaunay三角化算法三角化,于是可以增加高度的细节。在多边形的内部或者边缘添加顶点,来确保网格与原始几何体表面等价。(DetailSampleDistance和DetailMaxDeviation)

"NavMesh的生成原理"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

生成 高度 地区 多边形 表面 轮廓 阶段 区间 网格 凸多边形 空间 算法 核心 部分 三角 代表 几何 几何体 区域 开放 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 软件开发公司盗用设计 山西gpu云服务器租用云空间 长沙冠盈互联网科技有限公司 长宁区自主可控网络技术内容 华为云数据库设计路线图 数据库和idea是怎样连接的 数据库需求分析阶段 fme隐藏数据库密码 哈尔滨方略软件开发 电脑怎么看服务器的端口 企业常用的web服务器 司法局网络安全周法治日 软件开发一月多少钱工资多少 内丘软件开发设计在线咨询 厦门德智慧网络技术 和平精英与服务器不连接重新登录 嘟嘟网络技术 兰山区伍陆柒网络技术服务工作室 不能连入主机服务器 软件开发培训学校广场舞 去日本做软件开发加班严重吗 关于计算机网络技术的论坛 泰拉瑞亚1.3永久在线的服务器 新余政务软件开发价格 霍邱县网络安全机构 sql数据库提示错误 红瑞软件开发工作室 内丘软件开发设计在线咨询 网络安全法利好还是利空 校园网络安全与保护工作总结
0