一种场景精确表达方法与流程

文档序号:14348309阅读:524来源:国知局
一种场景精确表达方法与流程

本发明属于信息处理技术领域,涉及一种场景的精确识别和表达的方法。



背景技术:

场景的表达是计算机图形学中主要的研究热点,场景即数据,场景表达即将数据转化到屏幕上呈现给用户的过程,场景的表达方式主要有高度场表达、三角网格表达以及体素的表达。高度场表达方法,编码了物体表面到平面的垂直距离,是关于z=f(x,y)的函数,具有存储量较小,易于调度更新的优点,高度场表达的局限性在于智能建模垂直方向上的模型表面,对于物体内部的体特征建模无能为力。体素表达方法,可以理解为体积像素表达,体素化即将三维模型用“体积像素”的小立方体统一表示,这一表达方法表达出的场景最接近实际场景,它不仅包含表面信息,而且能描述场景内部属性,但是体素表达方式过程非常复杂,包含了大量的细节,因此对存储量有很高的要求。近年来,得益于图形显卡处理能力的大大增强,有学者提出了优化体素数据存储的算法,laine与karras提出了有效的稀疏体素八叉树(svo:sparsevoxeloctree),将体素与一对平行平面的相交来获得三维模型的近似轮廓,用近似轮廓在高分辨率下取代体素,从而实现有效的压缩。尽管svo表达方法,减少了一部分的存储量,但是三角形网格体素化,在高分辨率下仍会消耗大量内存,svo体素生成效率低。

因此如何实现仅用较小的存储量尽可能的表达三维场景是业界主要研究的方向。



技术实现要素:

本发明主要解决的技术问题是提供一种能够利用较小的内存精确渲染三维场景。

为解决上述技术问题,本发明的场景精确表达方法采用的技术方案是:包括以下步骤:

步骤一,读取三维场景的三角面片序列与点信息,求出三维场景在标准坐标轴x方向上的最大值xmax、最小值xmin,在标准坐标轴y方向上的最大值ymax、最小值ymin,和在标准坐标轴z方向上的最大值zmax、最小值zmin,并以点(xmin,ymin,zmin)和点(xmax,ymax,zmax)为对角顶点构成一个包围盒,并生成八叉树的父节点;

步骤二:将所述八叉树的父节点进行八叉树细分,形成八叉树子节点;

步骤三:对所述八叉树子节点分别计算关联的边界盒;

步骤四:根据所述三角面片序列中每个三角面片所处边界盒的区域,将三角面片分成需要分割处理的三角面片和不需分割处理的三角面片,对所述需要分割处理的三角面片进行分割处理,衍生出新三角面片;

步骤五:对每个所述八叉树子节点进行判断,当八叉树子节点为空节点时,不做处理;当八叉树子节点为非空节点时,如果该八叉树子节点可以转换为单一高度场,则将该八叉树子节点作为四叉树根节点,执行步骤六;如果该八叉树子节点不能转换成单一高度场,则将该八叉树子节点作为新的八叉树的父节点,返回步骤二;

步骤六:对四叉树根节点进行四叉树细分,得到四叉树子节点;

步骤七:判断当前细分深度是否达到最大深度值lmax,如果当前细分深度已经达到最大深度值,将非空的四叉树子节点作为叶节点,执行步骤九;如果当前细分深度未达到最大深度值,执行步骤八;

步骤八:对每个所述四叉树子节点进行判断,当四叉树子节点为空节点时,不做处理;当四叉树子节点为非空节点时,将该四叉树子节点作为新的四叉树根节点,执行步骤六;

步骤九:保存所述叶节点信息和对应的不需分割处理的三角面片和新三角面片的信息;

步骤十:将不需分割处理的三角面片及分割处理后的新三角面片的信息变换为高度场;

步骤十一:对高度场进行渲染呈现三维场景。

进一步优选地,在步骤四中,对三角面片进行分割处理的方法包括:

将相邻的边界盒的相交面定义为ax+by+cz+d=0,其中,a,b,c,d为已知常数,a2+b2+c2=1;

则三角面片的边与相交面的交点的计算公式为:其中,矢量是相交面的法向量,ci为三角面片的边与相交面的交点的坐标,ti为三角面片顶点坐标。

进一步优选地,在步骤十一中,新三角面片信息变换为高度场的步骤包括:

步骤3-1,每个边界盒内的新三角面片沿三个标准坐标轴x轴、y轴和z轴分别进行投影(ti)k,其中,k=0,1,2,0代表z轴投影,1代表x轴投影,2代表y轴投影;

步骤3-2,选择主导轴,主导轴是指相交的面积sproj(pk)小于αthrd,其中,pk=t1k∩t2k…∩tik…∩tmk,αthrd为设置的阈值参数,αthrd在[0,0.1]之间;

