APP下载

基于误差控制的多分辨率纹理无缝映射

2018-12-22高保禄窦明亮

计算机工程与设计 2018年12期
关键词:分块视点无缝

高保禄,张 冰,窦明亮

(太原理工大学 软件学院,山西 太原 030024)

0 引 言

三维地形生成与可视化问题在虚拟战场模拟、VR系统等方面的应用逐渐增多,实现大型地形场景以更快的速度、更低内存占有率进行更真实的地形环境模拟,使得地形纹理映射技术成为今后一段时间内的研究重点[1,2]。

文献[3]采用多分辨率纹理映射技术,将可能在纹理映射过程导致块间裂缝产生的各项因素进行融合计算以消除地形纹理的裂缝,更好实现模型的连续性。文献[4]提出了一种基于马尔可夫随机模型的合成算法,利用纹理分块可有效保留图像的全局信息的特性匹配纹理,遮挡与迭代共同作用来消除纹理间缝隙,实现纹理无缝映射,但对于大型场景,迭代过程过于复杂,会减慢渲染的速度。文献[5]虽然将大部分计算过程从CPU转移到GPU,将三维地形模型与过程纹理映射结合起来以消除纹理块间的裂缝,但是裂缝的处理方法被简化,最终的渲染依然存在不连续。对于文献[6]提出的纹理映射方法,最终效果比较好,但约束点需要人为指定,缺乏灵活性。

本文实现的地形纹理的无缝映射是在多分辨率纹理映射技术的基础上,通过对视点顶点的各参数进行加权计算,引入基于埃尔米特的视点运动预测,从根本上解决了纹理分块间的裂缝。此外,本文为了计算可视范围内纹理误差而降低误差,又构建了基于包围球的视锥剪及视点运动预测。最后,为了实现地形实时渲染,取得较好的视觉效果,本文对视点运动情况进行预测,并释放了不在视线范围的纹理信息。

1 基于视点运动预测的无缝纹理映射

1.1 四叉树纹理分块

对大型地形场景进行实时绘制与渲染时,首先需将整体地形纹理块划分为多个子块。本文算法在这一步骤中使用相同大小的纹理图像来表示结点,将其分为不同层次,各层次结点纹理划分块的大小不同,采用这种四叉树数据结构[7]来实现对地形纹理进行分层次分块操作。结合文献[5],不断将地形纹理块等分为4部分,直至达到分辨率要求,以使渲染的画面连续,图1为方法具体过程。

图1 地形纹理四叉树分块

1.2 地形无缝纹理映射

为实现地形纹理无缝渲染,如何正确的将纹理贴在地形块上是非常关键的。首先要将各个纹理像素地址在对象坐标系上进行映射,再以屏幕坐标系为基准进行显示。纹理映射的关键步骤在于计算纹理坐标,但由于实时绘制的速率受制于对大规模纹理地形的计算,而且不同的视点位置及视线方向所观察到的地形也极不相同,所以,根据虚拟漫游者在漫游空间所处的视点状态进行视点运动预测,是计算纹理坐标的基础。本文采用的预测方法为基于埃尔米特的视点运动预测法,将初始时刻t0时的视点位置及视线方向作为输入,利用下一时刻t1、t2分别对应的视点状态T1、T2得到t3时刻的视点运动状态T3

(1)

其次,本文判断可见范围及三角面顶点的可见性,从而剔除不可见点,采用了文献[8]内的方法。再根据视点位置及视线方向进行视锥裁剪,构造包围球,将视锥体投影到该平面。将投影面各个边距包围球球心的距离与半径作比较,若小于则该地形块可见。

采用权值法,即通过求得纹理图像各边缘距离三角面值的大小来判断三角顶点的可见性。距离大于0时三角面可见,反之不可见。接着将纹理贴片组合得到相应的纹理图像。

若直接将从不同角度收集的图片组合起来进行渲染会使纹理块间连续性差,出现画面不连续、卡顿跳跃的现象,降低漫游者的沉浸感。因此,本文采用文献[9]提出的方法,综合考虑视点到顶点的距离、顶点的像素投影位置到图像的距离以及顶点的法线与顶点到视点的向量之间夹角3个因素影响,由此,对各个参数赋予不同权值进行计算得到纹理像素信息

G′m,n=Gm,n+ω·P(x,y)

(2)

