基于GPU的实时雾效模拟_第1页
基于GPU的实时雾效模拟_第2页
基于GPU的实时雾效模拟_第3页
基于GPU的实时雾效模拟_第4页
基于GPU的实时雾效模拟_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于GPU的实时雾效模拟摘 要:雾效模拟在三维仿真领域中是一个重要的研究方向,在复杂的三维仿真系统中模拟雾效对系统的实时性和真实性都提出了较高的要求。在分析传统雾效模拟方法的根底上,提出了一种基于GPU的实时雾效模拟方法。根本思想是建立一个表示雾随高度渐变的指数函数,然后根据提出的算法公式在GPU上实时计算出雾浓度,最后将所计算出的雾效因子与片元颜色进展混合计算。实验证明,该方法可以实时生成真实感较强的雾效。关键词:平流雾;雾密度;雾效因子;GPU;实时性中图分类号: TP391.9文献标志码:AReal-time simulation of fog on GPUHU Gui-ju1, WU

2、Zhi-hong1,2, WANG Dan-xia11. College of Computer Science, Sichuan University, Chengdu Sichuan 610064, China;2. Key Laboratory of Fundamental Synthetic Vision Graphics and Image for National Defense, Sichuan University, Chengdu Sichuan 610064, China)Abstract:Fog simulation is an important research to

3、pic in the field of three-dimensional simulation. It puts forward high requirements on real-time performance as well as realistic rendering results for complex three-dimensional simulation system. By analyzing the traditional simulation methods of fog, the authors proposed a Graphic Processing Unit

4、(GPU)-based method to simulate the fog effect in real-time. The basic idea was to employ an exponential function to simulate the fade of fog with height. Then a GPU implementation of this formula was presented. And finally the fog color was blended with the fragment color according to the fog factor

5、. The experimental results show that the proposed method can generate strongly realistic fog in real-timeKey words:advection fog; fog density; fog factor; Graphic Processing Unit (GPU); real-time0 引言雾效对增强三维绘制场景的真实感起着很重要的作用,特别是当其运用于户外场景模拟时,能制造出很好的环境气氛1。真实感雾效不仅广泛应用于大场景游戏、电影特效、动画和广告等领域中,还被大量应用于军事演习仿真、机

6、场塔台模拟机等仿真系统中。特别是在航空领域的应用中,由于雾是航空事故的最大诱因,大雾中飞行员看不清跑道,易使飞机偏离跑道或过早过晚接地,从而导致空难。同时,浓雾也会使航空港瘫痪2717。因此,雾效模拟在航空领域仿真训练中具有极其重要的作用。根据雾的形成过程不同,可以分为辐射雾、平流雾、上坡雾和蒸发雾等。根据气象学家的统计分析,一般是在夜间或早晨时出现辐射雾,然后随着气温的升高辐射雾逐渐变成了平流雾。同时,雾也受高度的影响,一般雾只在接近地面的数百米空间中生成。但在计算机图形学领域,对雾的仿真模拟最常见的是模拟全局雾,即假设整个场景被覆盖在均匀密度的雾中,只考虑雾随着视点到物体的间隔 变化而变化

7、。这种简易方法可以满足一般的应用,如游戏等,但对航空领域这些比较专业的应用行业,这种没有结合气象学专业知识的方法不能真实地模拟出自然环境中的雾效。为了模拟出真实的自然环境雾,需要对常见自然雾进展统计分析。由李秀连等人2提供的统计数据表可知,在重雾日天气下,平流雾持续时间最长,对环境的影响最大。所谓平流雾,就是指当暖空气流到冷地面上降温而凝结成的雾2720,是一种能见度在1km左右的持续性浓雾3。因此,如何模拟生成平流雾,对自然环境雾效模拟起着重要的作用。虽然OpenGL提供雾效模拟的接口函数,但它并不能很好地模拟自然环境雾。粒子系统是另外一种经常使用的雾效模拟方法,文献4-9使用粒子系统生成雾

8、效,但随着粒子数的增加,达不到实时性要求。为更好地表达真实性和实时性,本文提出了一种基于GPU的实时模拟和渲染平流雾的方法,并对该方法的实现流程进展了详细介绍。1 传统雾效模拟方法分析1.1 基于OpenGL的方法OpenGL生成雾效时,使用雾效混合因子将雾的颜色和片元的颜色混合起来10。OpenGL提供的雾效混合函数可以进展雾效模拟,也可以通过指定雾坐标来显示不同的雾效果。OpenGL的雾效模拟是根据下面三个雾方程之一进展计算的:f=e-dc(1)f=e-(dc)2(2)f=(end-c)/(end-start)(3)其中:c为视点坐标系内视点到物体的间隔 ;d为雾的浓度;start,end