步骤3-3,主导轴和新三角面片在顶点着色器和像素着色器中生成高度场纹理。

进一步优选地,在步骤六中,当所述八叉树子节点内的所述新三角面片沿设置的主导轴方向上的二维投影无交集时,则该八叉树子节点能够转换为单一高度场;当所述八叉树子节点内的所述新三角面片沿设置的主导轴方向上的二维投影有交集时,则该八叉树子节点不能转换为单一高度场。

进一步优选地,在步骤十一中,对高度场进行渲染的方法采用光线投射方法。

进一步优选地,所述光线投射方法包括:

在光线迭代时,利用相交规则进行光线与三角面片相交测试,在每个迭代位置,如果光线与三角面片相交,则输出当前交点的颜色纹理,渲染在屏幕上;如果光线与三角面片不相交,不需处理;

所述相交规则为:

den≤heightordex≤height,其中,height为光线射入的单元高度,

den是从光线射入单元边界hen到主导轴对应的投影平面plane的距离,dex是从光线射出单元边界hex到主导轴对应的投影平面plane的距离。

进一步优选地,所述最大深度值lmax设定为8~10。

本发明的有益效果是:本发明提供的场景精确表达的方法,本方法先对三维场景进行八叉树细分,判断八叉树细分出的八叉树子节点能够转换成单一高度场,则将该八叉树子节点再进行四叉树细分,最后转换成高度场表示。首先采用了八叉树能够精确的表达三维场景,当八叉树子节点能够用高度场表示,不再进行八叉树细分,而是利用四叉树转换成高度场表示,高度场表达存储量远远小于体素的表达存储量。这样在既保证能够精确的表达了三维场景,同时也大大减少了现有技术中一直采用八叉树细分消耗的内存量。本方法能够极大的减少存储量,具有较高的光线投射效率,表达三维场景取得较好的效果。

附图说明

图1是本发明的场景精确表达方法的实施例的流程图;

图2是本发明的场景精确表达方法的实施例的构建结构示意图;

图3是本发明的场景精确表达方法的实施例中三角面片分割示意图;

图4是本发明的场景精确表达方法的实施例中高度场变换流程示意图;

图5是本发明的场景精确表达方法的实施例的试验场景图。

具体实施方式

下面详细描述本发明的实施方式,所述实施方式的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施方式是示例性的,仅用于解释本发明,而不能解释为对本发明的限制。

本技术领域技术人员可以理解的是,本发明中涉及到的相关模块及其实现的功能是在改进后的硬件及其构成的装置、器件或系统上搭载现有技术中常规的计算机软件程序或有关协议就可实现,并非是对现有技术中的计算机软件程序或有关协议进行改进。例如,改进后的计算机硬件系统依然可以通过装载现有的软件操作系统来实现该硬件系统的特定功能。因此,可以理解的是,本发明的创新之处在于对现有技术中硬件模块的改进及其连接组合关系,而非仅仅是对硬件模块中为实现有关功能而搭载的软件或协议的改进。

本技术领域技术人员可以理解的是,本发明中提到的相关模块是用于执行本申请中所述操作、方法、流程中的步骤、措施、方案中的一项或多项的硬件设备。所述硬件设备可以为所需的目的而专门设计和制造,或者也可以采用通用计算机中的已知设备或已知的其他硬件设备。所述通用计算机有存储在其内的程序选择性地激活或重构。

本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本发明的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。应该理解,当我们称元件被“连接”或“耦接”到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在中间元件。此外,这里使用的“连接”或“耦接”可以包括无线连接或耦接。这里使用的措辞“和/或”包括一个或更多个相关联的列出项的任一单元和全部组合。

本技术领域技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术术语和科学术语)具有与本发明所属领域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非像这里一样定义,不会用理想化或过于正式的含义来解释。

下面对本发明的场景精确表达方法的实施方式进行详细的描述。

如图1所示本实施例的流程图,包括:

步骤一,读取三维场景的三角面片序列与点信息,求出三维场景在标准坐标轴x方向上的最大值xmax、最小值xmin,在标准坐标轴y方向上的最大值ymax、最小值ymin,和在标准坐标轴z方向上的最大值zmax、最小值zmin,并以点(xmin,ymin,zmin)和点(xmax,ymax,zmax)为对角顶点构成一个包围盒,并生成八叉树的父节点;

步骤二:将所述八叉树的父节点进行八叉树细分,形成八叉树子节点;

步骤三:对所述八叉树子节点分别计算关联的边界盒;

步骤四:根据所述三角面片序列中每个三角面片所处边界盒的区域,将三角面片分成需要分割处理的三角面片和不需分割处理的三角面片,对所述需要分割处理的三角面片进行分割处理,衍生出新三角面片;

