【转载】寻路建模的三种方式比较

介绍如何在 Unity 利用稀疏体素化八叉树 (SVO) 和专门的 A* 寻路算法在 3D 中进行寻路。 2. 通过将你的世界分成几个较小的区域,你可以在大小和遍历时间方面获得更好的结果,因为这些区域通常不需要互连的寻路(例如,想象一下 roguelike 游戏中的独立房间)。另外,请注意应用此解决方案的数据:如果你的世界有许多重叠的单元格和相邻的空闲单元格,从而阻止八叉树将节点组合成更大的节点,那么你最好只使用统一的网格,因为它更适合问题域。这不仅会导致过多的内存需求,以便在大空间中拥有均匀的网格,还会导致更糟糕的寻路运行时间,因为大多数单元是空的,但在遍历中无法跳过。如何在三维空间中烘焙导航网格? 阅读详情

原文链接:https://blog.youkuaiyun.com/needmorecode/article/details/82050409
概述

本文对于游戏寻路中主流的三种建模方式做了比较,分析各自的适用范围和优缺点。这三种建模方式包括:格子(Grid)、路点(Waypoint)、导航网格(Navmesh)。

写这篇的原因是项目里需要选择一种合适的寻路实现方案,查阅了大量的文章和算法后,结合着自己的思考和实践,在此做个小结。

这里的建模指的是为地图寻找一个空间表征(spatial representation),即把原始地图转换成计算机数据结构表示的模型,用于后面的寻路。注意它与寻路算法是不同的概念,例如:Grid和Navmesh是两种不同的建模方式,但是建模完成后,都可以用到A*算法。

下面是三种建模方式的图形化表示,一目了然,分别是:(a) 原版地图,(b) 格子,© 路点,(d) 导航网格。
在这里插入图片描述
先来一个简单而粗略的比较,后面再分头细说:

实现复杂度:导航网格 > 格子 > 路点
内存和计算开销3:格子 > 导航网格 > 路点
表达精确性:导航网格 > 格子 > 路点

格子(Grid)

这种方法将原始地图分割成许多的小格子,在计算机中表示为一个二维数组,用0和1分别表示障碍和可行走区域。

格子的优点

  • 容易实现。

  • 容易动态修改。如果需要动态加入障碍,只需要确定障碍物会占用哪些格子,再重新寻路即可。

格子的缺点

  • 内存和计算开销大。越大的地图,所需格子就越多,相应的内存占用和寻路计算开销就会越大。另外,格子的大小选择也是一个问题,定得小了,内存和计算开销大;定得大了,又会缩减可行走区域,导致可行走边界不够精确。

  • 可能需要做额外平滑。如果按照格子来寻路,最后生成的路线很可能会出现90度的拐角,甚至可能有连续的多个,这种急转弯会使得游戏寻路表现得“不够自然”。这时还需要做额外的平滑。

  • 不太适合3D地图。格子最早是针对2D地图寻路提出的,不涉及高度信息,因此没有导航网格中的maxClimb、agentHeight等参数,更没有考虑分层地图。当然也不是完全不能做,只是更复杂。

路点(Waypoint)

这种方法会在地图中标注一些路点,寻路只能发生在路点和路点之间,在计算机中表示为一张连通图。
路点的优点

  • 实现简单。

  • 内存和计算开销低。路点只使用到了真实可行走区域的一小部分,与格子相比,牺牲了路线的灵活性,换取较低的内存和计算开销。

路点的缺点

  • 需要人工参与。因为需要人工标注路点位置和可行走路线。
  • 局限性较大。首先,路点的灵活性较低,寻路必须沿着预先定义好的路线前进,使用时有时会发现:明明有看上去更直接的路线,却偏偏只能绕远路走折线;其次,对于起始点不在路点图中的情况,还需要找到最近的路点先移动过去;最后,路点不考虑实际的底层地图,所以在移动过程中有可能出现被物体阻挡卡住的情况。

导航网格(Navmesh)

