一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种基于全局实例化的大规模动态对象绘制方法及系统与流程

2021-12-04 02:33:00 来源:中国专利 TAG:


1.本发明涉及图形绘制技术领域,具体而言,涉及一种基于全局实例化的大规模动态对象绘制方法及系统。


背景技术:

2.在虚拟大场景中搭建有大量的建筑物、植被、道路以及行驶在道路上的车辆等,其中,建筑物、植被、道路为静态对象,车辆为动态对象。对于静态对象,拖放至场景中的指定位置后,系统正常加载即可;而对于动态对象,在系统运行过程中会在场景内不断的计算和变换位置信息,占用更多的内存和cpu计算资源。
3.面对小规模动态车辆的绘制,传统的方式是在每条道上独立的生成每个车辆并实时更新位置信息,所运用的算法是将场景中的每个车辆都当成一个独立的网格体,在绘制过程中,由cpu发送指令,通知gpu执行指定渲染任务,即为一次绘制调用(draw call),每个网格体需要执行一次绘制调用。而大规模动态对象的绘制同样采用上述方法,在网格体数量过多的情况下绘制调用非常高,造成帧率低下,如图1所示,系统得到的帧率仅为24.5fps,以至于出现无法正常使用场景的情况,由此虚拟场景中就无法表达大规模移动车辆的效果。


技术实现要素:

4.本发明的目的在于提供一种基于全局实例化的大规模动态对象绘制方法及系统,用于解决大量车辆绘制调用高的问题,利用全局实例化管理器降低绘制调用,提高绘制性能以改善上述技术问题。
5.为了实现上述目的,本技术实施例提供了如下技术方案:一种基于全局实例化的大规模动态对象绘制方法,包括:在场景中创建一个或多个车流线对象,所述车流线对象生成样条线组件和车辆信息数组,所述车辆信息数组包括样条线组件中需要生成的车辆数量、车辆的位置信息及速度值;在场景中创建一个全局实例化管理器对象,将全局实例化管理器对象与每个车流线对象相互关联;在全局实例化管理器对象中选择一个或多个车辆的静态网格体,并生成每个静态网格体对应的实例化静态网格体组件;实例化静态网格体根据所述车辆信息数组在场景中生成与每个车辆对应的实例;遍历所述车辆信息数组,在场景中更新所述实例的位置信息。
6.进一步的,生成样条线组件的步骤包括:点击生成若干个样条点,连接若干个样条点形成一条自定义的曲线得到样条线组件;设置样条点的切线进入方向和离开方向控制样条线组件的形状。
7.进一步的,计算样条线组件中需要生成的车辆数量步骤包括:根据样条线组件的长度和相邻车辆的距离,计算样条线组件上需要生成的车辆的位置信息;计算样条线组件上需要生成的车辆数量,并为一条样条线组件上的车辆指定一个速度值;将每个车辆的位置信息和速度值保存至所述车辆信息数组中。
8.进一步的,所述一个车流线对象仅包括一条样条线组件。
9.进一步的,在场景中创建一个全局实例化管理器对象,将全局实例化管理器对象与每个车流线对象相互关联,包括:将全局实例化管理器对象存入每个车流线对象中;所述全局实例化管理器对象搜索并保存当前场景里存在的所有车流线对象。
10.进一步的,所述实例化静态网格体根据所述车辆信息数组在场景中生成与每个车辆对应的实例,包括:遍历所述车辆信息数组;为每个车辆随机指定一个静态网格体;由所述静态网格体对应的实例化静态网格体组件在场景中生成与车辆对应的实例和标识符对;将所述标识符对保存至所述车辆信息数组中。
11.进一步的,所述标识符对由实例在实例化静态网格体组件中生成的顺序和实例化静态网格体组件的信息组成。
12.进一步的,所述遍历所述车辆信息数组,在场景中更新所述实例的位置信息,包括:在一帧内依次遍历每个车流线对象的车辆信息数组,获取当前样条线组件中需要生成的车辆;获取所述车辆的标识符对、当前位置信息及速度值;利用所述标识符对在实例化静态网格体组件中查找对应的实例;利用所述当前位置信息计算车辆的下一帧位置信息,并将下一帧位置信息保存至车辆信息数组中,替换所述当前位置信息;实例化静态网格体组件所述根据所述下一帧位置信息重新在场景中生成实例。
13.进一步的,所述利用所述当前位置信息计算车辆的下一帧位置信息的计算方法为:;其中,所述表示一帧的时间,所述表示车辆的当前位置,所述表示车辆的速度,所述表示路程,所述表示样条线组件上的路程,所述表示车辆在下一帧的位置。
14.一种基于全局实例化的大规模动态对象绘制系统,所述系统包括:
车流线对象生成单元:在场景中创建一个或多个车流线对象,所述车流线对象生成样条线组件和车辆信息数组,所述车辆信息数组包括样条线组件中需要生成的车辆数量、车辆的位置信息及速度值;关联单元:在场景中创建一个全局实例化管理器对象,将全局实例化管理器对象与每个车流线对象相互关联;静态网格体选择单元:在全局实例化管理器对象中选择一个或多个车辆的静态网格体,并生成每个静态网格体对应的实例化静态网格体组件;实例生成单元:实例化静态网格体根据所述车辆信息数组在场景中生成与每个车辆对应的实例;位置信息更新单元:遍历所述车辆信息数组,在场景中更新所述实例的位置信息。
15.本发明的有益效果为:1、本发明中的一个实例化静态网格体组件包含一个类型的实例,在生成实例的过程中都使用同一个静态网格的资源,实例化静态网格体组件仅需要执行一次绘制调用,即可绘制指定该种实例化静态网格体组件所有的实例。相对于传统的方法,一个实例对应一个静态网格体,生成一个实例需要执行一次绘制调用,在硬件环境为中央处理器:intel(r) core(tm) i7

