3DGIS(3D GIS)

研究OpenGL,DirectX 3D,GPU和GIS

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
 

对于仅有几百个多边形和几十兆的低分辨率纹理简单场景,在现阶段一般配置的计算机上也很容易达到实时仿真的目标。然而,随着场景规模的增大,大规模虚拟场景中往往包含上万个多边形,甚至多达几百万个多边形和几百兆的高分辨率纹理数据。同时,系统不仅要对几何数据进行坐标变换与纹理加载等处理,还要在此基础上,为增进仿真效果,对场景进行光照处理、反走样处理等操作。此时系统负担会越来越重,从而导致绘制速度降低,实时仿真的目标将很难达到。通过增强计算机的配置可以在一定程度上解决此问题,然而为了能在大多数计算机上进行仿真场景的演示,并且数据量还在不断的增大,光通过硬件手段略显不足,所以需要通过改进三维模型数据结构与渲染算法,加强软硬件两方面配合以更加完整的解决大数据量三维场景的实时绘制问题。下面将主要从场景可见性剔除、多分辨率模型简化、基于图像与GPU的加速绘制以及模型数据组织等方面介绍场景加速绘制的基本原理与方法。

2.1 可见性剔除

图形流水线的主要任务是将给定照相机参数、三维物体、光源、照明模式以及纹理等条件组成的三维场景绘制成一幅屏幕上显示的二维图像。从过程上可以划分为以下几个阶段:应用程序阶段、几何处理阶段及像素处理阶段。(1)应用程序阶段部分主要处理场景数据的管理、几何数据库遍历、用户的交互响应、可见性裁减以及碰撞检测等;最后将需要绘制的几何要素输入给下一阶段。(2)几何处理阶段主要负责多边形和顶点操作,如三角形顶点变换、光照计算、投影以及屏幕映射等。(3) 像素处理阶段针对的是单个像素操作,这部分主要包括:深度缓冲区测试、反混淆计算、纹理映射等。

    从三角形顶点变换这个角度可以发现,利用可见性剔除,从模型坐标转换阶段之前剔除对最终图像渲染没有贡献的场景部分,然后将剩余场景发送到绘制管道,能有效降低场景的复杂程度和图形流水线的负担,是提高场景绘制效率的一种非常有效的方法。裁减方法与结果也适用于程序的其它部分,如碰撞检测时对不可见部分进行不精确的计算等。
   
 

可见性算法最近受到很大的关注,是因为三维模型库的尺寸不断增大,使得采用一般渲染方法来实现实时显示几乎不可能。

可见性剔除算法瞄准于快速的剔除不可见的几何元素。为达到这个目标,仅仅需要绘制可见的集合,哪怕这个集合只对屏幕显示贡献了一个像素。大多数可见性剔除算法首先计算可见集合的一种近似,然后使用Z缓冲算法来获得准确的渲染图像。

      可见性剔除来源于两个传统的策略:背面剔除与视见体剔除。背面剔除算法瞄准于避免绘制背离观察者的面,而视见体剔除算法瞄准避免绘制处于视见体之外的几何元素。此外,遮挡剔除技术瞄准于避免绘制被场景中其它物体遮挡的物体。图2.2表示了这三种遮挡剔除技术。

 

因为对每一个多边形进行遮挡计算将是十分耗时与缓慢的,几乎所有的算法会对场景设置层次关系,其最低层级往往是单独物体的包围盒子,而对整个层级执行从上至下的遮挡计算。

许多算法中使用了一个重要的概念——保守集合。保守集合包括所有可见集合和一些额外的非可见物体。在这种方法下,可能判定一些被遮挡的物体为可见的,但不可能判定可见的物体为被遮挡的物体。通过建立可见集合的保守估计,能定义一个潜在可见集合(Potentially Visible Set,简称PVS),其包括所有可见的物体和一些被遮挡的物体。

遮挡剔除算法可从以下角度分类。

点对区域的分类。这类算法的区别是可见集合的计算是就到当前视点位置而言,还是执行批量的计算对给定区域的任何位置都有效而言。从区域考虑的算法对一系列的帧均有效,其消耗成本在时间上被分摊。更重要的是,这类算法有预测功能,其对于网络应用或从硬盘到内存的预先获取是重要的。使用从邻近单元的可见信息,能预先取得几何元素。然而,这类算法常常要求一个长的预处理过程,很大的存储消耗,并且不能象基于视点位置算法那样处理移动物体。

图像空间对物空间。物空间算法直接对场景中的各物体以及组成物体的多边形之间进行相互比较,以最终判别出那些面可见。像空间算法则是在投影平面上逐点判断各像素所对应的面,以确定哪些面可见。Z-Buffer算法是典型的像空间算法。

