一场燎原的大火正向你扑面而来!本文将介绍在游戏中模拟火焰在自然界中传播时用到的一些技巧。
《孤岛惊魂》中使用的简单模型
Jean-Francois Lévesque 参与了制作《远哭 2》的火焰传播系统,以下是他在他的文章(参考[1])中所说的。
这里使用的火焰传播系统非常简单,为了游戏性必须牺牲一些真实性。作者喜欢将事情简单化,所以不会有复杂的数学公式和流体模拟。
对于 2D 平面来说,比如一块草地,为了模拟火焰传播,可以用一大块网格覆盖住。
接下来模拟火焰传播的过程是非常简单的。每个还没着火的网格有一个耐久度,而周围的火焰会让这个耐久度减小。当耐久度等于 0
时,这个网格就算是起火了,这个网格上的火会继续减少其他相邻网格的耐久度。
当然,非常容易着火的干草地的耐久度要低一些,而不会着火的石头的耐久度是无穷大。
如果是 3D 模型,就添加 AABB 盒,并且会准备几个模型以表现不同的烧毁程度。
在《远哭 2》中,火焰传播还会受到风的影响。但也并没有用到复杂的空气动力学,而仅仅是把风的方向向量,与火源到未着火网格的方向向量的点积,作为火焰的“攻击力”。
当然也有一些很重要的优化。
细节层次:level of detail,简单来说就是近处的火焰粒子较为精细高清,而远处的较为模糊粗糙。玩家看不清楚远处精细的东西符合我们的认知,这样设计也能节约很多 CPUGPU 计算资源。
事件管线:同样是为了节省 GPU 计算资源,我们会将相同的地块放到一个 AABB 盒中,即已经烧完放到同一个 AABB 盒,正在燃烧的放到另外一个。
约束条件:如果没有一些约束条件,玩家扔的火很可能烧遍整个地图。因此可以这样设计,玩家扔出的莫洛托夫有 60 点“攻击力”,而一个方格里的草有 8 点“耐久度”,因此一个火瓶可以点燃 7 格的草。而这些在草上燃烧的第一遍火只有 50 点“攻击力”,再传下去的火只有 40 点“攻击力”,如此下去,火就不会永远燃烧下去了。
风对火焰传播的影响
以上是火焰传播的简单模型。但想要模拟真实的火焰传播,仍然有许多值得把玩的地方。
在有风影响时,火焰整体通常会呈现出鸡蛋状。黑色箭头所指即风的方向,受到风的作用,前端火焰,即鸡蛋尖,要比后端火焰,即鸡蛋尾的传播速度快。
例如在 S. Krezel 制作的虚幻 4 插件中,草地上的火焰传播在风的影响下是这样的:四幅一组的图中,左边两幅是风由左向右,右边两幅是风由右向左,上面两幅是弱风,下面两幅是强风。
可简单地把风方向向量与火焰向量点积作为火的传播速度,也可以根据在实验室的计算与观察来更真实的火焰传播。
斜坡对火焰传播的影响
除去风外,斜坡也是对火焰传播影响很大的因素。在参考[3] 中,作者得到的结论是,当前端火焰顺着风的方向,并且这个方向是上坡时,火焰的传播速度最快。数据如下:
左上图的可燃烧物是地中海松的落叶(pine halepensis litter), R0
是火焰在无风无斜坡时传播的速度,R
是火焰受到风与斜坡影响下的速度,SLA
即斜坡角度。
右上图可燃物是地中海松的落叶,fs
是火焰只受到斜坡的影响时的速度,fw
是火焰只受到风的影响的速度。
下面两幅图的可燃物是南欧海松的落叶(pine pinaster litter)。
而在参考[4] 中,作者依据 FIRETEC 火焰传播模型得到了以下结论:
其中 ROS
是火焰传播的速度,Slope
是坡度,U
是风的速度,而 L 是前端火焰的宽度。可以看到,”+“符号代表的强风模型,其火焰传播速度几乎与坡度呈线性,而”⭕“符号代表的弱风模型,其火焰传播速度在由下坡变为上坡后才与坡度近似线性关系。
火焰温度
火焰颜色条及其 RGBA 值。来源:参考[5]。
参考:
[1]
http://jflevesque.com/2012/12/06/far-cry-how-the-fire-burns-and-spreads/
[2] Modeling wildland fire propagation with level set methods V. Mallet a,b,∗ , D.E. Keyes c , F.E. Fendell d
[3] Wind and slope effects on ROS during the fire propagation in East-Mediterranean pine forest litter Miltiadis Boboulos , M.R.I. Purvis 1
[4] Coupled slope and wind effects on fire spread with influences of fire size: a numerical study using FIRETEC F. PimontA,C, J.-L. DupuyA and R. R. LinnB
[5] REAL-TIME FIRE SIMULATION by SARAYUTH SANTIKONGKA, B.E.
[6] 油管视频 https://www.youtube.com/watch?v=aWfbiAdfyhQ
最后再来一张火焰魔法阵来镇楼吧!
暂无关于此文章的评论。