基于Unity引擎地形系统的道路网格创建方法及装置与流程

文档序号:16516016发布日期:2019-01-05 09:38阅读:588来源:国知局
基于Unity引擎地形系统的道路网格创建方法及装置与流程

本发明涉及图像建模技术领域,特别是涉及一种基于unity引擎地形系统的道路网格创建方法及装置。



背景技术:

unity是由unitytechnologies公司开发的一个让开发者创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型三维图形引擎。当前的其他游戏引擎,比如cryengine3引擎、虚幻4引擎等,都提供了基于unity引擎地形系统的创建道路的编辑工具,但是unity引擎并未给开发者提供基于unity引擎地形系统的创建道路的编辑工具。

创建道路的编辑工具,是一个可以在虚拟三维空间创建模拟现实世界道路模型的工具。创建道路的编辑工具的功能,一般包括,自定义道路的起始点和结束点,调整道路的宽度和高度,调整道路模型的精度,以及将道路模型贴合目标模型等。

当前的一些游戏引擎中,使用的在地形上创建道路的方法,主要为延迟渲染、投影器和创建网格的方法。其中,延迟渲染的方法,通过在延迟渲染阶段采样道路贴图绘制到地形上,但是该方法并不支持在移动设备上实现;投影器的方法,则无法渲染自定义的形状;创建网格的方法,则使用依据路径采样点生成网格方法,在地形系统上设置采样点,采样地形的高度,生成道路模型,但该方法也存在着不能完全的贴合地形,以及道路网格的精细度不够的缺陷。



技术实现要素:

为了解决现有技术存在的不足,本发明的目的在于提供一种基于unity引擎地形系统的道路网格创建方法及装置,能够创建出完全贴合unity引擎地形系统的道路模型。

为实现上述目的,本发明提供的基于unity引擎地形系统的道路网格创建方法,包括以下步骤:

从场景中获取采样点,创建道路曲线;

获取分段网格的顶点,创建顶点预备数组;

创建分段网格的顶点的包围盒及切割面;

创建次级顶点预备数组;

创建次级顶点预备数组的三角形索引数组;

采用切割面切割次级顶点预备数组得到子级顶点预备数组,以及重新组织三角形索引数组得到子级三角形索引数组;

基于切割面,得到子级顶点预备数组的uv数组;

采用子级顶点预备数组、子级三角形索引数组,以及uv数组,创建道路网格。

所述获取分段网格的顶点,创建顶点预备数组的步骤,进一步包括步骤:

根据道路曲线的总长度和道路网格的构建步长,确定道路网格的网格总段数;

根据每一分段网格的中心点的位置、副切线数据和网格宽度信息,计算出每一分段网格的中心点的正副切线方向的顶点位置数据,并将顶点位置数据存储到顶点预备数组。

所述创建次级顶点预备数组的步骤,进一步包括步骤:

根据包围盒的最小点和最大点的位置数据,以及采样步长,确定采样面的起始点、结束点和执行步长,采用unity引擎地形系统中的getinterpolatedheight()方法从场景中获得采样点的位置数据,并将采样点的位置数据存储到次级顶点预备数组。

进一步地,所述采用切割面切割次级顶点预备数组得到子级顶点预备数组的步骤是,使用切割面,并采用裁剪三角面的方法,将次级顶点预备数组中不在切割面内的顶点剔除并生成新的顶点,得到子级顶点预备数组。

所述基于切割面,得到子级顶点预备数组的uv数组的步骤,进一步包括步骤:

计算子级顶点预备数组中每个顶点到顶点所在分段网格对应的切割面的纵向上、横向上的距离,其中,

纵向上的距离与顶点所在分段网格对应的切割面纵向长度的比值作为网格uv坐标数据中的v值;

横向上的距离与顶点所在分段网格对应的切割面横向长度的比值用作差值t,顶点所在分段网格的分段数与分段网格的总段数的比值记作为b1,以及顶点所在分段网格的下一分段网格与分段网格的总段数的比值记作为b2,采用算式(1-t)*b1+t*b2,计算出网格uv坐标数据中的u值;

将得到的顶点的u值和v值存储为uv数组。

