Recast源码解析(二):NavMesh导航网格生成原理(上)

详解Unity中的Nav Mesh新特性|导航寻路系统 (三) 通过前面两篇的介绍与讲解我们已经对新版NavMesh有了一个基础的了解和使用,本篇我们继续讲解剩余的两个组件NavMeshModifier、NavMeshModifierVolume,这两个组件是主要是用于影响导航网格的生成的。所以内容不是很主要,但也非常重要。 阅读详情
AI摘要

本文详细介绍了Recast寻路系统中静态网格(navmesh)的构建过程,重点讲解了体素化和区域生成两个阶段的技术实现细节,并推荐了学习资源。

上文说到recast的寻路分为两部分:recast(建网格)和detour(寻路),这里就建网格这一步谈谈自己结合代码的理解。这里的navmesh指的是solo mesh,也就是静态网格,与能动态添加障碍的tile cache加以区别。后者另外单独撰文介绍。

这里推荐一个网站critterAI(网站地址),里面有两个很好的学习项目:CAINav是一个基于recast开发的可以在Unity运行的导航系统;NMGen包括Java版的recast静态网格生成代码,以及相关原理和算法的介绍文章。想要探究原理的话值得一看。

recast建网格这一部分涉及到较多的空间几何知识和算法,新人要能看懂着实不易。因涵盖内容较多,打算分两篇来写,主要的步骤包括:

  • 体素化
  • 区域生成
  • 轮廓生成
  • 轮廓多边形生成
  • 细节网格生成

    这些步骤的概述可参见这篇译文,而细节讨论可在NMGen上看到。这里只涉及前两步:体素化与区域生成。

体素化(Voxelization)

这里写图片描述

生成navmesh的函数入口在Sample_SoloMesh::handleBuild()中。第一步是初始化构造参数(initialize build config),重要的几个有:

  • cs:xz平面下体素的大小。
  • ch:y轴下体素的高度。
  • walkableSlopeAngle:可行走倾斜角度。
  • walkableHeight:寻路agent的高度。
  • walkableClimb:寻路agent的爬坡高度。
  • walkableRadius:寻路agent的半径。

这些参数都会在后面的体素化过程中用到,待用到时再细说。

第二步是将源网格光栅化(rasterize input polygon soup)。学过图形学的都知道,光栅化是渲染管线中的一个流程,作用是将图元数据转换为像素;而这里光栅化的作用类似,只不过转换成的是体素而不是像素。所以这里说的体素化也就是指光栅化,是将三角网格转换为体素格子的过程。其中体素格子的大小由上面提到的cs和ch来定义。

这里写图片描述

这里还引入了几个后面会用到的概念(不熟悉这些概念的可参见介绍文章):

  • 高度域(height field):容纳所有体素格子的AABB包围盒。
  • 区间(span):一列上空间连续的体素集合。
  • 实心区间(solid span):被障碍物占据位置的区间。

这里写图片描述

  • 开放区间(open span):没有被障碍物占据位置的区间。
    这里写图片描述

为什么需要体素化这一步呢?这是为了方便使用前面定义的几个参数(如walkableHeight、walkableClimb)来对可行走区域做进一步的裁剪,否则单纯基于三角形网格是很难做到的。当然裁剪完成后,我们最终还是要把体素还原成navmesh。

下面具体看下执行代码。首先创建高度域(rcHeightfield),然后标记可行走三角形(rcMarkWalkableTriangles):方法是通过计算三角平面的法向量,与walkableSlopeAngle比较,小于这个倾斜角标记为可行走(RC_WALKABLE_AREA),存于 m_triareas数组中。

接下来是将三角形光栅化(rcRasterizeTriangles)。具体过程是:先计算三角形的AABB包围盒在xz平面下的投影。

这里写图片描述

然后遍历所有被投影覆盖的高度域格子列(grid column),每个格子列与三角形相交的部分取最低点和最高点,中间部分就是新增加的区间。新增区间时,若与老的区间有重叠,则还需要合并。最终我们得到一个spans数组,存在rcHeightField中。每个span中有属性area,取值源于前面计算出的m_triareas数组。

这里写图片描述

