如何在粒子模拟上叠加图形?例如,如果我用大量的小点表示液体或气体,那么如何使这些点看起来像液体或气体?以Nvidia Flex为例,它们模拟具有大量小点的液体和气体,但可以将它们渲染为逼真的液体和气体而不是小球。

评论

您是否尝试过带有控制点(即nurbs或bspline)的封闭曲面?还是自由变形的东西?两者都使用点来描述,但是移动点会使描述的曲面变形。 (在此期间,我尝试收集有关该问题的更多信息)。我什至在考虑使用凸包,但是我不确定结果如何,因为液体变形可能根本不是凸包。

#1 楼

对于气体渲染,我认为通常的方法是将每个粒子简单地渲染为一个微小的圆盘。气体不会像液体那样真正地聚结到表面中,因此应该产生可接受的结果。之后,您可能会在气体层上施加轻微的模糊以使其软化,并掩盖由离散元素组成的事实。另一方面,液体往往会聚结在一起形成液滴并光滑的表面,因此您需要以某种方式从粒子派生表面。一种实现方法是使用Metaball,它也可以显示这种行为,并且可以进行调整以适应不同的液体和颗粒密度。通过将每个粒子解释为金属球,您将拥有一个隐式方程来表示您的液面。若要渲染此隐式曲面,则可以使用Marching Tetrahedra之类的算法将其转换为三角形,或使用Ray Marching直接渲染它。 (如今,可以在片段着色器中轻松地实时进行射线行进。)如果您想要更柔和的外观,也可以对气体使用此方法。

#2 楼

对于游戏物理学来说,这是一个很好的参考,第4章介绍了基本的自由形变表面(当然,引用了nrbs和bspline并对其进行了足够的处理)在第5章中对流体和气体进行了处理(基本上是笔者推导的斯托克斯方程的简化模型,因此适用于实时应用程序。

所以实际上我想我写的评论您的帖子是正确的,即将控制表面形状的点的物理变形与ffd计算结合起来。

我引用的书应该在网络源代码中的某处/以某种方式提供,并且它本身引用了涉及我引用的技术的一些示例。如果您需要这样做,请告诉我以获得更具体的说明。

评论


$ \ begingroup $
您能否扩大答案范围,使其自成体系。在没有链接及其内容的情况下阅读它,答案并不十分清楚。
$ \ endgroup $
–巴特
15年8月12日在15:36

$ \ begingroup $
实际上,我认为“想法”(不是实现)非常清楚。 @克里斯蒂安(Cristian)说,他在一组点上执行了模拟,基本上,他应该考虑这组点,因为它们属于可变形曲面(即,由一组离散点描述的连续曲面),然后在更新点位置时,表面形状也将更新。效果取决于他要具体实现的目标,但是我假设他想使用一种“连续”而不是离散的点集。
$ \ endgroup $
–user8469759
15年8月12日在15:48

$ \ begingroup $
另外...我不知道为什么我不能在这里使用公式...但是,当然,它们对于更详细的说明很有用。然而,从物理上讲,好的参考书是任何一本计算流体力学的书,当然,对于渲染游戏物理学,在文献中也可以找到简化的方法。对于“代码”本身取决于他使用的环境,他甚至可以在CUDA工具包上找到完整的实现,我不确定openCL,甚至DirectX SDK都提供了一些流体模拟的示例(尤其是最新版本,但也许也使用吨点进行模拟)。
$ \ endgroup $
–user8469759
15年8月12日在15:53

$ \ begingroup $
我对问题的理解是作者涵盖了仿真部分,但仅询问可视化问题。我认为创建令人满意的表示水的“形状”的样条曲线集将非常困难,并且关于此操作方式的答案几乎没有任何细节。
$ \ endgroup $
– yuriks
15年8月12日在16:39

$ \ begingroup $
我们中许多人希望看到将MathJax用于公式的功能,许多其他SE网站已经拥有它。我们需要做的就是证明它的必要性。任何可以从MathJax中受益的问题,只需将指向它们的链接添加到此meta答案。
$ \ endgroup $
– trichoplax
15年8月13日在17:23