其中G(m,n)表示纹理图像的像素值,ω表示图像的像素加权值,P(x,y)代表每个点的像素值。计算如式(3),为了消除纹理间裂缝,使画面连续性更强,在运算过程中考虑了视点位置和方向的精确性

(3)

图像顶点法向量为N,其三维坐标为V(x1,y1,z1),而视点三维坐标为Ti,(dmin,dmax)限制视点的视锥范围,顶点落下投影到图像主点的最短距离为dz。

2 基于多分辨率的纹理调度

纹理调度算法有很多,相比文献[9]采用的多分辨率纹理映射技术,本文在此基础上,采用多分辨率金字塔结构[6]的纹理映射技术对数据进行分层次的压缩与存储,减少空间占有率。此外,相比现有文献对纹理映射进行的只考虑了纹理的分辨率级别和纹理分块距视点的距离计算纹理误差,通过构造包围球,根据视点位置及视线方向进行视锥裁剪,进行误差控制计算时,加入了参数包围球半径R,从而实现计算结果更为精确,实现高保真的纹理映射。然后通过预估释放算法[9,10]对不需要的纹理块释放其内存空间,减少渲染所需时间。

为加快纹理渲染速率,需避免频繁地将海量纹理块数据调入调出,因此需要根据各层次信息及视点可见范围,实现实时调度可见地形纹理。依据与视点的距离进行多分辨率纹理的渲染。

2.1 基于多分辨率金字塔的数据压缩存储

通过构建多分辨率金字塔[6]结构对海量的纹理块进行划分,并对其分层压缩存储,在加载地形时,不像传统的方法一次性将大量地形数据直接调入内存,而是实时调入当前渲染地形块相应分辨率的相应纹理块,从而达到缩短计算时间,减少内存占用率的目的。此外,分多次将当前所需纹理块实时调入可以得到较好的渲染效果,使漫游者有更好的视觉体验。图2为本文方法构建的多分辨率金字塔模型。

图2 多分辨率纹理金字塔模型

第0层为整个地形块,分辨率为r。第1层将第0层等分为4个子块,相应的分辨率变为2r。第2层又将第一层中的4个地形块等分为4个字块,分辨率都为4r。按照此规则继续向下划分,第k层是将第k-1层的所有地形块等分为4个字块形成的,分辨率也是上一层的2倍,不仅地形模型,纹理模型也需满足下一层是上一层分辨率的2倍。再结合文献[11]的方法映射纹理图像,对视点范围内的地形,根据由近及远,分辨率由高到低的对应关系进行映射。

2.2 基于包围球半径的误差控制

文献[3]根据纹理分辨率级别和纹理分块距视点的距离计算纹理误差,本文在此基础上,构造包围球,根据视点位置及视线方向较为准确地进行视锥裁剪,将包围球半径考虑进去。此外,文献[3]采用的几何误差是取平均值,考虑较为单一,本文将地形块的高程值考虑进去,更为精准。

在数据预处理阶段构造如图3所示的包围球,进而对地形块进行视锥裁剪,其中R为构造的包围球半径,O为球心,平面ABCD表示地形块。

图3 地形块包围球构造

如何选取适合的纹理分辨率是对多分辨率纹理进行映射的关键,纹理分辨率选择过高、过低都会对映射结果产生影响。通常,分辨率的选择与地形块的大小、根据视点运动判断的下一帧视线范围等因素都是相关的。因此,在多分辨率纹理映射过程中,纹理误差的存在是不可消除的。误差一般从几何误差和屏幕误差考虑。首先,计算几何误差得到ε

(4)

其中,Hi为对角线交点O的高程值,Ha、Hb、Hc、Hd分别为正方形4个端点A、B、C、D处的高程值。

根据分辨率等级及视点状态计算纹理误差

(5)

其中,k表示纹理图像的分辨率级别,e为视点,w为纹理分块的大小,ε表示几何误差,ω代表视域广角的像素个数,d表示视点到纹理分块ABCD的距离

(6)

2.3 内存释放

在很短的时间内加载大规模地形纹理数据对GPU的计算能力要求很高,为确保实时绘制地形纹理,释放纹理空间是十分关键和重要的[11],本文在使用艾尔米特插值算法对用户视点运动进行预测的基础上,采用了预估释放算法(advance estimate release,AER)[12]。将初始视点的状态数据,即其坐标与视线方向作为算法的初始输入,再将视点移动过程中所扫过区域的纹理块数据实时加载入内存,再将视点已扫过且不在视域内的纹理块移出内存。当缓冲区中的纹理块数据达到上限时,利用艾尔米特插值算法对视点的移动进行预测判断,将已经在视点范围内出现过且不在预测的下一帧视点范围内的纹理数据按照优先级先后移出内存空间,以此来实现实时纹理渲染。图4为本文算法流程。