后面进入第三步:过滤可行走表面(Filter walkables surfaces)。这一步又细分为三步:

  1. 过滤低垂的可行走障碍(rcFilterLowHangingWalkableObstacles):若一个span标记为可行走,那么位于它上方且高度相差小于walkableClimb的span也应标记为可行走。典型的场景包括:楼梯台阶、路沿。这一步实际会扩大可行走区域判定。

  2. 过滤凸起区间(rcFilterLedgeSpans):如果从区间的顶端到相邻的区间下降的距离超过了walkableClimb,那么这个区间被认为是个凸起,不可行走。
    这里写图片描述

  3. 过滤可行走的低高度区间(rcFilterWalkableLowHeightSpans):当区间上方有距离小于walkableHeight的障碍物时,它的顶端表面也不可行走,因为可容纳的高度不够。
    这里写图片描述

区域生成

这是第四步:将可行走表面划分成简单的区域(Partition walkable surface to simple regions)。

首先是创建紧缩开放高度域(rcCompactHeightfield)。具体过程是:先遍历每个可行走的区间,它与上方的另一个区间之间的部分就是一个开放区间;得到所有开放空间后,再计算每个开放区间与相邻的4个区间之间的连通关系,这里是基于walkableHeight和walkableClimb判断是否合法,计算出的连通关系以编码的形式存于rcCompactSpan的con属性中。这一步结束后会完成对rcCompactHeightfield中spans、cells和areas数组的赋值。

这里写图片描述

其次基于walkableRadius来裁剪可行走区域。这里用一个dist数组去存每个rcCompactSpan与可行走区域边缘的最近距离,小于walkableRadius的将chf.areas[i]标记为不可行走。计算过程中用上了前面计算出的连通关系con。

最后是执行区域划分算法。可选算法分三种,这里只研究了第一种:分水岭算法。大意就是从地势的最低点开始灌水,水漫过的区间若与原区域相邻则认为是同一区域,否则认为是一个新的区域。分水岭算法通常用于图形处理领域,基于图像的灰度值来分割图像。这里唯一的不同点是用距离域来取代灰度值。距离域是指每个区间与可行走区域边缘的最近距离。距离域越大,等同于地势越低。先算出每个区间的距离域。
这里写图片描述

再执行分水岭算法,算出的区域id保存在rcCompactSpan.reg中。
这里写图片描述

至此区域分割完毕。

[unity3d]recast navigation navmesh 导航网格 寻路算法 源码分析 recast navigation navmesh导航网格算法源码分析 Author: 林绍川 recast navigation navmesh是unity3d ue4内置的寻路算法 阅读详情

相关推荐

详解Unity中的Nav Mesh新特性|导航寻路系统 (一)

之前我们讲解过Unity的Nav Mesh系统,其中提到过这个新版的Nav Mesh,它解决现有Nav Mesh的几个缺陷,比如无法动态烘焙,无法按照Agent的半径和高度适当的判断可行路径。现在新版Nav Mesh可以彻底解决这个问题!某种意义上讲,它只能算作一个补丁,因为它要依赖于原有的Nav Mesh系统,本篇文章就来讨论一下这个新版NavMesh系统到底是什么。

梦小天幼的博客 8656

详解Unity中的Nav Mesh|导航寻路系统 (一)

在类RTS、RPG游戏中,都会提供自动寻路功能,当玩家下达指令后,NPC就会自动计算到达目标的路径,实现这种功能的方式有很多种,其中Unity本身也自带了一种导航寻路系统,该系统会将游戏场景中复杂的对象烘焙为网格信息,通过网格来计算NPC抵达目标的最短路径,该系统还支持动态寻路。接下来就详细讲讲NavMesh系统。.........

梦小天幼的博客 1万+

UE4/UE5运行时动态NavMesh生成:Recast原理、性能优化与异步构建实战

导航网格是游戏AI实现自主寻路的核心数据结构,它定义了场景中的可行走区域。其底层原理通常基于体素化与区域划分技术,将连续的三维几何空间转换为离散的、AI可理解的连通图。这项技术的核心价值在于为动态变化的游戏世界(如开放世界地形变形、沙盒建造)提供实时、鲁棒的寻路支持。通过理解体素尺寸、区域合并等关键参数对生成质量和性能的影响,开发者可以针对高频更新场景进行深度优化。本文聚焦于UE引擎集成的Recast导航库,深入剖析其六步构建流水线,并分享一套经过验证的异步构建与增量更新策略,有效解决动态障碍物更新导致的性

weixin_27943395的博客 353