进一步地,所述的基于unity引擎地形系统的道路网格创建方法,还包括步骤:创建实现所述基于unity引擎地形系统的道路网格创建方法的核心脚本,并为核心脚本编写编辑器脚本。

进一步地,所述的基于unity引擎地形系统的道路网格创建方法,还包括步骤:调整采样点的位置,并检测是否对采样点进行了调整,是则对道路网格进行更新。

为实现上述目的,本发明提供的基于unity引擎地形系统的道路网格创建装置,用于实现上述任一项所述的方法,包括:关联变量定义单元,以及数据处理及交互单元,其中,

所述关联变量定义单元,用于定义创建道路网格的关联变量;

所述数据处理及交互单元,用于根据外界输入的控制信息,处理创建道路网格的关联变量的编辑数据。

进一步地,所述创建道路网格的关联变量包括:对地形碰撞器的引用、采样间距、采样宽度、网格的段数、采样步长、抬高高度,以及采样点列表。

所述数据处理及交互单元,进一步用于存储或者清空编辑数据,保存动态编辑数据,实时更新编辑数据,以及导出静态网格的模型数据。包括:

本发明的基于unity引擎地形系统的道路网格创建方法及装置,能够创建出完全贴合unity引擎地形系统的道路模型,并且能够实时动态地编辑创建的道路网格,改变网格的起始点和结束点,调整网格的宽度和高度,调整网格的精度,调整网格对地形的贴合程度,以及调整网格的平滑度。

本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。

附图说明

附图用来提供对本发明的进一步理解,并且构成说明书的一部分,并与本发明的实施例一起,用于解释本发明,并不构成对本发明的限制。在附图中:

图1为根据本发明的基于unity引擎地形系统的道路网格创建方法流程图;

图2为根据本发明的基于unity引擎地形系统的道路网格创建方法应用于具体场景的实施例的流程图;

图3为根据本发明的基于unity引擎地形系统的道路网格创建装置结构图。

具体实施方式

以下结合附图对本发明的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明。

本发明的实施方式可以实现为一种系统、装置、设备、方法或者计算机程序产品。因此,本发明的具体实现形式包括:完全的硬件、完全的软件(包括固件、驻留软件、微代码等),或者硬件和软件结合的形式,并不仅限定为下述具体的实施方式。

本发明的基本思想在于:改进了现有的依据路径采样点生成网格的方法,将采样点扩展为采样面,使得采样点的数量足够多,达到可以完全贴合地形的效果。

下面通过具体的实施方式,详细地阐述本发明的工作原理。

图1为根据本发明的基于unity引擎地形系统的道路网格创建方法流程图,下面将参考图1,对本发明的基于unity引擎地形系统的道路网格创建方法进行详细描述。

在步骤101,获取地形上每个采样点p1的位置数据,以及根据采样点p1的数量和位置数据,创建道路曲线。

在步骤102,基于道路曲线和预生成的道路网格的步长,创建顶点预备数组q1。

该步骤中,根据道路曲线的总长度和预生成的道路网格的步长,确定预生成道路网格的步数,以及确定对道路曲线的拟合程度。

根据预生成的道路网格的步数从道路曲线上,获得每一步预生成的网格的中心点p2的位置、法线、切线,及副切线数据,以及确定每一步预生成的网格首尾两端的顶点alpha值,并将每个中心点p2的正副切线方向的两个点的位置数据储存到顶点预备数组q1,作为分段网格的顶点。

在步骤103,根据顶点预备数组q1的顶点数据,创建每个中心点p2的包围盒及前后左右的四个切割面。

在步骤104,基于每个中心点p2的包围盒,创建次级顶点预备数组q2和三角形索引数组t1。

该步骤中,基于每个中心点p2的包围盒,以设置的采样步长采样地形上的点,并将采样结果存储到次级顶点预备数组q2,作为网格的新的顶点;以及创建基于次级顶点预备数组q2的三角形索引数组t1。

在步骤105,使用步骤103中创建的切割面,切割次级顶点预备数组q2得到子级顶点预备数组q3;以及重新组织三角形索引数组t1,得到子级三角形索引数组t2。

