recastnavigation

Recast Navigation: 游戏中的导航网格生成利器 导航网格(Navigation Mesh,简称Navmesh)是一种用于游戏AI寻路和移动计算的数据结构。它将游戏世界中可行走的区域简化为一系列相连的多边形,形成一个网格状结构。这种结构可以大大简化寻路算法的复杂度,提高效率。在导航网格中,每个多边形代表一个可行走的区域,多边形之间的边表示可以通过的路径。AI角色可以在这些多边形内自由移动,并通过边缘连接到相邻的多边形。这样就可以将复杂的3D环境简化为一个2D平面上的图结构,极大地降低了寻路的难度。 阅读详情

Recast-入门

Recast-Navigation 在做3d游戏的时候,用于做导航的在Unity3D、Unreal Engine都可以使用。当前使用 unreal 4.25

1. Recast工程介绍

RecastNavigation 是一个的导航寻路工具集,它包括了几个子集:

Recast:负责根据提供的模型生成导航网格。
Detour:利用导航网格做寻路操作。这里的导航网格可以是 Recast 生成的,也可以是其他工具生成的。
DetourCrowd:提供了群体寻路行为的功能。
Recast Demo:一个很完善的 Demo,基本上将 Recast 、 Detour 提供的功能都很好地展现了出来。弄懂了这个 Demo 的功能,基本也就了解了 RecastNavigation 究竟可以干什么事。

Recast先从几何体构造素模,然后在其上投射导航网格。此过程包括三个步骤:

  1. 创建素模(voxel mold);

通过将三角形栅格化为多层高度场,从输入三角形网格构建体素模具。然后将一些简单的滤镜应用到模具上,以修剪角色无法移动的位置。

  1. 将素模划分成简单区域(region);

模具描述的可行走区域分为简单的2D覆盖区域。 生成的区域仅具有不重叠的轮廓,这大大简化了过程的最后一步。

  1. 将区域转换成多边形(polygons);

通过首先跟踪边界,然后对其进行简化,可以将导航多边形从区域中剥离。 最终将生成的多边形转换为凸多边形,这使它们非常适合该级的寻路和空间推理。

注:凸多边形的内角均小于或等于180°,边数为n(n属于Z且n大于2)的凸多边形内角和为(n-2)×180°,但任意凸多边形外角和均为360°,并可通过反证法证明凸多边形内角中锐角的个数不能多于3个。

尝试将unreal engine 里面的地图导出成detour能使用的导航网格:

再 UNREAL ENGINE 里面地图是*.umap文件。我们用UE打开之后,在菜单栏里面操作: Windows->导出NavMesh。这个步骤将会生成一个*.obj文件。这种文件其实是一种文本文件,描述了3D对象模型信息。Unity3D也一样能导出这样的文件。此过程将会生成某个尺寸的模型文件。

我们移植了一些Detour的代码,编写了一个程序 RecastCreator。这个程序能将*.obj文件导出成为一个binary文件。后续就直接使用binary文件来做导航操作。

PS D:\work\trunk\refer\recastnavigation\RecastDemo\Bin\Meshes> .\RecastCreator.exe -cfg -out t3.obj t3.region
----- Create Cfg -----
cellsize = 0.30
cellheight = 0.20
agentheight = 2
agentradius = 0.6
agentmaxclimb = 0.9
agentmaxslope = 45
regionminsize = 8
regionmergesize = 20
edgemaxlen = 12
edgemaxerror = 1.3
vertsperpoly = 6
detailsampledist = 6
detailsamplemaxerror = 1
partitiontype = 1
tilesize = 0
----- End -----
PS D:\work\trunk\refer\recastnavigation\RecastDemo\Bin\Meshes> .\RecastCreator.exe -out t3.obj t3.region
----- Create Bin -----
Building navigation:
 - 1028 x 1135 cells
 - 525.2K verts, 306.2K tris
