基于FBO 的GPU 混合体绘制算法研究

2015-07-13 02:00刘思廷等
电脑知识与技术 2015年13期
关键词:混合体属性数据曲面

刘思廷等

摘要:体绘制是渲染三维数据场的重要技术,可以探索物体的内部结构,相对于面绘制和切片技术体绘制能够更加形象地展示物体的内部形态,描述非定形的物体。然而体绘制算法复杂度高,数据存储量大,计算时间较长,为了能解决体绘制渲染效率问题,论文介绍了基于GPU加速的光线投射算法实时体绘制技术,并在此基础上提出了基于FBO的快速混合体绘制算法,解决了体绘制图形与常规图元同屏绘制互相遮挡的问题,目前该方法已应用于三维地质解释综合成图系统中,实现了三维属性体与地层、断层曲面同屏显示,提高了解释工作的质量和效率。

关键词:GPU;混合体绘制;地质数据的体绘制;光线投射算法;帧缓存对象

中图分类号:TP391 文献标识码:A 文章编号:1009-3044(2015)13-0223-04

Abstract:Volume rendering is a kind of important technology of 3D data volume rendering, which can display the internal structures and the shapes of the data cubes more vividly than the surface rendering and the technique for surface extraction from a volume. However, volume rendering algorithm have the characteristics of complexity, high data storage capacity and longer calculation, in order to solve the problem of volume rendering efficiency, the paper introduces the Ray-casting algorithm real-time volume rendering technology which is based on GPU acceleration, and puts forward a method of fast hybrid volume rendering based on FBO to solve the volume rendering graphics primitives to draw each other with conventional occlusion problems with the same screen. At present, this method has been applied to the three-dimensional geological interpretation of comprehensive mapping system, which realizes that the three-dimensional attribute body and stratigraphy, fault surface can be shown at the same time, and improves the quality and efficiency of the interpretation work.

Key words: GPU; volume rendering; hybrid volume rendering; the frame buffer object ; ray-casting algorithm

体绘制[1]是一种直接由三维数据场产生在屏幕上的颜色为人工指定的伪彩色的半透明图像。体绘制的成像步骤是首先需要对数据进行分类处理,分别对不同的类别赋予不同的颜色和不透明度值,最后根据视点和体数据的相对位置决定最终效果。体绘制技术最大的特点是可以显示物体的内部构造,解释非定形的事物,如人体器官、烟、云等。目前在分子模型构造、气象分析、及医疗等广泛应用体绘制技术。但是在地质勘探领域,由于数据量巨大,计算复杂度高等问题,无法进行实时体绘制。所以在体绘制技术以前,都采用面绘制方法来显示地质勘探领域中的速度、密度、电阻率等数据属性体,如移动立方体或四面体算法等来展示属性体的等值面,采用切片方法显示属性体内部构造。但随着GPU的出现,克服了无法进行实时绘制的缺点。体绘制技术可以将面绘制和切片方法的优点结合起来,有效地提取和显示用户关心的地质异常体,半透明的展示异常体内部结构,对地质解释工作具有重要意义。

虽然目前体绘制算法已经比较成熟,但是应用到地质中解释综合成图系统的还是很少,主要有两方面的原因:(1)地质属性体数据量巨大,常规的基于CPU的程序很难应付。(2)以前的体绘制方法研究往往只针对一个单一的属性体,不能够绘制其它常规图元,而地质解释工作中,除了利用体绘制提取和显示异常体外还需要附加显示一些地质层位或断层,用于综合对比分析。为了解决数据量大的问题,本文研究了基于GPU的并行体绘制方法,这大大提高了体绘制速度,使大规模地质属性体数据绘制成为了现实;而为了解决体绘制和常规图元同屏显示的问题,本文又研究了基于OpenGL的混合体绘制技术,实现了体绘制属性体与OpenGL基本图元混合显示的功能。

1 基于GPU的光线投射方法的应用

光线投射算法[2]是一种基于图象空间扫描的一种典型的直接体绘制法。将用户想要得到的区间数据可视化出来,用户可以将不需要观察的数据透明度设为0,着重显示想要观察的地方。比如医疗中显示骨骼,皮肤等的效果。直接体绘制法是指通过给三维属性体的体元赋予色彩和透明度,再由光线穿越半透明物体时能量聚集,进行色彩合成的成像过程。常见的其他的体绘制方法还有:足迹表法[3]、体元投射法[4]和基于错切-变形技术的体绘制算法[5]。

由公式可见,在体绘制技术中,在计算屏幕每个像素点的颜色时,具有大量的数值计算和重复操作,如提取属性数据体的数据和采样点的颜色混合。若通过OpenGL把此类工作交由GPU处理可以很大的提高程序的对计算机硬件的利用效率和Ray-Casting算法的实用性。

