我在一个我的游戏中试验天气条件,Starbound处理雨的方式给我留下了深刻的印象。基本上,当雨水撞击地面时,它要么水平分散(并被地面吸收),要么会产生一堆水(当雨滴落在地面上的洞中时)。
该视频清楚地展示了这一点:http : //imgur.com/gallery/CKCGKbG
我知道如何使雨水落下并检查雨水落在地面上的位置,但这就是我被卡住的地方。我的问题是:如何创建?怎样才能完美地模拟水流而又不影响性能呢?
提前致谢!
我在一个我的游戏中试验天气条件,Starbound处理雨的方式给我留下了深刻的印象。基本上,当雨水撞击地面时,它要么水平分散(并被地面吸收),要么会产生一堆水(当雨滴落在地面上的洞中时)。
该视频清楚地展示了这一点:http : //imgur.com/gallery/CKCGKbG
我知道如何使雨水落下并检查雨水落在地面上的位置,但这就是我被卡住的地方。我的问题是:如何创建?怎样才能完美地模拟水流而又不影响性能呢?
提前致谢!
Answers:
Starbound的供水系统实际上是基于2D Tile的细胞自动机。屏幕上的每个不包含前瓷砖层的瓷砖都可以容纳水。水的量通过细胞自动机计算。
有关此技术的更多信息,请参见:
http://www.gamasutra.com/view/feature/134736/an_intro_to_cellular_automation.php
http://www.jgallant.com/2d-liquid-simulator-with-cellular-automaton-in-unity/
至于雨滴,那是颗粒。它们主要是用来伪造实际上有水从天上掉下来的现象。水积聚只是因为游戏知道当前正在下雨。单个水滴与水池的实际形成无关。
他们积聚的方式是确定地面顶层是否有洞。如果存在可以积水的区域,则该区域中的细胞会相应地增加其水位。
Starbound还处理水压,其渲染技术非常出色。他们拥有我所见过的使用元胞自动机进行水模拟物理学的最佳2D实现。
这是利用上述细胞自动机技术的液体物理引擎的原始视图。渲染部分变得更加复杂,因为您的水用数值表示。
http://www.jgallant.com/images/pressuretest.gif
在此示例中,一个非常简单的改进将是隐藏如果瓷砖下面没有实心瓷砖的情况下,其瓷砖中的水单元少于1个完整单位的水单元。但是,那时您隐藏了水流。除了隐藏水,您还必须确定水的流动方式,然后在其位置绘制适当的水精灵。