基于粒子系统的3D动态火焰模拟

2018-02-08 09:46魏碧云孔样红
武汉工程大学学报 2018年1期
关键词:风场风力纹理

魏碧云,孔样红,李 晖

武汉工程大学计算机科学与工程学院,湖北 武汉 430205

虚拟现实技术[1]是利用计算机的图形功能模拟世界上的各种真实物体、自然场景及光照产生的各种特效,甚至可以将想象中的世界真实地模拟出来,给人们的视觉带来不一样的冲击效果。近年来随着计算机图形学技术的发展,对自然景物的模拟逐渐成为一个研究热点,如对火焰、喷泉、云雾、闪电、雪花、浪花等自然景物[2]的模拟。这些模拟在军事科技、影视设计、航空航天等领域中发挥了重要作用。

由于自然景物拥有丰富的纹理和不规则的几何外形,以及自然因素对它的影响,如风力、气流等,因此其运动轨迹是不能确定的。传统数学工具无法对该类物体外在表现形式进行正确地描述,所以自然景物的模拟相对困难。因此,如何利用虚拟现实技术使这些景物在计算机屏幕上呈现更加真实的效果,成为许多研究者不断努力奋斗的课题。无规则模糊物体模拟技术,在学者们多年的探索和研究下,取得了一定程度的成就,而在多种模拟方法中,粒子系统又具有明显的优势。

粒子系统的起源,可追溯到 1983 年,Reeves[3]提出的粒子系统的概念。系统中每个粒子都有属于自身的一组属性,例如粒子的位置、形状、加速度、颜色、生命周期、衰减速度等。这些属性随着时间不断地进行更新,从而使整体的外观变化以及运动状态,相对于传统的模拟方法更具有真实感。该系统尤其突出的一个优点,就是利用简单的图元去模拟一些很复杂的物体,同时又不失模拟物体的真实性和实时性。这是单纯的使用传统方法和数学工具所无法比拟的,因此,粒子系统逐渐成为国内外众多学者的研究重点。本文将结合粒子系统和 OpenGL[4-6],同时引入风场,对火焰模拟进行改进和创新。

1 火焰系统中生存运动场的构建

基于传统的粒子系统的火焰模拟图形已经不能满足如今社会计算机图形领域的需求,且其真实性和实时性都不能在日常应用中充分体现,因此需要进一步的改进。本文主要探讨如何增强火焰的真实性和实时性,改进方法如下:

1)在传统的粒子系统火焰模拟中引入重力和空气浮力,实现火焰的动态效果,体现火焰实时性特性;

2)在传统的粒子系统火焰模拟中增加三维场景,展现火焰的真实性。

改进的火焰模拟流程如图1所示。

图1 火焰模拟流程图Fig.1 Flowchart of flame simulation

1.1 重力的引入

重力在动态火焰模拟中起到了重要的作用。采用Gyarmathy模型[7],通过人工引入的重力场模拟重力的作用。该模型的优点在于:插值操作可在自由粒子间和连续介质两种极端情况下进行,其表达式为:

从式(1)中可以看出,温度对粒子的受力有很大的影响,这里采取介于T0和T∞之间的温度:

粒子在发射和碰撞过程中会产生瞬间的内部热量,方程表示如下:

其中,P=ρ(r,t)为颗粒的辐射传热,ρ表示颗粒密度,c表示热容,k表示热导。

1.2 风场的引入

1.2.1 全域风场 全域风场的风源可设为无限大,其模型可随时间的变化而随机变化,风源与火焰之间的距离对风速变化没有影响。全域风场模型中任何时刻的风速都可表示为平均风速和一个随机数之和,该随机数是由Perlin噪音函数产生的随机数,其表达式为:

vp(t)是一个采用Perlin噪音函数产生的随机数,其表达式为:

αPerlinNoise(t)是一个以时间t为变量的Per⁃lin噪音函数。通过改变 v0(t),w,β,α这些常量就可以产生不同的风速。

1.2.2 火焰模拟中的Perlin噪音 Perlin噪音[8]是一个随机数生成器,在火焰模拟中,Perlin函数用一个整数作为参数,并返回一个基于参数的随机数。同样的参数传递两次,对于普通的随机函数来说,两次传递相同的参数可能会产生不同的结果,而Perlin函数不同,它会产生相同的随机数。如图2所示,在X轴上,对每一个值赋予[0,1]的随机噪声值。通过每个离散的噪声值进行平滑插值操作后,可得到一个平滑的连续函数。

图2 插值对噪声值的影响(a)离散噪声值;(b)平滑插值后的噪声值Fig.2 Effect of interpolation on noise values(a)Discrete noise values;(b)Smoothing noise values

将火焰模拟中不同频率和振幅的平滑函数叠加在一起,按式(7)可构造出若干新的噪声函数Noisei(x):

构造模拟火焰的Perlin噪声函数方法如下:

1)构造一个1个单位长度的噪声生成器,(float)rand()/RAND_MAX;

2)对任一点(x,z),假设其落在4个相邻噪声控 制点 (x0,z0)、(x0,z1)、(x1,z0) 和 (x1,z1) 所围 城的区域内。计算每个控制点到点(x,z)的向量与该控制点梯度的点积,得到它们对点(x,z)处噪声的影响值。

1.2.3 计算风力 风场模型[9]确定后,为了模拟出火焰摇曳的效果,必须计算出作用在火焰上的风力,作用在火焰上的风力由拖曳力和升浮力组成,其表达式为:

其中,CL(α),CD(α)分别是攻角为 α 时的升浮力和拖曳力系数,ρa为空气密度,其值为2.37×10-3g/m3,v是建立的风场模型得到的风速,S表示迎风面积。它们在垂直方向上的作用力为:

2 火焰及其场景建模

2.1 火焰建模

粒子系统控制机将火焰粒子从发射孔不断发射出来进行动态模拟,每个火焰粒子在生成时都有自己的初始化属性。随着时间的推移,火焰粒子必然经过“生成”、“运动”和“消亡”三个阶段[10]。火焰粒子系统的实现过程如下:

1)产生一定数量的新结构化粒子加入系统;

2)赋予每一个新的结构化粒子一定的初始属性;

3)对整个系统进行更新,删除随着衰减速率生命周期为0的粒子;

4)根据粒子的运动规律对结构化粒子进行变换及改变属性;

5)绘制并显示由已有生命的结构化粒子组成的图形。

其流程如图3所示。

图3 粒子系统流程图Fig.3 Flowchart of particle system

2.2 纹理映射

在大规模的三维场景仿真中,目前的技术不能直接模拟每一个火焰粒子的运动过程,所以纹理映射技术[11]被引入到三维场景中,给三维场景添加真实感。在现实生活中,这些大大小小均比较接近于真实事物的贴图都是基于物体纹理识别得到的。

纹理贴图技术直接关系到三维场景的真实效果,是体现真实感场景的重要步骤。

纹理贴图包括一维纹理、二维纹理、三维纹理三种体现形式,它们的纹理是根据其变量的定义不同而划分。其中二维纹理贴图是最常用的方法,之后将二维纹理映射到三维场景的表面,这样就获得了具有纹理贴图的三维场景,增加了其真实感。假设二维纹理函数定义在(s,r)平面上,一般认为二维纹理函数的定义域是单位方正的,表现形式如下:

采用球面纹理映射[12],具体参数方程如下:对于球面上的任意一点(x,y,z),求解参数

(s,r),表达式如下:

在OpenGL中纹理映射的流程如图4所示。

图4 纹理映射流程图Fig.4 Flowchart of texture mapping

3 结果与讨论

3.1 实现效果

通过前几节的描述,粒子系统基本上达到了预期的效果,可以较为逼真地模拟火焰效果,并添加一些简单的三维模拟场景。在该场景中,可实现漫游效果。此外,还增加了按键功能,使火焰呈现出不同的变化,如增加风向,调整重力加速度的数值;插入不同的位图转换成不同的纹理,改变颜色分量(R,G,B)的数值,使得火焰呈现不同的形态。最终生成的火焰如图5所示。图5中的火焰场景,纹理贴图使火焰拥有立体效果,在X轴上添加的重力加速度使火焰体现出摇曳的效果。

图5 三维场景中的火焰Fig.5 Flame in 3D scene

3.2 火焰实现结果分析

图6 不同温度下各参数的变化Fig.6 Changes of parameters at different temperatures

同时,为了使所观察到的图像具有3D立体效果,利用 glEnable()和 glDisable()绘制场景图,并启用三维纹理GL_TEXTURE_3D作为参数设置3D背景图,对普通的模拟火焰进行纹理渲染,如图7所示。

图7 添加纹理渲染的模拟火焰(a)纹理渲染之前;(b)纹理渲染之后Fig.7 Simulated flame by adding texture rendering(a)before texture rendering;(b)after texture rendering

对温度为0℃(即无温度参数的引入)和330℃两个不同温度值时的火焰形态进行分析,同时引入纹理渲染增加可观度,如图8所示。

图8 不同温度对火焰的影响(a)0℃;(b)330℃Fig.8 Effects of different temperatures on flame(a)0 ℃;(b)330 ℃

3.2.2 风力对火焰的影响 当火焰粒子所示风力产生了α=2的振动频率时,可以将 Fy在α=2处对α进行一阶泰勒展开式[13]:

其中,Fy(0)是不随时间变化的,在动态相应分析中可以忽略不计,Δ(α2)表示高阶项,也可以忽略,则:

由式(9)可得:

将式子(15)带入式子(14)中,可得到最终空气动力表达式[14]:

Fy在α=2处的风速和风力变化如图9所示。