单元及入口对一般场景。单元及入口算法一般探讨建筑物内部结构或类似模型的特点。这些场景通过一些入口(比如,门,窗等物体)来自然的组织单元(房间)。此类技术以空PVS集合开始,然后通过一系列入口增加可见物体,而面向一般场景的方法是首先假定所有物体是可见的,然后逐个消除隐藏的物体(Daniel Cohen2003

静态方法对动态方法。

静态方法的特点是场景的绘制与可见物体的个数成比,而不是场景的所有物体。另外,此类方法通常在预处理阶段建立场景的层次结构,通常采用BSPtree,八叉树等等,在绘制时通过在给定的视点下,按从上到下、从近到远的方式遍历场景树,直到以某个节点为根的子树的所有节点不可见为止。这类算法中差别主要是采用的空间数据结构和确定不可见部分的方法,即搜索策略(孙红梅,2001)。

     动态方法。随着虚拟现实技术的发展,用户对虚拟场景的操作不仅仅限于漫游,而是能与场景进行交互,可以控制场景中的动态实体,以产生更高层次的真实感。但在静态场景比较有效的可见性判定方法,却无法适合动态场景。由于建立场景数据的空间组织结构的时间远大于绘制时间,所以组织结构树只能在预处理阶段完成,而静态场景中所有的物体都是静止的,相对位置不会发生变化,只是视点在改变,所以场景的组织结构不变,只要通过遍历遮挡树,获得不同视点下场景中各物体间的遮挡关系即可。但在动态场景中,由于物体的运动,观察者与场景的交互,场景对应的遮挡树也随着改变。如果动态生成遮挡树,代价很大,甚至可能会超过整个场景的绘制时间。所以适合动态场景需要的可见性算法依旧是研究难点。

2.2 多分辨率模型简化技术

多边形简化技术为处理复杂、大数据量模型提供了一种解决途径。简化掉模型中微小,不重要的部分和远端的场景,同时保证场景内容不会严重失真(David P. Luebke,2001)。其用途在于能产生场景中物体的细节层次模型,来提高整个场景的渲染速度;缩减模型文件尺寸,适合网络发布和下载;自动处理技术还可以降低人工编辑大数据量三维场景的作业强度。

由于网格模型大部分由三角面片表示,而且即使原始模型是多边形网格,也可以对其进行三角化,因此网格模型简化的本质是:在尽可能保持原始模型特征的情况下最大限度地减少原始模型的三角形和顶点的数目。它通常包括两个原则:顶点最少原则,即在给定误差上界的情况下,使得简化模型的顶点数最少;误差最小原则,给定简化棋型的顶点个数,使得简化模型与原始模型之间误差最小(Lindstrom,2000)。

误差度量是用来量化输入模型和输出模型的差异,它指导模型简化,使得化简后的误差在用户允许误差范围之内。误差测度包括外观相似度量和几何误差度量(Garland, M,1998)。外观相似性度量用来计算原始模型与简化模型投影到视平面的差异,这符合人们的视觉习惯,但由于它需要从各个视点进行采样,计算量太大。因此在实际应用中通常用几何相似度量来代替。一个经常用到的几何误差度量方法是测量两个模型之间的最大欧氏距离偏差和平均偏差。

      简化算法可分类为:静态、动态和视点相关的算法。由于在预处理时可生成细节层次模型(Level of Detail, 简称LOD),所以这类算法被称作静态简化。动态简化是指实时生成连续的细节层次模型,其优势是较好的粒度。而视点相关算法可看成动态算法的一种延伸,它通过视觉依赖准则来选择最适当的模型。早期的视觉相关算法从地形应用中发展起来,在视点附近使用精细地形模型,在远处使用较低细节模型代替,同时在两者间提供平滑过渡。

需要说明的是,网格模型简化算法,还可根据是否能保持拓扑结构,是否能控制误差等方面来进行分类。下面将从静态简化到动态简化这个顺序分别介绍各种算法,因为这种顺序也体现了简化算法发展的过程。

2.2.1 顶点聚类

顶点聚类算法开始时为每个顶点分配一个重要度参数。依附较大面积表面或较高曲率的顶点有更高的重要度。然后,覆盖一个三维格网到模型上,聚类每个单元格的所有顶点到最重要的一个顶点。再根据原始网格的拓扑关系对这些新顶点进行三角化,就得到简化模型。这是一种通用的不保持拓扑结构的简化算法,它可以处理任意拓扑类型的网格模型,且速度较快,对于n个顶点来说,时间复杂度是。由于这个方法是将模型的包围盒均匀分割,所以无法保持那些大于分割频率的特征。同时新顶点的生成只是采取简单的加权平均,而没有较好的误差控制,因此这种方法生成模型的质量不高(J. Rossignac,1993)。

浮动单元聚类算法则引入了一个不同的聚类方法。该算法对顶点依照重要度排序后,产生以最重要顶点为圆心,用户指定尺寸为半径的圆。落在此圆内的顶点聚类到圆心,并过滤掉退化的三角形。接下来的步骤就是在剩余的顶点中找到最重要顶点,重复上述过程。算法的速度也是比较快速的,由于对顶点排序,时间复杂度为(Low,1997)。

2.2.2 简化封套

     简化封套方法能保证全局和局部的拓扑性。封套由两个偏移面组成,外层为原始格网顶点沿法向量偏移组成,内层相反。封套创建好后,迭代的移除三角形或顶点,并重三角化形成的空洞。在保真和保持拓扑性方面,此方法是较好的一个选择,但方法的实现却较复杂(Cohen,1996)

 

2.2.3 保持外观简化

保持外观简化算法从简化封套方法推进一步,提出了严格保真的定义。首先定义影响简化效果的三个属性:表面位置、颜色和曲率。通过在纹理及法向量贴图中存储颜色和曲率,来减弱顶点位置的影响。通过限定纹理和法向量偏移误差,来完成边折叠(J. Cohen,1998)此方法对图形硬件提出了纹理映射的要求。

2.2.4 图像驱动的简化

图像驱动的简化方法构思独特。当其它算法利用几何规则,或再增加考虑颜色、法向量等因素评价简化效果时,由Lindstrom Turk2000)提出的这种方法中,使用一种纯粹的基于图像的机制。此方法比较边收缩后渲染得到的三维场景图像与原始模型图像,并累加象元亮度的中误差。此方法为平衡几何与光影属性提供了一种自然、直接的思路。其不足是计算代价太高,影响了算法速度。

