流体动画概述

sumcai 2022.01.03

流体动画概述

背景

我目前致力于研究游戏级别的实时流体模拟,也可以说是流体动画。这个领域的知识内容比较多,我将把学习过程中收集到的资源和自己的心得记录一系列笔记,主要是流体仿真和渲染的技术,既可以方便自己回顾,也希望这些内容能帮助到大家。

引言

基于物理的计算机动画成为目前一个研究热点, 是计算机图形学发展的一个重要方向,而计算流体力学( Computational Fluid Dynamics, CFD) 也一直是热点话题。随着人们对电影和游戏的视觉效果越来越高,观众也希望看到真实流体的动画效果,传统的逐帧绘制的方式变得不再可行,于是基于物理的流体模拟变为主流。

基于物理的方法都是通过求解运动方程进行模拟物体运动,而流体模拟中用到的运动方程就是Navier-Stokes方程。尽管该方程早在数百年前就已经提出,但它是一个非线性偏微分方程,手算结果几乎不可能,只能通过数值方法求解,随着计算机技术的发展,诞生了一门新的学科:计算流体力学,说简单点就是通过计算机庞大的计算力来解流体方程。

流体动画的思想和方法就是来源于计算流体力学,但是两者的目标却不同,计算流体力学要求计算结果尽可能的精确符合现实,从而能指导工业设计。而流体动画则偏重于生成能够以假乱真的视觉效果,对精度要求并不高,但是计算速度一定要快,以达到实时播放的帧率。我侧重于实现流体动画,因此后面都是基于流体动画的实现展开。

模拟方法

传统的N-S方程求解方法通常分为两类: 基于网格模型的欧拉法和基于粒子模型的拉格朗日法。

欧拉法

从研究流体所占据的空间中各个固定点处的运动着手, 分析被运动流体所充满的空间中每一个固定点上的流体的速度、压强 、密度等参数随时间的变化,以及研究由某一空间点转到另一空间点时这些参数的变化, 该方法是一种基于网格的方法。

1641198571443

拉格朗日法

从分析流体各个微团的运动着手, 即研究流体中某一指定微团的速度 、压强、密度等描述流体运动的参数随时间的变化, 以及研究由一个流体微团转到其他流体微团时参数的变化, 以此来研究整个流体的运动, 该方法是一种基于粒子的方法。

基于拉格朗日法的示意图:

1641198597852

拉格朗日法中最常用就是SPH(Smoothed Particle Hydrodynamics)法了,它衍生出许多改进算法:

1641200808022

总结

本文先介绍一下级别概念,后面逐步细化每种算法。本文的信息可能还不够全面,会随着我学习的深入不断完善。