1
二维水模拟的想法
我正在寻找相对于一个较大的(称为)阻塞/非阻塞数组(从侧面观察)在2D中模拟水的任何输入。我提出了以下想法: 细胞自动机 使用单元自动机在CPU上进行大规模并行仿真。使用简单的规则: 如果底部有一个开放的单元,则移至该单元。 检查左侧和右侧的单元格,从两个单元格中随机选择一个并移至该单元格。 优点 易于实现。 在多人游戏系统中有意义/确定性。 缺点 可能真的很慢。 不令人信服。 GPU上的流体动力学 针对如下所示的纹理在GPU上执行流体动力学的粗略近似: +------+-----+-----+-------+ |R |G |B |A | +------+-----+-----+-------+ |vX |vY |NULL |Density| +------+-----+-----+-------+ 优点 可能真的很快。 可能非常令人信服。 另一个像素着色器可以直接渲染它。 缺点 难以实施。 难以调整。 我无法为我的水平分配单个纹理。 我可以重叠网格区域,但这会增加进一步的复杂性。 粒子 使用粒子模拟水。在使用添加混合进行渲染的过程中,然后将乘法函数应用于Alpha通道以赋予水脆边缘。 优点 可能看起来不错。 易于实现。 易于渲染。 尽管在多人游戏系统中需要大量的带宽才能传输,但这仍然有意义。 缺点 粒子间的影响可能会很慢(邻居查找)。 可能导致水通过实心空间“漏出”(因为实心空间很小,例如1px)。 根据颗粒大小,可能导致水中出现奇怪的孔。 可以通过允许粒子比实际大小更靠近一起漂移来缓解上述两种情况,但是这会导致粒子间和粒子/横向性能出现问题。 还有其他想法吗? 注意:这是一个近似值,我在这里不是在寻找物理上正确的水-只是“足够好”的东西(快速和肮脏的加分点)。该游戏是多人游戏,因此不幸的是,整个关卡需要不断进行模拟。