这种方法使用一系列算法将原始地图转换成三角形网格的集合,网格和网格之间构成连通关系用于寻路。在计算机中表示为顶点的集合,以及三个顶点索引一组(边)的集合。
导航网格的优点

  • 能精确地表征世界。虽然导航网格也做不到百分百还原真实地图,但是它无疑比格子和路点都更精确。首先,它引入了高度信息,使得表示3D地图成为可能;其次,它在应用agentRadius、agentHeight等参数时用到了体素(voxel)4,这是一种比格子更小的计量单元,使得计算可行走范围时更加精确。
  • 内存和计算开销小。导航网格将地图抽象成三角网格,也就是顶点和边的集合。理论上,这种建模方式的复杂度介于路点和格子之间。

导航网格的缺点

  • 复杂,难以实现和修改。自己从头实现一个导航网格系统无疑是非常复杂的,这需要很多几何算法的知识。好在现在有一些开源的实现,如crisis的引擎工程师实现的recast-navigation5。但如果想在它基础上去修改和定制,还是要花费不少功夫。

  • 建立网格的过程耗时耗内存。与格子和路点不同,前两者从原始地图建模的过程几乎是瞬间完成的,而建立导航网格则是一个相对复杂和耗时的过程,其中体素化这一步又会占用不少内存(完成后会释放掉)。好的网格导航实现可以将建网格和动态加入障碍的时间代价控制在几毫秒的级别。通常的程序实现会在第一次寻路前就寻找时机建好网格。

总结

每种建模方式都有自己的优点和缺点,应具体根据应用场景选择合适的方式。

如果开发时间有限,需要在可能动态变化的2D地图中寻路,地图不会太大,内存充足,且对行走区域的精确度没有太高要求,首选格子。

如果开发时间有限,寻路线路相对固定(典型的如塔防游戏),不用考虑真实地形的影响,优先考虑路点。

如果开发时间充裕,地图很大,对表征真实世界的精确度要求很高,那么最好选择导航网格。

深度解析寻路算法:BFS、最佳优先与A*算法 在众多寻路算法中,几种常见的算法包括广度优先搜索(BFS)、最佳优先搜索(Best First Search)、A*(A-star)算法等。这些算法各有特点,适用于不同的寻路场景和需求。我们将会在后续章节中详细介绍每种算法的原理与实现方法。广度优先搜索是一种用于图的遍历或搜索树结构的算法。该算法从根节点开始,逐层向外扩展访问,直到找到目标节点或搜索完整个图结构为止。BFS使用队列这种先进先出(FIFO)的数据结构,确保每层的节点都被有序访问。 阅读详情

相关推荐

微信h5 支付,已经获得weixin://wap/pay?prepayid,但是无法调起微信客户端支付

结果几个接口,最终获得到到一直包含调起微信客户端的支付链接 但是直接打开这个页面,却不能调起微信客户端支付,原因是,在打开新页面的时候,需要设置a.rel = "noreferrer"; <body> <a href="javascript:void(0)" onclick="openNewWindowNoreferrer(this)">点击支付</a&...

qq_31683775的博客 4万+

通过俄罗斯方块浅谈游戏中的AI(四)路点

前述:谈到“路点”大家想到的应该是cs中的bot waypoint,有waypoint的map可以使用bot,没有waypoint的map就不行。于是大家都去下载每个地图的“路点(WayPoint)”其实这两个游戏的路点虽然从规模上有较大差距,但从思想上还真差不多。我认为cs的路点实现:1、cs的路点并不会存储让bot如何瞄准,而只会记录当前位置和下一个可选位置的关系,以及按照什么路线走过去。好的路点文件可以让bot走的路线很不容易被人看到,一般的路点就会沿着大道中间走;2、bot在某个点上做某些动作的真正

Zierben的专栏 3082

信息抽取实战:三元组抽取(限定领域 vs 开放领域)(附代码)

信息抽取实战:三元组抽取 目录信息抽取实战:三元组抽取一、限定领域的三元组抽取比赛介绍数据分析序列标注模型关系分类模型三元组提取总结开放领域的三元组抽取标注平台文本分类新数据进行三元组抽取总结参考文献 一、限定领域的三元组抽取   本项目将会介绍在2019语言与智能技术竞赛的三元组抽取比赛方面的一次尝试。由于该比赛早已结束,当时也没有参加这个比赛,因此没有测评成绩,我们也只能拿到训练集和验证集。但是,这并不耽误我们在这方面做实验。 比赛介绍   该比赛的网址为:http://lic2019.ccf.org.