3D寻路系统NavMesh-客户端篇

2D寻路我们一般以A*寻路为主,那么,3D游戏世界呢,NavMesh(导航网格) 是3D游戏世界中主动寻路的一种技术,如果你想让游戏人物能自动绕开障碍物到达目的地.那你就来学习下。

流子的专栏 3625

游戏AI寻路实战:Recast/Detour导航网格原理与Unity/UE4集成指南

在游戏开发中,寻路算法是AI行为决策的核心基础,它决定了NPC能否在复杂环境中智能移动。其原理通常基于图搜索算法,通过在可行走区域构成的图上寻找最优路径来实现。A*算法因其高效性成为游戏寻路的主流技术,它通过启发式函数平衡搜索效率与路径质量。这项技术的价值在于为动态、开放的游戏世界提供了可靠的空间认知与移动解决方案,直接影响游戏的沉浸感和玩法深度。应用场景广泛覆盖角色扮演、策略对战及开放世界等游戏类型。本文聚焦于久经考验的Recast导航网格生成与Detour寻路库,深入解析其体素化、区域生成等核心流程,并

weixin_29009501的博客 322

游戏AI导航实战:基于RecastNavigation的NavMesh生成与寻路系统构建

在游戏开发中,AI角色的智能移动是提升沉浸感与策略深度的核心技术。其核心原理在于将复杂的三维场景转化为计算机可理解的抽象空间表示,并在此之上进行高效的路径规划。导航网格(NavMesh)作为一种主流的空间表示技术,通过凸多边形精确覆盖可行走表面,相比传统的路点或网格,在空间利用率和路径自然度上具有显著优势。其技术价值在于将开发者从繁琐的底层几何处理(如体素化、区域划分)中解放出来,专注于高级AI行为逻辑。这一技术广泛应用于RTS、MOBA、MMO等需要大量单位智能移动的场景。本文以工业级解决方案Recast

weixin_33997389的博客 437

游戏AI导航核心:RecastNavigation导航网格生成与寻路实战

在游戏开发中,寻路算法是AI自主移动的基石,其核心目标是在复杂场景中为角色规划出高效、自然的移动路径。从经典的A*算法在网格上的搜索,到更先进的导航网格技术,其原理在于将连续的可行走空间抽象为多边形网络,从而大幅提升路径质量和查询效率。这项技术的核心价值在于,它为游戏中的NPC、怪物等角色提供了可靠的空间认知与路径规划能力,是实现开放世界探索、RTS单位调度等复杂AI行为的关键底层支撑。导航网格通过预处理场景几何,构建出精确描述可行走区域、坡度及高度的空间数据结构,使得运行时寻路快速而准确。本文聚焦于行业广

weixin_30654419的博客 341

UE4/UE5运行时动态生成NavMesh避坑指南:从Recast源码到性能优化实战

本文深入探讨了UE4/UE5中运行时动态生成NavMesh的技术细节与性能优化策略。通过分析Recast源码的体素化处理、区域划分算法及动态更新触发机制,提供了一套完整的避坑指南,帮助开发者在开放世界或动态地形项目中实现高效的AI寻路系统。重点介绍了性能监控、异步化处理及内存优化等实战技巧。

weixin_33720956的博客 210

Cocos Creator3.x NavMesh导航网格寻路(一)

前言 在游戏开发过程中,寻路可能是大多数游戏都必不可少的功能。2d游戏中最常用的就是A* 寻路了。在3d游戏中,对于一些简单的,没有高度地面A* 寻路同时也是可以使用的,但是对于一些地面比较复杂的游戏,寻路功能怎样实现比较好呢! 效果展示 Cocos Creator3.x:NavMesh 导航网格寻路 1.RecastNavigation 相信了解过3d寻路的小伙伴都有听说过RecastNavigation。RecastNavigation是一款非常强大的寻路系统,被广泛的应用于各大游戏引擎..

carlos13207的博客 4188

游戏思考18:Recast与Detour深度解析:导航网格生成中的体素化与区域划分实战

本文深度解析了Recast与Detour在导航网格生成中的核心技术,重点剖析了体素化、区域划分(分水岭算法)以及Detour寻路引擎的A*与漏斗算法实战应用。通过详细的源码剖析和参数配置经验,为开发者提供了从网格生成到高效寻路的完整解决方案与性能调优指南,帮助应对复杂游戏场景中的AI路径规划挑战。