Build Times
- Rasterize:    176.99ms        (24.5%)
- Build Compact:        39.54ms (5.5%)
- Filter Border:        29.55ms (4.1%)
- Filter Walkable:      5.15ms  (0.7%)
- Erode Area:   19.18ms (2.7%)
- Median Area:  0.00ms  (0.0%)
- Mark Box Area:        0.00ms  (0.0%)
- Mark Convex Area:     0.00ms  (0.0%)
- Mark Cylinder Area:   0.00ms  (0.0%)
- Build Distance Field: 29.01ms (4.0%)
    - Distance: 19.88ms (2.7%)
    - Blur:     8.95ms  (1.2%)
- Build Regions:        105.62ms        (14.6%)
    - Watershed:        97.48ms (13.5%)
      - Expand: 35.47ms (4.9%)
      - Find Basins:    2.93ms  (0.4%)
    - Filter:   6.76ms  (0.9%)
- Build Layers: 0.00ms  (0.0%)
- Build Contours:       13.14ms (1.8%)
    - Trace:    8.87ms  (1.2%)
    - Simplify: 2.00ms  (0.3%)
- Build Polymesh:       6.09ms  (0.8%)
- Build Polymesh Detail:        286.67ms        (39.6%)
- Merge Polymeshes:     0.00ms  (0.0%)
- Merge Polymesh Details:       0.00ms  (0.0%)
=== TOTAL:      723.73ms
>> Polymesh: 2552 vertices  1153 polygons

----- End -----

2.环境搭建

2.1.编译recastnavigation

工具名称 版本信息
visualstudio2019 16.8.3
CMake 3.19.0-rc1
premake 5.0
2.1.1.下载地址
名称 下载地址
SDL SDL2-devel-2.0.14-VC.zip
premake premake.github
2.1.2.准备好SDL2的dll

将下载的SDL2.dll文件放入到子目录中:

recastnavigation\RecastDemo\Contrib\SDL\lib\x86\SDL2.dll

使用CMake将SDL2编译出来。在windows里面,我这里都是使用32位编译的。

配置下列的环境变量:

变量名 位置
SDL_PATH D:\work\trunk\refer\recastnavigation\RecastDemo\Contrib\SDL
SDL2_INCLUDE_DIR D:\work\trunk\refer\SDL\SDL2-2.0.14\SDL2-2.0.14\include
SDL2_LIBRARY D:\work\trunk\refer\SDL\SDL2-2.0.14\SDL2-2.0.14\build\Debug
SDL2_SDLMAIN_LIBRARY D:\work\trunk\refer\SDL\SDL2-2.0.14\SDL2-2.0.14\build\Debug
2.1.3.使用premake5生成工程文件

这个默认生成的是win32位的

D:\work\trunk\refer\recastnavigation\RecastDemo>"premake5" vs2019
Building configurations...
Running action 'vs2019'...
Generated Build/vs2019/recastnavigation.sln...
Generated Build/vs2019/DebugUtils.vcxproj...
Generated Build/vs2019/DebugUtils.vcxproj.filters...
Generated Build/vs2019/Detour.vcxproj...
Generated Build/vs2019/Detour.vcxproj.filters...
Generated Build/vs2019/DetourCrowd.vcxproj...
Generated Build/vs2019/DetourCrowd.vcxproj.filters...
Generated Build/
RecastNavigation------体素化和高度场生成解析 像素化是将平面上的2D图像转化为一个个小正方形,与此类似,RecastNavigation的体素话过程是把空间几何体转换为一个个小正方体的组合(与游戏:我的世界相似) 体素化过程如下: 一. 将整个场景体素化 对于任何一个在欧几里得坐标系里的场景,都可以找到一个三边与xyz ... 阅读详情

相关推荐

3D世界如何寻路,导航寻路RecastNavigation解析(上)

Recast Navigation是一个开源的导航网格生成库,用于为游戏和模拟应用提供动态寻路能力。通过对网格模型进行精细的处理,Recast Navigation能够生成高效且可靠的导航网格,使得寻路和移动变得既快捷又精确。这一创新的技术在游戏开发和仿真领域中有着广泛的应用,其设计的巧妙之处值得每一位开发者学习和探索。接下来,让我们深入了解Recast Navigation的核心原理,并总结其设计精髓。

u010582587的博客 2499

手把手教你用TUSB2E22中继器实现eUSB2与USB 2.0互转(附实测数据对比)