南有芙蕖 2万+

浅析游戏开发中的寻路算法

寻路算法是一个发展了很久很久的方向,除了上面列出的这三种比较有代表性的算法以外,还有非常非常多的其它算法,不过思路大部分比较类似,都是在前人的基础上做的一些改进。在游戏开发中寻路是个偏前端的问题,除了 SLG 游戏以外,寻路一般都是在前端实现的,后端只会拿前端得到的路径判断一下点的合法性就行了。但是寻路算法的复杂性还并不是这些算法的理解,而是要搞定策划的需求,很多时候高效简洁的实现可能无法满足策划的想法,要在算法的基础上做各种贴近业务的定制化修改。

m0_73915763的博客 2318

RseQC实战指南:从安装到RNA-Seq数据质控全流程解析

本文提供了一份详尽的RseQC实战指南,涵盖从安装配置到RNA-Seq数据质控的全流程。文章重点解析了RseQC作为专业质控工具的核心价值,手把手指导如何通过Conda或pip完成安装,并深入讲解了bam_stat.py、geneBody_coverage.py等关键模块的使用方法与结果解读技巧,帮助用户有效评估RNA完整性、文库构建质量及链特异性,确保下游分析的可靠性。

weixin_29200741的博客 201

PX4实战(四):PX4 uorb模块详解

本节主要讲解PX4中的uorb消息,主要包括uorb的基本概念使用、PX4内重要的uorb消息、如何自定义uorb消息以及使用uorb消息的注意点等,其中讲解重要uorb消息是为了对PX4内重要数据结构有初步的了解,有助于后期算法理解。uORB(micro Object Request Broker)是PX4中用于模块间通信的轻量级发布-订阅(Publish/Subscribe)机制。模块之间可以通过uORB传递消息,无需直接调用对方函数;提高系统模块化与解耦性;

PX4-SLAM-PNC 1931

寻路建模的三种方式比较

概述 本文对于游戏寻路中主流的三种建模方式做了比较,分析各自的适用范围和优缺点。这三种建模方式包括:格子(Grid)、路点(Waypoint)、导航网格(Navmesh)。 写这篇的原因是项目里需要选择一种合适的寻路实现方案,查阅了大量的文章和算法后,结合着自己的思考和实践,在此做个小结。 这里的建模指的是为地图寻找一个空间表征(spatial representation)1,即把原始地图...

长三月的游戏开发 6524

计算机组成原理(第三版)唐朔飞-第七章指令系统-课后习题

机器字长是指CPU一次能处理数据的位数通常与CPU的寄存器位数有关。指令字长是指机器指令中二进制代码的总位数。存储字长是指存储单元中存放二进制代码的总位数。三者可以相等也可以不等视不同机器而定。答:OP(4位)A1(6位)A_1(6位)A1​(6位)A2(6位)A_2(6位)A2​(6位)设二地址指令格式为该指令系统的基本格式,4位操作码共有16种编码,其中13种用来定义二地址指令,还剩3种可用作扩展标志。一地址指令条数=3∗26=192。

weixin_45735391的博客 7万+

Turtlebot+ROS Stage仿真环境实现MPC轨迹跟踪

在无人车系统(十一):轨迹跟踪模型预测控制(MPC)原理与python实现【40行代码】中介绍了MPC方法在无人车轨迹跟踪中的应用。以Udacity中的例子作为引子,详细介绍了MPC的原理,无人车的运动学模型,以及给出基于python的实现。Udacity的仿真器是一些特定的环境,没有ros中的stage或gazebo灵活。本文以turtlebot的轨迹跟踪任务作为引子,介绍在ROS Stage............

昔风不起,唯有努力生存! 1万+

火灾图像检测识别:cnn卷积神经网络 Adaboost 支持向量机 随机森林 决策树 完整代码数据

火灾图像检测识别:cnn卷积神经网络 Adaboost 支持向量机 随机森林 决策树 完整代码数据

862

基于YOLOv11的工业零件表面缺陷检测系统:从原理到实现