图4 地形纹理无缝映射过程

3 实验结果和分析

本文基于通用windows平台,模拟实验采用OpenGL与Visual Studio2013完成。计算机硬件配置为CPU(Intel(R) Core(TM) i7-3770 CPU @ 3.40 GHz),显卡(AMD Radeon HD 7470),实验使用的The Puget Sound Area地形数据是Large Geometric Models Archive at Georgia Tech网站提供的。

本文实验设置共分为4步,①需要在计算机中加载纹理影像,并对其进行计算以得到相应的地形纹理数据;②使用本文中提到的各种算法对纹理数据分块处理,接着将地形高程数据和纹理数据从数据库中读出来;③主要工作是将位图文件转化为纹理贴图;④释放空闲纹理块内存占有率。

3.1 图像纹理块大小对比

本文在传统多分辨率纹理映射算法[3]的基础上,充分考虑了地形纹理像素生成过程中可能对纹理映射产生影响的多种复杂因素,提出利用艾尔米特差值算法对视点运动进行预测,将角度与距离考虑在内,与整个地形模型进行加权计算,来减少地形纹理误差。同时,在进行误差控制计算时,将根据视点位置及视线方向构成的包围球考虑在内,实现较小的纹理映射误差。图5中将不同算法在对相同1000帧纹理数据进行绘制时得到的纹理块大小进行对比展示。

图5表明,对相同大小的地形块分别采用OpenGL、传统多分辨率纹理映射算法、本文算法进行绘制,得到的纹理大小不同,即它们所需的计算量也有所差异。本文算法在对地形纹理块进行绘制时,得到的纹理块较未进行多分辨率计算的OpenGL与传统映射算法最小,从而所需的计算量也最小,由此获得了较大的帧速率,保证了渲染速度。

图5 图像纹理大小对比

3.2 帧速率对比

如表1所示,为本文算法与其它多分辨率纹理映射算法在对地形纹理进行渲染时的帧速率对比情况。本文算法一方面增加了艾尔米特插值算法对用户视点运动进行预测,在对控制误差进行计算时将包围球的半径考虑在内,消除了地形纹理块间裂缝,使得最终的画面渲染效果更加平滑;另一方面,本文采用不同于传统算法的基于金字塔的图像压缩算法来保证有较好渲染效果的同时可以具备较高的帧速率,提高地形纹理渲染速度,取得较好的视觉效果。

表1 不同算法的帧速率对比

可以看出,运用本文提出的算法具有更小的算法计算量,且利用对视点的运动轨迹进行预测与误差的控制计算实现了高保真的纹理无缝映射,虽然在一定程度上增强了CPU的负担,但是使渲染画面更加平滑,极大提升了用户体验。

4 结束语

为了消除纹理块间的裂缝,实现高保真的纹理无缝映射,在对纹理数据进行绘制时,本文将角度与距离考虑在内,与整个地形模型进行加权计算,再结合对视点运动轨迹的预测,来减少地形纹理误差。同时,对于地形纹理映射时可能产生的投影误差,考虑不同的纹理块与视点距离的远近结合分辨率的级别,以此实现纹理块间的无缝映射,从而获得更为真实的地形纹理映射。

从各项实验结果可以看出,本文算法在误差控制、消除地形纹理间裂缝、对不同分辨率的纹理块进行实时调用、大规模地形实时渲染方面相较于文中提到的其它算法更具优势,且在保证有较高的帧速率的同时,内存占用率更少,可以以更快的速度实现地形纹理的实时无缝渲染。

猜你喜欢

分块视点无缝
让农民工培训与就业“无缝对接”
钢结构工程分块滑移安装施工方法探讨
关于4×4分块矩阵的逆矩阵*
专家视点
中小学数学教学无缝衔接的对策
母乳到辅食,如何无缝衔接
懒交互模式下散乱不规则分块引导的目标跟踪*
AS SMOOTH AS YOU LIKE – HELPING YOU MAKE TRANSFERS SEAMLESSLY
让你每天一元钱,物超所值——《今日视点—2014精萃》序
两会视点