【遊戲設計圖形學】模擬自然界火焰的方法
《孤島驚魂》中使用的簡單模型
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/
相關文章
- 【遊戲設計圖形學】在地圖上生成蜿蜒河流的兩種方法遊戲設計地圖
- 3D遊戲程式設計與設計4——遊戲物件與圖形基礎3D遊戲程式設計物件
- 遊戲設計方法論——非玄學的遊戲設計知識譜系遊戲設計
- “爆款”休閒遊戲的設計哲學:益智、放置、模擬(持續更新中)遊戲
- 為什麼說遊戲設計是隱形的建築學?遊戲設計
- 遊戲原畫教程:角色設計中的幾個基本圖形的用法遊戲
- 遊戲UX設計:地圖設計的考量遊戲UX地圖
- 【java學習】GUI 圖形程式設計JavaGUI程式設計
- 建築師解構遊戲關卡——模擬遊戲地圖的探討遊戲地圖
- “推理探案+模擬經營”,這個4人遊戲團隊這麼設計遊戲!遊戲
- 計算機圖形學:虛擬和現實世界的融合計算機
- 一個碼農是如何用遊戲推動計算機圖形學的?遊戲計算機
- 遊戲原型設計方法論遊戲原型
- 模擬經營類遊戲:目標感與挑戰曲線的設計遊戲
- 圖形設計與遊戲用途的電腦CPU和顯示卡選擇攻略遊戲
- 在你的 Python 遊戲中模擬引力Python遊戲
- Speos — 光學產品設計模擬工具
- 遊戲模擬——Position based dynamics遊戲
- 遊戲情感化設計【社交模組】遊戲
- 基於原型的遊戲角色設計方法原型遊戲
- 遊戲機制設計方法論遊戲
- 遊戲基礎知識:快速設計遊戲劇情的方法遊戲
- Linux下用perf生成火焰圖方法Linux
- SPEOS—光學產品設計及模擬工具
- 遊戲圖示的設計跟其它應用的圖示設計有何不同?遊戲
- 乞丐模擬器Hobo: Tough Life Mac都市生存模擬遊戲Mac遊戲
- 學廢了系列 - WebGIS vs WebGL圖形程式設計Web程式設計
- 遊戲作為隱形的建築學遊戲
- 探討遊戲藝術和遊戲設計的美學意境遊戲設計
- 程式設計師精進之路:效能調優利器--火焰圖程式設計師
- 遊戲大地圖開發指南:遊戲外部空間設計遊戲地圖
- 《火焰紋章 風花雪月》專訪 團隊暢談遊戲設計祕辛遊戲設計
- 模擬積體電路設計系列部落格——8.2.1 環形振盪器
- systemtap和火焰圖學習筆記筆記
- 《全面戰爭模擬器》:詼諧幽默的沙盒戰爭模擬遊戲遊戲
- 譯介丨MDA:遊戲設計和遊戲研究的一種正式方法遊戲設計
- MOBA類遊戲地圖中的反饋設計遊戲地圖
- Chrome 火焰圖Chrome