工业质量控制是制造业的核心环节,表面缺陷检测作为其中重要组成部分,直接关系到产品质量和企业效益。本文详细介绍了一种基于YOLOv11深度学习算法的工业零件表面缺陷检测系统,包含完整的算法原理分析、数据集构建方法、模型训练策略以及用户界面设计。通过大量实验验证,该系统能够高效准确地检测零件表面的划痕、凹陷、锈蚀等多种缺陷,检测精度达到96.2%,满足工业实时检测需求。本文还提供了完整的代码实现和详细的技术文档,为相关领域的研究者和工程师提供参考。关键词:表面缺陷检测;YOLOv11;深度学习;工业视觉;

YOLO 567

unity 游戏中的寻路与导航系统(5种寻路算法详解)

1.了解游戏中常见的驯鹿方式 2.寻路方案选择 3.NavMesh 寻路 4.任务目标追踪 5.常见的寻路方式-建模方式 寻路建模 Grid WayPoint NavMesh

lfanyize的博客 2万+

华为OD机试 - 商品推荐多属性排序 - 数组(Python/JS/C/C++ 双机位A卷 100分)

本专栏收录于《华为OD机试真题(Python/JS/C/C++)》。刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新。双十一来临,小王准备买某个购物平台买坚果。在输入坚果时,页面默认按照综合推荐列表。小王想知道这个综合排序时如何完成的,于是便开始思考算法题。经过一番操作后,完成它的多个关键词排序算法。希望你给小王提供一份正确的排序结果,验证其实现算法结果的准确性

学Java,找哪吒 622

Cocos2d-x 类COC手游与RTS(即时战略)游戏的编程实践总结

先来看一段视频。这个视频很短。4分钟。是我的一个技术demo演示视频。 http://www.tudou.com/programs/view/HL-ZWZkUw9k/?lvt=97&resourceId=0_07_10_28 这个技术演示demo可以在这里下载到安卓平台的APK包: http://download.youkuaiyun.com/detail/stevenkylelee/7929017 2014.08.13-2014.09.15 这一个月左右的时间里, 我独自一人在家做了上面视频中技术演示的demo。

Siliphen Labs 2万+

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

AI: (Artificial Intelligence)人工智能和机器学习常见算法

AI(Artificial Intelligence)人工智能和机器学习常见算法此文章是转载:为了理解MPP 的 AI 而找的文章。一,人工智能的算法个体人工智能-随机数(Random)  -A*寻路(A* Search Algorithm)  -状态机机制(Finite-State Machine)  -决策树机制(Decision Tree)  -博弈论(Game Theroy)  -神经网络...

段传涛 的专栏 5488

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

基于F32C驱控一体无刷电机的二维云台几何图形复刻实战

运动控制是机器人、自动化设备实现精准定位与轨迹跟踪的核心技术。其原理在于通过控制器、驱动器与执行机构的协同,实现对电机位置、速度的精确闭环调节。这项技术的价值在于能够将复杂的数学轨迹转化为平滑、高精度的物理运动,从而提升设备的性能与智能化水平。在视觉跟踪、激光加工、精密装配等应用场景中,高精度的运动控制是确保任务成功的关键。本文聚焦于二维电动云台这一具体执行机构,深入探讨了如何利用驱控一体无刷电机方案,结合FOC控制算法与轨迹规划技术,实现几何图形的精准复刻。通过剖析F32C方案在简化系统、提升性能方面的优

weixin_30691871的博客 389

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

天赐范式第17天:在混沌相空间轨迹中,用ZFC公理重构MMORPG千人团战:当P=NP在游戏工程中成为现实,附源码

《天赐范式:游戏AI的革命性指挥系统》 本文提出了一种突破性的游戏AI解决方案——天赐范式(Tianci Paradigm),通过元生成方程和五阶段流水线架构,彻底改变了传统游戏AI的随机性缺陷。该系统包含以下创新: 核心突破:采用数学流形概念替代概率模型,通过逻辑毒丸Φ函数实现千人团战的精确控制,在纳维-斯托克斯方程级压力下保持稳定。 该范式不仅适用于游戏AI,还可拓展至无人机集群控制等复杂系统领域,系统可自动处理Excel导入的千人团队数据,实时生成战术态势展现了P=NP问题在工程实践中的暴力美学实现。

snowoftheworld的博客 488

Unite Beijing 2018 参会简要分享