9700k;内存:64gb 3200mhz;显卡:nvidia geforce rtx 2070 super的条件下,帧率由原来的22.26fps提高至44.93fps,绘制效率提高了102%,极大地优化了系统性能。
16.2、本发明通过一个实例化静态网格体组件绘制若干个实例,而所述若干个实例分布在不同的样条线组件上的,由于每个实例没有与实例化静态网体组件相关联的标识符信息,因此在更新实例的位置过程无法从对应的实例化静态网格体组件中直接找到的实例。为解决上述问题,本发明在首次生成实例时为实例生成一个唯一的标识符对,所述标识符对由将实例化静态网格体组件的序号以及由该组件生成的实例的序号组成,通过所述标识符对,可在实例化静态网格体组件中准确的找到对应的实例。
17.本发明的其他特征和优点将在随后的说明书阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明实施例了解。本发明的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。
附图说明
18.为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
19.图1是现有技术中的系统展示图;图2是本实施例中的基于全局实例化的大规模动态对象绘制方法流程图;图3是本实施例中的样条线组件的构建图;图4为本实施例中的s5的流程图;图5是本实施例中的基于全局实例化的大规模动态对象绘制系统展示图一;图6是本实施例中的基于全局实例化的大规模动态对象绘制系统展示图二。
具体实施方式
20.为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
21.应注意到:相似的标号或字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。同时,在本发明的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
22.实施例1如图2所示,本实施例提供了一种基于全局实例化的大规模动态对象绘制方法,包括以下步骤:s1.在场景中创建一个或多个车流线对象,所述车流线对象生成样条线组件和车辆信息数组,所述车辆信息数组包括样条线组件中需要生成的车辆数量、车辆的位置信息及速度值。
23.具体的,本实施例在图形引擎完成,优选的在ue4(unreal engine 4)中搭建场景,并利用ue4提供的组件实现本方法中的所有功能。
24.如图3所示,在场景的所有道路中自主选择车辆行驶的车道线,并在一条车道线上生成一个对象,并根据车道线的路径生成一条样条线组件,样条线组件生成后需要自定义样条线组件上车辆的数量和每个车辆在样条线组件上的初始位置信息,所述初始位置信息在系统初始化时需要获取用于生成实例,即车辆,以保证系统在运行第一帧时,车道线上有车辆在行驶。
25.本实施例为每个样条线组件上的车辆设定一个相同的速度值,以使车辆在行驶过程中不会发生碰撞。
26.基于以上实施例,所述样条线组件的生成具体包括以下步骤:s11.点击生成若干个样条点,连接若干个样条点形成一条自定义的曲线得到样条线组件;s12.设置样条点的切线进入方向和离开方向控制样条线组件的形状。
27.本实施例中,通过设置样条点的切线进入方向和离开方向,以改变样条线组件的弧度,使之与车道线的形状适配。同时,所述样条线组件上每个点的位置信息坐标都可以自动获取到。
28.基于以上实施例,样条线组件中需要生成的车辆数量计算过程具体包括以下步骤:s13.根据样条线组件的长度和相邻车辆的距离,计算样条线组件上需要生成的车辆的位置信息;具体的,所述s13包括以下步骤:s131.获取样条线组件在场景中的长度值;
s132.设定车距d的范围值,优选的,将d 的范围值设置为[1,10]m;s133.以样条线组件的起始端开始计算,随机调用范围值[1,10]内的数值x作为当前需要生成的车辆与起始端的距离,得到当前需要生成的车辆位置信息:s134.随机调用范围值[1,10]内的数值x作为下一个车辆与上一个车辆之间的车距,得到下一个车辆位置信息;s135.重复上述步骤,直到随机调用范围值内的数值大于当前需要生成的车辆与上一个车辆之间的车距,停止计算位置信息;s136.统计样条线组件上需要或能够生成的车辆数量。
[0029]
需要说明的是,所述s131

