
流体模拟(SPH)
文章平均质量分 96
利用SPH方法模拟流体运动,利用各项异性MarchingCube构建流体表面
0小龙虾0
小笔记
展开
-
SPH(光滑粒子流体动力学)流体模拟实现七:屏幕空间流体渲染(SSF)
SPH(光滑粒子流体动力学)流体模拟实现七:屏幕空间流体渲染(SSF)之前都是用的Marching Cube重建流体表面的方法。近来为了做对比实验,尝试了屏幕空间流体渲染的方法。发现屏幕空间的方法不仅在效率上有极大的提升,效果也还是非常可观的,先上两张图:本文方法来自NYIDIA的文章“Screen Space Fluid Rendering for Games”。本文的流体粒子运动模拟方法使用的是前文的PBF方法,我们已经根据PBF计算完成粒子运动。利用粒子完成屏幕空间渲染的主题思..原创 2020-11-26 20:01:40 · 4761 阅读 · 14 评论 -
SPH(光滑粒子流体动力学)流体模拟实现六:Position Based Fluid(PBF)
SPH(光滑粒子流体动力学)流体模拟实现六:Position Based Fluid(PBF)原创 2021-02-02 18:18:10 · 4372 阅读 · 1 评论 -
SPH(光滑粒子流体动力学)流体模拟实现五:PCISPH
SPH(光滑粒子流体动力学)流体模拟实现五:PCISPH我们知道真实的液体是不可压缩的,但我们在计算机中离散的计算流体运动,在一定的时间步长内,用标准的SPH方法求解,在在粒子聚集处容易发生挤压,造成压缩。有两种常用的方法模拟不可压缩性:1.在WCSPH(弱可压缩SPH)中,利用刚性状态方程(EOS)建模压力。2.通过求解压力泊松方程实现不可压缩性。但这两种方法都有很昂贵的计算费用。文章“Predictive-Corrective Incompressible SPH”中,提出了一种预测矫正的.原创 2020-11-03 15:41:17 · 7736 阅读 · 15 评论 -
SPH(光滑粒子流体动力学)流体模拟实现:算法总览
流体模拟(一)流体模拟算法总体流程:流体现象广泛存在于自然界、日常生活以及工 业生产中,对流体的模拟即流体动画,一直是基于物理的动画以及计算机图形学的重要研究内容。目前,基于物理模拟的流体动画按照其空间离散化的不同方式主要分为两大类:网格法与无网格法。网格法将模拟域离散到网格点,而网格点的物理属性值(如速度、密度等)通过求解控制方程获得;无网格法则是将流体体积离散到采样粒子,每个粒...原创 2019-09-18 14:29:31 · 13022 阅读 · 8 评论 -
SPH(光滑粒子流体动力学)流体模拟实现二:SPH算法(1)-数学原理
流体模拟(二)SPH算法的数学原理:标量场和矢量场 如果空间区域内任意一点P,都有一个确定的数f(P),则称这个空间区域内确定了一个标量场,如果空间区域内任意一点P,都有一个确定的向量vF(P),则称这空间区域内确定了一个矢量场。例如,流体中的密度,就是标量场(密度场),而速度,就是矢量场(速度场)。偏导数若z=f(x,y),则z对x的偏导数为:...转载 2019-09-19 15:06:01 · 4616 阅读 · 0 评论 -
SPH(光滑粒子流体动力学)流体模拟实现二:SPH算法(2)-粒子受力分析
流体模拟(二)SPH算法的粒子受力分析:SPH算法的基本设想,就是将连续的流体想象成一个个相互作用的微粒,这些粒子相互影响,共同形成了复杂的流体运动。其实现的原理则是我们在初始空间里创建多个粒子,每个粒子拥有自己的特定属性。如位置,半径,所受重力黏力等等。因此在下一帧运动的时候,每个粒子检索周围一定范围内的粒子,根据它们的位置(即计算出周围的粒子和当前粒子的间隔)重新计算黏力和压...转载 2019-10-11 10:59:19 · 4779 阅读 · 5 评论 -
SPH(光滑粒子流体动力学)流体模拟实现二:SPH算法(3)-光滑核函数
流体模拟(二)光滑核函数:sph中涉及的光滑核可以理解为:在一定的光滑核半径内,所受的力受距离权重的影响,距离越近所受影响越大。其表现形式如图所示。这里我们便可以将流体看成一个个粒子的集合,每一个粒子都受周围一定范围内的其他粒子影响。该粒子的最终属性都由周围所有粒子的加权值来决定。如下图所示:我们在流体中随机选择一个粒子,在光滑核半径h范围内有多个粒子,位置分别是,…,则该...转载 2019-10-17 16:41:31 · 5335 阅读 · 6 评论 -
SPH(光滑粒子流体动力学)流体模拟实现二:SPH算法(4)-算法实现1
流体模拟(二)SPH算法实现1:由于我们计算每个粒子的状态时,都需要获得在它光滑核半径内(邻域内)的所有粒子信息。我们如果遍历每个粒子,计算欧式距离的话,那开销就过于庞大了。因此我们可以将我们的空间划分成多个网格。如上图所示,我们可以把空间划分成均匀网格,从而使我们在获取每个粒子的邻域粒子时,只需要访问该粒子的周围网格获取邻域粒子。这时候我们可以使用哈希表的方式,给每个空间网格赋予...原创 2019-10-21 21:10:52 · 9064 阅读 · 65 评论 -
SPH(光滑粒子流体动力学)流体模拟实现二:SPH算法(4)-算法实现2
流体模拟(二)SPH算法实现2:在前面一节我们完成了粒子缓存类,网格类和邻接表类。我们现在可以正式的整合在我们的流体系统类中了。流体系统类 class FluidSystem{ public: FluidSystem(); void init(unsigned short maxPointCounts, ...原创 2019-10-22 19:48:35 · 4641 阅读 · 5 评论 -
SPH(光滑粒子流体动力学)流体模拟实现三:Marching Cube算法(1)
流体模拟(三)Marching Cube算法(1)我们在 实现流体表面重建时,需要事先在空间中划分网格,我们的流体系统正好已经完成了此项工作。其次利用Marching Cube算法计算出构成表面的三角片面,最后根据所有三角片面的计算每个顶点的法线值。Marching Cube算法,最早是Lorensen等人在“Marching cubes: A high resolution 3D s...原创 2019-10-23 21:06:47 · 3436 阅读 · 1 评论 -
SPH(光滑粒子流体动力学)流体模拟实现三:Marching Cube算法(2)
流体模拟(三)Marching Cube算法(2)我们在之前的流体系统类里新加入一些函数和成员,用来引用我们的MC类,便可以获得生成有表面的流体模型了,效果如图:添加简单的天空盒以及Phong氏光照模型边有效果:流体系统类的更改: class FluidSystem{ public: ...... //复制缓存...原创 2019-10-25 16:05:39 · 2536 阅读 · 6 评论 -
SPH(光滑粒子流体动力学)流体模拟实现四:各向异性(Anisotropic)表面光滑(1)
流体模拟四:各向异性(Anisotropic)表面光滑(1)表面的表示与定义我们是以隐式表面来表示流体表面。定义一个足够大的参考域,它完全包含粒子表示的流体所在的空间D,即。流体表面隐含的定义为空间函数的一个等值表面,即:另外,流体的内外区域可表示为:下图所示为隐式曲面表示表面示意图:其中,绿色表示曲线内,蓝色表示曲线外,颜色的深浅代表场强的大小,红色的...原创 2019-11-27 13:13:27 · 2468 阅读 · 3 评论 -
SPH(光滑粒子流体动力学)流体模拟实现四:各向异性(Anisotropic)表面光滑(2)
流体模拟四:各向异性(Anisotropic)表面光滑(2)理论整理清楚了,我们看一下代码实现,我们首先在我们之前的FluidSystem类中添加几个成员函数和对象:class FluidSystem{ ......//之前的代码 void CalAnisotropicKernel();//各项异性核计算 ...原创 2019-12-01 20:44:20 · 1906 阅读 · 18 评论