步骤五:对每个所述八叉树子节点进行判断,当八叉树子节点为空节点时,不做处理;当八叉树子节点为非空节点时,如果该八叉树子节点可以转换为单一高度场,则将该八叉树子节点作为四叉树根节点,执行步骤六;如果该八叉树子节点不能转换成单一高度场,则将该八叉树子节点作为新的八叉树的父节点,返回步骤二;

步骤六:对四叉树根节点进行四叉树细分,得到四叉树子节点;

步骤七:判断当前细分深度是否达到最大深度值lmax,如果当前细分深度已经达到最大深度值,将非空的四叉树子节点作为叶节点,执行步骤九;如果当前细分深度未达到最大深度值,执行步骤八;

步骤八:对每个所述四叉树子节点进行判断,当四叉树子节点为空节点时,不做处理;当四叉树子节点为非空节点时,将该四叉树子节点作为新的四叉树根节点,执行步骤六;

步骤九:保存所述叶节点信息和对应的不需分割处理的三角面片和新三角面片的信息;

步骤十:将不需分割处理的三角面片及分割处理后的新三角面片的信息变换为高度场;

步骤十一:对高度场进行渲染呈现三维场景。

下面以一个简单的例子来说明本实施例构建的过程,如图2所示,以深度值为lmax=4构建混合树的模型示意图为例,先是计算出第一深度的八叉树的父节点ot,将第一深度的八叉树的父节点ot进行八叉树细分,得到第二细分深度的8个八叉树子节点,第二细分深度中的八叉树子节点分成三个类型:能够转换成单一高度场的八叉树子节点作为四叉树根节点qt,用于存储高度场的数据值和颜色信息;不能转换成单一高度场的八叉树子节点继续作为新的八叉树的父节点ot,只存储颜色信息;不包含任何三角面片的八叉树子节点为空节点et。

将第二细分深度中的新的八叉树的父节点ot继续进行八叉树细分,得到第三细分深度的八叉树子节点。

将第二细分深度中的四叉树根节点qt进行四叉树细分,得到第三细分深度的四叉树子节点。

对于第二细分深度中的空节点et不做处理。

对第三细分深度中的所有八叉树子节点继续做判断,第三细分深度中的八叉树子节点仍然分成三个类型:能够转换成单一高度场的八叉树子节点作为四叉树根节点qt,用于存储高度场的数据值和颜色信息;不能转换成单一高度场的八叉树子节点继续作为新的八叉树的父节点ot,只存储颜色信息;不包含任何三角面片的八叉树子节点为空节点et。

判断当前细分深度,当前细分深度为3小于4,所以继续细分构建混合树,对于新的八叉树的父节点继续进行八叉树细分,得到第四细分深度的八叉树子节点,对于四叉树根节点进行四叉树细分,得到第四细分深度的四叉树子节点,对于空节点不做处理。

第三细分深度中的四叉树子节点分成空四叉树子节点和非空四叉树子节点两种类型。对于空四叉树子节点不做处理,对于非空四叉树子节点继续进行四叉树细分,得到第四细分深度的四叉树子节点。

第四细分深度已经达到最大深度值,所以,将第四细分深度中的非空的四叉树子节点作为叶节点,将高度场的信息存入到叶节点内。

在其它的实施例中,上述的最大深度值lmax优选设定为8~10,因为,当细分深度达到8~10时,三维场景基本上均能够表达成高度场;

为了保证三维场景精度和数据的完整性,在进行八叉树细分后,要对三角面片进行分割处理,当对八叉树子节点计算出关联的边界盒后,三角面片的顶点位于相邻的边界盒内的情况分成三种情况,如图3所示,情况a:三角面片的两个边均穿过相邻边界盒相交的面;情况b:三角面片的一个边穿过相邻边界盒相交的面;情况c:三角面片的三个顶点分别位于不同的八叉树子节点关联的边界盒内,并且三角面片的三个边穿过不同的相邻边界盒相交的面。

下面先进行定义,涉及分割三角面片的八叉树子节点的边界盒称为分割区域,如果三角面片的一个边的两个端点被分割在分割区域的两侧,则在分割区域内侧的称为内点,在分割区域外侧的称为外点。

分割区域和外点的相对位置确定三角面片的边是否与边界盒相交的面相交,外点必须属于三维邻接关系中26-邻接表中的一个。

将相邻边界盒的相交面定义为:

ax+by+cz+d=0,其中,a,b,c,d为已知常数,a2+b2+c2=1;

则三角面片的边与相交面的交点的计算公式为:其中,矢量是相交面的法向量,ci为三角面片的边与相交面的交点的坐标,ti为三角面片顶点坐标。

三种情况分割处理的结果,如图3所示,图3中处于a情况的三角面片分割处理后的结果如s-a所示,三角面片的两个边分别与相邻边界盒的相交面的交点为c1和c2,分割产生在不同分割区域的一个新三角面片和一个四边形面片,然后将分割的四边形面片再分成两个新三角面片。

