
2.2.6 小波分解
Lounsbery和DeRose在1994年首先提出小波分解方法。它的主要原理是利用小波分析的方法,将一个三维模型分解为低分辨率部分和细节部分,低分辨率部分是原始模型的一个子集,它的顶点为原始模型中对应顶点的邻域的加权平均,通常采用低通滤波实现,因此表现为低频信号;细节部分通常包含抽象的小波系数,这些系数通过高通滤波来得到,表现为高频信号。重建过程就是通过选择适量的高频信号与低频信号以合成相应精度的三维模型。这种方法简单、高效,但是它只适用于具有细分连通性的三角网格。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)。动态简化是静态简化的延续,它的很多基本操作采用的是静态简化的方法。
Hoppe(1996)提出的累进格网法通常被认为是第一个动态算法。累进格网法以边折叠和点分裂为基本操作,记录了模型简化过程中原顶点和新顶点位置以及顶点间的连接关系的变动信息,从而生成了一个由原始模型的最简化模型和一系列简化信息组成的累进格网表示模式,累进格网可以把任意拓扑网格表示为一种高效、无损且具有连续分辨率的编码。在实时绘制时,通过逆向跟踪简化信息序列,对每条简化信息执行点分裂逆操作,可以逐步恢复所删除的模型细节,实时得到原始模型的连续精度的简化模型,由此实现细节层次模型的平滑过渡,这在很大程度上克服了以往模型的平滑过渡方面的不足,可以支持不同细节的网格模型的实时生成。
在其它基于视点的动态简化方法中,David Luebke等(1996)采用八叉树将空间进行划分,当一个八叉树节点所对应空间的体积投影到屏幕上小于指定范围时,就将这个节点中的所有顶点折叠在一起,并删除所有的退化多边形。
国内研究多集中在视点相关的动态简化算法方面,特别是在大数据量地形实时可视化应用领域。
吴恩华等(2002)提出的层次可见性与层次细节地表模型相结合的快速绘制方法。王宏武等(2000)采用四叉树来构造多分辨率地形模型,并且解决了模型带来的裂缝问题。周昆(2000)则将视点无关与视点相关结合起来,生成混合多细节层次模型。赵友兵等(2002)提出的一种大规模地形的快速漫游算法,将视见体投影到平面上,根据投影三角形对分块地形数据进行类似于光栅扫描的裁减。对于规则格网地形,可以采用四叉树或二叉树等层次结构比较容易实现地形LOD模型的动态生成和显示;而对地形不规则三角网(TIN)结构,由于它本身数据结构的复杂性,使得其动态LOD地形模型建立和实时连续显示比较困难。许妙忠等(2003)提出一个基于点删除的建立连续LOD模型的方法。
总的看来,各种简化方法是相互联系的,并且每个算法都有自己的特点,并针对特殊的应用。由于二次误差度量算法提供了一种可以快速计算的误差测度,而累进格网算法则为模型的多分辨率表示打下了基础,所以这些算法在过去几年研究得比较充分。另外,完成模型的参数化并进行各种变换,以此搭建数字几何处理的框架也正成为研究热点。
2.3纹理优化
除了场景的层次细节模型技术外,纹理是另一个用来简化复杂几何体的有效方法,这对实时交互绘制系统来说是非常重要的。纹理数据是一种主要的场景数据,纹理映射过程融入了整个系统:绘制硬件、内存管理、主机到图形管道以及硬盘到纹理内存的带宽等。鉴于硬件纹理内存非常有限,兼顾纹理的存储效率和纹理映射(变换)的耗费是非常重要的。采用多幅图像压缩成单幅纹理或消除细小纹理等方法均可提高纹理内存的使用效率。
Mipmap(Multi-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 的双内核奔腾4为24.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 Output,FIFO)顶点缓存尺寸为2来渲染三角形。Hoppe提出一种算法来产生面向透明FIFO缓存的渲染顺序,从实验上展现其算法对任意的顶点缓存产生渲染顺序。然而其算法的一个主要问题,是必须事先知道缓存尺寸,对某个缓存尺寸产生的渲染顺序,当使用到一个更小尺寸的缓存时渲染格网产生的结果也许远离优化目标。Gotsman等针对此问题,提出产生一般性格网渲染顺序方法。这些顺序能在所有尺寸上保持局部相关性,因此能被用于任意尺寸FIFO缓存的渲染顺序。归功于顺序的普遍性,这些渲染顺序能被推广到累进格网。Yoon等基于多层级最小化执行局部置换从而计算局部最优化布局,来计算大数据量三角形网格的缓存布局,对于处理所有类型多边形网格带有普遍意义,在计算过程中不需要事先知道任何缓存参数和存储层级的块大小。
2.6 数据组织与动态调度
目前常用的空间数据结构为获得层次遍历以及能够实现基于物体空间和图像空间的剔除,需要将场景信息按一空间数据结构组织。空间数据结构是数据的一种表示形式,可以将几何体数据组织在三维空间中。这种数据结构可以用于判断几何体相互关系的加速查询,如裁减算法、光线跟踪以及碰撞检测等。目前空间数据结构的组织通常是采用层次结构的方法。这种结构具有嵌套和递归的特点,可以有效提高查询速度,计算复杂度通常从 提高到 。但大多空间数据结构的构造和实时更新开销都比较大,通常还需要一个预处理过程,因此较适用于静态场景。目前常用的场景数据表示方法有: BSP树(Binary Space Partitioning Trees)、四叉树、八叉树(octree)、层次包围体(Bounding Volume Hierarchies,简称BVHs)以及场景图表示等方法。
(1)BSP树
BSP树称为二叉树空间细分。BSP树通过一细分平面将一空间细分为两个区域。树的叶节点表示空间体元,分枝节点表示细分空间的分割平面。对于虚拟场景的实时绘制而言,BSP树的最大优点是可以构造较好的均衡树,尤其是当场景中对象不均衡分布时,从而减少树的深度。这样实时渲染时,可以快速遍历整个场景,加速场景绘制。然而,对于场景中的动态对象渲染需要花费昂贵的树结构更新代价,每一次动态对象渲染时将其加入到静态树结构中绘制,然后重新移去动态对象。
