基于数学物理方法和纹理作用的火焰模拟*
2016-03-15王双双许化强白成杰
王双双 许化强 白成杰
(山东师范大学物理与电子科学学院 济南 250014)
基于数学物理方法和纹理作用的火焰模拟*
王双双许化强白成杰
(山东师范大学物理与电子科学学院济南250014)
摘要通过分析比较火焰模拟的几种常用方法,提出一种基于数学物理方法与纹理绘制相结合的火焰模拟方法。首先,对N-S方程进行求解,并采用交错网格的方式进行离散化处理,计算出每个固定网格节点的状态量变化;然后,由温度场数据进行火焰颜色转换;最后,采用纹理绘制的方法对火焰进行渲染。实验表明,算法具有可行性和有效性。
关键词火焰模拟; 数学物理方法; 纹理绘制; 温度场
Flame Simulation Based on Method of Mathematical Physics and Texture Effect
WANG ShuangshuangXU HuaqiangBAI Chengjie
(School of Physics and Electronics, Shandong Normal University, Jinan250014)
AbstractThrough the analysis of the several commonly used methods of flame simulation, a method of flame simulation combined the method of mathematical physics simulation method and texture mapping is proposed. Firstly, the Navier-Stokes equation is solved, together with method of staggered grid to manipulate the discretization, the volume change of the state of each fixed grid nodes is changed; Then, the flame color is converted by the temperature field data; Finally, the method of texture mapping is used to render the flame. Experiments show that the algorithm is feasible and valid.
Key Wordsflame simulation, method of mathematical physics, texture rendering, temperature field
Class NumberTP391.9
1引言
火焰模拟就是通过设计算法在计算机中生成火焰效果,是计算机图形学的重要研究分支,目前已经广泛应用于很多领域,如影视、航空航天、游戏开发、计算机动画等。火焰具有非常不规则的外观形状[1],其运动规律比较复杂,在燃烧的过程中受到很多因素的影响,如何比较逼真地模拟出火焰的动态效果,在计算机图形学应用领域,具有非常重要的研究价值和意义。
本文采用基于数学物理方法和纹理技术相结合的方法,通过对N-S方程的求解和离散化,使用纹理绘制技术对火焰进行渲染以此来提高速度,使火焰的模拟效果更加符合视觉效果。
2相关工作
2007年,耿维忠等[2]在纹理技术的基础上提出基于视频的动态纹理合成方法,减少了计算量,增强了真实感,能够实时合成。
2009年,李乐庆等[3]利用随机函数设置粒子的初始位置,提出基于粒子和纹理映射技术的模拟算法,提高了火焰模拟的真实性、实时性以及模拟的运行速率。
2011年,刘群等[4]根据火焰模拟的真实感和实时性问题,提出一种基于物理模型与图形处理器(GPU)通用计算相结合的火焰模拟方法,兼顾了火焰模拟效果中的真实性和实时性。
2011年,陈勇等[5]采用流体结合火焰颜色图谱的方法对火焰进行模拟,增加了火焰的可交互性和真实感,使火焰模拟的应用领域得以扩展。
2013年,王俊等[6]结合数学物理方法和粒子系统的优点,采用Navier-Stokes方程和纹理技术对火焰进行模拟和渲染,提高了计算速度,实现了令人比较满意的火焰动画效果。
可以说,三种方法各有优缺点,单一的方法已无法满足计算机图形学中所要求的实时性和逼真性了。
3算法设计
综合分析文献[2]和文献[6]的模型思想以及特点,为了降低计算的复杂程度,对物理模型进行了简化,并且针对火焰模拟在计算机模拟中难以实现比较满意的实时性及真实性的效果,本文采用了基于数学物理方法和纹理绘制相结合的方法对火焰进行了模拟。火焰的模拟主要包括两部分,即火焰模型的设计和火焰模型的渲染,其算法框架如图1所示。
图1 算法框架
火焰的颜色变化与温度有关,温度越高,火焰偏黄偏亮,温度越低,火焰偏红偏暗。若只关注火焰的视觉效果,可以使用一个简化模型,即根据温度场模拟方法来模拟火焰,通过执行流体求解方程的运算,得到火焰的密度场和温度场。在进行火焰模拟时,在模拟空间的初始点随机生成火焰燃烧的速度,火焰燃烧过程中火光的“摇曳”程度,可运用随机函数的性质来进行模拟。
AAS也能用于形成PEDOT(聚(3,4-乙烯二氧噻吩)) 膜[165-174]。PEDOT膜的制备是通过在含有N-月桂酰肌氨酸钠(一种环保型AAS)的水溶液中直接阳极氧化EDOT(3,4-乙烯二氧噻吩)。除了上述应用以外,AAS也被用于优化干洗工艺,优化后的干洗工艺使用二氧化碳且其作为手性 溶剂[175-178]。
3.1火焰模型设计
基于数学物理方法的火焰模拟,就是把火焰看作是一种特殊流体的物理过程。通过对数学物理方法的大量研究,出现了许多算法,主要有两类[7]:一类是基于粒子的拉格朗日算法,该方法是把流体看成是一个粒子系统,根据每一个粒子的运动状态推测整个运动过程。另一类是基于网格的欧拉算法,该方法是通过分析空间中每个固定网格点上的参数变化推测整个运动过程。火焰的模拟视觉效果只与温度场和密度场有关,所以采用基于网格的欧拉方法。
火焰是日常中比较常见的流体现象,基于Navier-Stokes方程组(N-S方程)的物理模型在流体力学中是最常用的,所以在这里也选取了N-S方程作为物理模型[4]。
N-S方程主要分为连续性方程和动量方程两部分,其中连续性方程如式(1),动量方程如式(2)。
(1)
(2)
(3)
(4)
对于火焰的模拟采用交错网格的方式进行离散化处理,但是在进行数值离散化时,插值计算对流项时会增加一个粘性系数,从而导致流体的耗散,可以使用漩涡约束力来中和由于数值离散而减弱的流体流动细节[10]:
(5)
由于使用简化模型,所以在这里可以根据求解出来的温度场数据生成温度场纹理,然后将温度场纹理作为火焰渲染的数据组。在此过程中,需要不断更新采样的温度、密度和速度,最后根据温度和密度绘制出火焰效果。
3.2火焰模型渲染
采用纹理绘制的方法对火焰进行渲染。可以将纹理简单地理解为一个数组,在这个数组中需要存储的是颜色、灰度等数据。纹理中的数据可以导入一个外部图片,也可以自己创建。
在进行绘制时,纹理对象和绘制对象之间的对应关系是由给出的纹理坐标和几何坐标确定的,然后再按照某种规律进行纹理绘制就可以了。对于二维纹理,纹理坐标在X和Y方向上范围是[0,1],所以,在这里需要把生成的纹理数据控制在[0,1]内。为了达到火焰内部颜色渐变的效果,对纹理数据进行均匀插值的处理。
为了使网格内得到正确的插值,纹理需要存储的是温度值,程序根据温度值从第二个纹理中查找颜色。把每一个网格的温度值对应一份纹理映射到对应的网格单元查询温度场数据,根据温度场数据进行颜色转换,最后将映射后的数据渲染到纹理切片上。从而在显示器上显示出较为真实的火焰效果。
在日常生活中,可以发现火焰的燃烧过程是随机变化的,而且每个燃烧部分也是不一样的,火焰中间部分的温度和边缘部分的温度是不同的[11],中间部分温度比较高,颜色偏黄偏亮,而边缘部分温度比较低,颜色偏红偏暗。在渲染时,火焰的颜色可以使用RGB颜色来表示,所以根据火焰中间和边缘的温度与颜色的关系,对颜色进行了相应规定[12],随着温度由0℃度升高到255℃或以上,颜色的变化顺序为黑→红→黄→白。假设用n表示0℃~255℃之间的温度值,其具体方法为:0℃
所以,可以根据求解的温度场数据和对颜色的规定,按照自己的需要对火焰进行渲染。
4实验结果分析
4.1算法实现
程序开发环境是Visual Studio 2010,火焰绘制和显示的软件包是开放性图形库OpenGL2.0,操作系统是32位的Windows XP。
在实现火焰模拟的过程中,首先要运用InitGL(GLvoid)函数初始化实验环境[12],接着使用随机函数Rand()的方法完成温度场纹理数据生成,因为采用的是正方形网格的均匀离散化,所以运用GLBegin(GL_QUADS)函数实现纹理坐标与几何坐标之间的转换。对火焰进行渲染时采用glShadeModel(GL_SMOOTH)函数来实现火焰颜色的渐变,使用glEnable(GL_TEXTURE_2D)函数启用一个二维纹理。
4.2实验结果
把模拟空间均匀离散为网格,不同的网格离散精度绘制的效果也会不同。所以可以通过提高或者降低适当的网格离散精度,来实现想要达到的火焰效果。
图2 不同网格离散精度下的火焰模拟情况
如图2所示,在16*16,24*24,32*32,48*48,64*64,80*80等不同的网格离散精度下,呈现出不同的火焰效果。
通过分析比较图2所呈现的火焰效果可以得出,当逐渐提高网格的离散精度时,火焰的亮度会逐渐降低,但是会变得连续,当提高到一定程度时,火焰会像烟一样呈现出来甚至会看不见,如果想模拟火焰燃烧后的余烟,可以适当的提高网格的离散精度;当逐渐降低网格的离散精度时,火焰的亮度会逐渐增强,但是也伴随着火焰的不连续,当降低到一定程度时,火焰也会看不到了;如果想模拟大火燃烧的状态,可以适当地降低网格的离散精度。过多地提高或者降低网格的离散程度,都不会看见火焰的模拟效果,所以,为了满足不同的视觉效果,实现理想中的火焰效果,选择合适的网格离散精度是非常重要的。
5结语
只使用数学物理方法对火焰进行模拟,虽然模拟效果比较逼真,但是其计算过程比较复杂,绘制速率较低,使其在应用时受到了限制。通过采用数学物理方法与纹理绘制相结合的方法,对火焰进行模拟,提高了火焰颜色的渲染速度,因此能够实现火焰动画效果的实时性。但是火焰运动的随机性、丰富的表现形式以及其复杂的内部实质,还需要继续深入地探讨和研究。
在本文中只模拟了一个火焰,在此基础上可模拟多个火焰。也可以在此基础上,模拟生活中的其他现象,如烟雾效果、烟花效果等。
参 考 文 献
[1] 王继州,顾耀林.火焰模拟方法的研究综述[J].中国图象图形学报,2007,12(11):1961-1970.
WANG Jizhou, GU Yaolin. A Sury on Flame simulation Methods[J]. Chinese Journal of Image and Graphics,2007,12(11):1961-1970.
[2] 耿维忠,杨胜强.基于动态纹理的火焰模拟[J].机械工程与自动化,2007,142(3):29-30.
GEN Jizhong, YANG Shengji. Computer Simulation of Flame Using Dynamic Texture[J]. Mechanical Engineering and Automation,2007,142(3):29-30.
[3] 李乐庆,康宝生.基于粒子和纹理绘制的火焰快速模拟[J].计算机科学,2009,36(4):93-95.
LI Leqing, KANG Baosheng. Fast Flame simulation Based on Particles and Texture Mapping[J]. Computer Science,2009,36(4):93-95.
[4] 刘群,向明辉,刘磊.真实感火焰模拟[J].小型微型计算机系统,2011,32(3):563-566.
LIU Qun, XIANG Minghui, LIU Lei. Simulation of Realistic Flame[J]. Small Microcomputer System,2011,32(3):563-566.
[5] 陈勇.火焰的物理绘制研究[D].武汉:武汉理工大学,2011:21-34.
CHEN Yong. Research of Flame Render in Physical Method[D]. Wuhan: Wuhan University of Technology,2011:21-34.
[6] 王俊,汪继文.基于N-S方程和纹理映射的实时火焰模拟[J].计算机与现代化,2013,220(12):68-71.
WANG Jun, WANG Jiwen. Real-time Flame Simulation Based on N-S Equation and Texture Mapping[J]. Computer and Modern,2013,220(12):68-71.
[7] 李翼飞.基于N-S方程的复杂流体效果模拟[D].天津:天津大学,2009:7-12.
LI Yifei. The Complex Fluid Simulation Based on N-S Equations[D]. Tianjin: Tianjin University,2009:7-12.
[8] 周永霞.基于物理的烟雾动画研究[D].杭州:浙江大学,2006:34-39.
ZHOU Yongxia. Research on Physically based Animation of Smoke[D]. Hangzhou: Zhejiang University,2006:34-39.
[9] 郭俐,秦培煜,陈传波.基于物理的流体运动模拟方法研究[J].计算机科学,2013,40(12):301-303.
GUO Li, QIN Peiyu, CHEN Chuanbo. Research on Physically based Simulation of Fluid Movement[J]. Computer Science,2013,40(12):301-303.
[10] 秦培煜.基于物理模型的流体动画研究[D].武汉:华中科技大学,2010:58-79.
QIN Peiyu. Research on The Physical Model-Based Fluid Animation[D]. Wuhan: Huazhong University of Science and Technology,2010:58-79.
[11] 林夕伟.基于纹理合成的火焰模拟算法[J].浙江教育学院学报,2006,11(1):16-22.
LIN Xiwei. The Flame Simulation Algorithm Based onTexture Synthesis[J]. Journal of Zhejiang Institute of Education,2006,11(1):16-22.
[12] 和平鸽工作室.OpenGL高级编程与可视化系统开发—高级编程篇[M].北京:中国水利水电出版社,2006:309-314.
Dove studio. OpenGL High-level Programming withVisual System Development — Advanced Programming Article[M]. Beijing: China Water Conservancy and Hydropower Press,2006:309-314.
中图分类号TP391.9
DOI:10.3969/j.issn.1672-9722.2016.02.002
作者简介:王双双,女,硕士研究生,研究方向:多媒体信息处理与集成。
基金项目:国家自然科学基金项目(编号:61340019);山东省自然科学基金项目(编号:ZR2012FM029)资助。
*收稿日期:2015年8月10日,修回日期:2015年9月22日