2.2.5 几何元素删除方法

1992年,Schroeder提出了顶点删除的网格简化方法以后,基于边折叠、基于三角形删除等几何元素删除的方法被相继提出。这些方法的共同特点是以几何元素的删除来实现模型的简化。即根据原模型的几何拓扑信息,在保持一定的几何误差的前提下,删除对模型几何特征影响相对较小的几何元素(点、边、面) 。下面将分别介绍顶点删除法、边折叠法、基于三角形删除方法等。

Schroeder等提出的基于顶点删除的方法是,在三角型网格中,若一顶点与它周围三角面片可以被认为是共面的(这可以通过设定点到平面距离的阈值来判断),且这一点的删除不会带来拓扑结构的改变,那么就可将这一点删除,同时所有与该顶点相连的面均被从原始模型中删除,然后对其邻域重新三角化,以填补由于这一点被删除所带来的空洞,继续这种操作直到三角网格中无满足上述条件的顶点为止。这种方法的好处是,由于简化模型的顶点是原始模型的一个子集,能方便的重新利用顶点处的法向量和纹理坐标。但在保真方面有所欠缺,因为无法满足移动某些顶点的要求。

    折叠简化算法指,在每一次简化操作中以边作为被删除的基本几何元素,当选择一条边折叠后,将其一顶点的几何属性映射到另一顶点,并计算这另一顶点的理想位置,在进行多次的选择性边折叠后,原始的三角形集合中有很多三角形会退化,这样原始模型就可以被简化到想要的程度了。

边折叠的关键是折叠的次序以及边折叠后新顶点的位置。Hoppe1993年采用能量优化的方式来确定折叠次序和新顶点的位置,能量优化计算复杂,所需时间较长,但是生成的简化模型的效果却是相当好的。GarlandHeckbert1997年提出了一种基于二次误差度量(Quadric Error Metric,简称QEM)的简化算法。二次误差度量简化算法是基于顶点到平面的距离平方和,该算法速度快,以相对较小的存储代价,提供了一个简单方法来监督简化过程,产生的简化结果也拥有较高的保真度。其不足在于当待收缩的顶点对数目大时,时间复杂度接近Hoppe将法向量、颜色以及纹理等信息加入到二次误差度量算法中,然后采用称作翼边(wedge)的数据结构来加以实现,也得到了较好的效果LindstromTurk1998年用简化前后体积和面积的变化作为误差测度,也得到了与QEM类似的数学表达。这种方法在计算边折叠队列和新顶点的位置时只需要网格模型面的连接信息和顶点的位置,所以此算法占用内存量小,运算速度快。

    三角形折叠简化方法指,在简化时三角面作为被删除的基本元素。它是边折叠算法的延续,一次三角形折叠可以删除四个三角形、两个顶点。Hamann1994)将三角形的权重定义为等角度与曲率的乘积,然后对网格模型上的所有三角形按权重进行排序,并依次折叠,这样细长且低曲率的面首先被删除
 

 

2.2.6 小波分解