GLSL[6]是一个在GPU上执行的,以C语言为基础的高阶着色语言。它是由 OpenGL ARB 所建立,提供开发者对绘图管线更多的直接控制,而无需使用汇编语言或硬件规格语言。GLSL的着色器代码分成2个部分:Vertex Shader(顶点着色器)和Fragment(片断着色器)。Vertex Shader把每个顶点在虚拟空间中的三维坐标变换为可以在屏幕上显示的二维坐标,并带有用于Z-Buffer的深度信息。Fragment Shader计算每个像素的颜色和其它属性并输出。在体绘制技术中,在计算屏幕每个像素点的颜色时,具有大量的数值计数和重复操作,如提取属性数据体的数据和采样点的颜色混合。如若通过OpenGL把此类工作交由GPU处理可以大的提高程序的对计算机硬件的利用效率和Ray-Casting算法的实用性。

使用GLSL和OpenGL实现实时体绘制技术的步骤如下:

(1)确定属性数据体在进行了OpenGL矩阵变换[7]后在屏幕坐标系中的绘制范围。

(2)上传属性数据体、颜色表、变换矩阵等体绘制算法所需的数据到GPU中。

(3)用GLSL实现Ray-Casting算法。

在确定属性数据体在屏幕坐标系中的绘制范围时,应该先确定当前OpenGL中的Mode-View矩阵M和Projection矩阵R,视口变换矩阵V。得出此三个矩阵后,分别用属性数据体的八个顶点Pi(i=1,…,6,7,8)进行这三个矩阵的变换得出屏幕坐标点Psi(i=1,…,6,7,8),矩阵变换公式如下:

[Psi=Pi*M*R*V] (2)

最后取Psi(i=1,...,6,7,8)的最小值和最大值即可得出屏幕坐标系中的绘制范围。

基于GPU的Ray-Casting算法流程如图2所示:

1) 计算射线穿越的最大距离,即渲染正向面深度图和背向面深度图来作为循环采样控制的依据。

2) 根据上传到GPU的数据(屏幕坐标、变换矩阵、采样距离等)确定采样时的射线方向、采样在射线方向的范围和空间采样间距。

3) 循环纹理采样、合成;依次将每一个采样点对应的颜色值进行混合,最后向OpenGL输出累积混合颜色。在累积混合过程中,若输出颜色的透明度已经达到完全不透明(即数值为1.0),此累积混合过程也当结束。

在图像合成的公式中可以看出,不透明α逐步增大,当α的值接近于1.0时,则该像素点已经完全不透明,后面的像素点就可以不再计算。

光线投射算法这种体绘制技术相对面绘制技术在绘制数据体时更能直观属性数据体内部的情况。此体绘制技术在指定数据范围的情况下绘制出了属性数据体内部分布情况;同时对不同区间的数据进行叠加混合显示,形成整个属性数据体的透明分布。成像质量高,但是此算法计算量大,成像速度慢,因此在实现此技术时,使用GPU并行计算[8]极大的减少了算法处理的时间。内存:16GB;CPU: Intel(R)Core(TM) i7-4790k;显卡:NVIDIA GeForce GTX 780;显存:3GB;屏幕分辨率:1920*1080;表1为实验统计结果:单位(ms)。

根据统计,使用GPU进行的体绘制算法要比使用CPU实现的算法快10倍以上,数据越大,GPU比CPU实现体绘制算法快的倍数越大。如图3所示,是使用GPU进行的体绘制应用到三维地质解释综合成图系统中得到的成果图。

2 基于FBO的GPU混合体绘制技术

使用OpenGL和GLSL实现的基于GPU的光线投射算法直接体绘制技术能大幅度的提高绘制效率,但是这个技术却不能解决体绘制图形和OpenGL基本图元的共同绘制。OpenGL基本图元指在用OpenGL绘图的过程中的点,直线,多边形。如地质层面就是由无数的三角形这种OpenGL基本图元构成的。如果使用了GLSL直接调用API绘制基本图元,就会出现基本图元与体绘制图形的相互遮挡,达不到想要的效果。而产生这种现象的原因就是OpenGL的Shader具有默认的深度输出,在OpenGL进行深度缓存消隐时就会出现体绘制图形与其他图元互相遮挡。如图4所示:

针对这种情况,我提出了基于FBO的GPU混合体绘制算法,解决相互遮挡的问题。算法的基本原理是使用OpenGL进行两次绘制,首先在缓存中绘制OpenGL基本图元的深度和颜色信息;根据缓存中的深度和颜色信息再绘制图形,绘制时一定要实现对基本图元与体绘制的深度消影,解决遮挡问题。因为混合体绘制算法就是在直接体绘制的基础上实现的,在颜色混合时根据缓存的深度信息进行特殊混合。在确定屏幕点P的绘制颜色时,原有算法只是简单的累积P1Pn之间采样点的颜色,没有进行深度测试。混合体绘制算法可以使用OpenGL中的帧缓存技术[7]。通过具体的API调用,OpenGL可以把应当绘制到屏幕的内容(帧)绘制到GPU的缓存中,供其它程序使用。

