【遊戲設計圖形學】模擬自然界火焰的方法

遊資網發表於2020-02-25
一場燎原的大火正向你撲面而來!本文將介紹在遊戲中模擬火焰在自然界中傳播時用到的一些技巧。

《孤島驚魂》中使用的簡單模型

【遊戲設計圖形學】模擬自然界火焰的方法

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 ... -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

最後再來一張火焰魔法陣來鎮樓吧!

【遊戲設計圖形學】模擬自然界火焰的方法

歡迎來我的知乎上檢視此文章!

相關閱讀:【遊戲設計圖形學】在地圖上生成蜿蜒河流的兩種方法

作者:clatterrr
來源:INDIENOVA
地址:https://indienova.com/indie-game-development/fire-simulation-algorithm/

相關文章