s136仅需要计算在样条线组件上的哪些位置生成车辆,暂未在场景中生成车辆(实例)。
[0030]
s14.计算样条线组件上需要生成的车辆数量,并为一条样条线组件上的车辆指定一个速度值,具体的,所述一条样条线组件上的车辆指定的速度值相同;s15.将每个车辆的位置信息和速度值保存至所述车辆信息数组中。
[0031]
基于以上实施例,所述一个车流线对象仅包括一条样条线组件,由车流线对象维护样条线组件中车辆的信息。
[0032]
s2.在场景中创建一个全局实例化管理器对象,将全局实例化管理器对象与每个车流线对象相互关联;基于以上实施例,所述s2具体包括以下步骤:s21.将全局实例化管理器对象存入每个车流线对象中;s22.所述全局实例化管理器对象搜索并保存当前场景里存在的所有车流线对象。
[0033]
本实施例中,在整个场景中生成唯一一个全局实例化管理器对象,全局实例化管理器对象需要和每个车流线对象共同存储彼此的数据信息,用于相互访问数据。
[0034] s3.在全局实例化管理器对象中选择一个或多个车辆的静态网格体,并生成每个静态网格体对应的实例化静态网格体组件;本实施例中,ue4中存在有若干个静态网格体,根据实际需要,手动选择静态网格体的数量,所述静态网格体代表的是车辆的模型。优选的,本实施例选择了12个静态网格体,由所选择的12个静态网格体对应的实例化静态网格体组件组成数组[0,1,2,3,4,5,6,7,8,9,10,11],并存储于全局实例化管理器对象中。
[0035]
本实施例中,所述静态网格体与实例化静态网格体组件为一一对应关系,因此12个静态网格体对应12个实例化静态网格体组件,由所述实例化静态网格体组件直接生成实例,所述实例指代的是在场景中生成的车辆。
[0036]
s4.实例化静态网格体组件根据所述车辆信息数组在场景中生成与所述车辆对应的实例;具体的,由所述12个实例化静态网格体组件生成所有车流线对象中的所有车辆,而每个车辆随机指定一个实例化静态网格体组件,即在12个模型中随机选择一个模型,以避免场景中所有的车辆使用同一个模型。
[0037]
基于以上实施例,所述s4具体包括以下步骤:s41.全局实例化管理器对象在系统开始运行的时候会执行实例化的功能,依次遍历每个车流线对象中的车辆信息数组;s42.为每个车辆随机指定一个静态网格体,当车辆指定了一个静态网格体后,说
明所述车辆在场景中始终以指定的静态网格体对应的实例化静态网格体组件绘制实例,但绘制实例的过程由实例化静态网格体组件来执行;s43.由所述静态网格体对应的实例化静态网格体组件在场景中生成与车辆对应的实例和标识符对,具体的,所述标识符对包括实例生成的顺序和实例化静态网格体组件的信息;需要说明的,所述实例生成的顺序指代的是实例(或车辆)在实例化静态网格体组件中生成的顺序,例如,实例化静态网格体组件生成的第1个生成的实例(或车辆)标记为1,生成的第2个实例标记为2,以此类推...所述实例化静态网格体组件信息所指代的是上文所提及的实例化静态网格体组件数组,例如,第1个生成的实例指定的实例化静态网格体组件为2,则所述实例(或车辆)的标识符对为[1,2],利用所述标识符对可在实例化静态网格体组中查找到对应的实例。
[0038]
s44.将所述标识符对保存至所述车辆信息数组中。
[0039]
需要说明的是,本实施例将一个实例化静态网格体组件作为一个独立的网格体,实例化静态网格体组件执行一次绘制调用,即可绘制所有的对应的实例。
[0040]
s5.遍历所述车辆信息数组,在场景中更新所述实例的位置信息。
[0041]
如图4所示,基于以上实施例,所述s5具体包括以下步骤:s51.在一帧内依次遍历每个车流线对象的车辆信息数组,获取当前样条线组件中需要生成的车辆;本实施例中,根据首次生成实例的顺序依次遍历一个样条线组件中的实例,根据顺序依次读取实例或车辆的信息。
[0042]
s52.获取所述车辆的标识符对、当前位置信息及速度值;s53.利用所述标识符对在实例化静态网格体组件中查找对应的实例;s54.利用所述当前位置信息计算车辆的下一帧位置信息,并将下一帧位置信息保存至车辆信息数组中,替换所述当前位置信息;s55.实例化静态网格体组件所述根据所述下一帧位置信息重新在场景中生成实例。
[0043]
基于以上实施例,所述利用所述当前位置信息计算车辆的下一帧位置信息的计算方法为:;(1)其中,所述表示一帧的时间,所述表示车辆的当前位置,所述表示车辆的速度,所述表示路程,所述样条线组件上的路程,所述表示车辆在下一帧的位置。
[0044]
需要说明的是,场景中所有的实例绘制一次的时间为1帧,在使用传统的方法、硬件环境为中央处理器:intel(r) core(tm) i7