当OpenGL将场景中的OpenGL基本图元绘制到了帧缓存对象后,由帧缓存中保存的深度信息,将帧缓存的内容变换到模型坐标系中,我们可以得到一个基本图元,这里假设我们得到的是一个三维曲面。现在整个模型坐标系中有两个三维图元,即体绘制数据体和三维曲面。设当前OpenGL中的Mode-View矩阵为M、Projection矩阵为R、视口变换矩阵为V。已知帧缓存中一点P(x,y,d),则将其变换到模型坐标系的公式为:

[p'=p*V*R*M] (5)

在模型坐标系中设置一个观察点,从此观察点向两个模型发射一条射线,这条射线与模型的相加情况如下:

1) 与两模型都不相交。

2) 只与曲面相交。

3) 只与数据体相交。

4) 先交于曲面后交于数据体。

5) 先交于数据体后交于曲面。

6) 射线在数据体之内相交于曲面。

当射线与两模型都不相交时,屏幕点即为背景色。当射线只与数据体相交时,就直接采用基本的体绘制原理。当射线只与半透明曲面相交时,直接绘制OpenGL基本图元即可。当既与体绘制数据体相交又与曲面相交时,则要采用混合体绘制算法。当射线与两模型都相交时,如图5为三种情况的算法原理图。

结合基本体绘制算法,可以得出混合体绘制算法基本流程图,如图6所示。

图7为基于GPU的混合体绘制算法应用到三维地质解释综合成图系统中得到的成果图,横插入数据体的曲面将体绘制图形分为上下两部分,其中位于曲面上方部分的数据体被正确显示出来,而位于下方的部分则被曲面遮挡而未被显示,成果图展现了使用OpenGL基本图元绘制的曲面与同屏的GPU体绘制图形具有正确的深度遮挡关系,证明使用上述方法可以有效解决OpenGL基本图元与体绘制图形同屏绘制的问题。

3 结语

体绘制是一种重要的三维数据场可视化算法,在体绘制技术以前,地质勘探领域,速度、密度、电阻率等数据属性体一般采用面绘制方法来展示属性体的等值面轮廓,采用切片方法显示属性体内部构造。但后来随着体绘制的出现,体绘制方法可以能够更加形象地展示物体的内部形态,解释非定型的事物,然而体绘制算法复杂度高,数据存储量大,计算时间较长,为了能解决体绘制渲染效率问题,论文提出了基于GPU的光线投射算法的应用,大幅度提高了体绘制的速度,使得该技术可以实现大规模地质属性体的实时绘制。后又在直接体绘制的基础上提出了基于FBO的GPU混合体绘制算法,解决体绘制图形与OpenGL基本图元深度不正确,同屏显示相互遮挡的问题,实现了体绘制图形与OpenGL基本图元之间相互对比显示。目前此技术已应用于三维地质解释综合成图系统中,实现了三维属性体与地层、断层等结构面综合对比显示。通过在实际地质综合解释和评价系统项目中应用,说明了改进后的体绘制技术在正确显示体绘制图形与OpenGL基本图元深度方面取得良好效果,同时此技术也可推广到其它一些行业的应用软件。

参考文献:

[1] (美)EdwardAngel著,李桂琼,张文祥译.OpenGL程序设计指南[M]. 清华大学出版社, 2005.

[2] 康玉之.GPU编程与CG语言之阳春白雪下里巴人[K]. 半山工作室,2009:160-172.

[3] 郭涛, 平西建.基于OpenGL 的三维地形可视化技术研究[ J] .计算机工程与设计, 2008, 29(1):193-195.

[4] 唐泽圣, 等.三维数据场可视化[M].北京:清华大学出版社, 2000.

[5] Kruger J,Westermann R.Acceleration techniques for GPU-based

volume rendering[C].Proceedings of IEEE Visualization,Seattle,2003:38-45.

[6] YagelR, KaufmanA.Template-basedvolumeviewing[J].Computer

GraphicsForum, 1992, 11(3):153-157.

[7] Dave Shreiner,OpenGL编程指南[M],北京:机械工业出版社,2010:96-109,316-340

[8] 库克,马培军,苏统华. CUDA并行程序设计:GPU编程指南[M].

北京:机械工业出版社,2014:19-34.

猜你喜欢
混合体属性数据曲面
基于GIS的房产测绘管理信息系统架构研究
无源多传感器综合数据关联算法研究
属性数据分析教学改革初探
相交移动超曲面的亚纯映射的唯一性
圆环上的覆盖曲面不等式及其应用
压实度对筑堤用土石混合料力学特性影响研究
克制的宣泄——钢琴家普列特涅夫:浪漫主义、现代审美和个人风格的混合体
独领风骚的夏日
基于曲面展开的自由曲面网格划分
炫色混合体