LounsberyDeRose1994年首先提出小波分解方法。它的主要原理是利用小波分析的方法,将一个三维模型分解为低分辨率部分和细节部分,低分辨率部分是原始模型的一个子集,它的顶点为原始模型中对应顶点的邻域的加权平均,通常采用低通滤波实现,因此表现为低频信号;细节部分通常包含抽象的小波系数,这些系数通过高通滤波来得到,表现为高频信号。重建过程就是通过选择适量的高频信号与低频信号以合成相应精度的三维模型。这种方法简单、高效,但是它只适用于具有细分连通性的三角网格。1995年,Lounsbery等接着改进了上述算法使其能够处理任意拓扑的网格。


 

2.5 (a)表示原始模型格网,图2.5 (b)表示第一次简化操作后低分辨率部分,后者格网中的顶点都是由前者顶点的加权平均计算出来。这种方法本质上实现了一个低通滤波器A。细节部分对应于图2.5 (a)中顶点的加权差值,被称为小波系数。这个加权求差构成了一个高通滤波器B。这个分析过程可以继续下去,最后,原始模型格网可以表示为最粗层次的表示(图2.5 (c))加上所有层次的细节。合成是分析的逆过程,从最粗层次格网开始,通过为引入每条边的中点把每个三角形细化为4 个三角形,然后根据小波系数扰动所有的顶点。

2.2.7 球面调和变换

周昆等(2002)提出了一个强壮的,能处理任意网格的几何信号处理框架。在该框架下,网格的所有属性都被当作定义在其表面上的几何信号。通过全局球面参数化算法,原始几何信号被转换为球面信号,该球面信号被自适应采样为具有和原始球面信号相同频谱的球面信号。然后,球面调和分析和快速球面调和变换被用来分析这些球面信号。与小波分解类似,此方法可选择适量的高频信号与低频信号以合成相应精度的三维模型。

2.2.8 动态简化方法

动态简化的基本思想是:在模型的化简过程中,可以实时地得到具有所需要的分辨率的近似模型。每个模型的简化程度由模型之外的因素决定,例如离视点的距离。动态简化一般是通过一些简单的局部的几何变换来实现,从而生成具有连续的不同分辨率的近似模型(何晖光2002)动态简化是静态简化的延续,它的很多基本操作采用的是静态简化的方法。

Hoppe1996)提出的累进格网法通常被认为是第一个动态算法。累进格网法以边折叠和点分裂为基本操作,记录了模型简化过程中原顶点和新顶点位置以及顶点间的连接关系的变动信息,从而生成了一个由原始模型的最简化模型和一系列简化信息组成的累进格网表示模式,累进格网可以把任意拓扑网格表示为一种高效、无损且具有连续分辨率的编码。在实时绘制时,通过逆向跟踪简化信息序列,对每条简化信息执行点分裂逆操作,可以逐步恢复所删除的模型细节,实时得到原始模型的连续精度的简化模型,由此实现细节层次模型的平滑过渡,这在很大程度上克服了以往模型的平滑过渡方面的不足,可以支持不同细节的网格模型的实时生成。

     在其它基于视点的动态简化方法中,David Luebke等(1996)采用八叉树将空间进行划分,当一个八叉树节点所对应空间的体积投影到屏幕上小于指定范围时,就将这个节点中的所有顶点折叠在一起,并删除所有的退化多边形。
 

国内研究多集中在视点相关的动态简化算法方面,特别是在大数据量地形实时可视化应用领域。

吴恩华等(2002)提出的层次可见性与层次细节地表模型相结合的快速绘制方法。王宏武等(2000)采用四叉树来构造多分辨率地形模型,并且解决了模型带来的裂缝问题。周昆(2000)则将视点无关与视点相关结合起来,生成混合多细节层次模型。赵友兵等(2002)提出的一种大规模地形的快速漫游算法,将视见体投影到平面上,根据投影三角形对分块地形数据进行类似于光栅扫描的裁减。对于规则格网地形,可以采用四叉树或二叉树等层次结构比较容易实现地形LOD模型的动态生成和显示;而对地形不规则三角网(TIN)结构,由于它本身数据结构的复杂性,使得其动态LOD地形模型建立和实时连续显示比较困难。许妙忠等(2003)提出一个基于点删除的建立连续LOD模型的方法。

总的看来,各种简化方法是相互联系的,并且每个算法都有自己的特点,并针对特殊的应用。由于二次误差度量算法提供了一种可以快速计算的误差测度,而累进格网算法则为模型的多分辨率表示打下了基础,所以这些算法在过去几年研究得比较充分。另外,完成模型的参数化并进行各种变换,以此搭建数字几何处理的框架也正成为研究热点。

2.3纹理优化

