在基于欧拉网格的烟雾模拟中,流体与自由面的接触面是一个模糊的边界,因此无需对烟雾的边界进行对流。但在液体模拟中,流体与自由面之间是有一个明确的边界,因此我们需要显式地跟踪这个流体边界来模拟液体的物理行为,基于水平集的自由表面流(Free-Surface Flow)是目前的主流方法。

基于粒子与基于网格的流体模拟算法是计算机图形学中的流体模拟界的两大算法框架,这两种算法分别对应了物理模拟中的两个视角:拉格朗日视角和欧拉视角。与基于粒子的拉格朗日流体模拟解然不同,基于欧拉网格的流体模拟采用了完全不同的算法策略,它不再关注随着物理规律运动的流体粒子,而将目光转向空间中的一组固定的网格点。

本文主要是流体不可压缩投影,在进行半拉格朗日对流之后,还需要对流体速度进行修正,使流体的速度场散度为零。主要是关于流体压强的泊松方程求解,通常采用共轭梯度法求解大规模稀疏矩阵的线性方程组,辅以不完全的Cholesky因子化。涉及到的数学内容比较多。

本篇文章主要是关于Position Based Dynamics的流体模拟方法,这类方法依旧采用基于拉格朗日的视角,把流体看成由一个一个粒子组成,易于并行化,适用于实时的流体模拟。目前实现的只是CPU版本,考虑在后面利用cuda挪到GPU上做模拟计算。相关的完整代码请看这里

header

本文主要参考文献《FLUID SIMULATION SIGGRAPH 2007 Course Notes》,结合我的理解单纯地讲述一下流体渲染的一些基础知识,本人水平有限,如有错误,欢迎指出。本文只是单纯针对流体模拟领域,可能一些地方不太严谨,但是对于虚拟模拟来说是可行的。即便如此,本文涉及到大量的数学方法。


博客内容遵循 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 协议

本站使用 Material X 作为主题 , 总访问量为 次 。
载入天数...载入时分秒...