一种基于GPU的三维数字地形实时编辑方法
2016-12-07王俊勇詹勇
王俊勇,詹勇
(重庆市勘测院,重庆 400020)
一种基于GPU的三维数字地形实时编辑方法
王俊勇∗,詹勇
(重庆市勘测院,重庆 400020)
虚拟地理环境下的规划设计需要较高的数字地形编辑支持,通过GPU编程方法,不仅适用于规则格网和三角网数字地形的编辑,还支持倾斜摄影模型、城市精细模型的编辑。本方法支持地形实时编辑、编辑结果分屏对比、叠加矢量数据等,显著提高了大规模实时地形编辑效率。研究成果已成功应用于道路设计、方案规划等实际项目,取得良好效果。
GPU;地形编辑;投影纹理映射;夹持投影;数字地形
1 引 言
数字地形编辑是指对地形数据的获取、增加、修改和删除操作,在3DGIS环境下的实际运用中,数字地形编辑功能通常是指挖洞、塌陷和贴纹理。挖洞是对地形表面进行删除操作,在地形中挖出一块或多块不规则区域,使其该区域不遮挡地形表面下面的物体,该功能在地下管线、道路设计、方案规划等实践中被大量运用;塌陷是对地形高程数据的修改,给定一块或多块区域中,对此区域内的地形高程数据按指定的规则进行修改,一般有拉高高程、拉低高程、全部整平、部分整平等;贴纹理是对地形表面影像进行叠加处理,在指定区域内绘制地表纹理,常见的如各种矢量数据叠加等。
传统地形编辑是直接对地形数据进行操作,修改地形格网和影像达到地形编辑的目的,效果较好,处理后可以直接获取修改后的地形数据,但也存在着以下一些问题:
(1)大量复杂的地形编辑造成计算时间和模型处理时间长,特别是具有多层次细节的地形,计算数据量更大。
(2)对地形编辑区域编辑或恢复的实时性不能有较好的保障,重新刷新地形编辑区域部分的地形瓦片,需要重新计算或恢复数据,不能即时呈现地形编辑效果,存在延迟和卡顿现象,严重影响了程序性能。
(3)贴纹理要对地形影像进行融合处理,增加了系统开销。
为解决上述问题,本文采用基于GPU的地形编辑处理方法,将地形编辑区域模型渲染成纹理,把纹理投影到地形上,按事先制定好的纹理通道规则,在顶点着色程序中对地形挖洞、塌陷和贴纹理处理。
本文方法可实时编辑和恢复地形,不存在延迟和卡顿现象,并减少了算法复杂性。本方法不适合地形编辑后对地形数据的持久化,但可通过保存挖洞、塌陷和贴纹理对象的状态,来达到地形编辑后的持久化效果。本方法提升了程序性能和灵活性,同时也提高了用户体验。
2 GPU地形编辑的基本原理
GPU是显卡的核心,具有高并行结构,采用流式并行计算模式,可对每个数据进行独立的并行计算,所以GPU在处理图形数据和复杂算法方面拥有比CPU更高的效率。
GPU Shader Language为高级语言,使用Shader Language编写的程序称之为着色程序(Shader Program)。图1为GPU可编程流水线。
顶点处理器是专门处理多边形顶点的。顶点着色程序从GPU前端模块(寄存器)中提取图元信息,并完成顶点坐标空间转换、法向量空间转换、光照计算等操作,最后将计算好的数据传送到指定寄存器中。
几何处理器是专门用来处理场景中的几何图形。它可以根据顶点的信息来批量处理几何图形,对Vertex附近的数据进行函数处理,快速创造出新的多边形。
片元处理器是读取单一pixel属性,输出包含颜色和Z信息的片元。片元着色程序进行每个片元的颜色计算,将处理后的数据送光栅操作模块,最后输出颜色值的就是该片元最终显示的颜色。
本文将地形编辑区域处理成三维模型,通过RTT相机(Render to texture)渲染到纹理,在GPU阶段根据投影纹理映射进行相应的编码,实现挖洞、塌陷和贴纹理效果。使用顶点处理器更改顶点高程实现塌陷效果,使用片元处理器实现挖洞以及贴纹理效果。
3 GPU地形编辑技术
3.1创建地形编辑模型和RTT相机
根据功能关系,将地形编辑区域生成三维模型并分类为:挖洞模型、塌陷模型和贴纹理模型,这些模型尽可能的共享渲染属性和减少渲染列表,以提高渲染效率,由于要将这三种模型最终渲染到纹理,因此要用颜色值区别这三种模型,并且要注意这三种模型的叠加层次关系。本文通过颜色R分量(小于1/255)来区分它们:
地形编辑类型表 表1
上表中模型叠加层次也可以不通过高度分层,通过更改渲染次序和渲染列表达到相同的效果。
创建一个俯视正交投影RTT相机,并创建一个纹理绑定到RTT相机,纹理大小可根据显卡性能适当设置,最好为2的n次方,笔者在本文中设置的是8 192 ×8 192。
3.2夹持投影
所谓夹持投影是指将RTT相机夹持到适当的位置并设置适当的投影范围,其目的是让渲染出的纹理垂直映射到主相机视线范围地形或模型上。RTT相机位置不正确会导致纹理投影产生偏离,投影范围过小导致主相机中的地形某部分没有被投影,投影范围过大导致边缘锯齿现象。RTT相机有三个主要参数:投影方式、视图矩阵和投影矩阵,在本文中采用的是正交垂直投影方式,视图矩阵和投影矩阵通过夹持投影矩阵计算。
在图2中,用当前主相机视锥体a与投影模型包围盒b求交,得到一个被裁割的锥体c,根据锥体c构建一个长方体d,此长方体d即为RTT相机的俯视正交视景体,通过长方体d求得RTT相机视图矩阵和投影矩阵。长方体d的顶面越大,RTT相机渲染到纹理后的图像分辨率越低越模糊,反之分辨率越高越清晰。投影图像分辨率公式如下:
图2 夹持投影
其中:δ表示分辨率;T表示绑定到RTT相机的纹理大小;S表示RTT相机投影范围大小
由于RTT纹理大小在最初就是固定了的,投影范围决定了分辨率大小。分辨率越大挖洞边缘越光滑、塌陷边缘越精确;分辨率越小挖洞边缘越粗糙、塌陷边缘锯齿越大,因此在保证长方体d覆盖主相机视景体情况下要尽可能地减少长方体d的顶面大小,可采取如下措施:
(1)主相机远剪切面不能过大,可以进行自动计算相机远近剪切面,使相机能恰到好处的包括视锥体里的物体。
(2)设置一个水平距离,用来处理主相机实现水平或接近水平时的最远处,在求交体中剪切掉这个水平面,该值通过地球几何关系可求得,公式如下:
其中:L表示水平距离;r表示WGS-84椭球参数短半径6 356 752.314 2;h表示当前相机海拔高度;f表示可变常数,可以根据地形的起伏度而设置。
3.3渲染到纹理
渲染到纹理,顾名思义就是把渲染目标从帧缓存变成一个纹理。这样就可以把一个场景渲染后再进行后处理,做出各种特效。在利用GPU做通用计算的时候程序也是通过RTT和GPU交换数据的。一般渲染到纹理有三步:创建要渲染的纹理对象;将纹理渲染到对象上;使用生成的纹理,该步骤由系统自动完成。
3.4投影纹理映射
投影纹理映射(Projective Texture Mapping)用于映射一个纹理到物体上,不需要在应用程序中指定顶点纹理坐标。实际上,投影纹理映射中使用的纹理坐标是在顶点着色程序中通过视点矩阵和投影矩阵计算得到的,通常也被称作投影纹理坐标(Coordinates in projective space)。投影纹理映射有两大优点:其一,将纹理与空间顶点进行实时对应,不需要预先在建模软件中生成纹理坐标;其二,可以有效避免因插值出来的内部纹理坐标分布不均衡导致的纹理扭曲现象。
投影纹理映射最重要的一点就是确定纹理坐标,投影纹理坐标的求得,与纹理本身没有关系,而是由投影机的位置、角度以及3D模型的顶点坐标所决定。
纹理投影矩阵公式如下:
TVP=B×P×V×W(3)
其中:TVP表示纹理投影矩阵;B表示偏移矩阵;P表示RTT投影矩阵;V表示RTT视图矩阵;W表示模型矩阵。
在式中P和V都在RTT的投影矩阵和视图矩阵都在夹持投影阶段计算得到;模型矩阵W在常用的图形API中都可获得;偏移矩阵是为了投影顶点坐标归一化到[0,1]空间,先缩小1/2,然后再平移1/2。由于P×V把点转化到投影空间,规格化的投影空间是[-1, 1],而纹理坐标是[0,1],因此需要一个矩阵将投影顶点坐标归一化到[0,1]空间,该矩阵就是偏移矩阵。
在应用程序中计算出纹理投影矩阵信息后,再传递到着色程序中使用,在着色器程序中,使用该矩阵将顶点坐标转换为纹理投影坐标,公式为:
其中:TVPC表示纹理投影坐标;TVP表示纹理投影矩阵;v表示顶点坐标;
将纹理投影坐标传递给纹理映射函数(GLSL使用texture2DProj,Cg使用tex2DProj),从而将纹理实时和空间顶点对应起来,得到一个采样点,在着色器中对采样点P处理得到地形编辑效果,如表2所示,效果如图3所示。
GPU着色器阶段地形编辑 表2
3.5高程获取
在本文所采取的地形编辑方法中,并未更改地形瓦片模型和原始DEM数据,当用户在地形编辑范围内获取高程时,则还是获取的原始数据,并未受地形挖洞和塌陷的影响。这种情况下,要进行两步分析:
第一步,从DEM或地形瓦片获取高程,这一步可设置获取的分辨率,采取缓存措施提高查询速度;
第二步,判断是否在地形编辑范围内以及所对应的地形编辑类型,当在地形范围内并且为挖洞模型,此时未获取高程;当在地形范围内并且为塌陷模型,此时高程为塌陷方式指定的高程。在实际运用中,可能存在大量的地形编辑模型,这一步可通过垂直射线与地形编辑模型求交,通过建立各种空间索引加快求交方法。
3.6贴纹理
当地形塌陷模型和地形贴纹理模型有重合时,由于塌陷模型压盖在贴纹理模型之上,导致渲染到纹理时,重合部分丢失了贴纹理模型部分,使地形塌陷的重合部分没有贴纹理模型的纹理,这是本方法的最大缺陷。可以通过两种方法来解决:
(1)构建两个RTT相机,一个相机用来渲染挖洞模型和塌陷模型,另一个相机用来渲染贴纹理模型,两个相机设置相同的视图矩阵和投影矩阵等信息。在着色器程序中分别对两个相机渲染出的纹理进行分析,在顶点着色器中,使用前一个相机渲染出的纹理进行判断是否塌陷,在片元着色器中,先使用前一个相机渲染出的纹理进行判断是否挖洞,再用后一个相机渲染出的纹理与地形纹理进行融合。
(2)将塌陷模型更改为挖洞模型,避免塌陷区域和贴纹理区域重合,在3DGIS应用中,大多数情况下可将塌陷部分转为挖洞实现。
4 实现与应用
本文方法成功应用到笔者团队开发的集景山地城市仿真平台上,进行了道路设计、方案设计等各种地理设计和城市设计中。
(1)重庆钓鱼嘴片区道路整合及优化设计:
重庆钓鱼嘴片区项目共完成三维地形模型建设12 km2,完成三维规划道路长度50.2 km,三维设计道路长度19.4 km,立交模型4个,三维轻轨模型长度7.7 km,三维铁路模型长度12 km,挖洞对象31 653个。在该项目实现了规划路网三维模型实时模拟和交互式调整;交叉口动态调高,实时调整交叉口相关道路竖向动态优化;进行二维管线规划成果快速三维模拟以及土石方实时计算与动态平衡等功能,这都涉及对地形的开挖编辑和高程获取的基本要求,程序反应快速,达到了预期目的,如图4所示。
图4 重庆钓鱼嘴片区路网二维规划与三维即时模拟
(2)基于地理设计的三维建筑规划方案设计
地理设计强调整个设计过程都在人的交互式参与下进行,通过整合多源设计数据和周边环境情况为设计提供全面支撑。实时调整、动态构建是地理设计与传统设计手段最大的区别,也是最重要的优势。通常要求地形编辑能即时响应,而且要对现状建筑进行即时塌陷或挖掉,并且要对设计成果进行分屏对比。基于GPU编程模拟的地形编辑效果,在现状与方案分屏对比时,只需将地形编辑模型置于方案分屏相机下即可。该应用结合Esri CityEngine工具软件和集景三维数字城市引擎进行了方法实现与系统开发,将设计师的思想形成多个备选方案的选择,通过规则引擎快速形成方案三维形态,在大范围三维地理空间环境下展开交互式的设计,如图5所示。
图5 三维建筑规划方案设计
5 结论与展望
本文在重庆市勘测院的集景平台上实现,并展示了基于GPU数字地形编辑在道路设计中的应用结果。在规划道路优化设计中,对大量的挖洞模型进行开启或关闭,程序可实时响应,不存在明显的停顿和滞后感;在基于地理设计的三维建筑规划方案设计中,对现实与方案、方案与方案之间的分屏对比,程序能实时响应,不需要对数据进行额外的处理。
实践表明,本文方法在进行大规模地形编辑模型下,充分发挥了GPU的性能优势,实时地形编辑模式提高了程序响应速度同时也提高了用户体验性。并不受限于规则格网的数字地形,可在不规则地形、倾斜摄影、城市精细模型上达到同样的效果。基于GPU的即时地形编辑方法具有高性能、速度快、用户体验好等特点。
[1] Edward Angle.交互式计算机图形学[M].北京:电子工业出版社,2009.
[2] Tomas Akenine-Moller,EricHaines.实时计算机图形学[M].北京:北京大学出版社,2004.
[3] 李界光,唐丽玉,陈崇成.面向景观规划设计的数字地形交互式编辑技术[J].地理信息科学学报,2012(4).
[4] 吴恩华,柳有权.基于图形处理器(GPU)的通用计算[J].计算机辅助设计与图形学学报,2004(5).
[5] 石松,陈崇成,王钦敏等.地物仿真及交互可视化编辑工具的设计与实现[J].系统仿真学报,2006,18(3).
A Method of 3D Digital Terrain Real-Time Editing Based on GPU
Wang Junyong,Zhan Yong
(Chongqing Survey Institute,Chongqing 400020,China)
The planning and design in the virtual geographic environment requires better support of the digital terrain editing.Based on GPU programming,this article introduces a method that not only be suitable for regular grid and triangulation digital terrain editing,but also supports tilt photography model and fine city model editing.The method supports real-time terrain editing,split-screen comparison of terrain editing results,vector data overlaying,and significantly improves the efficiency of large-scale real-time terrain editing.The research results have been successfully applied in real projects of road design and program planning,and obtain good results.
GPU;terrain editing;projective texture mapping;clamping projection;digital terrain
1672-8262(2016)01-93-05
P208.1
A
∗2016—01—15
王俊勇(1978—),男,助理工程师,主要从事三维地理信息系统开发及应用研究。
重庆市社会民生科技创新专项课题(cstc2015shmszx40007)