一、 Training Day 主讲人:鲍建运 操作:马瑞 课程包括较为完整的功能,如灯光设置,角色动画控制,Cinemachine,Timeline,AI寻路,以及最新的Post Processing Stack渲染系统等,最后还应用到了Tenserflow进行机器学习演示。 但操作都较为初级,大部分为拖拽,脚本已写好,没有带领写代码。 总体来说,操作太入门,不过对于了解一些没有接...

weixin_30881367的博客 665

CN Erlounge III - 已注册讲师和主题列表

已注册讲师名单及议题 注:以下只是当前已注册的讲师及相应的议题(按注册时间次序排列),但是限于大会时间安排上的限制,她们并不一定最终全部都在本次大会中讲。公布已注册的讲师名单和议题,目的只是处于信息披露的需要,让大会的过程更加透明。 姓名 电子邮件 演讲主题 周爱民(aimingoo) aiming AT gmail.com e...

weixin_30822451的博客 140

影谱科技:AI孪生技术是零售业数字创新的枢轴点

近期,在Adweek社交媒体周活动中,Snap首席商务官Jeremi Gorman表示,她认为增强现实及数字孪生技术正处于营销技术的拐点,类似于2010年代初和1990年代末网络媒体的兴起。 影谱科技数字孪生商业化负责人持有相同观点,“基于AI技术的数字孪生技术已经做好大规模应用准备。我们可以看到,孪生3D视频及AR视频已经在Snapchat、Instagram、TikTok等社交平台上规模化出...

cover_se的博客 1

寻路算法学习笔记:Toward More Realistic Pathfinding

寻路算法学习笔记:Toward More Realistic Pathfinding 原文地址:Toward More Realistic Pathfinding by Marco Pinter   A Faster Implementation of the Standard A* 作者实现的快速A*算法是使用一个虚拟的matrix嵌套在地图方格上,matrix为固定

pi9nc的专栏 3510

Unity内实现简单的路点系统

总之,为了实现“让小球能按照既定轨迹运动”这种蛋疼又基础的功能,我又跑来写笔记了。在Unity里其实已经有很多前辈做过了路点系统这个东西,比如AssetStore里的SimpleWaypointSystem(https://assetstore.unity.com/packages/tools/animation/simple-waypoint-system-2506)和StandardAsset...

chilzyj的博客 4024

传统路径规划算法介绍

传统路径规划算法总结动态规划 动态规划

selinaliujunlan的博客 3389

在Unity中实现体素化

类似与用网格存储二维平面,将三维空间划分成大量尺寸相同的小方块的过程就称之为体素化。

F_CILF_CIL的博客 4302

图形引擎实战:寻路从接触使用到改造的征途

大家好,我是来自搜狐畅游引擎部的codemouse,这次是分享关于3D世界寻路的生成方法,以及对寻路生成过程的一个改造。项目需求:1. 需要寻路导航面根据场景中的积木的修改,实时进行变化。2. 识别一个较为平坦的区域作为大路使用。3. 寻路导航面的多边形过多,优化减少,增加寻路性能。4. 需要寻路支持超大场景8公里*8公里。突然有一天,老大跟我说:咱们要做3D世界做寻路了,你去看下navMesh寻路吧,该navMesh是基于体素去生成的寻路导航面,去把它看懂,后面我们要给寻路路面挖洞,做道路识别。于是我的n

qq_41166022的博客 597

基于体素化的游戏寻路导航网格自动生成算法

多边形分割成若干凸多边形(NavMesh的初步形成)在Unity中实现体素化当时我正开始做毕设,因为从小对游戏感兴趣,所以找老师开了这么一个题目,不过后来因为事情繁忙(偷懒太久),文章一直没有更新,到如今我都从清纯校招生变成工作一年半的老油条了。最近整理了一下当时的资料,开源了项目代码,并且将毕设论文中的“干货”部分,发表出来。一方面希望能够给对这个方面感兴趣的同学一点学习的参考,另一方面,如果我的内容存在错误,也希望能够被指出,我也能在不断改正的过程中成长。

F_CILF_CIL的博客 2800
上一篇: 那些游戏中的寻路算法
下一篇: 【Unity】设计一个基本的第一人称控制器
Currybeefer
博客等级 码龄7年 49粉丝 121原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值