【问题标题】:Simple gas/fluid dynamics source code简单的气体/流体动力学源代码
【发布时间】:2012-03-02 06:27:17
【问题描述】:

我有一个体素对象的 3D 矩阵,我想用它来存储一些基本物理原理的状态。这里的目的是在视频游戏中实时表示音量 (~30FPS) . 我想尝试使音量具有以下功能: 1.储存各种重量的流体和气体类型,并遵循基本的相互作用原则。例如,氧气比水轻。 2.能够判断压力。 3. 能够与“实体”对象进行交互。所以一个空心的 3D 盒子可以存储不会“泄漏”出来的东西。

所有这些都是非常基础的,可以放弃任何“准确性”测试。

乐于接受想法以及任何体面的资源以供进一步阅读。但是,我认为我不相信自己有能力通过论文或高级方程式来创建自己的库。

【问题讨论】:

    标签: c++ physics voxel


    【解决方案1】:

    嗯,多流体模拟并不容易。您可以做的是使用 SPH(平滑粒子流体动力学),因为这种方法允许对复杂界面进行相对简单的模拟。如果我是正确的,它也广泛用于游戏/动画行业,例如Blender 使用它进行流体模拟。我建议您在研究更复杂的事物之前先尝试进行单一流体模拟。请做好准备,这将需要相当多的努力,并且取决于您正在寻找并行化的精度/分辨率类型。如果您有更多关于 SPH 主题的具体问题,我会尽力回答。

    【讨论】:

    • 感谢其中的一些关键字 (SPH) 为我提供了一些新资源。然而,我对 SPH 的坚持是,在 3D 多边形中渲染粒子或“元球”似乎相当困难。至少对于体素,有很好的记录和实现的算法可以做到这一点(Marching Cubes),我已经有一个正在运行的实现。不过我会继续寻找。
    • 我对此一无所知,因为我将 SPH 用于工程目的,但我明白你的意思。
    • @S.Richmond 实际上元球和体素网格等值面生成算法或多或少是相同的。两者都依赖于您提供场密度来确定边界位置(您的多边形面)——Marching Cubes 只是一个例子。
    • 您在使用 meta all ISO 提取方面有很多经验吗?任何资源都会很棒。
    • 我愿意,但仅限于一个非常狭窄的领域:Pixar 的 RenderMan 中的流体渲染,所以很遗憾,我无法为您提供任何一般性帮助。网上有很多资源,但你需要知道术语,而且它们几乎都是计算机科学的核心论文——非常不友好的东西。
    【解决方案2】:

    我见过的 3D 图形中的常用方法是基于 Navier-Stokes 方程的基于体素的实现建模的。搜索这个应该会提供许多关于在代码甚至现成库中实现此方法的方法的论文,但正如 Azrael3000 所说,计算流体学和听起来一样困难 - 而且非常数学很重。值得庆幸的是,它也可以轻松拆分为多个线程,因此达到 30FPS 的最佳方法是将计算推送到 GPU。

    要记住的另一件事是“体素”和“帧”是图形术语。方程的方法(记住是连续函数)称为 FDTD - 时域有限差分。这在英文中意味着将字段采样为时间和空间上的离散点。

    【讨论】:

    • 我同意这一点。 GPU 绝对是进行并行化的方式。
    • 你手边有资源吗?我已经在谷歌上搜索了一段时间,但几乎没有想出关于使用体素的实现。
    • 直接寻求 GPU 解决方案:http.developer.nvidia.com/GPUGems/gpugems_ch38.html。另请参阅我的编辑。
    猜你喜欢
    • 1970-01-01
    • 2018-04-24
    • 2012-06-01
    • 1970-01-01
    • 2017-05-30
    • 1970-01-01
    • 1970-01-01
    • 2014-07-12
    • 1970-01-01
    相关资源
    最近更新 更多