基于虚幻引擎和线程池的海量倾斜摄影模型动态调度方法与流程

文档序号:34447403发布日期:2023-06-13 11:26阅读:102来源:国知局
基于虚幻引擎和线程池的海量倾斜摄影模型动态调度方法与流程

本发明涉及数字孪生城市,特别是涉及一种基于虚幻引擎和线程池的海量倾斜摄影模型动态调度方法。


背景技术:

1、数字孪生城市是基于物理城市再造一个与之精准映射、匹配对应的虚拟城市,形成物理维度上的实体城市和信息维度上的虚拟城市同生共存、虚实交融的城市发展形态。倾斜摄影测量可直观真实地展现地物实际情况,具有效率高、成本低、数据真实、操作灵活等特点。因此,倾斜摄影模型是快速构建数字孪生城市“数字底板”的重要数据。

2、近年来对数字孪生视觉效果的逼真度、运行流畅度都有了更高的要求。虚幻引擎是全球顶尖的实时渲染引擎,用于创建实时三维虚拟现实互动程序,因其强大的功能开发平台及出色的渲染效果,广泛应用在虚拟仿真、电影、动画和游戏等各个领域。因此,利用虚幻引擎高效渲染倾斜摄影测量数据,可高逼真地还原出数字城市场景。

3、城市级倾斜摄影数据量巨大,目前市场上提出的一些基于虚幻引擎加载倾斜摄影模型的技术方法,在面对城市级海量倾斜摄影模型及快速变换可视范围时,由于频繁的磁盘i/o操作,会导致加载延迟、渲染卡顿等问题。


技术实现思路

1、为解决上述现有技术存在的问题,本发明提供一种执行效率和调度效率较高的基于虚幻引擎和线程池的海量倾斜摄影模型动态调度方法。

2、为此,本发明采用以下技术方案:

3、一种基于虚幻引擎和线程池的海量倾斜摄影模型动态调度方法,包括以下步骤:

4、s1,初始化倾斜摄影场景树,获取倾斜摄影模型所有osgb格式的瓦片根节点,识别所述瓦片根节点中的几何信息和纹理信息,将所述几何信息和纹理信息读取到内存对象;然后新建引擎场景组件,调用所述几何信息,绘制三角面模型;再将所述纹理信息转换为材质信息,并映射至所述三角面模型;

5、s2,在引擎主线程中,根据引擎场景当前帧的相机参数对倾斜摄影场景树进行筛选,将分页节点信息更新至“弃用列表”、“请求列表”;取出“待合并列表”中的分页节点对象,将其合并至倾斜摄影场景树;

6、s3,启动场景更新线程(databasethread),完成“弃用列表”、“请求列表”中分页节点对象的异步卸载和加载工作,并将新添加的分叶节点对象加入“待合并列表”,清空“请求列表”;

7、s4,在引擎主线程中,根据所述“弃用列表”中的分页节点信息和所述“待合并列表”中的分页节点对象,对所述引擎场景组件进行更新后清空所述“弃用列表”和“待合并列表”;

8、s5,开辟资源转换线程池,识别所述“待合并列表”分页节点中的几何信息和纹理信息,创建资源转换任务并添加至线程池。

9、上述的步骤s2包括以下分步骤:

10、s21,获取引擎场景当前帧的相机参数,计算得到视景体(frustum)参数;

11、s22,进行场景筛选(cull),遍历所述倾斜摄影场景树,对倾斜摄影场景树中的分页节点(pagedlod)进行视景体筛选计算和可视距离计算;

12、s23,取出所述“待合并列表”中的分页节点对象,将其合并至倾斜摄影场景树;

13、s24,在引擎主线程中,循环执行步骤s21-s23。

14、上述的步骤s22中,所述视景体筛选计算是根据视野范围(fov)、近裁剪面(znear)、远裁剪面(zfar)和视平面宽/高比(aspect ratio)表达的范围筛选出可视范围内的场景节点。

15、在上述的步骤s22中:若所述分页节点的包围球与视景体相交,则进行可视距离计算;若不相交则加入“弃用列表”;进行可视距离计算时,根据步骤s21获得的引擎场景当前帧的相机参数将所述分页节点的包围球投影至所述视景体的近裁剪面,计算分页节点所对应的屏幕像素数:

16、required_range = radius / (centerpixelsizevector)

17、其中:

18、required_range为分页节点的包围球投影至视景体近平面对应的屏幕像素数;

19、radius为分页节点包围球的半径;

20、center为分页节点包围球的球心坐标;

21、pixelsizevector为屏幕空间距离在xyz不同方向上与像素的比例值;

22、根据计算结果请求分叶节点(pagedlod)中对应range的子节点,若为模型文件,则将其作为新添加的分页节点对象添加至“请求列表”。

23、上述的步骤s3包括以下分步骤:

24、s31,删除所述“弃用列表”中对应倾斜摄影场景中的分页节点对象;

25、s32,取出所述“请求列表”中的数据请求,加载步骤s22中所述的模型文件;

26、s33,将步骤s32中加载的模型文件添加至所述“待合并列表”,清空所述“请求列表”。

27、上述的步骤s4包括以下分步骤:

28、s41,读取所述“待合并列表”中分页节点对象,创建并初始化引擎场景组件,清空“待合并列表”;其中,所述创建并初始化引擎场景组件包括:

29、创建引擎场景组件实例;

30、创建场景组件实例对应的渲染资源(fvertexstreamcomponent)和纹理资源(utexture2d),初始化资源数据对象;

31、添加资源状态映射表,键设置为资源编号,值设置为转换完成状态标识,处于转换中时,所述转换完成状态为0;转换完成时,所述转换完成状态为1;初始设置状态位为0;

32、s42,取出所述“弃用列表”中的分页节点信息,当对应场景组件状态位为1时,执行步骤s43;当对应状态位为0时,执行步骤s44;清除所述“弃用列表”中已删除对应场景组件的分页节点信息;

33、s43,删除虚幻引擎场景组件,遍历倾斜摄影场景树中分页节点(pagedlod),若子节点包含下一级分页节点(pagedlod),则将其对应引擎场景组件状态置为不可见,反之置为可见;

34、s44,更新引擎场景组件。

35、上述的步骤s5包括以下分步骤:

36、s51,开辟资源转换线程池,统一管理线程的创建、销毁和调度;添加任务队列,线程池根据系统资源动态调整线程数,并执行所述任务;

37、s52,识别“待合并列表”中的分页节点中的几何信息和纹理信息,向线程池中添加渲染资源和纹理资源转换任务;

38、s53,设置资源状态标完成标识:转换任务完成后,更新资源状态映射表中对应资源状态标识位为1。

39、步骤s52中,所述渲染资源和纹理资源转换任务负责将分页节点中的几何信息和纹理信息转换为引擎渲染资源(fvertexstreamcomponent)和纹理资源(utexture2d)。

40、步骤s2中,使用开源线程库openthreads中互斥体接口,当某一线程欲操作某一共享资源时,使用互斥体成员的lock函数加锁,操作完成之后再使用unlock函数解锁。

41、步骤s1中,将所述纹理信息指定为材质中的基色,利用所述几何信息中的纹理坐标将材质映射到所述三角面模型上,经过引擎渲染管线获得最后的图像。

42、本发明使用上述技术方案,按照倾斜模型金字塔层级和osgb瓦片中提取的几何信息和纹理信息,采用线程池动态调度的方式转换为虚幻引擎场景组件。根据当前帧相机参数,实现倾斜摄影场景树筛选操作,启动场景更新线程,完成倾斜摄影场景的异步加载和卸载操作。

43、与现有技术相比,本发明具有以下优点和有益效果:

44、1. 线程过多会带来调度开销,进而影响整体性能,频繁创建和销毁线程也会带来极大的开销,本发明通过线程池管理线程的创建、销毁和调度,交由线程池统一执行任务队列,显著提升了任务的执行效率;

45、2. 几何信息和纹理信息的转换任务非常耗费性能,本发明将其放到线程池中执行,有效改善了海量倾斜摄影模型在引擎中的调度效率;

46、3. 本发明启用线程池机制,有效解决了频繁磁盘i/o造成的性能问题,实现了海量倾斜模型在虚幻引擎中动态调度和高效渲染。

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