本发明涉及计算机技术领域,尤其涉及一种导航网格的重构方法、装置及存储介质。
背景技术:
目前,市面上很多的游戏都有人工智能单位进行寻路的需求,同时随着游戏的玩法功能日益进步,游戏中开始支持玩家或者人工智能单位通过特定的玩法,如:建造、采集、挖掘、技能来修改游戏中的地形。这时游戏需要实时生成并更新路网格,否则寻路算法就会出现路线穿透过阻挡物的表现。
目前市面上常用的商业引擎寻路库,或是开源寻路库,仅支持静态地图导出生成寻路网格。对于动态阻挡,仅支持在游戏运行时,计算动态添加的的阻挡的二维空间上的投影区域,并将该投影区域标记为对应的阻挡类型,然后重构寻路网格。此时投影区域内不再有状态为可行走的寻路网格,从而实现了限制人工智能单位进入阻挡投影区域的效果。然而,由于这种做法仅是简单的将阻挡的投影区域标记为限制行走的区域,只能让寻路路线避开阻挡区域,无法准确将动态阻挡的形状、高度信息体现到寻路中,因此,在这种方案下,动态添加一个梯子和一块石头的效果是一样的,都只能限制进入对应区域,而不能做到让寻路路线正常爬梯子。
技术实现要素:
本发明的目的在于提供一种导航网格的重构方法、装置及存储介质,以解决现有技术将动态阻挡的投影区域标记为限制行走的区域,导致只能让寻路路线避开阻挡区域的技术问题,本发明能够实时地、准确地将动态阻挡的形状信息更新到寻路网格中,从而能够根据动态阻挡的形状规划寻路路线。
第一方面,本发明实施例提供一种导航网格的重构方法,包括:
响应于在地图中添加动态阻挡的请求,获取所述动态阻挡的体素数据;
将所述动态阻挡的体素数据合并到所述地图的体素数据中,根据合并后的体素数据重构导航网格。
优选地,导航网格的重构方法,其特征在于,所述将所述动态阻挡的体素数据合并到地图的体素数据中,根据合并后的体素数据重构导航网格的操作在一独立线程中执行。
优选地,所述导航网格的重构方法还包括:
当主线程检测到所述独立线程根据所述合并后的体素数据重构好导航网格后,将所述地图对应的导航网格替换为根据所述合并后的体素数据重构的导航网格。
优选地,地图的体素数据的生成方法包括:
获取地图;
导出所述地图中所有顶点和三角面信息;
根据人工智能单位可攀爬的坡度和三角面的法线方向标记对应的三角面是否可行走;
对所有三角面进行体素化,得到高度场形式的体素数据;
根据预设的参数过滤掉不可行走的体素数据和边界的体素数据,得到地图的体素数据。
优选地,所述根据合并后的体素数据重构导航网格,包括:
对合并后的体素数据进行烘焙,重构导航网格。
优选地,所述动态阻挡的体素数据预先存储在本地存储器中或对所述动态阻挡的模型动态体素得到。
第二方面,本发明实施例提供一种导航网格的重构装置,包括:
响应模块,响应于在地图中添加动态阻挡的请求,获取所述动态阻挡的体素数据;
重构模块,用于将所述动态阻挡的体素数据合并到所述地图的体素数据中,根据合并后的体素数据重构导航网格。
优选地,所述将所述动态阻挡的体素数据合并到地图的体素数据中,根据合并后的体素数据重构导航网格的操作在一独立线程中执行。
优选地,所述导航网格的重构装置还包括:
替换模块,用于当主线程检测到所述独立线程根据所述合并后的体素数据重构好导航网格后,将所述地图对应的导航网格替换为根据所述合并后的体素数据重构好的导航网格
第三方面,本发明实施例提供一种计算机可读存储介质,,所述计算机可读存储介质包括存储的计算机程序,其中,在所述计算机程序运行时控制所述计算机可读存储介质所在设备执行如上述所述的导航网格的重构方法。
与现有技术相比,本发明实施例通过将动态阻挡对应形状体素化为体素数据;然后将该体素数据和地图体素数据进行合并,合并后,根据合并后的体素数据重构导航网格,这样,可以准确表达动态阻挡在三维空间中的形状,并能和地图自然的结合,从而使得人工智能体能够根据动态阻挡的形状规划路路线,即可以在阻挡的表面、内层以及下方行走。
附图说明
为了更清楚地说明本发明的技术方案,下面将对实施方式中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明一实施例提供的导航网格的重构方法的流程示意图;
图2是本发明一实施例提供的导航网格的重构装置的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
应当理解,文中所使用的步骤编号仅是为了方便描述,不对作为对步骤执行先后顺序的限定。
应当理解,在本发明说明书中所使用的术语仅仅是出于描述特定实施例的目的而并不意在限制本发明。如在本发明说明书和所附权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。
术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
为了便利理解本发明,下面对本发明涉及到的名词进行解释说明。
体素:体素是体积像素的简称,其概念上类似二维空间的最小单位——像素,像素用在二维计算机图像的影像数据上。体积像素是数字数据于三维空间分割上的最小单位。
动态阻挡:可以动态添加或移除到游戏中的,会阻挡角色移动的物体。如:树、石头、建筑物。
寻路网格:将地图表面划分为一个个的格子,每个格子标记了是否可行走的状态,寻路算法首先从所有可行走的网格中找到一条最优的路径,然后再根据这些网格生成所需的路径点,这些路径点构成了人工智能单位的移动路线。
高度场:以地图2d空间里的每个格子为单位,记录了这个格子上存在的连续合并体素信息。
请参阅图1,本发明实施例提供一种导航网格的重构方法,包括:
s1、响应于在地图中添加动态阻挡的请求,获取所述动态阻挡的体素数据;
s2、将所述动态阻挡的体素数据合并到所述地图的体素数据中,根据合并后的体素数据重构导航网格。
需要说明的是,本发明实施例是在游戏运行过程中执行的,但所述地图体素数据在进入游戏之前生成的,并压缩存储在游戏目录中。所述动态阻挡的体素数据可以在进入游戏前生成,也可以在游戏进行时对动态阻挡的模型进行动态体素得到。进入游戏后,首先需要从游戏目录中读取并解压地图体素数据,根据地图体素数据构建静态地图地导航网格。这样,人工智能体可在静态地图上正常寻路。在游戏运行过程中,当接收到添加动态阻挡的请求时,根据动态阻挡的体素数据的获取方式获取所述动态阻挡的体素数据,并从游戏目录中调用地图数据,然后将所述动态阻挡的体素数据合并到地图的体素数据中,这样便可根据合并后的体素数据生成包含动态阻挡体素数据的导航网格。由于生成的导航网格基于动态阻挡的体素数据生成的,因此,寻路效果可准确地体现出动态阻挡在三维空间的形状,人工智能体单位可在动态阻挡表面、内层、下方行走。如,若动态阻挡为梯子,那么,人工智能体单位可爬梯子;若动态阻挡为多层建筑物,那么人工智能体单位能够在多层建筑物中行走;若动态阻挡为桥,那么,人工智能体单位可在桥上、桥下行走。
还需说明的是,本发明实施例的提供的导航网格的重构方法可在终端设备上运行,也可指服务器上运行,本发明实施例在此不作限制,所述终端设备为具有显示和处理能力的电子设备,可以是智能手机、平板、平板电脑、便携式计算机、台式计算机等。
作为本发明实施例的一种举例,所述地图体素数据的生成方法包括s21-s25:
s21、获取地图。
在本发明实施例中,所述地图通过地图编辑器编辑得到。
s22、导出所述地图中所有顶点和三角面。
需要说明的是,常见的地图编辑器将地图导出时,会对地图表面按照一定的精度进行采样,将采样点(也就是顶点)依次连接构成很多的三角面,从而将地图转换为用这些三角面组合呈的数据来表示,还需说明的是,也可能会有编辑器将地图导出为非三角面的其他形状,但后续都需要将这些形状转为体素数据。
s23、根据人工智能单位可攀爬的坡度和三角面的法线方向标记对应的三角面是否可行走。
s24、对所有三角面进行体素化,得到高度场形式的体素数据。
s25、根据预设的参数过滤掉不可行走的体素数据和边界的体素数据,得到地图的体素数据。
在本发明实施例中,所述预设的参数为游戏本身配置的参数,如:人工智能单位半径、人工智能单位可攀爬高度等。根据这些预设的参数过滤掉不可行走的体素数据。
现有技术除了将动态阻挡的投影区域标记为限制行走的区域外,还在主线程中进行阻挡投影区域的计算和标记,然后重新构建导航网格。但是当阻挡投影区域面积较大时,需要更新的网络数量较多,导致耗时较长阻塞游戏流程,为解决该技术问题,作为本发明实施例的一种举例,令所述将所述动态阻挡的体素数据合并到地图的体素数据中,根据合并后的体素数据重构导航网格的操作在一独立线程中执行。即采用独立线程将所述动态阻挡的体素数据合并到地图的体素数据中,并根据合并后的体素数据重构导航网格。
相比于现有技术,本发明实施例通过使用独立线程进行动态阻挡添加后导航网格的重建,这样,主线程只需要使用重构好的导航网格更新当前使用的导航网格,所以重构导航网格的流程不会阻塞主线程序,从而大大提高了寻路的速度和效果。因此,作为本发明实施例的一种举例,所述导航网格的重构方法还包括:
当主线程检测到所述独立线程根据所述合并后的体素数据重构好导航网格后,将所述地图对应的导航网格替换为根据所述合并后的体素数据重构好的导航网格。
作为本发明实施例的一种举例,所述根据合并后的体素数据重构导航网格,包括:
对合并后的体素数据进行烘焙,重构导航网格。
作为本发明实施例的一种举例,所述动态阻挡的体素数据预先存储在本地存储器中或对所述动态阻挡的模型动态体素得到。
作为本发明实施例的一种举例,所述地图通过地图编辑器编辑得到。
实施例2:
请参阅图2,本发明实施例提供一种一种导航网格的重构装置,包括:
响应模块1,用于响应于在地图中添加动态阻挡或对动态阻挡进行添加的请求,获取所述动态阻挡的体素数据;
重构模块2,用于将所述动态阻挡的体素数据合并到所述地图的体素数据中,根据合并后的体素数据重构导航网格。
作为本发明实施例的一种举例,所述将所述动态阻挡的体素数据合并到地图的体素数据中,根据合并后的体素数据重构导航网格的操作在一独立线程中执行。
作为本发明实施例的一种举例,所述导航网格的重构方法还包括:
替换模块,用于当主线程检测到所述独立线程根据所述合并后的体素数据重构好导航网格后,将所述地图对应的导航网格替换为根据所述合并后的体素数据重构的导航网格。
作为本发明实施例的一种举例,地图的体素数据的生成方法包括:
获取地图;
导出所述地图中所有顶点和三角面信息;
根据人工智能单位可攀爬的坡度和三角面的法线方向标记对应的三角面是否可行走;
对所有三角面进行体素化,得到高度场形式的体素数据;
根据预设的参数过滤掉不可行走的体素数据和边界的体素数据,得到地图的体素数据。
作为本发明实施例的一种举例,所述根据合并后的体素数据重构导航网格,包括:
对合并后的体素数据进行烘焙,重构导航网格。
作为本发明实施例的一种举例,所述动态阻挡的体素数据预先存储在本地存储器中或对所述动态阻挡的模型动态体素得到。
实施例3:
本发明还提供了一种计算机可读存储介质,具体包括存储的计算机程序,其中,在所述计算机程序运行时控制所述计算机可读存储介质所在设备执行如上任一实施例所述的导航网格的重构方法。
需要说明的是,本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、u盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、电载波信号、电信信号以及软件分发介质等。需要进一步说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
以上所述是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以作出若干改进和润饰,这些改进和润饰也视为本发明的保护范围。