本发明属于计算机虚拟现实技术领域,具体而言是基于无人机采集的大场景图片进行建模,针对建模后的网格数据处理的方法,处理过的数据能够在web端无延迟加载并能够实时渲染。
背景技术:
近年来随着虚拟现实技术的迅猛发展和计算机硬件处理能力的不断提高,计算机图形学得到了越来越广阔的应用前景,同时伴随着海量数据的发展,对三维模型的可视化和处理技术也提出了越来越高的要求。三维模型的处理和可视化技术作为计算机图形学的主要研究内容,利用该技术来绘制并渲染逼真流畅的大规模场景模型,在智慧城市、智慧校园、智慧社区等虚拟现实领域有重要意义。
多细节分辨率模型(levelofdetail,lod)技术作为目前海量大场景数据渲染主要方法之一,在虚拟现实可视化中可以有效提高渲染速度,同时降低对硬件的性能要求。lod技术是图形生成加速渲染方法中的一种主要方法。在1976年,clark就提出了层次细节(levelsofdetail,lod)模型的概念(参见clarkj.hierarchicalgeometricmodelsforvisiblesurfacealgorithms[a].communicationsoftheacm,1976.547-554.),认为当物体覆盖屏幕较小区域时,可以使用该物体较低分辨率的模型,反之则使用较高分辨率模型,以便对复杂场景进行快速绘制。
lod技术在不影响画面视觉效果的条件下,通过逐次简化景物的表面细节来减少场景的几何复杂性,从而提高绘制算法的效率。该技术通常对每一原始多面体模型建立几个不同逼近精度的几何模型。与原模型相比,每个模型均保留了一定层次的细节。目前lod的实现方式主要有两种:1、静态lod,即在预处理过程中产生一个物体的几个离散的不同细节层次模型,实时绘制是根据特定的标准选择合适的层次表示模型,不过存在内存占用过高的缺陷,2、动态lod,即设计一个数据结构,在实时绘制时可以从该数据结构中提取出所需要的层次模型,从而在渲染时根据视点信息进行重建,此方式下cpu占用率过高。
技术实现要素:
针对现有细节层次模型处理方法普适性较低,对计算机硬件资源要求较高等问题,本发明提供了一种面向大场景模型动态渲染lod处理方法,其包括:
步骤a、对大场景模型进行多分辨率的计算,切分为不同细节层次,且不同细节层次之间保持一定的分辨率比例关系;
步骤b、定义存储切分结果的数据结构和新文件结构,利用所定义的数据结构将结果存储在新定义的文件结构中;
步骤c、基于webgl和所定义的新文件结构,自适应动态计算细分模型和web场景中视点的对应关系,实现web端大场景模型的动态渲染。
进一步地,所述步骤a中,对大场景模型进行多分辨率计算时,用户指定计算时所使用的内存大小ram,并构建kd-tree索引结构以加速网格计算;然后设置顶层节点面片数量top_node_faces,相邻两层网格分辨率比例设置为0.5,依据分辨率关系逐步细分模型,细分收敛条件是当前节点所包含的顶点数目n
进一步地,所述步骤b中数据结构为,结构头包含所有顶点数据、面片数据、纹理数据及各个节点包围球;所设计的文件格式结构为:文件头和节点数据信息两个部分,其中文件头描述三维模型的全局信息,包括:模型整体包围球中心、半径、顶点数目、面片数目,材质数据以及节点数目;节点数据信息是每个节点包含的数据信息,包括边界信息、面片数据、顶点坐标以及多分辨率数据。
进一步地,所述步骤c中,自适应计算过程为:首先计算节点包围球和相机在世界坐标系下欧式距离d,通过实时对比d和节点包围球半径d的比值与用户输入的阈值的对比实现对节点数据的动态调度。
本发明与现有技术相比的有益效果是:
本发明对动态lod方法进行了改进,在模型生成阶段用户可以指定生成节点细节,根据计算机硬件资源指定所使用的内存大小,从而提高本发明的适用性,在渲染阶段可设置调节阈值进行模型细节的渲染控制,提高渲染效率的同时可降低cpu的占用率。
本发明用户可以指定切分时所能使用的内存大小(默认使用2000m),因此能够充分发挥计算机性能,在内存较小的计算机上可设置较小的参数,反之可设置较大的参数,从而提高了本发明对不同计算机硬件配置的适应性;
本发明专门为细分网格模型设计了一种扩展名为.nxs的文件对计算结果进行存储,所涉及的文件能够很好的支持本发明的使用,在动态渲染与调度过程中,基于对该文件的解析信息和用户设定的阈值误差,在较小cpu的占用率下可实现对细分网格模型的快速调度。
附图说明
图1为本发明的面向大规模静态场景web端动态渲染的处理方法流程图;
图2为本发明渲染显示边界细节的示意图;
图3为本发明分块显示的示意图;
图4为本发明在web端进行分块lod渲染后一平方公里整体效果显示图;
图5为图4局部细节图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合实例对本发明做进一步的详细说明,但是本发明要求保护的范围并不局限于下述的具体实例。
如图1(左)网格处理流程图所示,首先构建全局的kd-tree索引结构用来加速网格顶点的查询与计算,然后基于构建的索引结构对网格模型进行分块处理,在进行分块的同时确保相邻父子节点网格分辨率误差为0.5,同时在父节点中保留模型的边界信息,在渲染阶段,如图1(右)渲染流程图所示,首先基于webgl加载.nxs文件,基于用户指定的误差因子和nxs文件中的模型节点信息构造节点评价系统,基于节点评价函数实现对细分模型的动态加载。本发明的具体实施方法如下:
1大场景模型细分lod的计算
1.1大场景模型的细分
针对大场景网格文件,首先构建kd-tree索引结构并将网格顶点信息输入到kd-tree中。然后构建该网格的整体包围球,构建方式为:1、计算所有网格顶点的重心作为其包围球心,同时统计所有网格顶点和面片的数量;2、基于kd-tree索引结构,寻找距离包围球球心最远的点,以球心和该点的距离作为包围球半径。预先设定每层节点包含的顶点数目为n=4096,切分模型所使用的内存为8000m,只要该层节点包围球空间含有的顶点数目少于n,该包围球所对应的节点就停止剖分。
1.2多分辨率层次的细分网格模型建立
基于步骤1.1所构建的kd-tree索引结构和场景包围球信息,以整个场景的包围球包含的信息为场景的根节点,顺次向下构建lod层次,同时网格分辨率降低为上级分辨率的50%。当满足切分停止条件时(即该节点所包含的顶点数不满足预设值),停止切分,在分的过程中,父节点保留当前等级网格模型的边界信息,细分lod模型的边界如图2所示。切分步骤如下:
step1.首先判断当前节点的状态,如果当前节点node是叶子节点,则把其当前未简化的几何信息作为最精细层lod1,而将lod1的面片数量简化为原来的1/2得到次精细层lod2,重复这一步骤。
step2.若node不是叶子节点,则先对其非空子节点调用step1,递归调用step1,直至node的所有非空子节点构建完细分模型。
对kd-tree的根节点调用上述过程,递归地建立整个kd-tree的细分lod结构。参考图3,在细分lod建立过程中,将属于同一纹理的面片归为同一组,避免在渲染过程中对纹理的多次调用,提高渲染效率。在对大场景模型细分处理过程中,设定使用内存为8000m以加快处理速度,针对北航青岛研究院模型,本发明的输出信息如下:该模型的顶点数据为46万左右,对其进行切分的lod细节层次为5层,且该模型包含纹理信息和顶点颜色信息,计算结果保存在.nxs文件中.
1.3大场景模型细分lod文件格式(.nxs)
为提高渲染效果及加载效率本发明使用了一种链接型文件格式—nexusfile(扩展名为.nxs),对已构建好分块lod的模型进行二进制存储,该文件的头信息包含根节点包围球,顶点数据、纹理材质数据、总的面片数据、总的节点数量。基于得到模型的lod数据文件,就可以直接导入web场景进行大规模网格模型的lod渲染显示。
2.细分场景模型的坐标变换
由于场景中的模型是在世界坐标系下的,按照场景中模型的空间变换信息,对以nxs文件格式载入的多层次lod节点包围球数据作相应的变换,包括旋转、平移和缩放。遍历所有节点,计算它们中心的平均值作为场景世界坐标系的中心center。得到了场景的包围球和中心之后,将节点数据变换到该世界坐标系下。
3.得到场景的细分lod模型之后,还必须根据用户指定阈值误差及漫游视点进行lod模型的web渲染,基于视点的lod渲染流程图如图1(右)所示,首先加载场景根节点获取切分模型的整体信息,渲染效果如图4及图5所示。
根据公式选择细分lod模型进行渲染,其中d是节点的包围球中心到相机的距离,d是场景中节点包围球的半径,θ是视景体的水平夹角,e用户指定的误差阈值。基于视点渲染的算法描述如下,
step1.首先将场景根节点加入节点队列queue。从queue取出节点node,遍历node的子节点,比较简化误差e与e,若符合公式(1),则把该node节点指针加入到渲染队列。
step2.遍历完毕node的所有子节点之后,若没有符合公式(1)的,则将node的非空子节点加入queue
step3.重复step1——step2,直到queue为空
step4.遍历渲染队列进行渲染。
面向大场景web动态渲染的分块lod数据处理方法,首先进行网格模型的细分处理,在细分处理阶段用户可指定使用的内存大小和节点参数;然后设置特定的数据结构,并将处理后的数据存储到自定义的文件中;最后根据用户指定的误差阈值,在web端实现动态加载和渲染。本发明相对于静态lod提供了较好的细节性绘制;相对于目前多数动态lod又减少了渲染的复杂度,从而满足大规模静态场景实时渲染得需要。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。以上所述,仅是本发明的较佳实施例而已,并非是对本发明作其它形式的限制,任何熟悉本专业的技术人员可能利用上述揭示的技术内容加以变更或改型为等同变化的等效实施例应用于其它领域,但是凡是未脱离本发明技术方案内容,依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化与改型,仍属于本发明技术方案的保护范围。