康苏海
(交通部天津水运工程科学研究所工程泥沙交通行业重点实验室,天津300456)
流场二维可视化技术起步早,发展较为成熟,软件化程度也较高,如Mike21、Delft3D、Fluent这些商业化流体模拟计算软件都有相应的二维数据可视化工具;Tecplot、Surfer是专门用于数据可视化的软件,功能十分强大;TK-2D数据后处理软件专门用于二维流场数据仿真处理,界面美观、显示灵活、功能强大,是水动力数值模拟领域优秀的专业软件[1-3]。
近几年来,在水动力数值模拟领域,越来越多的工程问题需要三维计算来解决,对三维计算结果后处理,尤其是三维流场的仿真模拟提出了要求,如何真实有效地表现三维流场一直是水动力数值模拟研究领域的一个方向。以往只能通过截取水平或垂向截面方式间接地表达三维流场[4-6],模拟效果不直观,如Mike21、Delft3D、Fluent都是采用这种方式。最新版的Tecplot360软件通过迹线加球质点的方式,可实现三维恒定流的三维仿真模拟,但对水运工程领域常见的非恒定流场可视化却无能为力。
三维流场的直接表达涉及到真实三维场景的建立。用OpenGL构建三维地形场景已较为常见[7-9],但很少将流场加入,原因是地形可以很容易地用三维曲面描述,而流场却不同。流场的表达需要在场景中布设示踪粒子,可以用箭头、圆球或其他形状的几何体表示,但一方面运动流场需要由放置在其中的粒子来描述,另一方面需要将三维场景中的粒子向显示平面进行投影,必然会造成运动质点前后和上下的遮盖,使得投影画面整体混乱不堪,即使采用不同质点形状,也无法达到理想的显示效果。这也是导致真实三维流场可视化止步不前的关键[10]。
立体电影将模拟左右眼拍摄的2个序列的影像画面重叠在银幕上,通过观众配戴的特制眼镜分离图像,使观众左眼只能看到模拟左眼拍摄的画面,右眼只能看到模拟右眼拍摄的画面,再通过大脑的汇聚功能,合成为立体视觉影像,使人有身临其境的感觉[11-13]。由此可以设想,假如建立真实的三维流场场景,然后在其中设置2个隔开一定距离的摄像机模拟人的双眼,分别对同一流场同时进行拍摄(即投影),可得到2幅图像,代表这一时刻2只眼睛从不同视角观察到的流场。按时间顺序连续拍摄,并将2个摄像机拍摄的图像序列分别生成影像文件,就得到了所谓的“立体片源”,最后用专用立体播放软件或设备,对立体片源进行投影播放,在立体眼镜的帮助下,就可以看到具有立体效果的仿真三维流场模拟。
三维流场仿真模拟的另一个关键是解决三维场景的快速渲染和三维流场中的示踪质点的快速跟踪算法,使三维流场模拟在普通计算机上就能够实现。
本文利用立体成像原理,在二维屏幕上实现三维流场的立体显示,并寻求三维流场质点跟踪的快速算法,最后采用轻量级的具有快速三维场景渲染能力的图形平台,完成三维流场的仿真显示。采用C#编程语言,实现了三维流场仿真立体影像制作的软件化,软件名称为TK-Animator。
三维场景的建立基于三维图形平台,如OpenGL、WPF、OSG、VTK、OGRE等,每一种三维图形平台都有自身的优点,考虑到与已有代码的兼容性,本软件开发采用WPF作为三维图形引擎。WPF是微软新一代图形系统,运行在MS.NET Framework 3.0架构下,基于DirectX技术,在文档、图形、图像、多媒体、动画等方面具有超强的优势。WPF的核心是一个与分辨率无关并且基于向量的呈现引擎,旨在利用现代图形硬件的优势,是一个轻量级的三维图形显示引擎。在WPF中可以进行三维图形模型定义,用于指定光源和摄像机位置信息,以构建真实的三维场景,它与Windows操作系统紧密结合,完全融合在VS.NET开发环境中,为VB、C++、C#开发语言所支持,便于开发者快速入门,有效降低了三维图形开发的难度[14-15],与已有VB、C++、C#程序兼容,移植成本较低。
三维场景建立后,呈现得到的三维显示画面都是由WPF自动渲染操作计算完成的,用户无需进行任何投影计算。WPF利用了显卡GPU的图形加速功能,大大提高了复杂三维图形的渲染速度。
TK-Animator软件的图形显示采用统一的数据结构,考虑到流场数据格式的多样性,编制了数据读取转换模块,专门完成特殊流场数据与软件标准数据格式的转化。转换模块程序读取节点数据和单元连接后,自动生成其他必要的单元边、每条边的临接单元、边界边等信息,这些信息在质点快速定位算法中十分必要。
标准的地形数据由离散化的节点空间位置坐标、构成单元的节点连接关系组成,形成三维地形曲面的几何要素。按照地形高程值和颜色对应关系,给定不同水深值对应的颜色作为曲面显示材质,不难得到区域地形。
水动力数值模拟往往存在十分复杂的水陆交接边界,软件自动判断边界节点及单元号,辅助人工图形化界面交互式完成外边界定义。只有将水域、陆域区分显示,才能保证整体三维场景接近真实状况,显示才会逼真。图1为边界定义后渤海三维场景图。
图1 定义外边界后的渤海三维地形场景Fig.1 Scene of Bohai terrain with defined boundary
图2 分层三维网格Fig.2 Stratified 3D grid strategy
拉格朗日法描述流场质点时,关注的是质点随时间的运动轨迹,这需要对质点运动的迹线进行追踪。三维运动质点具有x、y、z三个方向的速度分量u、v、w。目前大都以平面非结构化、垂向分层方式构建三维立体网格,所以在进行三维流场模拟时,可以采用水平方向二维拉格朗日流场模拟方式[3],增加垂向约束的方法,实现对三维运动质点的追踪[10]。
水平方向上采用方向追踪法控制质点在平面上的运动。三维质点运动增加了垂向分量,需要对质点在垂向进行额外控制,控制要素主要包括对运动质点的上下边界出界控制、垂向子区域出界控制等。
如图2所示,设质点在t0时刻的初始位置为P0(x0,y0,z0),所在平面单元号为n0,垂向位于第m0层,经过时段Δt后到t时刻,到达位置P(x,y,z)。利用二维方向追踪法[3]得到P所在平面单元号n;设想通过P点作垂线,和水面、底面交点为Ps、Pb,由质点所在水平单元各节点的水面高程和地形高程可以插值得到Ps、Pb的z坐标值,然后再由P点的z坐标,就可知道质点所在垂向层的层号m,这样就得到了质点所在三维单元。计算物理量一般存储在层与层交界面的单元节点上,设通过P点的垂线与m层上下交界面的交点分别为Pu、Pd,插值不难求出两点处各速度分量及其他物理量的值,根据P点所在Pu和Pd间的比例关系,进行垂向插值,最终得到质点M在P点的各个物理量的值。
示踪粒子的密度控制具有2方面功能:一是长时间流场模拟时,避免示踪粒子趋向于大流速区域趋势,使流场质点分布在整体上始终保持较均匀的态势,流场显示自然;二是避免入口补点、出口删点的操作。
通过建立多个三维长方体子域,实现三维质点运动的疏密控制。模拟开始前,根据平面范围及模型最小水深值、最大可能水位值,划定一个包络模型范围的大长方体,以用户指定的水平和垂向尺度,划分长方体为nx×ny×nz个小的长方体子域,作为以后质点疏密判断的依据。模拟初始时刻,根据用户指定密度定义,在每个子域中随机布设流场质点,对每个在平面上有效的质点进行垂向出界判断(是否分布于水面之上、底面之下),然后作为初始流场进行下一步计算。通过显示时间插值,假定在每一时刻质点都为匀速运动,在已知质点现有位置的基础上,通过计算可以得到经过一定时间间隔后,新时刻各质点的新位置。设定屏幕显示区对应的模型区域和整个模型有效区域的交集为质点是否出界的判别条件,对各质点位置进行出界判断,删除出界质点,得到有效保留质点,然后利用保留质点进一步进行质点疏密判别,删除过密质点,同时对过疏子域添加新质点,得到新时刻质点集合。如此循环便完成三维流场动态模拟各时刻流场质点的位置及流速大小求解。通过一定几何形状将质点表达出来,形成真正意义上的动态流场显示。
对示踪粒子的跟踪耗时较多,为保证动态流场的快速仿真,达到实时模拟的目的,在保证用户指定密度和范围的前提下,删除显示视口外的未出界的“多余”质点,只保留可视部分粒子,尤其在模拟过程中进行缩放操作时,加大视图内示踪粒子密度十分必要,这时需删除的“多余”质点更多。
图3中P1P2P3P4为屏幕矩形视区对应的现场区域,一般情况下会比屏幕现场矩形区域Q1Q2Q3Q4小,说明单纯根据屏幕坐标最大最小值确定的屏幕现场区域有许多部分并不能被看到,属于不可视区域,当然针对这些区域的质点跟踪也就没有意义,所以通过构造P1P2P3P4区域,在仿真模拟过程中判断质点是否落在该区域,否则直接删除示踪质点。图4是对应图3的某海区局部流场。
图3 演示时若干区域比较Fig.3 Comparison of several regions while simulation
人的眼睛相距Le=4~6 cm,所以观察到三维物体的图像与真实图像稍有差别,两者之间存在像差,由于这个像差的存在,通过人类的大脑,可以感知三维世界的深度和立体变化,这就是所谓的立体视觉原理[5]。根据立体视觉原理,用分开一定距离的左右2个相机去捕获环境影像,然后通过立体放映方式和立体眼镜,将左影像传给左眼,右影像传给右眼,经大脑识别处理形成立体图像。立体影像分离方式较多,常见的有偏振镜方式、红蓝眼镜方式、分时双目立体成像方式等[11-12]。
在WPF中,每个三维场景中只能有一个摄影机(Camera),但可以根据设定,在对场景渲染前改变摄影机设置,如将摄影机水平向左偏移一定距离(Le/2)模拟左眼,对场景渲染生成用于左眼观察的位图文件,然后将摄影机水平向右偏移同样距离模拟右眼,对场景再次渲染生成用于右眼观察的位图文件,这样便间接地实现了模拟双眼的双摄影机功能。
摄影机水平平移可以通过向其三维变换矩阵附加三维旋转变换来实现,三维旋转变换的轴是通过摄影机的LookDirection射线与显示域交点平行于z轴的直线,根据经验,旋转角度一般为0.2°~0.95°,这完全取决于对景深和出镜程度的选择,角度越大出镜程度越高,角度越小景深越深,这在本质上也代表了双眼向不同位置聚焦,小角度代表向远处看,大角度代表向近处看。
由上述得到的按时间顺序排列的一系列图片生成的影像文件(影像文件生成在此不作讨论)构成了三维动态流场,得到模拟左右2只眼睛生成的图片集合后,可进一步生成2个对应的影像文件。选择合适的控制方式对影片进行播放,就得到立体显示的三维流场。图5是丁坝绕流的三维流场立体仿真显示(红蓝立体影像)。
上述三维流场的立体式仿真模拟技术可应用于波浪仿真模拟、三维表面流场仿真模拟、截面流场仿真模拟、温度场模拟等。
图5 丁坝绕流三维流场立体仿真模拟Fig.5 3D anaglyph simulation of spur dike flow
为验证三维立体式流场的表达效果,选择具有明显三维流场特征的长江汇合口项目进行检验。采用三维水动力数值模拟软件,对长江、沱江汇合口区域流场进行研究,揭示两水流汇合区域的三维流场结构。
首先利用三维水动力数值模拟软件对项目的三维流场进行模拟,得到三维流场计算结果。用三维流场动态仿真软件读取计算结果数据文件,经过一系列设定后,制作出相应的立体影像文件。结果表明三维效果明显,达到了预期目标。图6为动态模拟过程中的截图,为红蓝三维立体图片,肉眼观察时图像是模糊不清的,需要红蓝立体眼镜才能看到立体效果。
另外,本软件除三维流场立体仿真功能外,还可以实现三维场景中的波浪动态模拟、三维表面流或二维流场模拟、置于三维场景中的水平及垂直截面流场仿真模拟等,应用实例见图7~图11。
图6 河道三维流场立体仿真Fig.6 3D anaglyph simulation of a river
图7 波浪场仿真模拟Fig.7 Simulation of waves
图8 三维溃坝表面流场图Fig.8 Surface flow of 3D dam-break
图9 三维场景中的二维流场Fig.9 2D current with 3D terrain
图10 多个水平截面流场(渤海)Fig.10 Flow over the horizontal section
图11 多个垂直截面(长江)Fig.11 Flow over the vertical section
本文提出采用立体电影成像原理及制作方法,以软件化方式实现了对三维流场的立体式仿真模拟。利用立体显示技术,突破了二维显示屏幕对三维场景显示的局限,使流场的三维场景建立具有了实际意义,是行之有效的三维可视化途径,对相关行业的三维显示具有技术辐射作用。
TK-Animator是一款功能强大的水动力数值模拟后处理软件,软件从底层开发,拥有完全的自主知识产权,有利于功能扩展和升级。泥沙场数值模拟是三维泥沙研究的重要方向,实现对三维泥沙场的仿真模拟将是TK-Animator软件功能扩展的一个重要方面。
[1]张征,李蓓.大屏幕图形显示系统软件的开发与研究[J].水道港口,1993(4):32-34.ZHANG Z,LI B.Software Development and Research to Large Screen Visualization[J].Journal of Waterway and Harbor,1993(4):32-34.
[2]康苏海.河流水流泥沙数值模拟结果等值线绘制技术研究[J].水道港口,2009,30(4):267-271.KANG S H.Study on Contour-map technology of river numeric simulation to flow and sediment[J].Journal of Waterway and Harbor,2009,30(4):267-271.
[3]康苏海.利用 GDI+实现二维动态流场实时模拟[J].水道港口,2009,30(6):390-393.KANG S H.Technology of real time animation on 2D flow with GDI+[J].Journal of Waterway and Harbor,2009,30(6):390-393.
[4]孔令胜,南敬实,荀显超.平面三维显示技术的研究现状[J].中国光学与应用光学,2009(2):112-118.KONG L S,NAN J S,XUN X C.Research status quo of flat 3-D display technology[J].Chinese Journal of Optics and Applied Optics,2009(2):112-118.
[5]陈兵,李玉成,赖国璋.近底水平圆柱振荡绕流的三维数值模拟[J].水动力学研究与进展:A 辑,2002,17(1):9-16.CHEN B,LI Y C,LAI G Z.Three-dimensional calculation of oscillating flow past a circular cylinder near a plane[J].Journal of Hydrodynamics:Ser A,2002,17(1):9-16.
[6]李建隆,李晓,王伟文,等.进气方式对液柱喷射试验塔内部流场的数值模拟[J].青岛科技大学学报:自然科学版,2009,30(1):34-37.LI J L,LI X,WANG W W,et al.Numerical simulation of liquid-column spray tower with different gas inlets[J].Journal of Qingdao University of Science and Technology:Natural Science Edition,2009,30(1):34-37.
[7]陈立华,梅亚东,王现勋,等.基于 OpenGL 三维河网地形与数据场的可视化[J].武汉大学学报,2007,40(3):34-37.CHEN L H,MEI Y D,WANG X X,et al.Visualization of 3D river network terrain and data field based on OpenGL[J].Engineering Journal of Wuhan University,2007,40(3):34-37.
[8]黎华,肖伟,黄海峰,等.三维真实感地形生成的关键技术研究[J].测绘科学,2006,31(4):57-60.LI H,XIAO W,HUANG H F,et al.Study on the key technology of generation of 3D realistic terrain[J].Science of Surveying and Mapping,2006,31(4):57-60.
[9]贾艾晨,苏江锋.基于 OpenGL 的河道地形实时仿真方法[J].计算机辅助工程,2007,16(2):20-23.JIA A C,SU J F.Real-time simulation method of riverway terrain based on OpenGL [J].Computer Aided Engineering,2007,16(2):20-23.
[10]Kang Suhai,Jin Sheng.Application of video anaglyph maker for 3-D flow simulation [J].Journal of Hydrodynamics,2010(2):289-294.
[11]武维生,张海,沈威,等.裸眼立体显示中 3D 模型多视点影像提取[J].中国体视学与图像分析,2008,13(1):38-41.WU W S,ZHANG H,SHEN W,et al.Multi-view extraction of 3D model applied in autostereoscopic display[J].Chinese Journal of Stereology and Image Analysis,2008,13(1):38-41.
[12]刘昕鑫,王元庆.基于双焦的单目立体成像系统分析[J].计算机测量与控制,2008,16(9):1 316-1 321.LIU X X,WANG Y Q.Analysis of the monocular stereo system based on bifocal imaging[J].Computer Measurement and Control,2008,16(9):1 316-1 321.
[13]杨珺,王继成,刘然.立体图像对的生成[J].计算机应用,2007,27(9):2 106-2 109.YANG J,WANG J C,LIU R.Stereo pairs creation[J].Journal of Computer Applications,2007,27(9):2 106-2 109.
[14]赖仪灵.WPF 全景体验[J].程序员,2007(3):98-101.
[15]Adam Nathan.WPF揭秘[M].北京:人民邮电出版社,2008.