基于着色模型实时构造的海洋流场动态流线可视化方法研究
2020-03-12嵇晓峰张丰王中一杜震洪刘仁义
嵇晓峰,张丰*,王中一,杜震洪,刘仁义
(1.浙江大学浙江省资源与环境信息系统重点实验室,浙江杭州310028;2.浙江大学地理信息科学研究所,浙江 杭州310027)
洋流是指大洋表层海水常年大规模规律的海流运动,对海洋中物理、化学、生物、地质过程以及气候、天气的变化有重要影响。分析和掌握全球洋流时空变化规律可为海洋经济、军事等活动提供信息支撑。海洋流场科学计算可视化作为一种视觉表达手段和有效的数据分析方法,可直观地从海量数据中提取信息,对于揭示全球洋流动态变化规律具有重要意义。
基于稀疏表达思想的流线可视化方法对流场局部细节的中等程度抽象,可以获得良好的视觉感知,描述流体的时序变化,成为当前流场可视化的研究热点[1]。TURK 等[2]提出了一种基于图像的二维流线生成方法,但效率较低;为了得到均匀分布的流线,JOBARD 等[3]设置流线距离表征流线密度,优化了流线的空间分布;LI 等[4]通过流线相似度判断规则,获得了能够表征流场特征的均匀分布流线;为解决三维流场中的遮挡问题,LI 等[5]进一步提出了基于图像的流线种子点放置策略,提高流线可视化的视觉清晰度。在提升大规模场景下的流线可视化效率方面,聂俊岚等[6]提出了一种与视点相关的多分辨率流场可视化算法,优化了可视化效果的同时也提升了渲染效率;为避免数值积分,贾志强[7]通过非结构网格与流线求交点的方式有效提升了流线生成速度;樊宇等[8]提出了基于几何着色器的流线可视化方法,利用GPU的并行计算能力有效提升了流线绘制效率。
上述方法重点关注静态可视化范畴下的流线空间分布与渲染效率的优化,而静态可视化方法无法直观表达流线流向、流速等信息,其表达的生动性、形象性与丰富性受到限制。因此,诸多学者开展了流线动态可视化的研究。何欣[9]用圆锥绘制流线头部以表示流线流向,并不断更新流线位置,产生流线流动效果;胡自和等[10]采用示踪小球在流线上流动的方式呈现流线运动的效果;为进一步提升动画效果,黄麒林[11]在流线上周期性绘制并更新具有更丰富信息的箭头图元等来产生图元流动的效果,直观体现流线流向信息。但上述流线可视化方法对箭头等图元设置要求较高,易出现视觉遮挡现象,且图元位置的更新频率会影响可视化效率,出现动画不连续等问题。
针对静态流线可视化方法表达信息受限,动态流线可视化方法易出现遮挡、效率较低的现状,本文提出了一种基于着色模型实时构造的动态流线可视化方法。该方法基于三维纹理进行流线属性信息存储,满足海量流线属性信息存储需求;进一步,设计了面向动态流线的着色模型和流线实时构造机制,通过流线本身的动态可视化,有效改善了传统的基于图元位置更新方法带来的计算开销和遮挡问题。流线颜色、透明度等映射属性的设置直观,体现流场流向、强度分布等特征,增强了可视化效果的生动性与层次感。与现有方法相比,该方法提升了流场动态可视化的渲染效率与表达效果,有助于研究人员探究洋流时空动态变化规律及其传递、表达过程。
1 基于着色模型实时构造的动态流线可视化算法
1.1 相似距离引导的流线提取方法
目前,比较通用的流场数据格式包括Tecplot、PLOT3D、VTK、NetCDF、HDF、CGNS 等。其中,NetCDF 格式具有存储空间小、读取数据快、自描述和读取方式灵活等优点,在大气科学、水文和海洋等诸多领域作为数据存储标准[12]。因此,本实验的全球洋流数据以NetCDF 格式进行存储。
首先,采用基于相似性的流线布置方法进行流线提取。该方法最早由CHEN 等[13]提出,通过流线相似距离表征流线相似度,相似距离的计算公式为
其中,dsim(p,si,sj)表示流线si的采样点p与流线sj的相似距离,α为形状系数,p0,p1,…,pm-1为以p为中心的窗口内流线si上的m个均匀采样点,q为流线sj上离p最近的采样点,q0,q1,…,qm-1为以q为中心的窗口内流线sj上的m个均匀采样点。
基于相似性的流线布置方法,首先产生足够多的种子点,采用自适应四阶龙格-库塔方法进行流线积分,计算新生成流线上的点与已有流线的相似距离,如相似距离小于自定义阈值dsep或流线到达流场边界,则停止流线增长;为避免产生闭合流线,该算法还进行自相似性检查,要求p和q的距离必须小于更小的阈值dselfsep。当流线停止增长后,将其加入已有流线队列,重复上述过程即可生成均匀分布的流线。
最后,顾及数据存储及可视化效率的需求,对通过上述步骤生成的流线进行节点重采样。为在保持流线基本特征的同时较大程度地压缩数据量,每间隔2个节点采样1次,获得具有位置、速度等属性信息的流线节点。
1.2 基于三维纹理的流线属性信息存储结构
通过上一节的流线提取方法获得了包含空间位置、速度、顶点ID、所在流线ID 等属性信息的海量流线节点。考虑到本文的动态流线可视化方法是基于着色器实现的,如何将包含多种属性的流线节点数据从用户应用程序中转移到着色器程序是该算法的关键。
三维纹理因其三维结构特征具有较大的存储能力,能够满足多种属性信息的存储需求且具有可扩展性。因此,本文设计了一种基于三维纹理的流线属性信息存储结构。在用户应用程序阶段将流线属性信息存入三维纹理,然后将三维纹理添加到一致变量,着色器程序通过与之相关联的纹理采样器实现三维纹理的调用。
具体地,将顶点ID 存储在顶点属性变量中,将其他属性存储在三维纹理中。三维纹理中顶点按流线流向顺序存储,三维纹理的深度由参数的数量以及内部格式的设置确定。如图1所示,同一个流线节点的不同参数放置在纹理相同位置的不同深度。例如,图1中的顶点P1有9个参数。属性集合P1.A123 放置在像素(0,0)处,深度为0;属性集合P1.A456放置在深度为1的像素(0,0)处,依此类推。
图1 基于三维纹理的流线属性信息存储结构Fig.1 The streamline attribute information storage structure based on threedimensional texture
在几何着色器阶段,通过三维纹理采样器获得三维纹理,进一步,建立流线节点和三维纹理单元之间的映射。几何着色器中流线节点的属性信息在三维纹理中的存储位置的计算公式为
其中,indexV表示流线节点V的顶点索引,index Attr表示属性索引,x(indexV,index Attr)、y(indexV,index Attr)和z(indexV,index Attr)则分别表示该流线第indexV个节点的第index Attr个属性在三维纹理中的存储位置坐标,widthT表示三维纹理的宽度。
1.3 面向动态流线可视化的着色模型
为了实现动态流线的可视化效果,当前动态可视化方法多采用图元位置更新方式,计算开销较大且易出现视觉遮挡现象。而建立海洋流场数据属性与光学属性的映射可实现信息的有效表达[14]。着色模型是将数值化的物理量(如速度、时间等)转化成可被人观察的视觉元素(如颜色、透明度等)的重要手段[15-16]。
本文设计了一种面向动态流线的着色模型。该模型通过制定表征流速变化的帧索引,建立流场属性信息与透明度、颜色等光学属性的映射关系,从而实现对全球海洋流场流速、流向、强弱等特征的细致刻画。
首先,为了描述流场流速的动态变化,设计了表征速率的帧索引。流线抽象为粒子从种子点出发沿流线运动的轨迹,由于流速的变化,单位时间步长内粒子走过的距离不相等,因此,粒子到达流线各个节点所需的时间不同。其中,相邻流线节点间粒子运动的速度近似为两节点所在位置的瞬时速度的平均值。通过为各流线节点设置表征粒子到达该节点时间的帧索引可较好反映流线上流速的动态变化,其递推公式为
其中,indexj为第j节点的索引,indexj-1为第j-1节点的索引,s为相邻节点的距离,vj-1为第j-1节点的瞬时速度,vj为第j节点的瞬时速度。
然后,设计了一种“时间-透明度”“流速-颜色”映射关系,进一步增强流场的可视化质量。若把流线想象成粒子在流场中的运动轨迹,通过透明度的变化让人们更容易理解粒子穿越后痕迹逐渐变淡直至消失的动态过程,本文将透明度、颜色作为流速、时间映射的可视化属性,速度越快,轨迹的透明度越低;痕迹停留时间越长,透明度越高。本文设计的流线透明度映射函数为
其中,alphaj表示第j个流线节点的透明度,currentindex表征流线头部当前所在的节点位置索引。参数q的范围为0~1,表示当前节点相对于前一节点不透明度减弱的比例,通过控制参数q调节透明度的时间敏感性。
此外,为进一步直观地表征流场的强弱特征,按照速度大小对颜色进行分级划分。首先,建立一张RGB 颜色映射表,然后依据具体可视化要求将颜色映射表划分为若干等级,第i个等级的颜色表示为colormap[i-1]。那么,可制定以下速度与颜色的映射公式:
其中,colorj表示第j个流线节点的颜色值,vj表示第j个流线节点的瞬时速度,vmin表示所有节点中速度的最小值,vmax表示所有节点中速度的最大值,n表示颜色分级层数。
图2刻画了流线的构型过程,可以明显看出,透明度设置直观表达了流向信息;颜色设置,突出了流场的强弱特征。例如,流场中速度大的一般是特征点比较密集的区域,设置较大的不透明度,有助于提高流场内部特征的表达,同时,对于速度较小、流场较为平缓的区域,设置较小的不透明度,以减少对流场特征信息的判读。
图2 面向动态流线可视化的着色模型Fig.2 The shading model for dynamic streamline visualization
1.4 基于着色器的流线实时构造机制
为实现流线节点着色状态的更新,设计了基于一致变量回调的流线实时构造机制。
首先,建立一个一致变量并定义该变量的回调函数,用于获取并更新当前系统时间,根据每帧渲染时间差并结合面向动态流线的着色模型,计算每帧更新状态信息,从而实现流线的动画效果。流线实时构造过程如下:
(1)新建一致变量,存储时间戳信息,并设置初始值。
(2)利用一致变量更新回调,每帧更新当前索引currentindex。
(3)利用当前索引currentindex,代入式(4)计算每个顶点透明度属性alphaj,将速度信息代入式(5),计算每个节点的RGB 颜色值colorj。
(4)将更新后颜色、透明度等信息保存到gl_FrontColor 变量,实现流线状态更新。
为了模拟流场动态连续的过程,设置了生命周期,即在模拟过程中允许流线死亡与重新初始化。初始状态下,所有顶点透明度为1,即未渲染状态。随着时间的变化,根据参数q修正每个节点的透明度。设置每条流线的生命周期T,保证在生命周期内流线能被完整绘制。当生命周期结束时,流线尾部的透明度接近于0。在生命周期T内流线上的每一个节点随时间变化透明度越来越高,直至消失;然后,重新初始化流线,即流线在相同的位置生成和消失。通过不断循环,模拟流线的流动过程(见图3)。
2 实例验证与结果分析
图3 流场实时构造示意图Fig.3 Flow field real-time schematic diagram
基于上述研究,流线动态可视化实验基于Microsoft Visual Studio 2010 采用C++开发语言,客户端基于OSGEarth(OpenSceneGraph Earth,面向地理空间的开源三维可视化引擎)搭建,着色器采用GLSL 编写。实验硬件条件:Inter Core i7-4790 3.6 GHz CPU,16 G DDR3 1 600 MHz内 存,NVIDIA GeForce GTX 960 显卡。实验数据采用全球海洋环境预报资料混合坐标大洋模式数据(HYCOM),包含流场、温度和盐度等信息,原始数据量为24.3 GB,网格分辨率为0.08°,数据空间范围为180 °W~180 °E,90 °S~90 °N。
2.1 可视化效率对比
为充分比较各流线的可视化性能,本文选取静态流线CPU 绘制、静态流线GPU 绘制、动态CPU流线绘制、基于箭头图元的动态流线绘制以及本文的基于着色模型实时构造的动态流线可视化方法进行可视化效率对比实验。实验数据为2016年5月1日至2016年10月1日全球HYCOM数据,并按不同流线数量进行采样,从而划分子数据集。
从图4的分析中可得,基于CPU 进行静态流线绘制时,随着流线数量的增加,绘制效率显著降低;GPU 加速后,静态流线绘制效率始终保持在60 FPS 左右,其中,60 FPS为当前硬件配置下显示性能优化的极限。接着,通过动态可视化方法的效率对比发现,基于CPU 进行动态流线绘制时,随着流线数量的增加,绘制效率呈骤降趋势,并且较静态流线绘制效率更低;在GPU 加速后,采用基于箭头图元的方法进行动态流线绘制时,虽然效率较CPU 环境下有很大提升,但随着流线数量的不断增加,绘制帧率呈不断下降趋势;本文的基于着色器的动态流线可视化方法其帧率一直保持在60 FPS 左右,与静态流线GPU 绘制方式效率不相上下。
综上所述,本文设计的基于着色模型实时构造的动态流线可视化方法无须频繁改变流线位置,只需更新着色映射结果,因此能够充分利用GPU的并行计算能力,极大提升了动态流线的绘制效率。
图4 流线可视化方法绘制效率对比Fig.4 Streamline visualization method drawing efficiency comparison
2.2 可视化效果对比
对比了多种流线可视化方法在表达效果上的差异。图5(a)描述了静态流线可视化方法绘制的全球洋流整体效果图;图5(b)为本文的基于着色模型实时构造的动态流线可视化方法绘制的整体效果图。不难发现,静态流线法绘制的流线较为密集,容易导致视觉混乱;基于着色模型实时构造的动态流线可视化方法的渲染效果通过透明度、颜色等设置策略有效缓解了静态密集分布带来的视觉干扰,颜色映射有利于突出全球流场局部关键特征,过滤了冗余干扰信息,透明度设置直观体现流速、流向表达海洋流场运动本质的信息,对于观察涡流结构等洋流规律具有重要作用。基于着色模型实时构造的动态流线可视化方法较静态流线可视化方法效果更清晰生动。
为进一步比较各模型的可视化效果,本文进行了局部流场的渲染效果对比,如图6所示。其中,(a)表达的是静态流线可视化方法下的局部流场渲染效果;(b)描述的是采用箭头图元表示流线动态效果的局部渲染效果;(c)-1 至(c)-4 描述的是采用本文基于着色模型实时构造的动态流线可视化方法绘制的具有时序特征的局部放大效果。从图中可以看出,静态流线可视化方法缺少流线方向信息的表征;而采用箭头图元的方式虽然能够表达流场动态特征,但可视化效果易受图元形状大小等因素影响,尤其在流线密集区域会产生一定视觉干扰,并且动画不连续;基于着色器的动态流线可视化方法,通过透明度等可视化属性能够直观表达洋流运动方向及流速特征,从视觉颜色及动态性两个角度帮助用户理解和掌握流场内部特征与时空变化规律。
图6 流场可视化局部放大效果图Fig.6 Flow field visualization local enlargement effect diagram
3 结 论
提出了基于着色模型实时构造的海洋流场动态流线可视化方法。由于引入了三维纹理进行流线属性信息存储,可向着色器传递大量数据信息;进一步设计了面向动态流线的着色模型和实时构造机制,通过颜色、透明度等属性,直观表达流场的流向、强度分布等特征。与基于动态图元的流线可视化方法相比,本文结果改善了视觉遮挡现象并提升了可视化的效率,可为全球洋流时空变化规律研究工作提供支持。下一步将重点考虑构建LOD模型,进一步优化渲染效果。