本文详细介绍了如何利用TUSB2E22中继器实现eUSB2与USB 2.0的高效互转,包括技术背景、硬件设计要点、信号完整性测试方法及故障排查策略。通过实测数据对比,展示了TUSB2E22在信号延迟、功耗和眼图性能上的显著优势,为工程师提供了实用的工程方案。

weixin_29199873的博客 283

Cadence DSP 算子开发实战:从入门到精通

本文详细介绍了Cadence DSP算子开发的实战技巧,从入门基础到高级优化。内容涵盖DSP架构特性、内存管理、分块计算策略、SIMD指令优化等核心知识,并提供了性能调优和调试的实用技巧,帮助开发者快速掌握Cadence DSP开发精髓,提升图像处理等计算密集型任务的开发效率。

weixin_29278805的博客 434

无人机飞控技术最详细解读

已剪辑自: https://zhuanlan.zhihu.com/p/64519280[导读]被称作是“飞行器的大脑”的飞控到底是什么?以前,搞无人机的十个人有八个是航空、气动、机械出身,更多考虑的是如何让飞机稳定飞起来、飞得更快、飞得更高。如今,随着芯片、人工智能、大数据技术的发展,无人机开始了智能化、终端化、集群化的趋势,大批自动化、机械电子、信息工程、微电子的专业人材投入到了无人机研发大潮中,几年的时间让无人机从远离人们视野的军事应用飞入了寻常百姓家、让门外汉可以短暂的学习也能稳定可靠的飞行娱乐。不可

qq_41854911的博客 1万+

Python爬虫实战:利用Playwright和反反爬技术高效抓取Bloomberg金融数据

用户行为分析(鼠标移动、点击模式)请求头检测IP频率限制WebSocket通信验证Canvas指纹识别我们的爬虫需要模拟人类行为,使用代理IP池,并合理控制请求频率。

2201_76125261的博客 1020

CDD数据库文件制作(十一)——服务配置(0x19_DTC Code)

虽然选择Copy和Reference都可以加载DTC,但是如果我们在DTC库中有修改DTC,通过Copy的方式加载的DTC在DTC Table中不会跟着DTC库的修改而自动更新。通过Reference的方式加载的DTC可以自动更新。找到Fault Memory的DTC Table,鼠标放在DTC Table区域,右键点击选择Copy …根据需要(客户协议)勾选响应的19服务子功能。如何创建一个新的DTC code?按照字母与下方要素可做一一对应。首先在DTC库中新建DTC。支持10 01/10 03。

LOVE135149的博客 1917

在 Fiori Elements Object Page 的表格中用 UI.Hidden 隐藏列:语义、边界与落地实践全解析

摘要: Fiori Elements的Object Page表格中,UI.Hidden注解支持静态和动态隐藏列。动态隐藏分为两种:基于父实体属性隐藏整列,或基于子实体属性按行隐藏单元格。关键约束包括:支持服务端操作的列禁止使用动态隐藏,否则会导致UX不一致。ABAP CDS不支持路径式UI.Hidden,需改用XML注解。该功能需与UI.Importance、个性化等机制明确区分,避免混淆。对于可能参与排序/过滤的列,建议仅使用静态隐藏。实际应用中需注意注解位置(整列或单元格级)和业务场景的匹配。

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

QGC4.0.11界面修改

QGC4.0.11。

超维空间科技的博客 2466

《UDS/OBD诊断需求编辑工具》总目录

目录 1 基于CANdela Studio编辑CDD诊断描述文件 2 基于ODX Studio编辑ODX/PDX文件 2.1 编辑ODX-D诊断描述文件 2.2 编辑ODX-F刷写软件 该专栏主要负责介绍CANdela Studio和ODX Studio编辑CDD/ODX/PDX诊断描述文件。 1 基于CANdela Studio编辑CDD诊断描述文件 2 基于ODX Studio编辑ODX/PDX文件 【ODX介绍 】-1- 标准梳理 【ODX介绍】 -2-如何手..

「汽车电子助手」的博客 1万+

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

上一篇: go语言并发之道-笔记
下一篇: 线性代数笔记
erlang_hell
博客等级 码龄14年 57粉丝 89原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值