侯晓丽
摘要:为了将抽象的三维时变流场的运动数据以直观的图形图像显示出来,采用三维线积分卷积(3D LIC)算法与直接体渲染(DVR)技术相结合的方法对流场数据进行可视化。沿着每一点的流线方向,从正、反两个方向对白噪声纹理进行卷积,然后使用直接体渲染技术对卷积结果进行渲染输出。为提高计算效率,算法引入了并行处理机制,使用GPU对大规模计算进行加速。实验结果表明,该方法能够得到包含丰富信息的三维图像,从而展现出由流场运动引起的长期行为。
关键词:流场;可视化;3D LIC;直接体渲染;GPU;并行计算
中图分类号:TP391.4 文献标识码:B 文章编号:1006-8228(2020)07-86-04
0引言
流场可视化是科学计算可视化中最具有挑战性的研究课题之一。它用直观的图形图像来显示流场的运动,透过抽象的数据有效观察其内涵本质和变化规律,已经被广泛应用于计算流体力学,航空动力学,大气物理和气象分析等领域。三维流场中的矢量不仅有大小,而且有方向,如何在二维屏幕上表示出三维方向的信息,一直是困扰人们的一个难题。对流场进行可视化时,可见性通常需要为完整性让步,如何恰当的渲染成为一个重要的课题。而且,在三维时变流场中,与流动有关的物理量(如流速,压力,密度等)随时间而改变,时变场中发生的现象在大多数情况下难以用解析形式进行描述和分析。因此,用可视化的手段观察和研究这类复杂的流场中的不稳定结构就具有重要和现实的意义。
在以往的研究中,schulz等人在三维汽车模拟数据中,对二维切片上的标量进行颜色编码。他们引入了一种交互式切片探测技术,将矢量场数据映射到不同的色调。直接体渲染(DVR)也是解决遮挡和杂乱问题的重要方法。Ono等人使用直接体积渲染来可视化汽车乘客舱中的热流。他们的目标是通过模拟获得预测汽车座舱热特性的能力。将矢量映射为箭头也是一种常用的直接可视化技术,Treinish等人使用箭头对天气信息进行了有效的可视化。Van Wiik等人提出了一种点噪声方法,通过在网格上分布一组强度函数或斑点来生成纹理,每个点代表一个在时间上移动一小步的粒子,从而生成从种子点出发的流向条纹,但是纹理中缺少速度大小的信息。线积分卷积(LIc),首次由Cabral和Leedom引入,是一种非常流行的技术。LIC的原始方法是在笛卡尔网格上输入一个向量场和一个相同大小的白噪声纹理。噪声纹理沿着流线路径进行平滑的局部过滤,以获得流场的密集可视化效果。然而,将LIC扩展到三维流场后,遮挡和交互性是非常重要的挑战。
本文采用线积分卷积(LIC)算法与直接体渲染技术(DVR)相结合,对流场的整体数据进行可视化。首先使用白噪声纹理对网格点进行初始化,然后沿着每一点的流线方向从正反两个方向进行卷积。为求得每一点的精确速度,使用龙格一库塔求解微分方程,根据积分结果计算网格点的颜色和强度。使用直接体渲染(DVR)技术对LIC计算结果进行渲染输出。沿视线方向对体进行切片,然后沿着观察光线方向对体数据进行采样并对颜色和透明度进行累积,生成结果图像。体渲染生成的图像不仅可以显示模型的表面数据,还可以显示模型中包含的复杂细节呈现给用户丰富的信息,为研究人员观察数据中包含的信息提供了有效的帮助。
1三维线积分卷积(3D LIC)
在三维时变流场中,流场的特性随时间变化而变化,且三维数据一般都具有较高的数据量,运算相当密集,为可视化带来难度和挑战性,线积分卷积LIC(Line integral convolution)是流场可视化的一个强有力的工具,它将流场的运动以直观图像的方式显示出来,帮助人们解释和理解抽象的科学数据中包含的内涵本质和变化规律,借助于当今GPU硬件的强大性能,三维LIC计算可以高效的完成。
1.1 3D LIC的基本思想
LIC算法是由Cabral和Leedom提出来的,用卷积来表示流场的方向源于一种运动模糊的思想。它是基于三维矢量方向的相关性来对噪声纹理进行低通滤波,线积分卷积是针对三维白噪声纹理沿矢量方向进行卷积,低通滤波是沿着三维流线方向进行的,从而得到输出图像。该算法具有通用性,可以独立于任何预定义的几何体或纹理,因此能够成像任意二维和三维的向量场,产生丰富的信息和引人注目的圖像。同时,它的局部一维性质有助于高度并行,使其具有高效和简洁的特点。
3D LIC的基本思想是:首先将三维流场数据中的各网格点初始化为白噪声纹理,然后针对三维流场中每一个体素,沿着矢量从正反两个方向进行对称积分,从而得到流线,在卷积过程中,流线上所有的体素对应的输入白噪声值,都将按照卷积核参与卷积,将卷积的结果存储为输出纹理的值。
在输出纹理中,对于任一体素c,以c为中心沿正反方向出发,分别进行对称的线积分,可以得到流线X(s)。c点的输出纹理值为:
其中-L<=s<=L,L为正、反方向的流线长度,K(s)为线积分卷积的卷积核,用于表示流线上的各个点与P的相关性,T为输入的白噪声纹理,T(入(s))为流线上各个点对应的白噪声纹理的数值。对输出图像的每个体素,LIC都要计算流线,然后用式[1)计算,得到该点的纹理值。
1.2离散时变流场中的LIG计算
(1)离散uC计算公式
三维离散数据存储在均匀的三维网格中,如果采用盒式卷积核函数计算,则式(1)的离散形式为式(2):
1.3并行计算
本文采用GPU对算法中最耗时的大规模计算(例如线积分卷积,散度,旋度,流线)进行加速,CUDA是由英韦达(NVIDIA)公司提出的一种并行计算架构,CUDA的含义是统一计算设备架构(Compute UnifiedDevice Architecture)。它结合了CPU和GPU的优点,主要用来处理密集型及并行计算。
由于CPU中的数据建立在三维网格上,所以本文在GPU中采用三维的Grid和Block。首先在CPU内存中为数据分配空间并初始化,然后使用cudaMemcpy()函数将数据拷贝到GPU内存中,在CUDA中调用核函数完成相应计算后,仍然使用cudaMemcpy()函数将数据拷贝到CPU内存中。CUDA和OpenGL之间的数据传输,则通过OpenGL将Buffer对象注册到CUDA中去,供CUDA读写操作,然后再在OpenGL中使用。
2直接体渲染(DVR)
在龙格一库塔公式和三线性插值的基础上,计算出LIC的积分值之后,我们使用直接体渲染(DVR)技术输出图像,输出的图像是通过沿着观察光线对体数据进行采样并累积产生的光学特性来创建的,本文使用的光学特性包括颜色和透明度,是由转移函数来计算的。在渲染阶段,代理几何在几何着色器中计算,代理几何体被光栅化之后,按照从后往前的顺序将光学属性迭代累加到帧缓冲区中,从而得到包含丰富信息的令人注目的三维图像。
2.1离散的体渲染方程
本文根据式3-8计算累积颜色和不透明度,其中ci和Ai是体素i的颜色和不透明度,是由转移函数分配的数据值。
在式(6)中,不透明度Ai近似描述光的吸收,以不透明度为权值的颜色ci近似描述样本点i和i+1之间沿光线段的发射和吸收。对于颜色分量,总和中的乘积表示样本点i发射的光线在到达眼睛之前衰减的量,沿观察光线对样本进行排序并迭代计算累积的颜色c和不透明度A,可以有效地计算该公式。
2.2代理几何
本文采用基于视点的体渲染技术,沿着垂直于视线的方向将几何体切成多个代理几何,如图l所示。
图1中显示了三个沿着视线方向切好的几何片元,ci(i=1,2,3)式每个切片多边形的形心。在几何着色器中,本文通过使用模型视图矩阵在对象坐标系和视图坐标系之间转换顶点来计算视图空间中的代理几何体。代理多边形被细分为三角形,生成的顶点存储在顶点数组中,以提高渲染效率。
2.3合成图像
在本文的实现中,将每一次切片后的代理几何进行光栅化,使用每个点的纹理坐标经过三线性插值来索引体数据,经过查找转移函数,得到每个点的颜色和透明度,将结果存储在一个帧缓存中,使用两个帧缓存迭代按照从后向前的顺序使用式8进行颜色累积和透明度求和:
其中ci和Ai是从片段着色阶段获得的沿视线方向的片段i的颜色和不透明度,e是从后面累积的颜色。
图2是三维时变流场数据经过3D LIC计算,由直接体渲染输出的结果图像。
3实验结果与分析
LIC圖像不仅可以显示流场的表面,还可以显示流场中包含的复杂细节,与直接体渲染技术(DVR)相结合可以展现出流场的全貌,并且对不同流场、不同时刻的三维时变流场均能生成高效、直观的三维图像,具有较高的鲁棒性。
计算出网格点的LIC值之后,可以根据用户的需求,对速度较大的区域进行追踪显示,图3是选择速度模的积分归一化后大于0.75的区域进行追踪显示:
4结束语
本文使用三维线积分卷积算法与直接体渲染技术相结合对流场数据进行可视化,既能表现出流场的方向信息,又能体现出流场运动的速度信息,而且直接体渲染技术能够增强内部点的可见性,呈现给用户具有丰富信息的引人注目的三维图像。
在以后的工作中,还需优化和完善以下工作:
(1)进一步完善3D LIC和直接体渲染的算法,采用分布式并行计算,提高程序计算效率和渲染速度;
(2)通过特征可视化展现出流场内部的拓扑结构。