2a4s6d8f0g的博客 235

Unity场景导出OBJ:打通Recast导航与Blender协作的工程化方案

OBJ格式是跨引擎、跨工具链通用的静态几何交换标准,其纯文本结构与轻量依赖特性,使其成为GIS对接、离线导航烘焙(如Recast Navigation)及轻量化可视化验证的核心载体。其原理基于顶点/纹理/法线三元组的明确定义,需严格遵循1-based索引、UV通道降级(仅UV0/UV2)、世界坐标对齐与右手系适配等规范。技术价值在于规避FBX在地形导出、材质丢失、LOD崩坏等方面的固有缺陷,提供‘干净、扁平、无运行时依赖’的场景快照。典型应用场景包括Unity→Recast离线NavMesh生成、Unity

weixin_34110970的博客 228

UE4运行时动态生成NavMesh:从Recast原理到工程实践

导航网格(NavMesh)是游戏AI寻路的核心数据结构,它定义了虚拟世界中AI角色的可行走区域。其生成原理基于空间体素化与几何处理,通过将复杂3D场景转换为规整的凸多边形网络,为A*等寻路算法提供高效查询基础。这项技术的核心价值在于支持动态变化的环境,使得AI能实时适应场景破坏、建筑生成等交互。在开放世界、随机生成关卡等应用场景中,运行时动态更新NavMesh成为关键技术需求。本文深入解析了基于Recast/Detour库的生成流程,并详细阐述了在UE4中通过动态管理NavMeshBoundsVolume与

weixin_32570803的博客 274

强化学习代码实现PPO

梯度更新:通过截断(clipping)限制策略更新幅度,避免策略变化过大影响稳定性。首先是数据预处理,将相关数据(状态、采取的动作、状态奖励、下一个状态)放到gpu上。根据当前状态 state,利用策略网络生成每个动作的概率分布 probs。2. 修改了策略模型的输出,从每个动作的概率分布变成了动作的均值和方差。1. 修改了动作空间,离散空间变成了连续空间,使用正太分布来采样。3. 修改了动作的ratio的计算,从离散分布变成了正太分布计算。Update函数:通过经验缓冲数据来优化策略模型和价值模型。

wlxsp的博客 635

UE5 AI导航失效深度排查:从NavMesh动态更新到路径查找优化

在游戏开发与AI行为模拟中,路径查找是核心基础技术,它决定了虚拟角色能否在复杂环境中智能移动。其原理通常基于A*等算法在导航网格上进行搜索,技术价值在于实现高效、可信的自主移动,直接影响游戏体验与沉浸感。应用场景广泛,从敌人寻路、NPC巡逻到开放世界探索都依赖于此。本文聚焦UE5引擎,针对导航系统动态更新延迟、NavMesh数据流式加载等工程实践痛点,通过可视化调试与源码级追踪,提供一套解决AI“撞墙”问题的实战方案,确保AI能实时适应场景变化,实现精准路径规划。

weixin_34248705的博客 310

泛微OA与金蝶云星空审批流程对接实战:从报销单到采购合同的完整指南

本文详细介绍了泛微OA与金蝶云星空审批流程的深度集成方案,涵盖从报销单到采购合同的完整对接指南。通过API层面的无缝连接,实现流程自动化、数据同源和权限联动,显著提升企业业务效率。文章还提供了环境配置、数据映射、接口安全等实用技巧,助力企业轻松完成系统对接。

weixin_29268637的博客 245

SHP转TXT、TXT转SHP工具(附工具下载链接)

关于TXT,可以选择整个图层生成一个TXT。也可以勾选“每个地块单独存TXT”,然后选择一个字段,根据字段值,给每个地块生成一个TXT文件。支持选择和数据框一样的坐标系,也可以选择一个图层,工具会采用和这个图层一样的坐标系。1、TXT数据支持输入单个或者多个TXT文件,也可以直接选择TXT所在的文件夹。所有的TXT数据都生成到一个矢量数据图层。关于这一行的内容,可以在地块坐标行设置中进行设置。其他:①面节点闭合:勾选,则回到起点。属性描述:可以直接复制粘贴进来,也可以直接修改。也可以改为任意字母。

坐听风雨 4301

RecastNavigation导航网格指南:5步掌握游戏AI路径规划技术

