SPH(光滑粒子流体动力学)流体模拟实现:算法总览

流体模拟(一)

流体模拟算法总体流程:

流体现象广泛存在于自然界、日常生活以及工 业生产中,对流体的模拟即流体动画, 一直是基于物理的动画以及计算机图形学的重要研究内容。目前, 基于物理模拟的流体动画按照其空间离散化的不同方式主要分为两大类: 网格法与无网格法。网格法将模拟域离散到网格点,而网格点的物理属性值(如速度、密度等)通过求解控制方程获得;无网格法则是将流体体积离散到采样粒子, 每个粒子具有相应的物理属性, 粒子受控制方程作用 在空间中流动。无网格法具有质量守恒、无边界区域等优势,更容易模拟复杂现象(如卷浪、水滴、流体和固体运动等),在无网格法中, 基于光滑粒子流体动力学(smoothed particle hydrody- namics, SPH)方法由于计算简单高效, 成为最受关注的方法.

该方法可以产生十分真实的效果,下图是由该算法生成的效果。

在构建流体的同时,我们不仅需要用物理仿真出粒子的运动,还需要模拟出良好的流体表面,在表面重建中,Marching Cube算法则是一种非常实用且高效的算法,因此我选择用SPH算法算出粒子运动后,利用Marching Cube算法重建表面,在最后还利用一个各项异性算法来实现表面的光滑效果。

下图是我们的程序流程图:

根据流程图,设计的效果如下图所示:

 

我们在加入一点简单的冯氏光照模型进行渲染:

加上一个天空盒之后其实发现效果还不错,但是最初版的Maching Cube重建出来的表面有比较大的问题就是颗粒感过于明显了,比如下图的静止图:

我们可以发现表面不是很平坦,然后看了Yu, Jihun这个人的“Reconstructing surfaces of particle-based fluids using anisotropic kernels”这篇文章,他提出了一个用SVD来给每个粒子进行旋转和附加缩放权重,来达到各个粒子各向异性的目的。这是论文中最重要的一点,图解如下图所示:

我们可以明显的看到改论文的主要方法就是改变了每个粒子的形态达到平滑的作用。

我根据他的方法完善了表面,如下图所示:

这就是流体模拟的一个总体思路。

下一章节就先介绍一下SPH(光滑粒子流体动力学)算法。

  • 20
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
光滑颗粒流体动力学SPH)是一种计算流体力学方法,用于模拟粒子流体中的运动。 SPH源程序是指实现SPH算法的计算机代码。 SPH源程序通常由一系列子程序组成,包括初始化粒子的位置和速度,计算粒子之间的相互作用力和压力,更新粒子的位置和速度等。 在SPH源程序中,粒子被假设为具有质量和体积的不可压缩流体颗粒。每个粒子的状态由其位置、速度和其他物理属性(如密度和压力)来描述。通过在流体中采样一系列离散的粒子,并将它们的运动和相互作用计算在内,SPH源程序能够模拟流体的行为。 SPH源程序使用核函数来近似描述粒子之间的相互作用力。核函数决定了粒子之间相互作用的强度和范围。这种相互作用通过计算每对粒子之间的力来实现。该力可以通过使用基本的物理定律,如牛顿运动定律和连续介质力学,来确定。 SPH源程序中还包含了一些数值计算方法和技巧,以提高模拟的准确性和效率。其中一种常见的技术是使用粒子的密度和压力来计算粒子之间的相互作用力,并使用计算流体力学中的迭代方法来更新粒子的位置和速度。 总而言之,光滑颗粒流体动力学SPH)源程序是一种计算流体力学方法的实现,用于模拟粒子流体中运动的行为。通过近似描述粒子之间的相互作用力,使用核函数和基本的物理定律,SPH源程序能够模拟真实流体动力学行为。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值