是否有可以模拟流体和气体的二维物理引擎?[关闭]


20

在这一点上,平台和编程语言都无关紧要,我只想知道是否为此存在某种东西。任何帮助表示赞赏。


我已经实现了一个自定义的2D流体引擎。使用这篇关于粘弹性流体的论文以及Flui°D°emo代码作为模板,我可以得到一个工作示例。但是,流体并不像我所希望的那样稳定,并且代码可能需要大量的优化工作(多核处理,缓存友好性等)。我想要的是一个已经完成所有工作的库,因此我只需要将其与Box2d和我的游戏集成即可。
deft_code 2011年

Answers:


8

看看Q-Games用于Pixeljunk Shooter。这是一个二维游戏,涉及流体物理学。我不确定他们使用的是本地生产的还是中间件物理引擎,但是这些信息可能在某个地方。


8
他们使用了自己开发的引擎,但包括可以通过任何自定义代码使用任何物理引擎应用的技术。实际上,他们在GDC上对他们的流体动力学进行了非常有益的讨论(幻灯片在此处:gdcvault.com/play/1012447/Go-With-the-Flow-Fluid
鬼魂

6

好吧,我还没有研究这个问题,但是我知道几乎任何物理引擎都可以效仿这个想法。Box2D等

基本上,粒子会在周围,表面和彼此之间反弹(对于气体而言更快),但还会赋予它们恒定的重力效应(液体都具有相同的重力,但有些气体可能希望缓慢上升)。

如果链接外部粒子,您将获得代表质量的多边形形状

要么

如果仅在每个粒子上绘制像素或粒子图形,则可以代替质量实现云效果。


4
此答案不适合实际规模的实时游戏。
AttackingHobo

3
我不确定为什么要这么说,因为流体动力学经常被建模为粒子。有关示例,请参见youtube上有关流体粒子的nvidia技术视频,Algodoo程序(以前称为Phun)或Q-Games谈论其PixelJunk Shooter游戏(幻灯片在gdcvault.com/play/1012447/Go-With-the-流流体)。在后一种情况下,Q-Games展示了如何从一组粒子中构造出多边形。我认为这可以验证此答案对于实时实施恕我直言非常有效。

哇,为什么要投票?我不是在发怒,只是想知道为什么。它是一种现实的技术并被使用。
乔尔

听起来像是您在分子水平上描述流体,“幼稚的方法可以与烘焙的模拟一起使用,但它不能在实时游戏中很好地工作”。只要模拟的类型正确,粒子就可以了,“弹跳环绕”似乎确实适用于宏观粒子。您还严重误解了如何模拟密度。
AttackingHobo

粒子效果很好en.wikipedia.org/wiki/Smoothed-particle_hydrodynamics。如Directtovideo.wordpress.com/2011/05/03/numb-res中所述,在FLT的最新演示中使用了此实现,虽然该实现可能会有些繁重,但是像Pixel Junk Shooter GDC对话中那样的简单近似应该可以正常工作。
无效

6

我能想到的唯一一个专门处理流体的库是Fluidic。它是相当漂亮的alpha版本,但是只有一个发行版。物理库Bullet支持“平滑粒子流体动力学”,这是一种用于对流体建模的技术。尽管库是面向3D的,但您可以将约束应用于一个轴以使其在2D中工作。

正如我在其他答案的一些评论中已经提到的那样,我的建议是使用标准物理引擎(例如Box2D或Chipmunk),并使用多个圆圈对水(具有重力)或气体(没有重力)进行建模,并将它们组合在一起变成一个水或气体。您可以对单个实体施加一些约束,以使它们“成团”在一起,从而可以模拟粘度。观看此视频,了解各个实体(在视频中建模为正方形)如何协同工作。但是请注意,该视频中使用的技术与本段中提到的技术不同。您可以使用视频了解圆如何相互作用,并尝试使用所使用的物理库中存在的约束来模仿。

当您要将多个圆圈合并到水体中时,有趣的部分来了。我能想到的最简单的解决方案是将每个圆画成一个金属球,使它们看起来像一个更大的身体。您可以在数学和这些机构背后的一些示例代码在这里


您链接到的视频使用的不仅仅是圈子。他使用一种称为SPH的技术。该火焰口Flui°d°EMO使用的Box2D找到碰撞和施加力,但使用SPH方法计算力不Box2D中的刚体。
deft_code 2011年

您在这方面是绝对正确的。该视频是说明性的,而不是实现示例。感谢您提及我的错误,我已经更新了答案,以防止进一步的误解。

3

这个问题发布已经有几年了,但是我在搜索时遇到了这个问题,所以我想我会对其进行更新。

Google发布了Box2D系统的LiquidFun(开源)。它有一些局限性,但这是一种以相当不错的性能开始使用液体,沙子等颗粒的快速方法。

https://github.com/google/liquidfun

PixelJunk方法很棒,但这是一个私有库。他们在GCD 2010的演讲中分享了惊人的细节。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.