9700k;内存:64gb 3200mhz;显卡:nvidia geforce rtx 2070 super的条件下,系统的帧率为22fps左右,通过本实施例提供的方法进行优化后,系统所能达到的帧率为45fps左右,帧率提高了102%,极大的提高了绘制效率,系
统展示图如图5、图6所示,其中图6显示为包含地形的系统展示图。
[0045]
实施例2相应于上面的方法实施例,本公开实施例还提供了一种基于全局实例化的大规模动态对象绘制系统,下文描述的基于全局实例化的大规模动态对象绘制装置与上文描述的基于全局实例化的大规模动态对象绘制方法可相互对应参照。
[0046]
所述系统包括:车流线对象生成单元:在场景中创建一个或多个车流线对象,所述车流线对象生成样条线组件和车辆信息数组,所述车辆信息数组包括样条线组件中需要生成的车辆数量、车辆的位置信息及速度值;关联单元:在场景中创建一个全局实例化管理器对象,将全局实例化管理器对象与每个车流线对象相互关联;静态网格体选择单元:在全局实例化管理器对象中选择一个或多个车辆的静态网格体,并生成每个静态网格体对应的实例化静态网格体组件;实例生成单元:实例化静态网格体根据所述车辆信息数组在场景中生成与每个车辆对应的实例;位置信息更新单元:遍历所述车辆信息数组,在场景中更新所述实例的位置信息。
[0047]
需要说明的是,关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
[0048]
实施例3相应于上面的方法实施例,本公开实施例还提供了一种基于全局实例化的大规模动态对象绘制设备,下文描述的一种基于全局实例化的大规模动态对象绘制设备与上文描述的一种基于全局实例化的大规模动态对象绘制方法可相互对应参照。
[0049]
该电子设备可以包括:处理器,存储器。该电子设备还可以包括多媒体组件,输入/输出(i/o)接口,以及通信组件中的一者或多者。
[0050]
其中,处理器用于控制该电子设备的整体操作,以完成上述的od客流预测方法中的全部或部分步骤。存储器用于存储各种类型的数据以支持在该电子设备的操作,这些数据例如可以包括用于在该电子设备上操作的任何应用程序或方法的指令,以及应用程序相关的数据,例如联系人数据、收发的消息、图片、音频、视频等等。该存储器可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,例如静态随机存取存储器(static random access memory,简称sram),电可擦除可编程只读存储器(electrically erasable programmable read

only memory,简称eeprom),可擦除可编程只读存储器(erasable programmable read

only memory,简称eprom),可编程只读存储器(programmable read

only memory,简称prom),只读存储器(read

only memory,简称rom),磁存储器,快闪存储器,磁盘或光盘。多媒体组件可以包括屏幕和音频组件。其中屏幕例如可以是触摸屏,音频组件用于输出和/或输入音频信号。例如,音频组件可以包括一个麦克风,麦克风用于接收外部音频信号。所接收的音频信号可以被进一步存储在存储器或通过通信组件发送。音频组件还包括至少一个扬声器,用于输出音频信号。i/o接口为处理器和其他接口模块之间提供接口,上述其他接口模块可以是键盘,鼠标,按钮等。这些按钮可以是虚拟按钮或者实体按钮。通信组件用于该电子设备与其他设备之间进行有线或无线通信。无线通信,例如wi

