面向大规模场景的数字孪生模型快速渲染方法
2022-12-05杨艳芳
舒 亮,张 洁,陈 璇,杨艳芳
(1.温州大学 浙江省低压电器工程技术研究中心,浙江 温州 325027 2.武汉理工大学 交通与物流工程学院,湖北 武汉 430063)
0 引言
制造业是国民经济的支柱,随着经济和技术的飞速发展,制造企业面临着快速技术变革带来的多方面挑战,产品生命周期短、需求不稳定、高度定制化等因素,对现代制造业提出了更高要求,世界各国已瞄准新一代信息技术和先进制造技术的深度融合和应用,以智能制造为主攻方向,加快工业互联网创新发展[1]。数字孪生作为解决智能制造信息物理融合问题和践行智能制造理念的关键技术,被众多学者广泛研究和关注,并被引入到越来越多的领域进行应用[2]。
数字孪生以数字化方式创建物理实体的虚拟模型,借助数据模拟物理实体在现实环境中的行为,通过虚实交互反馈、数据融合分析、决策迭代优化等手段,为实体增加或扩展新的能力[3-5],从而促进物理空间与虚拟空间交互迭代、虚实融合,便于产品设计、生产、运维等过程的数字化和信息化[6]。数字孪生技术应用于制造业领域,所需渲染的三维场景往往具有大量需要实时渲染的虚拟模型,包括厂房建筑、厂房环境、多种产品生产线。其中多种产品生产线由于设备精细零件数量巨大,且模型处于运动状态,导致存储数据量较大,动态模型的实时数据传输影响了大规模场景实时渲染效果。对数字孪生模型进行实时渲染,实时、动态地生成定制化空间、模型和场景,是构建数字孪生系统的关键,模型渲染速度和效率对于数字孪生系统性能至关重要,尤其是大规模场景下,解决孪生模型的快速渲染问题,是实现高性能数字孪生系统的关键。
目前国内外学者针对数字孪生模型实时渲染问题进行了较多研究,国内学者如陈景广等[7]利用多核CPU的计算特性实现四叉树多细节层次(Levels of Detail,LOD)的并行生成和三角形网格的渲染,有利于提高三维数字高程模型(Digital Elevation Model,DEM)渲染的性能。袁友伟等[8]提出一种基于图形处理器(Graphics Processing Unit,GPU)的具有真实感三维实体模型快速绘制方法,降低能量方程的数值,减少线性曲面中三角形个数。文献[9]研究了基于GPU的水彩画风格实时渲染及动画绘制方法,并利用GPU并行加速。文献[10-12]研究了流体模型的加速渲染方法,如通过数值计算模型的优化[10]、GPU加速[11-12]等方法进行渲染建模。李融等[13]则利用GPU实现城市管线数据的编解码、场景管理、曲面细分建模等任务,有利于提升渲染性能。
国外如WHANG等[14]将CPU操作分成两部分来提高实时图形渲染的并行处理性能:纯CPU操作和与GPU相关的操作,并使它们并行操作,实现快速图形渲染。文献[15]提出一种可扩展的混合CPU-GPU算法,将GPU细分与CPU瓦片管理结合在一起,同时将图形内存的使用保持在实际限制内。文献[16]提出了用于非刚性3D医学图像配准的框架,将两种基于选定标志点的配准方法在统一计算设备架构(Compute Unified Device Architecture,CUDA)上实现。RAMOS等[17]在GPU上进行网格的细化和简化,实现三维模型的多分辨率渲染。
在现有研究中,国内外学者主要从CPU多核、CPU和GPU协同处理、GPU并行计算这三方面对场景实时渲染进行优化,借助CPU多核的计算特性对LOD、数据编码等渲染优化技术进行改进,提升渲染效率。CPU和GPU协同处理有助于减轻CPU的计算压力,将复杂计算交至GPU,加速模型绘制过程。然而,这些研究中不涉及对模型渲染流程的改变和优化,仍然遵照应用阶段、几何阶段和光栅化阶段的处理流程,在CPU中进行场景准备、视锥体剔除等操作,然后将渲染图元传输到GPU,进行后续渲染操作,存在以下几点局限性:
(1)在现有渲染流程中,其视锥体剔除主要采取粗粒度方式进行,视锥体剔除无法完全剔除在视锥体外部的模型,导致这部分理应被剔除的模型仍然会进入后续渲染流程,加剧CPU和GPU的计算负担。
(2)现有方案中视锥体剔除操作主要在CPU中进行,由于需要进行频繁的视锥体判定、包围体计算、相交计算、位置关系判断等,CPU负担较重,影响孪生模型对运动控制、数据通信在实时性和有效性方面的要求。
事实上,将模型渲染流程优化与CPU/GPU协同处理相结合,同时对渲染流程和渲染框架进行优化和改进,是进行大规模场景快速渲染的另一种有效思路,尤其是对设置有大规模场景的数字孪生系统,对数据交互、动态控制实时性要求高,降低CPU的计算负担、提升模型渲染效率,是提高数字孪生系统性能的重要途径。
针对以上问题,本文提出一种面向大规模场景的数字孪生模型快速渲染新方法,将渲染流程优化和CPU/GPU协同处理相结合,在渲染流程上,提出一种数字孪生模型视锥体细粒度剔除算法,通过子模型划分、子模型包围体创建、相交计算等操作,实现视锥体细粒度剔除;同时,在计算框架搭建上进行优化,将几何模型数据传输至GPU,在GPU中进行并行计算,将原本CPU中进行的视锥体剔除和计算移植到GPU,进行视锥体剔除和操作的并行计算,减少CPU计算压力的同时,利用GPU计算资源并行计算,提升模型渲染效率。
1 模型渲染方案
图形渲染主要将三维模型按照相机、灯光、纹理贴图等参数在屏幕上绘制成二维图像[18-20],传统图形渲染方案的流程分为3个阶段:应用阶段、几何阶段和光栅化阶段,如图1所示。
(1)应用阶段 主要在CPU中进行,分为场景准备、视锥体剔除和设置渲染状态等,视锥体剔除主要是将视景之外的模型进行剔除,减少进入后续渲染的模型数量,有利于提升渲染效率,设置相应的渲染状态后,渲染图元传输到GPU,进行后续操作。
(2)几何阶段 几何阶段基于GPU运行,主要进行顶点着色、几何着色、投影、裁剪等渲染流程,最后输出经过坐标变换和投影之后的顶点坐标、颜色以及纹理坐标,将其传输到光栅化阶段进行像素着色等操作。
(3)光栅化阶段 光栅化阶段基于GPU进行,包括三角形设置、三角形遍历、像素着色等流程[21-22],该阶段将几何阶段输出的三角形转化为片段,并对片段进行着色,裁剪、测试、融合等处理后,最终和帧缓冲混合,形成二维图像。
2 孪生模型快速渲染方案
由传统模型渲染方案可知,视锥体剔除主要在CPU中进行,增加了CPU工作量,并且采用串行方法进行,其视锥体剔除模式主要基于粗粒度方法,无法完全剔除在视锥体外部的模型,导致这部分理应被剔除的模型仍然会进入后续渲染流程,加剧CPU和GPU渲染负担。本文提出的采用并行计算框架的数字孪生模型视锥体细粒度剔除快速渲染新方法,其主要流程如图2所示。
2.1 模型数据预处理
在图2所示的流程中,需要对数据进行预处理,对于大规模三维场景,视锥体剔除主要对模型与视锥体进行相交检测,计算量较大,为了进行细粒度剔除,首先对数字孪生模型数据进行预处理,其流程如图3所示。
在图3所示流程中,首先进行数据获取,加载三维场景数据到内存和CPU,CPU从内存获取几何模型数据和视锥体数据,确定相机可视范围。
随后,CPU调取几何模型的三角面片数量以及三角面片顶点数据,将模型的三角形面片数均分,进行子模型划分,将模型剖分为含相同数量三角面片的分组,每个分组可以等同为一个子模型。
最后,构建子模型包围体,定位并计算子模型中心坐标和范围,根据子模型坐标和范围构建相应大小的子模型包围体。将视锥体数据和预处理完成的子模型包围体数据共同传输至显存,进行视锥体数据和包围体数据存储,等待GPU调取该数据,进行视锥体剔除计算。
2.2 基于GPU并行的视锥体细粒度剔除
视锥体剔除作为传统模型渲染方案的重要操作,主要基于粗粒度的模型剔除算法,目的是用来判断模型是否需要被绘制,其剔除效率较低。2.1节对其进行预处理操作,有助于在GPU并行框架下实现视锥体细粒度剔除,能够有效避免三维场景中冗余模型的大量渲染消耗。在并行框架下进行子模型剔除关系的检测和计算,算法具体步骤为:
(1)开启GPU并行计算进程,根据子模型数量配置相应数目的GPU并行线程,所分配的线程用来执行子模型包围体与视锥体的相交计算。由于本文通过2.1节模型数据预处理操作,获取子模型包围体数量,因此实现子模型剔除关系的检测和计算,需要在GPU上分配相同数量的线程数量,即在线程块中选取合适的线程数K,以此在每个线程实现一个子模型包围体与视锥体的相交计算过程,从而达到视锥体细粒度剔除的并行计算。
(2)执行细粒度视锥体剔除算法,视锥体是三维场景中相机的可见区域,类似一个顶部切割后平行于底部的金字塔的实体形状[23]。视锥体由6个平面组成,分别为近裁面、远裁面、上裁面、下裁面、左裁面、右裁面,如图4所示。虚拟场景中视锥体与模型的位置关系有3种:模型完全在视锥体外部、模型完全在视锥体内部、模型部分处于视锥体内部,如图5所示,进行模型渲染时,屏幕绘制范围需要控制在视锥体范围内。
根据三维场景中相机坐标位置、角度、水平方向视角、近裁面距离、远裁面距离等信息,计算得到相机视锥体大小、朝向、位置,即得出视锥体的6个裁面的空间平面方程Ax+By+Cz+D=0,其中x,y和z表示空间坐标系,A、B、C和D表示空间内平面的系数,其系数值用于确定平面在空间的具体位置。
进行子模型位置判断时,假设视锥体内一点P0(x0,y0,z0,w0),点P0在投影空间的映射点为P1(x1,y1,z1,w1),并且所求的投影矩阵为P0,则根据矩阵乘法可知P0,如式(1):
(1)
其中矩阵元素通过已知的视角、远近裁面距离的值来确定。对于变换后的P0,若处于视锥体内部,则点P1满足:
(2)
若先判断-w1 (3) 于是推导出左裁面的平面方程为(4): (4) 因左裁面中w=1,所以求得左裁面的平面方程为: (5) 其他5个裁面的平面方程同理可得,即视锥体平面方程为Ax+By+Cz+D=0。 进行细粒度视锥体剔除时,步骤(1)中开启的每一个并行计算进程分别与一个子模型和子模型的包围体相对应,即通过该进程进行该子模型和包围体的相交计算、位置判断和剔除等操作,具体包括:①在该进程中,确定相机视锥体大小、朝向、位置,即得出视锥体的6个裁面的空间平面方程Ax+By+Cz+D=0;②确定子模型近似包围体,包围体包括了其位置矩阵和范围,即包围体的大小,矩阵则保存了子模型包围体的位置,角度等重要信息;③将子模型包围体的某个点坐标(x1,y1,z1)代入其中一个裁面的平面方程进行相交计算,求出顶点与此裁面的位置关系,若平面方程Ax+By+Cz+D≤0,则顶点在此裁面外侧,继续遍历其余5个裁面并判断该顶点位置;④依次计算子模型包围体的其余顶点,最终求得该子模型与视锥体的位置关系,只有子模型包围体完全在视锥体外部的情况下,该子模型才会被视锥体剔除算法剔除,否则将该子模型存储到缓存区,并执行后续的几何、光栅等阶段的渲染操作;⑤若计算结果显示该子模型的包围体与视锥体有相交区域,通用图形处理器将该子模型保存至指定缓冲区,否则剔除该子模型。该过程实现的伪代码如下: void FrustmCull(线程索引) { 检测结果=1 子模型数据获取 for(i=0; i<视锥体平面数量;i++) { 获取视锥体第i个平面方程 if(子模型包围盒顶点在视锥体平面方程内侧) { 检测结果=0 返回检测结果 将该子模型存储至显存区域 } else { 检测结果=1,表示该子模型被视锥体剔除,不进入下一渲染流程 返回检测结果 } } } (3)剔除后的模型数据存储与绘制,通用图形处理器将位于视锥体内部的子模型包围体数据存储至显存,并在GPU端执行图形绘制命令,进入几何阶段、光栅化阶段的渲染步骤[24],最后渲染出一张二维图像。 (4)判断场景是否更新。若数字孪生模型实现当前帧渲染后,系统因人为控制停止运行,则系统渲染结束。若无人停止该系统,系统处于运行状态,则该系统渲染尚未完成,需要进入下一帧渲染。 (5)模型和视锥体的动态更新,在数字孪生模型的后续操作中,若场景出现碰撞检测、动作变化等大量逻辑更新,表示部分几何模型或者相机发生移动,即模型位置发生动态变化或相机位置发生变化,CPU对动态模型的子模型包围体位置、角度等数据以及视锥体数据执行更新操作,然后将此次更新后的数据传输至显存,替代上一帧相应数据,进行下一帧场景渲染,并从步骤(1)继续执行渲染操作,直至渲染结束。若场景未发生任何逻辑更新,表示场景未产生新数据,即几何模型和相机视锥体均未移动,直接进入步骤(1)继续执行渲染操作,直至渲染结束。 采用传统方法进行视锥体剔除时,只要模型小部分与视锥体存在相交时,则将该模型全部进行保留,即使该模型绝大部分处在视锥体之外,仍然对全部的模型数据进行缓存、计算和存储,浪费大量资源,并且渲染效率低下。本文提出的采用并行计算框架的数字孪生模型视锥体细粒度剔除快速渲染新方法,将模型进行子模型划分,并创建子模型包围体,实施视锥体细粒度剔除,可以有效剔除视锥体之外的模型部分,渲染效率得到提升。此外,将原本在CPU中进行的视锥体剔除计算移植到GPU,并进行GPU并行计算,提升了计算效率,减少CPU负担,有助于数字孪生模型渲染效率和实时性指标的整体提速。 本文以断路器数字孪生车间系统为例,对所提出的数字孪生模型渲染新方法进行验证。断路器是控制电流通断的保护性装置,提供电流的过载和短路保护,确保线路及设备安全,广泛应用于电力、通讯、制造等行业[25-26]。断路器制造车间主体包括生产线辅助组、工作人员和6条不同型号的断路器生产线,其结构图如图6所示。 每种型号断路器生产线分为两条镜像装配线和一条检测线,其工艺流程如图7所示。其中断路器装配线负责自动化装配断路器内部零件,包括自动装手柄/扭簧、磁系统、磁轭、销轴、总装、检测等12个工艺流程。断路器数字孪生车间系统中装配线总模型数量为21 035,总三角面片数量为3.06×107。其中装配动态模型数量为14 218,每个动态模型具备多种装配运动状态,代表模型的每种运动数据都需存储至内存,数据存储占据内存较大,产生大量模型渲染消耗。断路器检测线负责壳外零部件组装以及性能检测,包括单极穿钉、单极铆合、激光打标、自动延时、多极拼装、多极穿钉、多极铆合、扫码瞬时、通断耐压、自动移印、装配卡扣、贴封口塞等12个工艺流程。断路器数字孪生车间系统中检测线总模型数量为22 074,总三角面片数量为3.01×107。其中检测动态模型数量为15 012,每个检测动态模型为模拟设备检测动作,需要进行多种动作设计与数据驱动,同样占据大量内存空间和造成模型渲染问题。 断路器数字孪生车间包括断路器物理车间、断路器虚拟车间、车间孪生数据和车间服务系统4部分[27-29],图8为断路器数字孪生车间主界面。断路器制造车间即是物理车间,通过PLC控制器、位移传感器、工业相机等装置控制和管理设备及其逻辑关系,构建车间物联网通信系统,通过通信系统进行孪生数据的交互与传递。孪生车间作为物理车间在虚拟空间全要素、全流程的真实映射,通过对断路器物理车间层级建模、状态建模和孪生体运动规则构建,形成实时孪生数据控制和孪生车间系统,管理配置车间资源,实现断路器制造车间的实时管控与决策优化。 本文采用Compute Shader通用并行平台,在所开发的断路器数字孪生系统基础上,对所提出的数字孪生模型快速渲染方案进行验证,断路器数字孪生系统中产线构造复杂、生产设备模型较多,共包含52 507个几何模型,6.09×107个三角面片。根据所提出的快速渲染方案,若所需渲染的屏幕可见模型包含2.79千万个三角面片时,对几何模型进行预处理操作,将三角面片均分,剖分为含128个三角面片数的分组,每个分组对应一个子模型,即场景子模型数量约为2.17×105,为GPU配置相同数量的线程,每个线程用来处理每个子模型包围体和视锥体的细粒度剔除算法。 断路器数字孪生系统采用Unity 3D引擎开发,实验环境为Intel(R)Core(TM)i7-9750H CPU@2.60 GHz 2.59 GHz处理器,NVIDIA GeForce RTX 2060显示适配器。Profiler为该开发引擎提供的性能分析工具,显示了系统运行期间收集的分析数据,在时间轴上选定某一帧,即可从显示的时间数据分析出当前帧的CPU、GPU性能消耗,以及CPU、GPU各模块的性能详细情况,如表1所示。可以看到,CPU性能分析由多项模块组成,主要分为渲染模块、物理模块、动画模块、脚本模块、其余模块等部分,其中渲染模块是最消耗CPU性能的功能模块,在选取的这一时间帧中,渲染模块占据整体CPU总体性能消耗的58%。由于CPU对模型的视锥体剔除等操作无法实现细粒度剔除效果,CPU需要处理大量冗余模型的渲染,进一步导致GPU接收大量模型渲染数据,GPU渲染时间高达27.05 ms。 表1 Profiler性能分析 传统图形渲染方案是基于CPU视锥体剔除的图形渲染方案,该方案是由CPU负责处理视锥体剔除操作,GPU负责图形渲染流程中几何阶段和光栅化阶段。CPU对模型整体的剔除操作一方面造成模型剔除程度效果不高,另一方面大量串行的计算方式,造成CPU渲染计算压力增大。在本文对比实验中,基于CPU视锥体剔除的图形渲染方案需要实验者将模型与视锥体的剔除算法过程指令写入CPU,在系统运行时,由CPU解释并执行程序内容,执行预先设置的视锥体剔除计算过程,最后将所需渲染的模型数据传输至GPU端显卡缓存区。为验证本文的数字孪生模型快速渲染方案,对包含不同模型面片数的场景进行检测,分别对比了断路器数字孪生车间CPU耗时、GPU耗时和平均帧率3个指标,分析该方案的优化效果。本文以基于CPU视锥体剔除的图形渲染方案为对比,两种渲染方案的CPU耗时分析如表2所示。由表2可以看出,当屏幕可见模型的面片数量为1.16千万个时,该渲染方案优化率提升了15.70%,随着模型面片数量增多,逐渐显示该方案的优化效果,测试场景最高可优化26.52%,减少了CPU的渲染处理压力。 表2 两种渲染方案的CPU性能分析 表3是两种渲染方案的GPU性能分析,由结果分析可知,以3.15千万个屏幕可见模型面片为例,基于CPU视锥体剔除的图形渲染方案中GPU耗时为19.75ms,本文所提渲染方案的GPU耗时为14.71ms,由于通过GPU实现模型细粒度剔除算法,减少了物体子模型渲染数量,达到了孪生模型的细粒度剔除效果,GPU的渲染耗时减少了25.51%,有效提高了断路器数字孪生系统模型渲染效率。 表3 两种渲染方案的GPU性能分析 对两种渲染方案的平均帧率进行对比,对比结果如图9所示。在同一屏幕分辨率1 360×768,实验对1.16、2.53、3.15千万个模型面片进行屏幕渲染,基于CPU视锥体剔除的图形渲染方案的平均帧率为84.3、63.4、32.1;利用本文模型快速渲染方案,系统运行的平均帧率为98.2、76.5、41.2。屏幕所需渲染的模型面片数量过高时,断路器数字孪生系统的渲染性能有效提高了28.35%,提升了数字孪生模型的渲染质量。 本文提出的数字孪生模型快速渲染方法,通过视锥体细粒度剔除和GPU并行计算框架,可以有效减少渲染过程中视景之外的模型数据规模,提升后续渲染效率。此外,将原本在CPU中进行的视锥体剔除运算移植到GPU,并采用GPU并行计算框架进行视锥体检测、位置判断、剔除等运算,进一步节省CPU计算负担,对于动态性、实时性和交互性要求较高、运算量大的数字孪生系统而言,意义明显。验证结果表明,在不影响数字孪生车间渲染质量的情况下,所提出的渲染方法在CPU耗时、GPU渲染耗时等指标上均有优化效果,孪生系统平均帧率提升28.35%,大幅提高了数字孪生系统的渲染效率。本文提出的大规模场景快速渲染方法,有助于提升孪生系统的运行效率,当数字孪生系统的规模进一步增大时,将本方法与分布式渲染方案进行结合,是未来进一步优化极大规模场景中数字孪生模型渲染和效率提升的有效方法。3 实验案例及结果
3.1 实验案例
3.2 实验结果
4 结束语