9、分别为雾开始和完毕的位置。 f的值会被裁剪到0,1,并按如式(4)和已有片元颜色Cr和雾的颜色Cf混合而得到片元的最终颜色C。C=fCr+(1-f)Cf(4)OpenGL虽然可以通过计算视点和片元之间的间隔 来生成全局雾效果,或者通过设置雾坐标来生成体积雾效果,却不能从高度上表达出层次雾效果,即OpenGL生成雾方法满足不了雾的层次渐变性要求。JCAB在2001年GDC会议上提出的生成雾方法,实现了全局雾和体积雾的混合运用,但由于是基于CPU计算的11,无法运用于大场景模拟多种雾效果中,不能满足实时性要求。3期胡贵菊等:基于GPU的实时雾效模拟扑慊应用 30卷1.2 粒子系统模拟雾方法由于采用

10、OpenGL传统方法生成雾,不能在同一个场景中生成多层雾效果,一种解决方法是采用粒子系统多层堆积模拟形成体积雾。目前根据三维绘制引擎如OSG等提供了粒子系统模块,虽然生成的雾比较真实,但这些方法大都是基于CPU计算的,当粒子的数目到达一定的数量后(5B000个以上,见图1),由于CPU负荷过大,出现画面迟钝现象,运行效率明显降低,根本上达不到实时要求。图片图1 基于OSG粒子系统模拟雾生成图2 基于GPU绘制实时雾算法2.1 根本思想由于基于CPU计算的雾模拟方法,一般只考虑雾浓度和雾坐标,而没有考虑雾随着高度的变化而发生渐变的现象,不能从高度上表达出雾的层次效果,满足不了复杂三维场景对雾效的

11、需要。本文提出一种基于GPU的模拟绘制平流雾的算法,将雾随高度的变化而发生渐变的现象通过一个指数函数加以表达,并通过在GPU上实时地计算一个曲线积分来表示雾的浓度。2.2 平流雾算法偕柙谑澜缱标系内视点位置为Ow,由视点发出的视线上任意一点P可以表达为如下的参数方程:P(t)=Ow+Dwt(5)其中Dw是视线的方向。假设Dw采用单位向量,那么参数t有明确的几何意义,即视线上的点P到视点O的间隔 。如今假设雾的密度函数为(x,y,z),从视点O到世界坐标系中的任意一点(xp,yp,zp)的雾浓度可以通过第一类曲线积分进展计算:D=l (x,y,z)ds(6)由于世界坐标系中的任意一点都可以由式(

12、5)进展参数化,即:xp=Owx+Dwxtyp=Owy+Dwytzp=Owz+Dwzt(7)因此式(6)可以转化为如下定积分:l (x,y,z)ds=t2t1 (x,y,z)(Dwx)2+(Dwy)2+(Dwz)2dt其中:t1,t2分别对应点Ow和(xp,yp,zp)在参数方程(7)下对应的参数值。一个简单的事实是,将Ow代入式(7)后,发现不管D怎么取值,其对应的t1=0,而t2的取值取决于怎么设置Dw。Dw最简单的取值方式是直接令Dw=Ow-(xp,yp,zp)(8)那么(xp,yp,zp)在参数方程中对应的t2=1。综合式(7)、(8),那么式(6)可以表达为如下定积分:l (x,y,

13、z)ds=10 (x,y,z)(Dwx)2+(Dwy)2+(Dwz)2dt最后,式(4)中的雾效因子可以通过如式(8)计算得到:f=el (x,y,z)ds=e1 0(x,y,z)(Dwx)2+(Dwy)2+(Dwz)2dt(9)如今来考察使用不同雾的密度函数得到的不同结果。假设使用均匀密度的雾,即:(x,y,z)=d(10)其中d为一个常数。将式(10)代入式(9)可以计算均匀密度雾下的雾化因子:f=e-d(Dwx)2+(Dwy)2+(Dwz)2(11)注意在式(8)下,(Dwx)2+(Dwy)2+(Dwz)2的实际几何意义就是点(xp,yp,zp)到视点Ow的间隔 。比较式(1)和(11)

14、可知,这两个公式实际上是一样的。因此在采用式(1)的情况下,OpenGL实际上是假设雾的密度是常数,这也印证了在1.1节中的阐述。为了模拟雾随着高度而渐变的物理现象,采用如下的雾密度公式:(x,y,z)=de-cz(12)其中:c是一个常数,代表雾随着高度的衰减因子;(x,y,z)代表场景中任一点处的雾密度;z由雾的位置所决定,表示雾的高度。将式(12)代入式(9),可以最后得到带有高度衰减的定积分:l (x,y,z)ds=10 (x,y,z)(Dwx)2+(Dwy)2+(Dwz)2dt=de-cOz(Dwx)2+(Dwy)2+(Dwz)21-e-cDzwcDzw(13)最后结合式(13)与式

15、(9),得到雾效因子f:f=el (x,y,z)ds=ede-cOz(Dwx)2+(Dwy)2+(Dwz)21-e-cDzwcDzw(14)2.3 平流雾的参数描绘谝陨系男鹗鲋,实际使用了式(12)中的两个参数d和c来描绘平流雾。这两个参数的值对最后计算得到的雾化因子f有决定性的影响。但在详细应用中,这两个参数的意义都不是十清楚显,用户更习惯使用雾的能见度和高度来进展表述。用户习惯使用能见度来描绘雾的浓度,而不是使用(12)中代表雾在零高度下的密度值。为了便于用户更方便地控制雾,本文提出使用如下方法来完成能见度到d的转换。在零高度下,雾的密度就是常数d,即式(10)。假定用户指定的能见度为v,

