基于几何分离的大体量模型的多线程异步加载方法及装置转让专利

申请号 : CN202211235271.6

文献号 : CN115294257B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 李伟仪陈良志覃杰赵宏坚胡启钊王婷婷李静怡钱原铭吴乔何家俊李家华杨艺平朱峰杨彪王浩陈家悦黄黎明梁庆万浩然林滢

申请人 : 中交第四航务工程勘察设计院有限公司广州图石科技有限公司

摘要 :

本发明公开了一种基于几何分离的大体量模型的多线程异步加载方法,包括:步骤一、将模型转换为轻量化模型文件;步骤二、将模型文件先离散为模型结构树和各几何数据,分成多个几何数据块,分别压缩和存储;步骤三、过滤获取模型结构树位于当前视椎体范围的各节点,基于各节点的确定几何数据和获取几何数据块的存储位置,发出加载请求,接收传输回的几何数据块并解压,然后异步绘制几何数据并显示。本发明具有防止由于模型过大,整体加载时超出浏览器的内存限制导致崩溃的有益效果。本发明公开了一种多线程异步加载装置,包括:转换模块;离散压缩模块;数据加载模块。本发明具有边下载边解压,显著提升模型的加载速度的有益效果。

权利要求 :

1.基于几何分离的大体量模型的多线程异步加载方法,其特征在于,包括以下步骤:步骤一、将待加载的模型转换为轻量化模型文件;

步骤二、将轻量化模型文件先离散为模型结构树和各几何数据,依据所有几何数据的大小合并或切割成数据量大小相同或接近的多个几何数据块,模型结构树和几何数据块分别压缩和存储;其中,对于数据量大的几何数据在数据库存储时,在数据传输时,在数据加载时,采用分块切割使用;对于数据量小的几何数据,则合并储存;

步骤三、过滤获取模型结构树位于当前视椎体范围的各节点,并基于各节点的包围盒数值获取包围盒内的各几何数据及其对应的几何数据块的存储位置,按照几何数据块的存储位置发出加载请求,接收传输回的几何数据块并解压,然后异步绘制几何数据并显示;其中,采用将耗时长的绘制任务切割成一个个细小的绘制异步任务;

绘制几何模型的方法包括:采用主线程进行绘制,建立正在绘制的几何数据列表和已完成绘制的几何数据列表;

当检测到主线程为空闲时,按正在绘制的几何数据列表顺序逐项放入主线程绘制几何数据;

当检测到鼠标或键盘操作时,完成当前主线程的单项绘制任务后释放主线程,暂停绘制几何数据;

当检测到视椎体范围改变后,过滤获取位于当前视椎体范围内的模型结构树的各节点,并基于各节点的包围盒获取包围盒内的几何数据对应的几何数据块的存储位置,依据正在绘制的几何数据列表和已完成绘制的几何数据列表过滤,对未在上述两个列表内的几何数据发出加载请求;

当检测到视椎体范围改变后,依据当前视椎体范围确定的几何数据,过滤正在绘制的几何数据列表和已完成绘制的几何数据列表,然后依据预设的删除策略,删除视椎体范围外的几何的绘制数据,或几何的绘制数据和三角面片数据。

2.如权利要求1所述的基于几何分离的大体量模型的多线程异步加载方法,其特征在于,轻量化模型文件包括GSL文件或GSZ文件。

3.如权利要求1所述的基于几何分离的大体量模型的多线程异步加载方法,其特征在于,发出加载请求的方法包括:将当前视椎体范围内的各几何数据进行分组,然后将各组几何数据的请求合并为一个加载请求,其中,几何数据分组的策略为各组几何数据组的数据量大小相同或接近。

4.如权利要求1所述的基于几何分离的大体量模型的多线程异步加载方法,其特征在于,对位于当前视椎体范围内的几何数据,依据包围盒数值进行空间关系计算,确定各几何数据代表的几何的前后遮挡关系,然后依据视椎体范围和方向,依据预设的删除策略,删除空间关系判断为位于遮挡后方的几何的绘制数据,或几何的绘制数据和三角面片数据。

5.基于权利要求1 4任一项所述方法的多线程异步加载装置,其特征在于,包括:~

转换模块,其用于将模型转换为轻量化模型文件;

离散压缩模块,其用于将轻量化模型文件先离散为模型结构树和几何数据,依据所有几何数据的大小合并或切割成数据量大小相同或接近的多个几何数据块,模型结构树和几何数据块分别压缩和存储;