RecastNavigation是游戏开发领域的行业标准导航网格工具集,专门用于生成高质量导航网格和执行高效路径规划。无论你是独立开发者还是大型工作室成员,这个开源工具都能为你的游戏AI提供专业级的导航解决方案。本文将为你提供一个完整指南,帮助你快速掌握RecastNavigation的核心功能和使用方法。 ## 为什么游戏开发需要导航网格? 在3D游戏中,AI角色需要智能地在复杂环境中移动。

gitblog_00485的博客 384

地瓜机器人RDK Studio使用入门教程

不知道大家在使用AI开发板的时候有没有遇到过板子官方镜像占据空间大难以保存,想要的时候找不到?官方示例项目久而久之便难以找寻?首次登陆开发板连接网络还需要准备显示器键盘鼠标外设繁杂?…为了解决平时开发过程中遇到的种种不便利问题,地瓜机器人创新的推出了RDK Studio这一官方开发者软件,使智能机器人开发迎来新纪元!通过这一软件极大降低了机器人的开发门槛,哪怕是零基础的用户亦可轻松上手RDK系列板卡!

xiongqi123123的博客 3429

three-pathfinding完全指南:3D游戏导航网格技术终极入门

three-pathfinding是基于PatrolJS开发的three.js导航网格工具库,它能够在3D场景中计算导航网格上点之间的路径,支持多区域,并为FPS控制提供移动向量约束。对于3D游戏开发者和three.js爱好者来说,这是实现角色智能导航的必备工具。 ## 🚀 为什么选择导航网格技术? 传统游戏和3D应用常使用路点系统帮助AI角色导航,但这种方法存在诸多问题。导航网格(Navm

gitblog_00641的博客 1103

YOLOv8改进 | 主干网络 | 增加网络结构增强小目标检测能力【独家创新——附结构图】

YOLOv8改进,小目标检测,yolov8

kay_545 6020

用 SAP XCO XLSX 模块优雅读 Excel:坐标、选择模式与实战案例全解析

SAP ABAP Cloud 中的 XCO XLSX 模块为 Excel 文件处理提供了官方解决方案。文章介绍了三个核心概念:通过 XCO_CP_XLSX=>DOCUMENT 获取文档句柄;使用 CL_XCO_XLSX_COORDINATE 坐标系统定位单元格;利用 Selection Pattern 精确读取数据区域。这些功能在 RAP 批量导入等业务场景中尤为实用,相比传统方案更加简洁可靠。文章还分享了真实项目中的最佳实践,如动态列定位和相对偏移技巧,帮助开发者构建更健壮的 Excel 导入逻辑。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 193

Unreal引擎AI寻路调用链深度剖析:从AIController到NavMesh的完整流程

在游戏开发中,AI寻路是实现智能角色自主移动的核心技术。其原理基于导航网格(NavMesh)数据结构和A*等路径搜索算法,通过将游戏场景抽象为可行走区域网络,计算最优移动路径。这项技术的价值在于为游戏角色提供可靠、高效的自主移动能力,是开放世界、RPG、RTS等类型游戏的基石。在实际工程实践中,开发者需要深入理解寻路系统的完整调用链,才能有效解决AI卡顿、路径异常等复杂问题。本文以Unreal引擎为例,详细解析从AIController发起移动指令,经过NavigationSystem调度,最终由Recas

cuanji3287的博客 435

vivo X200 Ultra前瞻系列(1):重塑影像旗舰标准

在色彩风格化、视频专业度上实现了安卓阵营的突破性进步。其2亿像素长焦、双LYT-818传感器及5轴防抖技术,对追求个性化创作的用户具有强吸引力。若真机表现能兑现硬件承诺,X200 Ultra有望重新定义手机影像的“专业”标准。然而,其厚重设计、价格门槛及生态适配问题,仍需市场检验。vivo X200 Ultra作为2025年上半年影像旗舰,以“全焦段夜视仪+电影级视频”为核心卖点,主打。,对标小米15 Ultra、OPPO Find X8 Ultra等竞品。,顶配版(24GB+2TB)逼近万元。

专注:太空算力、AI infra、异构调度、大模型成本工程 964
上一篇: NavMesh生成研究(一):体素化过程
下一篇: NavMesh生成研究(三):轮廓生成
长三月
博客等级 码龄9年 228粉丝 80原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值