三维 GIS 中符号化水面的设计与实现

孙寅乐,宋关福,曾志明,冯振华

( 1. 中国科学院地理科学与资源研究所,北京 100101; 2. 中国科学院大学,北京 100039;

论文来源:《增刊测绘与空间地理信息》 2013年8月 第36卷

摘要:提出了在三维 GIS 系统中以符号化的方式解决水面可视化问题的方案,基于超图 GIS 平台软件进行了实现。结果证明,该方案能够和二维 GIS 数据紧密结合,提高了三维 GIS 中水面场景的构建效率,提升了可视化效果。

关键词: 地理信息系统,场景,三维符号,水面可视化

Design and Implementation of Symbolic Water with 3D GIS

SUN Yin le,SONG Guan - fu,ZENG Zhi ming,FENG Zhen hua

( 1. Institute of Geographic Sciences and Natural Resources Research,CAS Beijing 100101,China; 2. University of Chinese Academy of Sciences,Beijing 100039,China; 3. SuperMap Software Co. ,Ltd. ,Beijing 100015,China)

Abstract: This paper presents a solution focusing on the visualization of water with 3D fill symbols in the 3D GIS system,based on the SuperMap GIS platform software. Our results prove that this solution can closely integrate with 2D GIS data,and improve the efficiency of constructing water in the scene and the visualization effect.

Key words: GIS; scene; 3D symbol; water visualization

0 引 言

  随着三维 GIS 的发展,人们对于其可视化能力提出了更高的要求。在一些应用中,人们不但要求场景中的物体位置准确,而且要求其逼真、好看。水面效果是影响场景可视化质量的关键要素,能大大加强 GIS 可视化的用户体验,使用户更容易理解和接受三维 GIS 所展示的空间信息。

  但目前已知的大多数 GIS 系统,对水面的表现力有限,通常只是用一张贴在矢量面上的静态纹理或 GIF 图片来表现水面,而丧失了对水面流动、起伏、倒影等效果的表现力。少数从虚拟现实软件演化来的 GIS 系统虽然能够表现水面效果,但要依赖于特定的插件把 GIS 矢量数据转化为 osg、3ds 等模型数据,不但丢失了部分地理空间信息,而且造成了实际空间数据可显示数据的不一致,通过这种方式制作三维场景费时费力。

  三维地图符号是来源于二维地图符号的表现形式,三维地图符号更形象、直观,也更容易理解。将水面特效与三维符号相结合后,用户只需要为传统的二维矢量面指定水面符号,就可以制作出具有水面效果的三维场景。

1 理论与关键技术

  1. 1 三维符号理论

  三维符号是二维符号的拓展,能够使使用者更好的识别和认知空间信息[1]。根据符号化对象的空间特性不同,三维符号可分为三维实体模型符号、三维线状模型符号、三维 面 状 模 型 符 号、过程模型符号和三维注记符号[2]。水面的三维符号属于三维面状符号。传统的地图符号设计原则是依据 Bertin 视觉参量体系建立起来的[3]。

  随着 数 字 制 图 技 术 的 发 展 和 三 维 地 图 的 出 现,MacEachren,Kraak,Jobst 等人又相继对视觉参量进行了补充,增加了动态视觉变量和深度视觉变量[4 - 6]。Neubauer在 2009 年向 OGC 递交的 3D - Symbology Encoding 讨论稿中提出以材质作为面填充符号的参量,其所提出的材质包含了镜面光、环境光、发射光及阴影透明度等属性[7]。

  本文所提出的水面符号是在材质视觉参量基础上进行的扩展,将水面特征参数,包括水波大小、反射亮度、水波速度等引入到材质参量中。

  1. 2 水面的可视化技术

  水面具有起伏、流动、反射、折射等效果。在计算机图形学中,水面的波动通常采用两种思路实现,第一种是把水的表面剖分成均匀的网格,然后通过 GPU 中的顶点着色器控制每个网格顶点按照特定规律运动。第二种是通过控制 GPU 中的片元着色器,使得水面的凹凸纹理随时间平移来实现的[8]。在三维 GIS 中的数据量大,所以渲染性能尤为关键。而第二种思路中由于不用计算大量的顶点位置,其渲染性能更高,所以本文所实现的系统中采用了第二种思路。

  水面的反射的基本实现思路是纹理渲染。在每一帧中对场景进行两次渲染,第一次渲染时,将场景中水面对象设置为不可见,然后把当前相机移动到关于反射面对称的位置,渲染场景到一张纹理上; 第二次渲染时将整个场景设为可见,把刚才得到的反射纹理作为水面的纹理进行渲染。当相机距水面位置较远时,其反射效果很不显著,为了提高渲染性能,此时不进行第一次渲染,而采用一张静态纹理来代表反射面。

  折射效果通常用来表现水底情况。本文采用多重纹理方式实现折射效果,采用第一层纹理存储水面表面法向量,第二层纹理表现反射物体,第三层纹理存储水底折射物体。当光到达材质的交界面时,一部分光被反射,而另一部分将发生折射,这个现象称为菲涅尔效应。菲涅尔效应混合了反射和折射,使得物体更真实。理论物理中的菲涅尔公式是很复杂的,而在实时图形学中只要在最终效果上满足人们的视觉感受就可以了。因此本文采用了以下简化公式来计算水面的折射和反射混合参数,然后根据该参数混合折射和反射纹理的颜色作为水面像元的颜色。

  factor = bias + scale* ( 1. 0 + I·N) power

  color = factor * 反射光颜色 + ( f - factor) * 折 射 光颜色

  其中,bias 为偏移系数,scale 为缩放系数,power 为Fresnel 指数,I 为入射光方向向量,N 为法向量。

2 系统设计与实现

  水面的符号化表达分为水面符号库管理和符号可视化两个模块。符号库管理模块负责进行水面符号的创建、修改、复制等。而符号可视化模块则负责把二维矢量面数据在场景中渲染为水面效果。

  2. 1 三维符号库的设计

  三维符号库的设计是符号库管理的核心。由于水面特效需要用到材质参数、着色器参数、着色器代码、纹理等多种不同种类的参数,所以水面符号的设计比传统三维填充符号更为复杂。本文所实现的系统中符号库对象设计如图 1 所示。

图 1 填充符号对象结构
Fig. 1 Object structure of fillsymbol

  水面符号作为一种填充符号( FillSymbol) ,而填充符号可能是有很多层叠加在一起形成的,每一层是一个 FillSymbolBase,材质填充对象( MaterialSymFill) 是其中一种FillSymbolBase。MaterialSymFill 中包含了一个材质对象( Material) ,材质对象中包含了渲染此材质时所需要设置的渲染状态参数,同时还包含了渲染时需要用到的 GPU程序名称以及用到的纹理名称。MaterialSymFill 中还含有两个字典,其 key 值与 Material 对象中的 GPU 程序名称和纹理名称对应,value 值包含的分别是纹理图片数据和GPU 程序对象。符号存储时,MaterialSymFill 中的 Material对象和 GPU 程序对象采用 XML 字符串方式存储,而纹理图片数据采用二进制流方式存储。整个 FillSymbol 对象最终转化为流,既可以存储在符号库文件中,也可以通过空间数据引擎存储在数据库中。

  2. 2 符号的可视化

  矢量面的水符号可视化过程如图 2 所示。

图 2 符号可视化流程
Fig. 2 Visual process of symbol

  系统底层基于一个渲染循环,能够不断渲染在渲染队列中的可渲染对象。可渲染对象包含了物体的几何形态、方向、纹理、材质等信息。符号可视化的过程可简化为三个阶段: 把数据构建成图形管线能够渲染的几何对象,把符号参数解析为图形管线可识别的渲染状态,然后把以上两部分组合为可渲染对象放到渲染队列中进行渲染。

  2. 3 应用实例

  本文所述水面符号已在超图 GIS 平台软件中作为三维填充符号的一部分实现。系统采用标准 C + + 语言在windows 环境下开发。

  目前三维水面符号具有新建、复制、动态修改等功能。图 3 是系统提供的符号编辑器,使得用户能够在可视化的环境下方便的创建自己的水面符号,并调整水面效果。能够调整的参数有水波频率、水波大小、反射亮度、水波方向和水波速度。用户可以通过指定矢量面图层上的风格 ID 来设置场景中的面图层显示为水面效果。图 4是场景中的水面效果。

图 3 水面符号编辑器
Fig. 3 Water effect editor

  

图 4 带有水面的三维场景
Fig. 4 Water in 3D scene

3 结束语

  本文提出了以符号化的方式来解决三维 GIS 系统中水面可视化问题的方案,阐述了符号化水面的关键技术及优势,并基于超图 GIS 平台软件进行了实现。符号化水面技术已经作为超图软件产品的一部分应用于多个实际工程项目中,受到了用户的一致好评。实践证明该技术能够大大缩短用户搭建水面场景的时间,能够很好的利用现有的二维空间矢量数据,能够大幅度提升场景的逼真程度。

参考文献:

  [1] 蒋秉川,夏青,岳利群,等. 基于三维地图视觉变量理论的三维符号设计[J]. 测绘科学,2009,34( 6) : 159 - 161.

  [2] 许敏,刘宁,丛凤波. 二维符号过程和建模方法研究[J].海洋测绘,2006,26( 2) : 45 - 48.

  [3] Bertin. Graphics and Graphic Information Processing[M].Berlin: Walterde Gruyter,1981.

  [4] DiBiase D,MacEachren A,Krygier J,et al. Animation and the role design in scientific visualization[J]. Cartography and Geographic Information Science

  [5] Kraak M. Interactive modeling environment for three - dimensional maps: Functionality and interface issues[M]. Visualization in modern cartography. Oxford: Pergamon,1994: 269 - 285.

  [6] Jobst M,Kyprianidis J E and Doller J. Mechanisms on Graphical Core Variables in the Design of Cartographic 3D City Presentations[M]. Geospatial Vision. Berlin Springer,2008: 45-49.

  [7] OGC. 09 - 042. 3D - Symbology Encoding Discussion Draft[S]. United States: OGC,2009.

  [8] Tessendorf,J. Simulating ocean water[J]. ACM SIGGRAPH 2001 course notes No. 47 Simulating Nature: Realistic and Interactive Techniques.

  [9] Akenine - M ller,Eric Haines. Real - Time Rendering,2nd ed[M]. Massachusetts: A K Peters,2002.

作者简介: 孙寅乐( 1986 - ) ,男,北京人,中国科学院大学地图学与地理信息系统专业硕士研究生,主要研究方向为三维地理信息系统。