除了场景的层次细节模型技术外,纹理是另一个用来简化复杂几何体的有效方法,这对实时交互绘制系统来说是非常重要的。纹理数据是一种主要的场景数据,纹理映射过程融入了整个系统:绘制硬件、内存管理、主机到图形管道以及硬盘到纹理内存的带宽等。鉴于硬件纹理内存非常有限,兼顾纹理的存储效率和纹理映射(变换)的耗费是非常重要的。采用多幅图像压缩成单幅纹理或消除细小纹理等方法均可提高纹理内存的使用效率。

        MipmapMulti-image pyramid Map,简称Mipmap)方法相当于纹理LOD。高分辨率的Mipmap图像用于接近观察者的物体,当物体逐渐远离观察者时,使用低分辨率的图像。虽然内存消耗很大,但Mipmap方法可以提高场景渲染的质量。处理过程中,它将原始高分辨率纹理缩减为低分辨率的小纹理,缩减的方式是将高度和宽度减半,并用减半后的值作为小纹理的尺度,如图2-6所示。

 

针对Mipmap内存消耗很大的问题,可采用剪切纹理(Clipmap)方法减少大纹理使用时存在的矛盾。当使用剪切纹理时,Mipmap金字塔中的最高分辨率纹理被剪裁成较小的尺寸,因为较高分辨率的纹理通常都不会使用其整体。

 这就意味着较低分辨率的纹理覆盖了剪切纹理的整个区域,而较高分辨率的纹理则覆盖较其应有的小得多的区域。当环绕纹理移动时,只有剪切纹理金字塔的被剪切的那部分即通常被称为栈的部分移动,因为较低层次的纹理己经完全载入并覆盖剪切纹理的整个区域。

剪切纹理还提供了从磁盘进行纹理分页载入,这样不需要内存一直保存着所有的纹理数据。为进行分页调度,剪切纹理在主存使用一个图像缓存,这个图像缓存总是保持同一大小,并且随视点在剪切纹理上的移动而更新。将要被使用的纹理需要在剪切纹理使用前进行预滤波,并在磁盘上进行分割。

2.4 基于图像的绘制与加速技术

2.4.1 基于图像的绘制和建模技术

基于图像的绘制和建模技术(Image-based Rendering,IBR)近年来发展非常迅速,成为不同于传统的基于三维几何的场景绘制技术的另一种有效的方法。这种方法的基本思想是使用一系列图像采样代替场景的部分或全部几何信息来绘制场景。

通常采用的技术方案是利用照相机采集的离散图像或摄像机采集的连续视频作为基础数据,经过图像处理生成全景图像并对其进行空间关联建立起的具有空间操纵能力的虚拟环境。构建一个使用户具有身临其境的沉浸感、完善的交互能力的信息环境,传统的方法是利用计算机图形技术,对真实环境进行抽象从而建立其三维几何模型,实时漫游过程中根据观察者的位置、光照、消隐信息由计算机绘制相应的视景。基于计算机图形学的虚拟现实系统其局限性主要是复杂空间的建模过程相当烦琐。基于实景图像构造的虚拟信息空间避开了复杂的场景建模与绘制,直接利用照相机或摄像机拍摄得到的实景图像来构造虚拟信息空间(孙立峰,钟力,1999)。

全景图 (Panorama)模型是代表性的基于图像的虚拟现实模型,传统的全景图模型中整个场景由一幅首尾相连的全景照片组成,而现有的某些虚拟漫游系统里面可以在照片上面指定热点,用于跳转到其他的全景图模型中。

基于图像的虚拟现实建模与渲染技术具有以下优势::基于图像的虚拟现实模型通常比三维模型文件体积小巧很多,能有效减少模型的下载时间;基于图像的虚拟现实模型图像可以从照片获取,能够完整的保留场景真实的模样;更重要的是在实际应用中电脑美工在图像上比在三维模型上可以更方便地进行特殊视觉效果的制作,降低模型制作的成本。

但是基于图像的虚拟现实模型也存在如下的几个缺点:1) 模型中集成多种媒体信息后可能导致模型加载速度变慢;2) 缺乏像三维模型一样从无到有构建场景的能力;3) 难以提供类似场景中三维模型移动变换等功能(***常宇,鲁东明,2003)。

2.4.2 基于图像的加速技术

