在該篇中,製作組討論了遊戲中火焰的運行邏輯,以及對火焰機制的調試。
目前的火焰效果
一、現實中的火災模擬
在程序上模擬火勢傳播,科學家們通常用以下兩種代碼模型:
· 元胞自動機(Cellular Automata)
· 波傳播(Wave Propagation)
這類代碼模型能很好的量化和模擬風向、熱量等相關要素,用好這類模型,能很有效的模擬森林火災的開始、蔓延和熄滅,在挽救生命、防止火災發生和避免額外的經濟損失。
二、遊戲中火焰運行邏輯的選擇
遊戲使用的是體素概念,即一個個方塊構成整個世界,所以更適合元胞自動機(Cellular Automata)上的火災模型。整體上:
· 編譯簡便。雖然元胞自動機(Cellular Automata)上的火災模型是2D網格工作,但只要加入一個座標系,就能很好的適應3D體素世界。
在程序中,火焰在2D平面的展現
· 適應性高。比起波傳播(Wave Propagation),元胞自動機(Cellular Automata)模型更適合捕捉不規則的火勢蔓延模式,比如火勢在植被之間跳躍或因障礙物而改變形狀。
在程序中,火焰在3D平面的展現
三、火焰的影響要素
1.體素點燃的四個要素
當一個體素被點燃,它將受以下四個因素影響:
· 體素血量(Voxel health)——血量大於零即可燃燒
· 可燃性(Flammability)——燃燒速度
· 火焰強度(Flame intensity)——該值範圍介於 0.0 - 1.0 之間,大於0.0表示有火、越接近1.0表示火越大
· 溼度(Wetness)——決定該體素的潮溼度,會影響燃燒速度和決定能否燃燒。
遊戲中未增加特效粒子的火焰
2.火焰蔓延的測試
火勢蔓延由火焰強度決定,高於0.4則會激發蔓延的判定,其判定速度還在調整,但至少是其他判定的1/3-1/4。
為保證遊戲的穩定和效率,火焰傷害的判定是獨立於火焰運行之外的系統,每隔幾幀才會判定一次,後續的消防系統會與其保持一致。
蔓延速度極快的火焰
火焰強度(Flame intensity)與 溼度(Wetness)相互作用於火焰烈度和存續時間。
如果體素上面有可燃燒的東西(如草地上的木牆),其火焰強度(Flame intensity)將增長,代表將燃燒起更大、更烈的火焰;但如果體素處於非常潮溼的地面,則溼度(Wetness)將增長,代表火焰的強度將減弱,尤其是雨雪和水會立竿見影的提升溼度(Wetness)。