图9 火焰粒子的风速和力变化(a)火焰粒子的风速变化;(b)火焰粒子的受力变化Fig.9 Change of wind speed and power of flame particles(a)Change of wind speed of flame particles;(b)Change of wind speed of flame particles

由图9(a)和图9(b)可得结论:Perlin噪声函数利用噪声生成器(float)rand()/RAND_MAX引入的参数增加了实验随机性和自然模拟性,因此,由vp(t)=αPerlinNoise(t)知随着时间t的增加,风速不断增大,而从式(8)中可得出拖曳力 Fd和升浮力Fl也不断增大。图9(b)反映了升浮力增加的速率远高于拖曳力增加的速率。因此,渲染时间t不能过长,否则将会使火焰动态效果失真。由此可知,火焰在模拟过程中,总是呈上升状态,焰身在拖曳力Fd和升浮力Fl的共同作用下向某一方向偏移,这一现象真实模拟出风对火焰的影响。

图10为无风力作用和时间t=4 s时的风力作用的对比图,风场的引入使火焰在场景中产生一定的偏移,风速、拖曳力以及升浮力随渲染时间的推移而改变。因此,入眼的火焰摆动频率和方向都将有所不同,如图10所示。

图10 风场对模拟火焰的影响:(a)无风场;(b)有风场Fig.10 Effect of wind field on simulated flame(a)Without wind field;(b)With wind field

4 结语

以上主要对传统的粒子系统绘制火焰进行了改进,并解决了粒子系统实时性和逼真性的问题。同时,在了解模拟景物的自然特性及其相关自然因素后,利用简单的几何图元对整个系统进行了数学建模,对每个粒子进行了纹理贴图及渲染处理。在解决系统实时性等问题方面,选择了四角面片[15]绘制粒子的方法与动态生成视点替用特效技术,这样不仅可降低系统计算量,还可提高实时性。通过引入风力和重力场模型,进一步增强动态火焰的逼真性。重力场可动态展现火焰粒子消亡的规律;风力场则可模拟出火焰粒子的运动情况。这不仅使火焰粒子的运动更加灵活,也更体现火焰的真实效果。

[1] 苏美玲,冯正勇.虚拟现实技术[J].数字技术与应用,2015(5):83-84.

[2] 郝学娟.基于粒子系统的烟雾模拟[J].现代计算机(专业版),2014(15):19-23.

[3] REEVES W T. Particle systems-a technique for modeling a class of fuzzy objects[J].Computer Graphics,1983,17(3):359-376

[4] 张晓,刘培玉.OpenGL技术在虚拟显示三维重建中的应用[J].计算机工程与设计,2008,29(18):4875-4876.

[5] 叶帅,游有鹏,邢永彦.基于OpenGL的三维模型交互控制研究[J].机械设计与制造工程,2015(1):15-18.

[6] 董鸿鹏,姜本清,方伟.基于OpenGL的三维模型渲染技术研究[J].舰船电子工程,2015(10):114-116.

[7] STAM J.Stochastic dynamics:simulating the effects of turbulence on flexible structures [J]. Computer Graphics Forum,2010,16(3):159-164.

[8] 项予,许森.基于Perlin噪声的动态水面实时渲染[J].计算机工程与设计,2013,34(11):3966-3970.

[9] 赵鹏飞.基于IFS的树木摇曳的动态模拟方法研究[D].咸阳:西北农林科技大学,2013.

[10] ZHANG J L,QIU J Y ,GUO H W,et al.Simulation of particle flow in a bell-less type charging system of a blast furnace using the discrete element method[J].Particuology,2014,16(5):167-177.

[11] ZHANG W,ZHANG C H,ZHANG Y.On application of texture mapping technology in simulation [J].Advanced Materials Research,2014,989/990/991/992/993/994:1981-1984.

[12] TAKAHASHI T,FUJII H,KUNIMATSU A,et al.Realistic animation of fluid with splash and foam[J].Computer Graphics Forum,2010,22(3):391-400.

[13] 陈思潭.基于基波模型的风场驱动海面场景仿真研究[D].武汉:华中科技大学,2013.

[14] SELLE A,RASMUSSEN N,FEDKIW R.A vortex particle method for smoke,water and explosions[J].Acm Transactions on Graphics,2005,24(3):910-914.

[15] 王双双,许化强,白成杰.基于数学物理方法和纹理作用的火焰模拟[J].计算机与数字工程,2016(2):197-199.

猜你喜欢
风场风力纹理
海上漂浮式风力发电机关键技术研究
基于FLUENT的下击暴流三维风场建模
ERA5风场与NCEP风场在黄海、东海波浪模拟的适用性对比研究
基于BM3D的复杂纹理区域图像去噪
使用纹理叠加添加艺术画特效
“最美风场”的赢利法则
TEXTURE ON TEXTURE质地上的纹理
大型风力发电设备润滑概要
基于Bladed与Matlab的风力发电机组控制器设计
侧向风场中无人机的飞行研究