在步骤106,基于步骤103中创建的切割面,以及子级顶点预备数组q3中的顶点数量,使用差值的方法,计算出子级顶点预备数组q3的uv数组u1。

其中,uv数组u1用于存储子级顶点预备数组q3的顶点的网格uv坐标数据中的v值和u值。

在步骤107,使用子级顶点预备数组q3、子级三角形索引数组t2,以及uv数组u1,创建道路网格。

在步骤108,为道路网格赋予材质。

该步骤中,为创建好的道路网格赋予材质球,材质球能够用以设置网格的顶点颜色和透明度。

下面结合具体的应用场景,进一步描述本发明的基于unity引擎地形系统的道路网格创建方法。图2为根据本发明的基于unity引擎地形系统的道路网格创建方法应用于具体场景的实施例的流程图。

本实施例的应用场景中,输入为unity引擎的地形系统,输出为道路网格的静态数据和动态创建道路网格的编辑数据。本实施例中的应用场景是本发明的示例性的应用场景,因此并不作为对本发明应用场景的限制。

在步骤201,创建实现本发明的基于unity引擎地形系统的道路网格创建方法的核心脚本e1,并为核心脚本e1编写编辑器脚本e2。

该步骤中,在核心脚本e1中添加对unity引擎中meshfilter和meshrenderer组件的依赖,以及在实例场景中的地形上创建一个空物体,并将核心脚本e1添加到该空物体上。从而令后续步骤中创建的网格数据,必须赋值给meshfilter组件,并依赖meshrenderer组件中材质的渲染,才能在实例场景中正常显示。

其中,核心脚本e1中定义着和创建道路网格相关联的一些变量,比如,对地形碰撞器的引用、采样间距、采样宽度、网格的段数、采样步长、抬高高度,以及采样点列表等。编辑器脚本e2为上述变量添加带有编辑界面的编辑器。

在步骤202,将地形的碰撞体和道路的渲染材质赋值给核心脚本e1。

在步骤203,在编辑器编辑的实例场景中拾取采样点p1,生成道路网格。

该步骤中,通过调用unity引擎提供的发射射线的方法,编辑器接收鼠标在实例场景中的地形上拾取的采样点p1后,将采样点p1传递给核心脚本e1中的采样点列表。

优选地,新拾取的采样点在添加到采样点列表之前,需检测新拾取的采样点与采样点列表中最后一个采样点之间的距离是否大于道路网格的构建步长,从而防止道路网格构造出现错误。

进一步地,核心脚本e1实现创建道路网格的具体步骤如下:

在步骤231,根据获得的采样点p1的位置数据,创建一条道路曲线。

该步骤中,初级采样点p1的数量不同时,创建出的道路曲线的曲线类型也应当不同。

在步骤232,基于道路网格的构建步长,创建顶点预备数组q1。

该步骤中,根据创建的道路曲线的总长度和道路网格的构建步长,确定整条道路网格的网格总段数,逐段进行网格数据的收集:获取每一分段网格的中心点p2的位置、法线、切线,以及副切线数据;根据每一分段网格在整条道路网格的网格分段中的位置数据,确定每一分段网格的顶点色的强度;根据每一分段网格的中心点的位置、副切线数据和设置的网格宽度信息,计算出每一分段网格的中心点p2的正副切线方向的顶点位置数据,并将顶点位置数据存储到顶点预备数组q1,作为分段网格的顶点。

在步骤233,根据顶点预备数组q1中的顶点位置数据,对每四个连续的顶点,创建一个包围盒及前后左右的四个切割面。

在步骤234,基于顶点预备数组q1,创建次级顶点预备数组q2,以及次级顶点预备数组q2的三角形索引数组t1。

该步骤中,根据包围盒的最小点和最大点的位置数据,以及设置的采样步长,确定采样面的起始点、结束点和执行步长,采用unity引擎地形系统中的getinterpolatedheight()方法从实例场景中的地形上获得采样点的位置数据,并将采样点的位置数据存储到次级顶点预备数组q2,作为网格的新的顶点;

以及基于次级顶点预备数组q2中的采样点的位置数据,创建次级顶点预备数组q2的三角形索引数组t1。