数据加载模块,其用于过滤获取模型结构树位于当前视椎体范围内的各节点,并基于各节点的包围盒数值获取包围盒内的各几何数据及其对应的几何数据块的存储位置,按照几何数据块的存储位置发出加载请求,接收传输回的几何数据块并解压,然后异步绘制几何数据并显示。

6.计算机存储介质,其特征在于,所述计算机存储介质存储有多条指令,所述指令适于由处理器加载并执行如权利要求1 4任意一项的方法步骤。

~

7.电子设备,其特征在于,包括:处理器和存储器;其中,所述存储器存储有计算机程序,所述计算机程序适于由所述处理器加载并执行如权利要求1 4任意一项的方法步骤。

~

说明书 :

基于几何分离的大体量模型的多线程异步加载方法及装置

技术领域

[0001] 本发明涉及计算机图形加载技术领域。更具体地说,本发明涉及一种基于几何分离的大体量模型的多线程异步加载方法及装置。

背景技术

[0002] 目前网页端整体加载大体量模型时,只能先下载模型,下载完成后再进行解压缩,无法使用多线程技术。而且浏览体量过大的模型时,也很容易超出浏览器内存(比如内存为2G)的限制,从而导致程序崩溃。在浏览过程中,视图外已加载模型的未释放,随着浏览过程,加载的数据堆积越来越多。当某个几何数据量很大时,从加载到显示该几何的时间很长,从用户的角度来看,体验是很长一段时间没有反馈,用户体验差。当场景内的几何数量很多时,http请求的资源消耗很大。

发明内容

[0003] 本发明的一个目的是解决至少上述问题,并提供至少后面将说明的优点。
[0004] 为了实现根据本发明的这些目的和其它优点,提供了一种基于几何分离的大体量模型的多线程异步加载方法,包括以下步骤:
[0005] 步骤一、将待加载的模型转换为轻量化模型文件;
[0006] 步骤二、将轻量化模型文件先离散为模型结构树和各几何数据,依据所有几何数据的大小合并或切割成数据量大小相同或接近的多个几何数据块,模型结构树和几何数据块分别压缩和存储;
[0007] 步骤三、过滤获取模型结构树位于当前视椎体范围的各节点,并基于各节点的包围盒数值获取包围盒内的各几何数据及其对应的几何数据块的存储位置,按照几何数据块的存储位置发出加载请求,接收传输回的几何数据块并解压,然后异步绘制几何数据并显示。
[0008] 优选的是,轻量化模型文件包括GSL文件或GSZ文件。
[0009] 优选的是,发出加载请求的方法包括:将当前视椎体范围内的各几何数据进行分组,然后将各组几何数据的请求合并为一个加载请求,其中,几何数据分组的策略为各组几何数据组的数据量大小相同或接近。
[0010] 优选的是,绘制几何模型的方法包括:采用主线程进行绘制,建立正在绘制的几何数据列表和已完成绘制的几何数据列表;
[0011] 当检测到主线程为空闲时,按正在绘制的几何数据列表顺序逐项放入主线程绘制几何数据;
[0012] 当检测到鼠标或键盘操作时,完成当前主线程的单项绘制任务后释放主线程暂停绘制几何数据。
[0013] 优选的是,当检测到视椎体范围改变后,过滤获取位于当前视椎体范围内的模型结构树的各节点,并基于各节点的包围盒获取包围盒内的几何数据对应的几何数据块的存储位置,依据正在绘制的几何数据列表和已完成绘制的几何数据列表过滤,对未在上述两个列表内的几何数据发出加载请求。
[0014] 优选的是,当检测到视椎体范围改变后,依据当前视椎体范围确定的几何数据,过滤正在绘制的几何数据列表和已完成绘制的几何数据列表,然后依据预设的删除策略,删除视椎体范围外的几何的绘制数据,或几何的绘制数据和三角面片数据。
[0015] 优选的是,对位于当前视椎体范围内的几何数据,依据包围盒数值进行空间关系计算,确定各几何数据代表的几何的前后遮挡关系,然后依据视椎体范围和方向,依据预设的删除策略,删除空间关系判断为位于遮挡后方的几何的绘制数据,或几何的绘制数据和三角面片数据。
[0016] 提供一种基于几何分离的大体量模型的多线程异步加载装置,包括:
[0017] 转换模块,其用于将模型转换为轻量化模型文件;
[0018] 离散压缩模块,其用于将轻量化模型文件先离散为模型结构树和几何数据,依据所有几何数据的大小合并或切割成数据量大小相同或接近的多个几何数据块,模型结构树和几何数据块分别压缩和存储;
[0019] 数据加载模块,其用于过滤获取模型结构树位于当前视椎体范围内的各节点,并基于各节点的包围盒数值获取包围盒内的各几何数据及其对应的几何数据块的存储位置,按照几何数据块的存储位置发出加载请求,接收传输回的几何数据块并解压,然后异步绘制几何数据并显示。
[0020] 提供一种计算机存储介质,所述计算机存储介质存储有多条指令,所述指令适于由处理器加载并执行上述任意一项的方法步骤。
[0021] 提供一种电子设备,包括:处理器和存储器;其中,所述存储器存储有计算机程序,所述计算机程序适于由所述处理器加载并执行上述任意一项的方法步骤。
[0022] 本发明至少包括以下有益效果:
[0023] 第一、实现大体量模型的分块加载,有效防止由于模型过大,整体加载时超出浏览器的内存限制导致崩溃的问题。
[0024] 第二、只加载摄像机视椎体范围内的模型,有效减少在同一时间内不必要(用户暂时无法观察到的物体)的模型的加载数量。
[0025] 第三、对几何数据进行分组,按几何数据组合并加载请求,显著缩减HTTP请求的数量,有效减少创建HTTP请求的开销。
[0026] 第四、以数据量大小作为几何数据分块和分组的依据,使每次加载的几何数据的数量更加稳定、平滑。
[0027] 第五、相比于旧式的将模型作为整体进行加载,需要在整个模型的数据下载完成后才能进行后续的解压,而本发明的模型的几何数据的分块存储和分组请求与多线程下的分块数据解压,等同于多线程的边下载边解压,从而显著提升模型的加载速度。
[0028] 本发明的其它优点、目标和特征将部分通过下面的说明体现,部分还将通过对本发明的研究和实践而为本领域的技术人员所理解。