在基于三维几何的大数据量场景绘制中,可以采用图像加速技术。基于图像的加速技术基于这样一个事实:即相对于观察者,场景某些部分在一段时间内在一定的分辨率范围内是不变的。动态图像加速技术就是利用这种相关性,先动态绘制某些区域的几何图形并存储生成的图像,在以后帧中则根据观察者的当前位置判定该区域图像是否有效,如误差允许,则以该图像代替该区域的几何图形进行绘制,最后以己有的某些区域的图像和另外一些区域的几何绘制共同生成整个虚拟场景。该方法又可分为基于纹理映射与图像合成加速方法(孙红梅,2001)。

    基于纹理映射的图像加速方法早已存在。为加强图形画面的真实性而又尽量减少图形生成的负担,通常采用做Billboad的技术来生成一些比较复杂的物体,如树木等。Billboad是一个带纹理的半透明长方形,在观察者运动时始终面对观察者。早期的Billboad物体影像是预先得到的,且只适合于具有对称性的物体。后来此方法被扩展,实时动态地生成任意形状物体的图形画面并存储起来。只要误差允许,就以该影像映射到相应面上作为当前帧对该物体的近似绘制结果,映射面无须随观察者的移动而转动。为了最大程度地减轻图形生成的负担,算法以二叉树建立整个虚拟场景的层次结构。在实时绘制时,层次遍历二叉树,决定每个结点存储的某区域影像是否仍有效,如有效则以该结点存储的影像生成该区域的当前图像,否则继续遍历该结点的前后子树,并以运动参数及误差精度判定是否需要生成该结点当前图形画面并存储成影像。

基于图像合成的加速技术是另一种动态图像加速技术。该方法根据观察者与物体的相对运动以及误差精度赋予每个物体不同的绘制速率。算法中不同速率绘制生成的物体图形画面最终将根据深度值比较结果生成整个虚拟场景的图形画面。

2.5  基于GPU绘制加速

商用显卡上的图形处理单元(Graphics Processing Unit, 简称GPU)已经演化成一个十分灵活、强大的处理器,拥有可编程性、较高精度等能力。作一个浮点计算能力的比较,3.0 GHz 的双内核奔腾424.6 GFLOPS 1GFLOPS等于每秒10亿次浮点运算),而NVIDIA GeForceFX 7800达到了165 GFLOPS。图形处理单元除了有编程语言支持外,还拥有较高的精度。32位浮点数通过图形流水线,对于大多数应用来说是足够高的。其应用领域也是十分广泛的,从游戏中的物理模拟到传统的计算科学,其目标是使得不昂贵的强大的GPUs作为一种协处理器来增强应用。所以说, 有图形处理单元的支持,也给大数据量场景优化处理带来了机会。由于新硬件出现的时间不长,并多在光照、阴影等效果增强和通用计算等方面有研究,而在场景优化处理与几何模型简化方面的研究工作还不多等。

相对于CPU来说,GPU最初的设计目的相对单一,即专为图形程序的处理流程而设计。图形生成中所涉及的矩阵计算和像素级的处理都可以由GPU来单独完成,而不需要占用CPU的计算时间。而且GPU有着多条图形处理流水线可以并行处理图形程序,在很大程度上提高了图形生成的效率。

虽然GPU可以加快图形程序的运行速度,但是这些早期的GPU产品的图形处理流水线是固定的,也就是说只能完成那些固定的操作而没有任何灵活性可言,这大大限制了GPU计算性能的充分发挥。自从相应的GPU产品的推出(例如nVidia公司的Geforce2, Geforce3, Geforce4系列和ATI公司的8500系列), GPU可以在顶点坐标变换和像素操作的过程中由程序来进行一定程度的控制,从而使得GPU具有了一定的可编程性。随后,GPU的用途越来越广泛。很多原来必须要CPU来完成的计算过程可以移植到GPU中进行计算。

随着计算机图形显卡硬件性能的不断增强,面向硬件的批LOD(aggregated LOD)一类算法也应运而生,这类方法既结合了传统的层次细节技术又能充分利用当代显卡高带宽、高多边形填充率的特点,使得加速绘制技术有了很大的提高。

优化几何表示的组织结构能够节省大量的GPU上的变换和光照计算,并且降低CPU和图形硬件之间带宽的占用。几何数据的有效组织进行加速可以被应用到大部分多边形或者三角形表示的场景。采用三角形条带(triangles strips)以及三角形扇(triangle fans)的几何表示方法能加速三维场景渲染。