fi,蓝牙,近场通信(near fieldcommunication,简称nfc),2g、3g或4g,或它们中的一种或几种的组合,因此相应的该通信组件可以包括:wi

fi模块,蓝牙模块,nfc模块。
[0051]
在一示例性实施例中,电子设备可以被一个或多个应用专用集成电路(application specific integrated circuit,简称asic)、数字信号处理器(digitalsignal processor,简称dsp)、数字信号处理设备(digital signal processing device,简称dspd)、可编程逻辑器件(programmable logic device,简称pld)、现场可编程门阵列(field programmable gate array,简称fpga)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述的基于全局实例化的大规模动态对象绘制方法。
[0052]
在另一示例性实施例中,还提供了一种包括程序指令的计算机可读存储介质,该程序指令被处理器执行时实现上述的基于全局实例化的大规模动态对象绘制方法的步骤。例如,该计算机可读存储介质可以为上述包括程序指令的存储器,上述程序指令可由电子设备的处理器执行以完成上述的基于全局实例化的大规模动态对象绘制方法。
[0053]
实施例4相应于上面的方法实施例,本公开实施例还提供了一种可读存储介质,下文描述的一种可读存储介质与上文描述的一种基于全局实例化的大规模动态对象绘制方法可相互对应参照。
[0054]
一种可读存储介质,可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现上述方法实施例的基于全局实例化的大规模动态对象绘制方法的步骤。
[0055]
该可读存储介质具体可以为u盘、移动硬盘、只读存储器(read

only memory,rom)、随机存取存储器(random access memory,ram)、磁碟或者光盘等各种可存储程序代码的可读存储介质。
[0056]
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献