处于b情况的三角面片分割处理后的结果如s-b所示,三角面片的一个顶点和一个边与相邻边界盒的相交面相交,将三角面片分割成两个新三角面片。

处于c情况的三角面片分割处理后的结果如s-c所示,在c情况中,参与计算的相交面将产生候选分割点,但是只有一个分割点用来正确分割,如果有光线由三角面片的顶点t1向另一个顶点t3射入,光线先通过分割区域1的面α,然后在通过分割区域3的面β,会产生两个分割点d2和d1,对(ti,di)之间的距离进行排序,以最小的距离来确定正确的分割点。因此,在分割区域1内,d2为正确的分割点,在分割区域3内,d1为正确的分割点,因此原三角面片被d2和d1以及与各相邻的边界盒的相交面相交的点分割成多个新三角面片。

三角面片分割处理后,就需要对八叉树子节点进行是否可以转换成高度场判断,八叉树子节点可以转换成高度场的判断原理是:当八叉树子节点内的新三角面片沿设置的主导轴方向上的二维投影无交集时,则该八叉树子节点能够转换为单一高度场;当八叉树子节点内的新三角面片沿设置的主导轴方向上的二维投影有交集时,则该八叉树子节点不能转换为单一高度场。

八叉树子节点转换成高度场的方法步骤如图4所示:

步骤3-1,每个边界盒内的新三角面片沿三个标准坐标轴x轴、y轴和z轴分别进行投影(ti)k,其中,k=0,1,2,0代表z轴投影,1代表x轴投影,2代表y轴投影;

步骤3-2,选择主导轴,主导轴是指相交的面积sproj(pk)小于αthrd,其中,pk=t1k∩t2k…∩tik…∩tmk,αthrd为设置的阈值参数,αthrd在[0,0.1]之间;

步骤3-3,主导轴和新三角面片在顶点着色器和像素着色器中生成高度场纹理。

进一步优选地,对高度场进行渲染的方法采用光线投射方法,光线投射方法包括:

在光线迭代时,利用相交规则进行光线与三角面片相交测试,在每个迭代位置,如果光线与三角面片相交,则输出当前交点的颜色纹理,渲染在屏幕上;如果光线与三角面片不相交,不需处理;

所述相交规则为:

den≤heightordex≤height,其中,height为光线射入的单元高度,

den是从光线射入三角面片的单元边界hen到主导轴对应的投影平面plane的距离,dex是从光线射出三角面片的单元边界hex到主导轴对应的投影平面plane的距离。

下面以实例来具体说明本实施例的内存消耗及渲染性能,测试的三维场景是:crysponza场景5、佛像6、人体7、建筑物8,这些场景具有不同的复杂性和不同的三角面片序列,如图5所示。

为方便比较,将本实施例的方法记为ssh;将现有技术中的laine与karras提出了有效的稀疏体素八叉树的方法记为svo。

其中,内存的消耗主要取决于子节点的大小,如表1所示,ssh与svo相比较,ssh消耗的内存小得多,最主要的原因是,svo使用体素表达三维场景,而体素的使用会消耗大量的内存,但是本实施例的ssh在八叉树细分到一定深度后利用高度场来表达场景,而高度场的表达则需要的内存量很小。特别是对于crysponza场景5、人体7、建筑物8,在这些三维场景中包含了许多平面元素和与标准轴对齐的墙面,这样,能够使这些场景很快的利用高度场来表达。

表1:ssh方法和svo方法的内存消耗的比较(mb)

渲染性能以每秒数百万的光线测量,是通过计算每帧在纳秒内的时间来完成的,并考虑到屏幕的分辨率,渲染性能(rp),给定时间t和屏幕分辨率w*h,公式为:

我们将本实施例与svo方法在渲染体素分辨率为40963的crysponza场景进行了比较,我们测量100帧并取平均值,本实施例的渲染性能为55.3mrays/s,而svo的渲染性能为39.2mrays/s,因此,本实施例的渲染性能较svo方法的渲染性能更强大。

本实施例的方法,先对三维场景进行八叉树细分,判断八叉树细分出的八叉树子节点能够转换成单一高度场,则将该八叉树子节点再进行四叉树细分,最后转换成高度场表示。本实施例构建了八叉树和四叉树混合树,将三维场景的信息编码在混合树中,在相同的时间内,本实施例的方法较现有技术中的稀疏体素八叉树方法能够大大的减少内存,并且,尽管本实施例的内存大大减少了,但是本实施例仍然可以高效地进行光线透射来渲染场景。

以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构变换,或直接或间接运用在其他相关的技术领域,均包括在本发明的专利保护范围内。

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