多边形模型均可以转换成三角形集合。相互邻接的三角形共享一条公共边和两个顶点。如果三角形被各自独立地送至图形硬件进行绘制,共享的顶点数据就需要执行的重复冗余的运算,并且相同的数据还被传送至少两次以上。降低这些额外开销的一个方法就是把彼此相邻的三角形构建成三角带。首先,把第一个三角形的三个顶点放至条带之中,然后将其余的三角形顶点依照相邻顺序依次放至条带中,每个三角形只需要加入一个顶点。缺省条件下,在条带中彼此相邻的顶点都构成了连接两个相邻三角形的公共边。三角形扇可以看作是三角带的一种退化形式,只是其中所有的三角形都共享一个公共顶点。以三角带或者三角形扇形式存储在顶点缓存(vertex buffer)中通常被称为广义三角形网格(李胜,2004)。

      三角形条带技术,是以先进先出(First Input First OutputFIFO)顶点缓存尺寸为2来渲染三角形。Hoppe提出一种算法来产生面向透明FIFO缓存的渲染顺序,从实验上展现其算法对任意的顶点缓存产生渲染顺序。然而其算法的一个主要问题,是必须事先知道缓存尺寸,对某个缓存尺寸产生的渲染顺序,当使用到一个更小尺寸的缓存时渲染格网产生的结果也许远离优化目标。Gotsman等针对此问题,提出产生一般性格网渲染顺序方法。这些顺序能在所有尺寸上保持局部相关性,因此能被用于任意尺寸FIFO缓存的渲染顺序。归功于顺序的普遍性,这些渲染顺序能被推广到累进格网。Yoon等基于多层级最小化执行局部置换从而计算局部最优化布局,来计算大数据量三角形网格的缓存布局,对于处理所有类型多边形网格带有普遍意义,在计算过程中不需要事先知道任何缓存参数和存储层级的块大小。
 

2.6  数据组织与动态调度

目前常用的空间数据结构为获得层次遍历以及能够实现基于物体空间和图像空间的剔除,需要将场景信息按一空间数据结构组织。空间数据结构是数据的一种表示形式,可以将几何体数据组织在三维空间中。这种数据结构可以用于判断几何体相互关系的加速查询,如裁减算法、光线跟踪以及碰撞检测等。目前空间数据结构的组织通常是采用层次结构的方法。这种结构具有嵌套和递归的特点,可以有效提高查询速度,计算复杂度通常从 提高到 。但大多空间数据结构的构造和实时更新开销都比较大,通常还需要一个预处理过程,因此较适用于静态场景。目前常用的场景数据表示方法有: BSP树(Binary Space Partitioning Trees)、四叉树、八叉树(octree)、层次包围体(Bounding Volume Hierarchies,简称BVHs)以及场景图表示等方法。

(1)BSP树

BSP树称为二叉树空间细分。BSP树通过一细分平面将一空间细分为两个区域。树的叶节点表示空间体元,分枝节点表示细分空间的分割平面。对于虚拟场景的实时绘制而言,BSP树的最大优点是可以构造较好的均衡树,尤其是当场景中对象不均衡分布时,从而减少树的深度。这样实时渲染时,可以快速遍历整个场景,加速场景绘制。然而,对于场景中的动态对象渲染需要花费昂贵的树结构更新代价,每一次动态对象渲染时将其加入到静态树结构中绘制,然后重新移去动态对象。

 

(2) 八叉树

 八叉树采用类似于二维的四叉树结构对场景进行空间细分,整个三维空间被细分成小的立方体。这些立方体通过采用递归表的方式组织成层次结构,以便对每个区域所包含的对象进行细分直到满足所需的分辨率为止。场景的八叉树层次结构在预处理阶段生成,实时绘制时依据视点变化对树结构进行自适应的修改。树结构也可用于对场景进行视域体裁减计算和其它可见性计算以及虚拟场景的碰撞检测等。对场景进行八叉树体细分能很好的支持建筑场景空间几何剖分。图2.8表示使用八叉树细分地形模型,其中黄色线条表示空间划分,绿色代表地形模型。如图2.8(a)所示,以地形模型中相隔最远的两顶点之间距离作为外包立方体的边长,使用一次剖分时,将立方体平均分成上下、前后、左右共8快,使用二次剖分时,对包含有地形模型的每一小块接着分割,将产生细分方格,依此类推,使用三次剖分时,会将整个空间分隔成更加细致的方格,如图2.8(b)所示。


 

 (3)层次包围体

包围体就是包含一组物体的空间体,要比所包含的几何物体形状简单的多。包围体形式主要有:球体、椭圆体、轴对齐包围盒(Axis-Aligned Bounding Box,简称AABB)、有向包围盒(Oriented Bounding Box, 简称OBB)等,可用于场景的可见性计算和碰撞检测,从而加速场景的处理。

 〔4)场景图表示

 BSP树和八叉树都使用某种类型的树作为基本的数据结构,均以层次形式来保存几何物体;与树结构表示相反,场景图(Scene Graph)表示方法企图用包围体将场景中的对象包围起来,场景图是一有向的、简单的连接图。三维场景除了模型的几何数据,还有模型变换、层次细节、纹理材质和光源等信息。

基于场景图的图形编程接口库,提供了各个细节上的场景管理与操作能力。例如,如何交互,如何进行可见性计算(剔除),如何对当前绘制模型进行有效的简化。

对于大数据量场景来说,不可能将全部的数据一次读入到内存中,而必须是根据场景的变换在外存、内存之间动态调度。根据漫游者观察视点的逐步变化,把将要落入到可视区域内、同时内存中暂时没有的数据被读入到内存中,同时由于内存容量有限,必须将暂时不用的数据所占用的内存空间释放掉。

 