16、那么可以认为在间隔 视点v处的物体的雾化因子为0。根据式(4),那么在这个时候像素的颜色完全由雾的颜色决定,而物体本来的颜色对像素的最终颜色没有奉献,即:f=e-dv=(15)其中为趋向于0的常数。根据式(13),可以得到常数d和能见度v之间的转换式:d=ln(MAX)v(16)其中MAX是为了求解式(13)而采用的一个非常大的数。同样,用户对雾随着高度变化的衰减常数c也没有一个直观的认识,在实际应用中用户更常采用的描绘是雾的高度h。为了在雾的衰减因子c和雾的高度h之间建立联络,本文认为根据式(12),雾在高度h处的密度为0,即:e-ch=(17)类似地,可以求得c的表达式:c=ln(MAX)

17、h(18)根据式(16)和(18),用户对平流雾的描绘就可以采用更直观的能见度和高度。3 平流雾的详细实现在计算平流雾的雾化因子的过程中,需要计算每个像素对应的点在世界坐标系中到视点的间隔 ,并根据2.2节中定义的公式来完成雾化因子的计算。OpenGL无法满足上述功能,同时由于运行效率的原因,也不能在CPU上完成上述计算。因此,利用现代GPU12的可编程性,将上述算法完全实如今GPU上。在vertex shader部分,完成固定图形管线除了必须完成将物体顶点坐标由物体坐标系转换到窗口坐标系,还需要将顶点转化到世界坐标系中。但是OpenGL Shading Language中只提供了gl_Mod

18、elViewMatrix将顶点坐标转换到视点坐标系,要将顶点转换到世界坐标系,还需要知道Model矩阵。由于View矩阵在每帧都是固定的,并且可以通过gluLookAt()函数中的设置计算得到。得到的View矩阵Mview通过uniform参数传递进vertex shader,通过如下计算便可以得到Model矩阵Mmodel:Mmodel=(Mview)-1Mmodelview其中Mmodelview是model-view矩阵。通过Mmodel可以将顶点坐标转换到世界坐标系中,并将其放入gl_TexCoord0中传入fragment shader。在fragment shader中,根据传入的

19、世界坐标系下的坐标和雾化因子的计算公式,便可计算得到雾化因子,最后根据式(4)进展颜色混合计算。4 实验结果实验环境在单台PC机(AMD Athlon 64 X2 Dual Core Processor 4400+; 2B048MB RAM; NVIDIA GeForce 7800 GTX)上进展,实验环境系统为塔台模拟机系统。为实现基于GPU的实时雾效模拟,在Visual Studio 2021下使用OSG图形系统实现主程序部分,使用着色器语言GLSL实现基于GPU的相应程序。采用本文方法后,其帧率结果如表1所示。分析表1,可见采用该方法模拟雾效后,系统已经具有很好的实时性。其实验效果如图2

20、5。其中图2是没有启用雾效时的场景图,图3是全局雾效果,图4是平流雾效果图,图5是改变雾浓度后场景图。表格(有表名)5 结语本论文在基于OpenGL传统模拟雾方法的根底上,对OpenGL雾方程进展改进,提出一种实现平流雾的算法,然后利用OSG与基于GPU的GLSL程序实现了平流雾效果,并将其运用到复杂三维场景塔台模拟机系统中,开发出了真实感强的雾化效果,并到达了系统的实时性要求,实验验证了可以将该方法运用于室外大场景仿真系统中。在将来的研究中,可以结合视点、物体和雾三者之间的关系,根据本文提出的算法对雾效方程进展改进运用,可以模拟生成辐射雾等多种雾效。参考文献:1湛永松,杨明浩,石民勇,等.保

21、持自然特征的烟雾快速生成系统J.系统仿真学报,2007,19(19):4460-44642李秀连,陈克军,王科,等.首都机场大雾的分类特征和统计分析J.气象科技,2021,36(6):717-7233熊秋芬,江元军,王强,等.北京一次浓雾过程的边界层构造及成因讨论J.气象科技,2007,35(6):781-7864EBERT D S, PARENT R E. Rendering and animation of gaseous phenomena by combining fast volume and scanline a buffer techniques C/ Proceedings o

22、f the 17th Annual Conference on Computer Graphics and Interactive Techniques. New York: ACM Press, 1990: 357-3665STAM J. Stable fluids C/ Proceedings of the 26th Annual Conference on Computer Graphics and Interactive Techniques. Los Angeles, California, USA: ACM Press, 1999: 121-1286FEDKIW R, STAM J, JENSEN H. Visual simulation of smoke C/ Proceedings of the 28th Annual Conference on Computer Graphics and Interactive Techniques. Los Angeles,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论