CN110865800B - 一种基于引擎模块化的全平台三维重建代码处理方法 - Google Patents
一种基于引擎模块化的全平台三维重建代码处理方法 Download PDFInfo
- Publication number
- CN110865800B CN110865800B CN201911060242.9A CN201911060242A CN110865800B CN 110865800 B CN110865800 B CN 110865800B CN 201911060242 A CN201911060242 A CN 201911060242A CN 110865800 B CN110865800 B CN 110865800B
- Authority
- CN
- China
- Prior art keywords
- codes
- dimensional reconstruction
- engine module
- rendering
- code
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000003672 processing method Methods 0.000 title claims abstract description 7
- 230000015654 memory Effects 0.000 claims abstract description 56
- 238000009877 rendering Methods 0.000 claims abstract description 49
- 238000004364 calculation method Methods 0.000 claims abstract description 40
- 238000000034 method Methods 0.000 claims abstract description 19
- 238000004806 packaging method and process Methods 0.000 claims abstract description 10
- 230000006870 function Effects 0.000 claims description 16
- 238000012545 processing Methods 0.000 claims description 12
- 230000003993 interaction Effects 0.000 claims description 4
- 230000004927 fusion Effects 0.000 description 14
- 238000013461 design Methods 0.000 description 8
- 238000007781 pre-processing Methods 0.000 description 5
- HPTJABJPZMULFH-UHFFFAOYSA-N 12-[(Cyclohexylcarbamoyl)amino]dodecanoic acid Chemical compound OC(=O)CCCCCCCCCCCNC(=O)NC1CCCCC1 HPTJABJPZMULFH-UHFFFAOYSA-N 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 230000000007 visual effect Effects 0.000 description 3
- 239000008186 active pharmaceutical agent Substances 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 238000011160 research Methods 0.000 description 2
- 238000000926 separation method Methods 0.000 description 2
- 230000001133 acceleration Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 239000002360 explosive Substances 0.000 description 1
- 238000007499 fusion processing Methods 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/20—Software design
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T17/00—Three dimensional [3D] modelling, e.g. data description of 3D objects
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Graphics (AREA)
- Geometry (AREA)
- Image Generation (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种基于引擎模块化的全平台三维重建代码处理方法。计算引擎模块,对系统代码中的通用并行计算代码进行封装;渲染引擎模块,将系统代码中的所有与渲染执行相关的系统代码作为渲染代码进行封装;内存管理模块,采用统一接口对CPU与GPU内存统一管理,实现计算引擎模块和渲染引擎模块的多模块间的内存互通互用,各模块在内存级层面直接连通;动态物体的三维重建时,程序代码通过内存管理模块统一处理三维重建数据。本发明方法通过三个模块化解耦传统三维重建代码中逻辑与系统相关代码,从而有效地解决了三维重建需要在不同平台有不同实现的技术问题。
Description
技术领域
本发明涉及软件工程的设计模式领域,设计了一种适用于动态物体三维重建代码在全平台上一次性实现的设计模式,例如解决了在安卓、IOS等不同系统平台上的通用性问题。
背景技术
随着AI技术的蓬勃发展以及新型设备的不断涌现,三维重建成为计算机图形学领域的热点研究课题。主要任务是基于各种传感器采集的数据,采用多视图几何、概率统计学和优化理论等数学工具,对现实物理世界进行三维建模,建立起现实世界和虚拟世界的桥梁。
室内场景的三维重建技术的发展依赖于所使用的传感器的种类和性能的更新迭代,主要分为两大类:基于激光的三维重建和基于视觉图像的三维重建。基于激光的三维重建由于无法得到环境的颜色信息,且成本高昂,因此无法实现商业化。基于视觉图像的三维重建利用成本较低的传感器,就可以达到较高的三维重建精度,且具有丰富的颜色信息,是当前的研究热点。
基于视觉图像的三维重建由于其有很大的计算量,因此需要借助GPU加速计算才能达到良好的效果。这就带来了一个新的问题,为了提高三维重建的效率,需要在实现三维重建的逻辑代码中调用许多与GPU相关的程序接口(如OpenGL)以及面向异构平台的框架(如OpenCL),将这部分与系统资源相关的代码称为系统代码,系统代码的作用为让程序进行高度并行的计算,来达到GPU加速的目的。由于不同平台(如Windows、Linux、MacOS、Android、iOS等平台)对应的系统代码不同,而目前三维重建代码的实现将逻辑代码和系统代码杂糅在一起,若要实现一个三维重建方法在不同平台的实现,为了修改系统代码将会引起整个代码逻辑的修改,增加了许多不必要的计算工作,使三维重建在不同平台的实现变得繁琐、冗余,针对这一问题,本发明设计了一种设计模式。
发明内容
为了解决技术背景中存在的问题,本发明提出了一种设计模式可以有效解决三维重建代码在不同平台需要有不同实现的问题,有效解决了同一功能计算机代码在安卓、IOS等不同系统平台上的通用性问题,适用于动态物体三维重建代码在全平台上一次性实现。
本发明提出的方法通过三个模块化设计实现了三维重建中的逻辑代码和系统代码的有效分离,其中三个模块分别为计算引擎模块、渲染引擎模块和内存管理模块。
下面将对本发明的技术方案做详细的说明:
本发明技术方案中封装有三个模块,分别为计算引擎模块、渲染引擎模块和内存管理模块,
在计算引擎模块,对系统代码中的通用并行计算代码进行封装,使得通用并行计算代码和逻辑代码解耦;
在渲染引擎模块,将系统代码中的所有与渲染执行相关的系统代码作为渲染代码进行封装,使得该部分的系统代码从三维重建代码中解耦;
在内存管理模块,采用统一接口对CPU内存与GPU内存进行统一管理,实现计算引擎模块和渲染引擎模块的多模块间的内存互通互用统一管理,使得各模块在内存级层面直接连通提高速度;
在进行动态物体的三维重建时,采用计算引擎模块的通用并行计算代码结合已经预编写好的逻辑代码形成程序代码;采用渲染引擎模块的渲染代码结合已经预编写好的逻辑代码形成程序代码;程序代码通过内存管理模块统一处理三维重建数据,达到高效地、可重用地、易管理的的三维重建实现。
由上述方案本发明针对动态物体的三维重建代码计算机编程技术处理提出了一种模式,使用这种模式可以解耦三维重建代码中的逻辑代码和系统代码,解决三维重建代码的跨平台实现。通过统一化并行计算设备内存管理模块关联计算引擎和渲染引擎的通讯,从而使三维重建的逻辑代码与系统代码有效分离。
所述的渲染引擎模块和计算引擎模块相互独立的,渲染引擎模块和计算引擎模块均连接内存管理模块并经内存管理模块调用处理异构内存构架中的三维重建数据,进行渲染引擎模块和计算引擎模块之间的交互、内存共享,实现GPU与CPU异构内存结构的高效代码程序。
上述各个模块的系统代码封装后形成API接口进行,程序运行时调用API接口进行处理工作。
所述的内存管理模块,采用对象GPUBuffer()对异构内存访问进行统一接口封装处理。
所述的三维重建代码包含逻辑代码以及计算引擎模块、渲染引擎模块和内存管理模块中涉及的系统代码。计算引擎模块、渲染引擎模块和内存管理模块中均不包含逻辑代码。
本发明的系统代码是指与系统平台相关的代码,如CUDA、OpenGL,OpenCL等相关系统相关API都属于系统代码,调用了系统底层的指令集。不同平台上使用不同系统相关API实现三维重建的系统代码不同。
本发明的逻辑代码是指三维重建逻辑层面的,与平台无关的代码,在所有平台通用的代码。不同平台实现的同一种三维重建的算法相同,逻辑代码相同。
本发明与背景技术相比,具有更有益的效果:
本发明通过三个模块化设计,将三维重建代码中的系统代码进行封装,解耦了传统三维重建代码中算法逻辑与系统相关代码,从而有效地解决了三维重建的跨平台实现问题。
本发明方法通过三个模块化,解耦传统三维重建代码中逻辑与系统相关的代码,从而有效地解决了三维重建需要在不同平台有不同实现的问题。
附图说明
图1为三维重建的模块化实现流程图;
图2为三维重建结果示例,左侧为输入的2D图片,右侧为重建出的3D模型。
具体实施方式
本发明适用于绝大多数三维重建,下面将结合一种三维重建方法对本发明的具体使用进行清晰、详细、完整的描述。
如图1所示,本发明针对三维重建代码的处理建立有三个模块,分别为计算引擎模块、渲染引擎模块和内存管理模块,原始的三维重建点云数据输入三个模块,最后输出结果数据。
(1)渲染引擎模块:
在三维重建中,对重建得到的三维模型(包括三维坐标、纹理等信息)进行渲染得到物体或环境的2D数据图像,其中渲染部分的实现需要调用OpenGL/D3D/Vulkan来实现,属于系统代码,对于不同平台实现方法不同。传统的三维重建处理的实现是将与渲染有关的逻辑代码和系统代码混合编写,当要在不同平台上实现时,为了修改系统代码部分需要修改整个代码的代码逻辑,这使得同一三维重建实现方法的跨平台实现变得异常困难。
本发明构建了渲染引擎模块,将系统代码中的所有与渲染执行相关的系统代码作为渲染代码进行封装,其中大部分是与OpenGL/D3D/Vulkan相关的代码,将这部分代码进行封装并采用函数构成API接口,使得渲染内容与三维重建代码解耦。
例如针对OpenGL的渲染引擎模块,以枚举的数据结构封装了OpenGL/D3D/Vulkan的函数,以下函数将在具体实施方式中使用:
(2)计算引擎模块:
三维重建代码中还包含有大量的通用并行计算代码,这部分代码使用OpenCL/CUDA的并行计算机制进行实现,属于系统代码。
在传统的三维重建代码处理中,将三维重建逻辑代码和并行计算系统代码写在一起,不进行严格的分离,使得三维重建的跨平台实现变得困难。
因此,本发明构建了计算引擎模块,对系统代码中的通用并行计算代码进行分装并采用函数构成API接口,使得通用并行计算代码和逻辑代码解耦;
例如针对OpenGL的计算引擎模块,以枚举的数据结构封装函数,以下函数将在具体实施方式中使用:
(3)内存管理模块:
渲染引擎模块和计算引擎模块相互独立的,渲染引擎模块和计算引擎模块均连接内存管理模块并经内存管理模块调用处理异构系统内存中的数据,进行渲染引擎模块和计算引擎模块之间的交互、内存共享,实现GPU与CPU异构内存结构的高效代码程序。
内存管理模块中,采用固定函数对内存访问系统代码进行处理形成一种数据结构并形成API接口,采用数据结构用于管理GPU内存,代码涉及的图像数据、OpenGL/D3D/Vulkan以及OpenCL/CUDA相关的数据都使用这一数据结构。通过内存管理模块的调用API接口管理GPU内存,实现渲染引擎和计算引擎模块之间的交互以及内存共享。
内存管理模块封装的部分函数如下,以下函数将在具体实施方式中使用:
访问限制 | 函数名称 | 功能 |
public | GPUBuffer() | 构建函数,创建一个GPUBuffer实例 |
本发明的具体实施例及其实施情况是:
在动态三维重建中,将输入动态图像对应的多帧图片的RGB颜色信息以及深度信息,通过三维重建,输出动态场景的3D模型(包含场景的坐标位置、颜色、纹理等)。具体的,三维重建的思路为:对于每一帧图片根据深度图得到初始3D模型,将每一帧的3D模型融合将得到一个融合模型,计算当前帧3D模型相较于上一帧融合模型运动情况的运动参数,并将当前帧3D模型与上一帧融合模型进一步融合,更新融合模型。即三维重建的目标就是得到最终的融合模型,以及每一帧3D模型相较融合模型的运动参数。
假设输入一动态场景下的10帧图片,需要对这一动态场景进行三维重建。对于每一帧图片,将输入图片的颜色信息(RGB信息)以及深度图,根据这些信息即可对场景进行三维重建。
首先,根据输入的深度图对数据进行预处理,将2D图片按相机参数信息转化为3D。在这个过程中,调用了计算引擎模块,具体地调用CL_DEPTH_PROCESSING进行数据预处理,根据相机内参信息将2D图片转为3D模型(包含物理的坐标位置、颜色、纹理等)。在预处理过程中,需经常调用内存管理模块,具体地使用了GPUBuffer()构造函数,将预处理所需的信息(如深度图、深度图的长宽等)以及预处理的运算结果3D模型存到内存管理模块中,从而避免逻辑代码与系统代码的混合使用。
经过数据预处理得到当前帧的3D模型之后,计算当前3D模型相对于上一帧融合模型运动参数。在这里需要调用渲染引擎以及计算引擎模块,其中渲染引擎模块,调用ICP_PROJECT_CL将所融合的模型渲染到2D数据结构。在计算引擎模块,调用CL_COST_TERM来计算当前3D模型与融合模型匹配的损失值。
计算3D模型的运动参数之后,需要将当前帧的3D模型与上一帧得到的融合模型做进一步融合,得到最新的融合模型。同样的需要调用渲染引擎和计算引擎模块。在渲染引擎模块,调用了FUSION_PROJECT_CL将融合模型投影到2D图中。在计算引擎模块,调用CL_FUSE融合当前模型和融合模型,得到最新的融合模型。
最后,在融合的过程中,将会融入一些噪声以及错误的数据,需要删除噪声来精简模型。在这个过程中,需要调用计算引擎模块。首先调用CL_FILTER_STABLE和CL_ED_DELETE过滤所有三维数据,删去有问题的数据。
在以上所有实现中,都需要调用内存管理模块,读取或存储当前所需的数据,并将最终的计算结果储存在内存管理模块中。
通过上述实施例可以看出,在三维重建的过程中需要多次调用渲染引擎模块、计算引擎模块以及内存管理模块,通过将这三个模块进行封装,可以使代码逻辑更加清晰,增加代码的可重用性、鲁棒性以及可扩展性。
Claims (4)
1.一种基于引擎模块化的全平台三维重建代码处理方法,其特征在于:
封装有三个模块,分别为计算引擎模块、渲染引擎模块和内存管理模块,
在计算引擎模块,对系统代码中的通用并行计算代码进行封装,使得通用并行计算代码和逻辑代码解耦;
在渲染引擎模块,将系统代码中的所有与渲染执行相关的系统代码作为渲染代码进行封装,使得该部分的系统代码从三维重建代码中解耦;
上述各个模块的系统代码封装后形成API接口进行,程序运行时调用API接口进行处理工作;
将系统代码中的所有与渲染执行相关的系统代码作为渲染代码进行封装,将这部分代码进行封装并采用函数构成API接口,对系统代码中的通用并行计算代码进行分装并采用函数构成API接口;
在内存管理模块,采用统一接口对CPU内存与GPU内存进行统一管理,实现计算引擎模块和渲染引擎模块的多模块间的内存互通互用,使得各模块在内存级层面直接连通;
在进行动态物体的三维重建时,采用计算引擎模块的通用并行计算代码结合逻辑代码形成程序代码;采用渲染引擎模块的渲染代码结合逻辑代码形成程序代码;程序代码通过内存管理模块统一处理三维重建数据;
所述逻辑代码是指三维重建逻辑层面的,与平台无关的代码,在所有平台通用的代码;不同平台实现的同一种三维重建的算法相同,逻辑代码相同。
2.根据权利要求1所述的一种基于引擎模块化的全平台三维重建代码处理方法,其特征在于:所述的渲染引擎模块和计算引擎模块相互独立的,渲染引擎模块和计算引擎模块均连接内存管理模块并经内存管理模块调用处理异构内存构架中的三维重建数据,进行渲染引擎模块和计算引擎模块之间的交互、内存共享。
3.根据权利要求1所述的一种基于引擎模块化的全平台三维重建代码处理方法,其特征在于:所述的内存管理模块,采用对象GPUBuffer()对异构内存访问进行统一接口封装处理。
4.根据权利要求1所述的一种基于引擎模块化的全平台三维重建代码处理方法,其特征在于:所述的计算引擎模块、渲染引擎模块和内存管理模块中均为系统代码,均不包含逻辑代码。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911060242.9A CN110865800B (zh) | 2019-11-01 | 2019-11-01 | 一种基于引擎模块化的全平台三维重建代码处理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911060242.9A CN110865800B (zh) | 2019-11-01 | 2019-11-01 | 一种基于引擎模块化的全平台三维重建代码处理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110865800A CN110865800A (zh) | 2020-03-06 |
CN110865800B true CN110865800B (zh) | 2021-03-09 |
Family
ID=69653437
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911060242.9A Active CN110865800B (zh) | 2019-11-01 | 2019-11-01 | 一种基于引擎模块化的全平台三维重建代码处理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110865800B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113485851B (zh) * | 2021-05-13 | 2024-01-26 | 北京创奇视界科技有限公司 | 面向仿真三维引擎便捷开发的虚拟现实适配器 |
CN114356295B (zh) * | 2021-12-24 | 2023-05-26 | 北京有竹居网络技术有限公司 | 三维模型构建方法、装置和电子设备 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102622236A (zh) * | 2012-01-13 | 2012-08-01 | 深圳市妙趣工场信息科技有限公司 | 一种Geart3D游戏引擎 |
CN110136230A (zh) * | 2019-03-29 | 2019-08-16 | 北京达佳互联信息技术有限公司 | 动画显示方法、装置、电子设备及存储介质 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040136590A1 (en) * | 2002-09-20 | 2004-07-15 | Albert-Jan Brouwer | Means of partitioned matching and selective refinement in a render, match, and refine iterative 3D scene model refinement system through propagation of model element identifiers |
KR101511273B1 (ko) * | 2008-12-29 | 2015-04-10 | 삼성전자주식회사 | 멀티 코어 프로세서를 이용한 3차원 그래픽 렌더링 방법 및시스템 |
CN103970966B (zh) * | 2014-05-27 | 2018-01-16 | 武汉兆图科技有限公司 | 一种跨嵌入式平台的三维渲染引擎的构建方法 |
CN105023289A (zh) * | 2015-07-08 | 2015-11-04 | 成都梦工厂网络信息有限公司 | 图形图像三维处理平台 |
CN108597014B (zh) * | 2018-04-03 | 2022-04-19 | 苏州天魂网络科技股份有限公司 | 一种基于可视化编程的跨平台渲染效果的编辑系统 |
-
2019
- 2019-11-01 CN CN201911060242.9A patent/CN110865800B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102622236A (zh) * | 2012-01-13 | 2012-08-01 | 深圳市妙趣工场信息科技有限公司 | 一种Geart3D游戏引擎 |
CN110136230A (zh) * | 2019-03-29 | 2019-08-16 | 北京达佳互联信息技术有限公司 | 动画显示方法、装置、电子设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN110865800A (zh) | 2020-03-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108648269B (zh) | 三维建筑物模型的单体化方法和系统 | |
US20240070966A1 (en) | Methods and Graphics Processing Units for Determining Differential Data for Rays of a Ray Bundle | |
JP4766906B2 (ja) | 拡張グラフィックスパイプラインを提供するシステムおよび方法 | |
CN112381918A (zh) | 图像渲染方法、装置、计算机设备和存储介质 | |
CN109887069B (zh) | 在屏幕上显示3d场景图的方法 | |
CN110865800B (zh) | 一种基于引擎模块化的全平台三维重建代码处理方法 | |
CN113689537A (zh) | 用于基于体素的三维建模的系统、方法和设备 | |
CN106990961B (zh) | 一种WebGL图形渲染引擎的建立方法 | |
US20130127827A1 (en) | Multiview Face Content Creation | |
CN110796742A (zh) | 一种基于面向对象的三维场景视锥体剔除方法 | |
KR101670958B1 (ko) | 이기종 멀티코어 환경에서의 데이터 처리 방법 및 장치 | |
CN114241151A (zh) | 三维模型简化方法、装置、计算机设备和计算机存储介质 | |
KR20210002753A (ko) | 그래픽 파이프라인의 메모리 사용 감소를 위한 컴파일러 지원 기술 | |
CN112651881A (zh) | 图像合成方法、装置、设备、存储介质以及程序产品 | |
CN112423111A (zh) | 图形引擎和适用于播放器的图形处理方法 | |
US20160093112A1 (en) | Deep image identifiers | |
CN102880470B (zh) | 一种三维游戏引擎内核结构 | |
CN111145331A (zh) | 一种海量城市空间三维数据云渲染图像融合方法及其系统 | |
CN113192173B (zh) | 三维场景的图像处理方法、装置及电子设备 | |
CN111857666B (zh) | 一种3d引擎的应用方法和装置 | |
CN110136235B (zh) | 三维bim模型外壳提取方法、装置及计算机设备 | |
CN107316336A (zh) | 基于交互技术的vr实时渲染系统 | |
Campeanu et al. | A GPU-aware component model extension for heterogeneous embedded systems | |
CN116777940B (zh) | 一种数据处理方法、装置、设备及存储介质 | |
CN116912383B (zh) | 一种三维模型数据的渲染方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |