流体模拟(一)

流体模拟算法总体流程:

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

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

  1. SPH(光滑粒子流体动力学)流体模拟实现六:Position Based Fluid(PBF)

    SPH(光滑粒子流体动力学)流体模拟实现六:Position Based Fluid(PBF) PBF方法和前篇提到的PCISPH方法类似,都属于迭代矫正法.PCISPH是通过迭代预测压力,通过压力变 ...

  2. SPH(光滑粒子流体动力学)流体模拟实现七:屏幕空间流体渲染(SSF)

    SPH(光滑粒子流体动力学)流体模拟实现七:屏幕空间流体渲染(SSF) 之前都是用的Marching Cube重建流体表面的方法.近来为了做对比实验,尝试了屏幕空间流体渲染的方法.发现屏幕空间的方法不 ...

  3. SPH(光滑粒子流体动力学)流体模拟实现三:Marching Cube算法(1)

    流体模拟(三) Marching Cube算法(1) 我们在 实现流体表面重建时,需要事先在空间中划分网格,我们的流体系统正好已经完成了此项工作.其次利用Marching Cube算法计算出构成表面的 ...

  4. SPH(光滑粒子流体动力学)流体模拟实现二:SPH算法(4)-算法实现2

    流体模拟(二) SPH算法实现2: 在前面一节我们完成了粒子缓存类,网格类和邻接表类.我们现在可以正式的整合在我们的流体系统类中了. 流体系统类 class FluidSystem{public:Fl ...

  5. SPH(光滑粒子流体动力学)流体模拟实现二:SPH算法(4)-算法实现1

    流体模拟(二) SPH算法实现1: 由于我们计算每个粒子的状态时,都需要获得在它光滑核半径内(邻域内)的所有粒子信息.我们如果遍历每个粒子,计算欧式距离的话,那开销就过于庞大了.因此我们可以将我们的空 ...

  6. SPH(光滑粒子流体动力学)流体模拟实现二:SPH算法(3)-光滑核函数

    流体模拟(二) 光滑核函数: sph中涉及的光滑核可以理解为:在一定的光滑核半径内,所受的力受距离权重的影响,距离越近所受影响越大.其表现形式如图所示. 这里我们便可以将流体看成一个个粒子的集合,每一 ...

  7. SPH(光滑粒子流体动力学)流体模拟实现三:Marching Cube算法(2)

    流体模拟(三) Marching Cube算法(2) 我们在之前的流体系统类里新加入一些函数和成员,用来引用我们的MC类,便可以获得生成有表面的流体模型了,效果如图: 添加简单的天空盒以及Phong氏 ...

  8. SPH(光滑粒子流体动力学)流体模拟实现二:SPH算法(2)-粒子受力分析

    流体模拟(二) SPH算法的粒子受力分析: SPH算法的基本设想,就是将连续的流体想象成一个个相互作用的微粒,这些粒子相互影响,共同形成了复杂的流体运动.其实现的原理则是我们在初始空间里创建多个粒子, ...

  9. SPH(光滑粒子流体动力学)流体模拟实现二:SPH算法(1)-数学原理

    流体模拟(二) SPH算法的数学原理: 标量场和矢量场 如果空间区域内任意一点P,都有一个确定的数f(P),则称这个空间区域内确定了一个标量场,如果空间区域内任意一点P,都有一个确定的向量vF(P), ...

最新文章

  1. gsoap 学习 1-由wsdl文件生成h头文件
  2. 根据GPS经纬度查找指定范围内的对象
  3. Python:变量与字符串
  4. 5月6号基金分析的那篇文章,时隔两个月收益如何?
  5. win10总是更新失败
  6. 学习周记 CSS合集
  7. async-supported的作用
  8. flutter图标按钮_flutter 导航栏返回按钮带图标
  9. 《玩透嵌入式C的角角落落》深入分析sprintf和printf函数
  10. 初级加密技术之块设备加密
  11. 科学道德与学风-2021雨课堂答案-第9章
  12. MySQL必知必会6
  13. 52单片机课程设计——利用52单片机的智能窗帘设计论文+源码
  14. 双端影视APP后台搭建及前端安装编译大概流程
  15. C语言中的switch语句
  16. 你知道5分钟法则和10字节法则么?
  17. input表单元素required用法
  18. python网络编程 赵宏_2018年Python爱好者社区历史文章合集(作者篇)
  19. 一个简单的python程序实例(通讯录)
  20. python+requests+ 爬取官网双色球开奖数据

热门文章

  1. linux 高并发文件实时同步,Linux海量数据高并发实时同步架构方案杂谈
  2. tinypng 批量处理插件_分享六款逆天的Excel插件,高效处理数据必备!低调使用...
  3. python嵌套字典的建立_python – 从Pandas DataFrame创建复杂的嵌套字典
  4. react div 事件优先级_React 架构的演变 更新机制
  5. 怎样在word中同时输入上下标
  6. java 创建线程_java多线程|创建线程的各种方式
  7. oracle linux内存推荐分配,[20191114]linux内存分配的讨论.txt
  8. xampp mysql是空的_xampp中修改mysql默认空密码(root密码)的方法分享
  9. linux网络流量监测工具,linux下网络流量监控工具
  10. python 当前目录_Python中的搜索路径顺序