在步骤235,切割次级顶点预备数组q2得到子级顶点预备数组q3,以及重新组织三角形索引数组t1得到子级三角形索引数组t2。

该步骤中,使用步骤233中创建的切割面,并采用通用的裁剪三角面的方法,将次级顶点预备数组q2中不在切割面内的顶点剔除并生成新的顶点,得到子级顶点预备数组q3,以及重新组织三角形索引数组t1得到子级三角形索引数组t2。

在步骤236,基于步骤233中创建的切割面,以及子级顶点预备数组q3中的顶点数量,计算出子级顶点预备数组q3的uv数组u1。

该步骤中,计算子级顶点预备数组q3中每个顶点到顶点所在分段网格对应的切割面的纵向上、横向上的距离,其中,

纵向上的距离与顶点所在分段网格对应的切割面纵向长度的比值作为网格uv坐标数据中的v值;

横向上的距离与顶点所在分段网格对应的切割面横向长度的比值用作差值t,顶点所在分段网格的分段数与分段网格的总段数的比值记作为b1,以及顶点所在分段网格的下一分段网格与分段网格的总段数的比值记作为b2,采用算式(1-t)*b1+t*b2,计算出网格uv坐标数据中的u值;

将得到的每个顶点的u值和v值存储为uv数组u1。

在步骤237,使用子级顶点预备数组q3、子级三角形索引数组t2,以及uv数组u1,创建道路网格数据,以及将道路网格数据赋值给meshfilter组件。

在步骤238,为创建好的道路网格赋予材质球。

其中,材质球能够用以设置道路网格的顶点颜色和透明度,以便道路网格的模型在实例场景中正常的显示出来。

在步骤204,在编辑器的编辑界面调整生成的道路网格的精度、高度,以及宽度等参数。

该步骤中,调用unity引擎提供的handles.positionhandle()方法,在编辑器中调整采样点p1的位置,并检测是否对采样点p1进行了调整,是则对道路网格进行更新。

该步骤中,还可以在编辑器脚本e2中添加对采样点列表的变动监视,在采样点列表数据发生变化的时候,重新构建道路网格。

在步骤205,在编辑器中输入数据的导出路径,保存以及导出静态网格资源以及网格的编辑数据。

该步骤中,编辑器接收到保存静态网格数据的点击指令,则导出静态网格资源;编辑器接收到保存动态生成数据的点击指令,则保存网格的编辑数据。

具体而言,使用unity引擎的assetdatabase.createasset()方法,在输入的资源保存路径下生成静态网格资源和采样点数据,以便后续重新编辑调用。

图3为根据本发明的基于unity引擎地形系统的道路网格创建装置结构图,如图3所示,本发明的基于unity引擎地形系统的道路网格创建装置300,包括:关联变量定义单元310,以及数据处理及交互单元320,其中,

关联变量定义单元310,用于定义创建道路网格的关联变量,例如:对地形碰撞器的引用、采样间距、采样宽度、网格的段数、采样步长、抬高高度,以及采样点列表等。

数据处理及交互单元320,用于根据外界输入的控制信息,处理创建道路网格的关联变量的编辑数据,例如,存储或者清空编辑数据,保存动态编辑数据,实时更新编辑数据,以及导出静态网格的模型数据等。

在一种实施方式中,数据处理及交互单元320包括,采样点设置单元321,其用于根据鼠标等外设输入的控制信息,在地形上创建采样点,以及保存、调整或者删除指定的采样点的位置数据。

在一种实施方式中,本发明的基于unity引擎地形系统的道路网格创建装置,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现本发明所述方法的步骤。

本发明的基于unity引擎地形系统的道路网格创建方法及装置,能够创建出完全贴合unity引擎地形系统的道路模型,并且能够实时动态地编辑创建的道路网格,改变网格的起始点和结束点,调整网格的宽度和高度,调整网格的精度,调整网格对地形的贴合程度,以及调整网格的平滑度。

本领域普通技术人员可以理解:以上所述仅为本发明的优选实施例而已,并不用于限制本发明,尽管参照前述实施例对本发明进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述各实施例记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1