附图说明

[0029] 图1为本发明的其中一种技术方案的模型加载流程图;
[0030] 图2为采用整体加载方法加载三维建筑模型的初始视角显示图;
[0031] 图3为采用本发明的加载方法加载三维建筑模型的初始视角显示图。

具体实施方式

[0032] 下面结合附图对本发明做进一步的详细说明,以令本领域技术人员参照说明书文字能够据以实施。
[0033] 需要说明的是,下述实施方案中所述实验方法,如无特殊说明,均为常规方法,所述试剂和材料,如无特殊说明,均可从商业途径获得;在本发明的描述中,术语指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,并不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。
[0034] 如图1 3所示,本发明提供一种基于几何分离的大体量模型的多线程异步加载方~法,包括以下步骤:
[0035] 步骤一、将待加载的模型转换为轻量化模型文件;模型转换的主要方式为以自longan引擎为内核实现的转换工具或程序,待加载的模型的格式可以为Naviswork,revit,fbx,osgb,nwd等各种格式的模型文件,转换后得到的轻量化模型文件的格式可以为GSL或GSZ格式。可以显著减少模型文件的大小。
[0036] 步骤二、将轻量化模型文件先离散为模型结构树和几何数据,依据所有几何数据的大小合并或切割成数据量大小相同或接近的多个几何数据块,模型结构树和几何数据块分别压缩和存储;由于模型中各种物体对象的几何数据的数据量大小不同,比如有的只占以KB单位计量的大小,有的又达到几十MB甚至几百MB的大小。对于数据量大的几何数据在数据传输、数据加载等各方面会导致效率问题,因而将较大的几何数据,在数据库存储时,在数据传输时,在数据加载时,采用分块切割使用,以克服上述缺陷。同样,对于数据量小的几何数据,则采用合并储存,以便为后续的数据请求、数据传输和数据加载提供基础。
[0037] 步骤三、过滤获取模型结构树位于当前视椎体范围内的各节点,并基于各节点的包围盒数值获取包围盒内的几何数据及其对应的几何数据块的存储位置,按照几何数据块的存储位置发出加载请求,接收传输回的几何数据块并解压,然后异步绘制几何数据并显示。针对当前视椎体范围,相当于是一个显示场景,通过模型结构树的各节点和各节点的包围盒确定需要请求、传输、解析、显示的几何数据,由于几何数据是分块存储的,只需要传输当前请求的几何数据块,相比于旧式的将模型作为整体进行加载,必须在整个模型的数据下载完成后才能进行后续的解析。本方案的模型离散、分块压缩存储,分块请求、分块传输,相当于是多线程的边下载边解压,从而显著提升模型的加载速度。
[0038] 在上述技术方案中,通过先将模型进行离散为模型结构树和几何数据,然后将几何数据进行分块压缩存储,只加载摄像机视椎体的范围内的模型,实现大体量模型的分块加载,可以有效减少在同一时间内不必要(用户暂时无法观察到的物体)的模型的加载数量。可以有效防止由于模型过大,整体加载时超出浏览器的内存限制导致崩溃的问题。
[0039] 在另一种技术方案中,浏览器发出加载请求的方法包括:将当前视椎体范围内的各几何数据进行分组,然后将每组几何数据的请求合并为一个加载请求。
[0040] 在上述技术方案中,大部分物体对应的几何数据的数量级比较小,但是整个场景的几何数量非常多,甚至到达千万级别。假设每个几何数据都需要向服务器请求一次几何数据,浏览器的请求的资源消耗则非常大,在本方案中采用将多个要请求的几何数据合并成一组,一个请求可以同时请求一个组的几何数据,其中,将几何数据进行分组的策略也是平衡每个组的几何数据的数量大小基本一致。
[0041] 在另一种技术方案中,绘制几何模型的方法包括:采用主线程进行绘制,建立正在绘制的几何数据列表和已完成绘制的几何数据列表;
[0042] 当检测到主线程为空闲时,按正在绘制的几何数据列表顺序逐项放入主线程绘制几何数据;
[0043] 当检测到鼠标或键盘操作时,完成当前主线程的单项绘制任务后释放主线程暂停绘制几何数据。
[0044] 在上述技术方案中,图形绘制到屏幕是一个相当消耗性能与时间的操作,而且必须在主线程执行。因此采用将耗时长的绘制任务切割成一个个细小的绘制异步任务,当接收到用户的鼠标操作或键盘操作(通常表示用户需要切换不同的角度去观察模型)或其他必须程序立刻响应的操作时,则在完成当前的一个绘制任务后暂时中断绘制任务的执行,优先处理用户的操作。避免阻塞主线程导致卡顿影响用户体验,在用户操作时及时响应用户的操作。
[0045] 在另一种技术方案中,当检测到视椎体范围改变后,过滤获取位于当前视椎体范围内的模型结构树的各节点,并基于各节点的包围盒获取包围盒内的几何数据对应的几何数据块的存储位置,依据正在绘制的几何数据列表和已完成绘制的几何数据列表过滤,对未在上述两个列表内的几何数据发出加载请求。
[0046] 在上述技术方案中,每次视椎体改变的时候,均会重新计算一次当前场景需要绘制哪些几何数据。而绘制几何数据包括了发送请求,接收请求返回数据,解析数据,插入数据,最终绘制到屏幕上的一连串的异步操作。因此,为了防止几何数据的重复请求,在程序运行时,建立并维护一个正在加载的几何数据列表以及加载完成的几何数据列表,每次视椎体改变,则依据以上两个列表过滤掉重复的几何数据请求,避免重复请求,节约请求资源。也避免对已传输、解析、插入的几何数据重新绘制。
[0047] 在另一种技术方案中,当检测到视椎体范围改变后,依据当前视椎体范围确定的几何数据,过滤当正在绘制的几何数据列表和已完成绘制的几何数据列表,然后依据预设的策略,删除视椎体范围外的几何的绘制数据,或几何的绘制数据和三角面片数据。
[0048] 在上述技术方案中,视椎体范围改变后,前一次视椎体范围内的几何数据有可能就转变为视椎体范围外了,针对上述几何数据,通过过滤当前正在绘制的几何数据列表和已完成绘制的几何数据列表找出,然后对于不同类型的几何数据依据策略进行删除,镜头(视椎体)外数据删除依据设置有三种策略:
[0049] 1:完全不删除镜头外几何的数据
[0050] 2:删除镜头外几何的显存数据(绘制数据)
[0051] 3:删除镜头外几何的显存数据(绘制数据)及,插入到模型中的几何的三角面片数据。
[0052] 以上三种策略在客户端是设置选项,供客户端使用者选择,以适配不同用户的需要。
[0053] 在另一种技术方案中,对位于当前视椎体范围内的几何数据,依据包围盒数值进行空间关系计算,确定各几何数据代表的几何的前后遮挡关系,然后依据视椎体范围和方向,依据预设的删除策略,删除空间关系判断为位于遮挡后方的几何的绘制数据,或几何的绘制数据和三角面片数据。
[0054] 在上述技术方案中,以每个几何数据的包围盒(boundingbox)数值为依据,进行空间上的位置关系计算,确定各个几何的前后关系,以及与摄像机视椎体的关系,判断各个几何之间的是否遮挡,对于位于遮挡后方的几何对应的几何数据进行以下策略的处理:
[0055] 1、完全不删除镜头外几何的数据
[0056] 2、删除几何的显存数据;
[0057] 3、删除几何的显存数据及,插入到模型中的几何的三角面片数据。
[0058] 以上三种策略在客户端是设置选项,供客户端使用者选择,以适配不同用户的需要。第2、3种策略可以避免加载当前场景下多余的几何数据,提高显示速度。
[0059] 提供一种基于几何分离的大体量模型的多线程异步加载装置,包括:
[0060] 转换模块,其用于将模型转换为轻量化模型文件;从模型结构上对模型进行处理,以为其后期离散操作准备数据结构的支持,以及也可以减少模型本身的内存占用量。
[0061] 离散压缩模块,其用于将轻量化模型文件先离散为模型结构树和几何数据,依据所有几何数据的大小合并或切割成数据量大小相同或接近的多个几何数据块,模型结构树和几何数据块分别压缩和存储;实现模型结构树和几何数据的分离,以及几何数据的分块,最后分别压缩和存储,减小数据库占用量,也为后期的几何数据传输进行分块传输做好分块准备,避免单次传输过大数据量的几何数据而导致数据传输慢或者超出浏览器的内存限制导致崩溃的问题。
[0062] 数据加载模块,其用于过滤获取模型结构树位于当前视椎体范围内的各节点,并基于各节点的包围盒数值获取包围盒内的各几何数据及其对应的几何数据块的存储位置,按照几何数据块的存储位置发出加载请求,接收传输回的几何数据块并解压,然后异步绘制几何数据并显示。数据加载模块每次只过滤当前视椎体范围内的模型结构树下的节点,而不是整个模型结构树,如此,则过滤掉了大量节点,然后根据当前需要的节点的包围盒内的几何数据去发送请求,请求的几何数据量也同样较少,因此,几何数据回传速度快,解析快,最终加载显示也快。相比于旧式的将模型作为整体进行加载,必须在整个模型的数据下载完成后才能进行后续的解析。本方案的模型离散、分块压缩存储,分块请求、分块传输,相当于是多线程的边下载边解压,从而显著提升模型的加载速度。
[0063] 在上述技术方案中,通过先将模型进行离散为模型结构树和几何数据,然后将几何数据进行分块压缩存储,只加载摄像机视椎体的范围内的模型,实现大体量模型的分块加载,可以有效减少在同一时间内不必要(用户暂时无法观察到的物体)的模型的加载数量。可以有效防止由于模型过大,整体加载时超出浏览器的内存限制导致崩溃的问题。
[0064] <应用测试>
[0065] 环境:Chrome浏览器。
[0066] 模型名称为三维建筑模型,源模型格式为FBX,数据量大小为500+ MB。转换为轻量化模型的格式为GSZ,数据量大小为149 M,包括60297个段,57135个几何数据,11384634个三角面片。
[0067] 当未将GSZ模型离散、分块处理,在同一电脑同一浏览器进行测试,GSZ模型下载总时间要8 s,整个GSZ模型文件加载渲染需要的总时间为65 s。加载后初始视角的显示情况如图2所示。
[0068] 采用本发明的加载方法加载GSZ模型,几何数据分离后的模型树结构文件1.1 M,下载仅需200 ms,加载该结构文件约2.5 s。根据初始视角的摄像机视椎体位置与模型,几何数据的像素大小进行过滤,过滤后实际仅需加载模型的一部分几何即可。测试实际加载完初始视角的几何数据约为8 s。加载后初始视角的显示情况如图3所示。
[0069] 从图2和图3的显示可以看出,两个加载方法加载的模型的初始视角的效果基本没有差异。但图2的加载用了约65 s,而图3约为8 s
[0070] 尽管本发明的实施方案已公开如上,但其并不仅仅限于说明书和实施方式中所列运用,它完全可以被适用于各种适合本发明的领域,对于熟悉本领域的人员而言,可容易地实现另外的修改,因此在不背离权利要求及等同范围所限定的一般概念下,本发明并不限于特定的细节和这里示出与描述的图例。