在该篇中,制作组讨论了游戏中火焰的运行逻辑,以及对火焰机制的调试。
目前的火焰效果
一、现实中的火灾模拟
在程序上模拟火势传播,科学家们通常用以下两种代码模型:
· 元胞自动机(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)。