在漫游过程之中,随着视点的移动,场景中活动结点所表示的数据块首先进行可见性判定,如果该地形块位于视域之内且可见,并且该结点所包含的网格数据不在内存之中,则把对该网格数据块的请求加入到数据块网格载入请求缓冲区,等待负责I/O的线程进行处理。而那些虽然为活动结点,但是却不可见的地形块数据,却并不需要载入内存,又由于每次装载的数据都是代表某一块的批数据,因此可以减小数据调度粒度,节省系统资源的耗费。整个运行时刻采用双线程的运行机制,主线程负责场景LOD的计算,活动结点的可见性判定,并且将最终需要绘制的模型数据送至GPU去绘制;而I/O线程则专门负责数据请求的处理和数据的读取和丢弃。在两个线程之间采用互斥机制的以达到同步运行,协同工作的目的。

2.7 本章小结

影响一帧渲染时间的因素包括:清屏时间、几何特性处理(光照、纹理效果等)、几何图形的视图变换、一帧中的像素点数(分辨率乘以深度复杂度)以及视频刷新率等。这些因素所消耗的硬件资源与要求的处理时间都围绕着一个核心要素,那就是传递给图形系统的数据量。因此,大多数的三维场景加速方法都围绕降低场景模型复杂性和减少光栅化过程中的被处理像素的数量来展开。另外一些方法围绕着数据结构的重组织与渲染算法优化展开,以提高处理数据的效率。

可见性剔除包括背面剔除、视见体剔除、遮挡剔除,利用这些方法,从模型坐标转换阶段之前剔除对最终图像渲染没有贡献的场景部分,然后将剩余场景发送到绘制管道,能有效降低场景的复杂程度和图形流水线的负担,是提高场景绘制效率的一种非常有效的方法。

多边形简化技术为处理大数据量场景提供了一种解决途径。简化掉场景中不重要和远端的部分,同时保证视觉显示不会失真。能够产生场景中物体的细节层次模型,来提高整个场景的渲染速度。

除了场景的层次细节模型技术外,纹理是另一个用来简化复杂几何体的有效方法。相当于纹理LODMipmap方法可以提高场景渲染的质量,采用剪切纹理(Clipmap)方法,能缓解内存消耗过大的问题。采用多幅图像压缩成单幅纹理或消除细小纹理等方法可提高纹理内存的使用效率。所以,这些纹理优化技术对实时交互绘制系统来说是非常重要的。

使用一系列图像采样代替场景的部分或全部几何信息来绘制场景,是基于图像的绘制和建模技术的基本思想,优势是比三维模型文件体积小,并能完整保留场景真实模样,当然也存在着三维模型操作困难等缺点。而基于图像加速的方法即加强了图形画面的真实性而又能减少图形生成的负担,是一种有效的三维几何大数据量场景绘制方法。

图形处理单元已经演化成一个十分灵活、强大的处理器,拥有可编程性、较高精度等能力。GPU的出现,降低了CPU负担,可以加快图形程序的运行速度,另外,针对GPU的模型数据优化表示方法,如三角形条带与缓存布局等技术,能进一步加速三维场景渲染。

采用树结构或场景图等表示法,将场景信息按空间数据结构组织,可用于场景的可见性计算和碰撞检测,从而加速场景的处理。数据调度策略与数据组织方法之间有着密切的联系。随着原始数据无法被一次性装入RAM内存问题的出现,针对外存数据的高效调度算法,可以控制内外存数据调度,减少无效数据页面的载入并相应减少无效场景部分的绘制。

虽然本章各节分别介绍了多种场景加速绘制的方法,但问题与方法的解决是互相联系的,比如,首先采用场景简化技术和纹理映射技术,将极大地简化场景的复杂性,从而十分有利于提高可见性计算技术的效率。

下面第三、四、五章中,将重点研究二次误差度量简化方法、视点相关的实时有选择性细化算法以及GPU支持下的帧间连续性信息使用与渲染顺序优化等内容,从数据量大小、布局与渲染计算等多方面着手,降低流水线负担,增进处理效率。并且,这些方法之间是相互关联的,静态简化所采用的受约束二次误差度量方法正是视点相关的实时动态简化算法的基本边折叠操作,而采用面向GPU的数据缓存布局配合动态简化算法,能进一步提升大数据量场景绘制的速度。

第六章中,将以这些研究结果为依托,自动生成三维模型简化版本,并优化场景中模型的数据布局与改进渲染算法,以提高场景绘制速度,最后实现奥林匹克公园场景的网络发布与浏览。

posted on 2007-11-10 10:26  武汉侯涛  阅读(3658)  评论(3编辑  收藏  举报