卷曲噪音之流体流动


英文版原文: https://www.cs.ubc.ca/~rbridson/docs/bridson-siggraph2007-curlnoise.pdf

摘要

在速度和动画控制上,通常首选程序方法为湍流流体设置动画,而不是模拟。我们提供一种基于柏林噪音的非常简单的方法来高效的生成不可压缩湍流速度场,严格遵守固体边界(不允许流体流过任意指定的表面),并且其振幅可以根据需要在空间中进行调节。此外我们还演示了如何将其与程序图元结合,使程序图元绕着运动刚体运动,旋涡等。

关键字:噪音,湍流,流体,程序动画

1.引言

电影中的许多镜头和游戏中的特效需要流体般的湍流运动,特别是烟雾和蒸汽。虽然流体运动方程的模拟可以产生壮丽的动画,但它可能会非常的慢且难以直接控制。许多实践者转而求助于程序方法,在这种方法中,系统的状态,例如流体的速度场,可以在空间和时间的任何地方廉价的,重复地计算评估,而无需离散的PDE,无需大网格,无需调整模拟参数,无需求解方程组,以及立即和直接动画控制。在回顾前人的一些方法和不足之后,我们提供了一种新的、快速的、简单的构造流体速度场的方法。

Sims[1990]和Wejchert和Haumann[1991]都使用了“流动图元”的线性叠加,如旋涡,源、汇和位势流的特定解,以产生合理的风速场。但是,由于不需要人为添加许多涡流,这种方法仅限于相当于层流的情况,并且不处理将流动与任意实体几何体匹配的问题。

Shinya和Fournier[1992]和Stam和Fiume[1993]使用Fourier合成来产生物理上合理的湍流速度场。但是,这种方法无法处理任意的实体边界,必须计算和存储整个三维域(在游戏机的受限存储环境中尤其困难),并且艺术家控制(例如空间调制湍流的大小)丢失。后来,Stam[1997]表明,如果只需要几个风速点样本(如在他的模态树动力学中),则不需要存储和计算整个三维区域;但是,对于大量样本(如平流大量粒子时),该方法效率低下且不能解决傅里叶合成场的调制问题。

Perlin的同名噪声函数[1985;2002]在实际中经常用于生成随机速度场;然而,这些场通常包含许多汇(粒子聚集的“水槽”),因为它们不是无散度的。无发散条件∇·v=0相当于说明流体是不可压缩的,是日常流体(如水、空气和烟雾)的一个极其重要的视觉特征。
Perlin和Neyret[2001]还创建了看似流动的时变纹理,但不能用于移动粒子系统,也不能自然处理任意的固体几何体。

Lamorlette和Foster[2002]使用程序方法(包括傅里叶合成湍流模型)对火焰进行动画处理,并就程序方法为何优于流体模拟提供了很好的论证。

Kniss和Hart[2004]证明了在不可压缩流场中使用Perlin噪声旋度的思想(正如我们所做的那样);本文将其推广到处理边界条件和其他影响。

Patel和Taylor[2005]引入了“快速模拟噪声”,这是一种可以类似于Perlin噪声进行评估的散度自由速度场。虽然在精神上与我们的方法相似,但它要么缺乏平滑性,要么存在周期性死点(零速度点),而且它还不能如我们下面那样处理任意的固体边界。

最后von Funck等人。[2006]用稍有不同的结构建立形状变形的散度自由速度场。虽然不清楚如何使用这种方法来处理边界,但原则上它也可以用于我们的应用程序。

2.方法

2.1.卷曲

简而言之,我们使用势场Ψ的旋度∇× 来计算速度。在三维中,势是向量值场ψ~ = (ψ1,ψ2,ψ3),给出:
在这里插入图片描述
在二维中,势是一个简单的标量场,给出:
在这里插入图片描述
我们还记得流体力学中的二维势可以称为“流函数”:它的等高线是流的流线。

一个经典的向量演算恒等式是,光滑势的旋度是自动无散度的:∇·∇× ≡ 0。因此我们所建立的速度场是无散度的,∇ ·v~ = 0,即它是不可压缩的。没有来源或水槽(“水槽”)是可能的。

为了计算偏导数,我们使用位移非常小的简单有限差分近似(例如,在我们的示例中,我们使用的位移比域小10-4倍,在单精度下工作良好);这使得即使使用非常复杂的势也很容易。

2.2.噪音

为了构造一个随机变化的速度场,我们在势函数中使用了Perlin噪声N(x)。在2D中,Ψ=N。在3D中,我们需要为势构建三个分量:三个明显不相关的噪声函数(一个向量N(x~))来完成这项工作,实际上,这可以是在大偏移量下评估的相同噪声函数。

注意,如果噪声函数基于整数格并且平滑地在范围[-1,1]内变化,那么标度N(x/L)的偏导数将在长度标度L上变化,其值大约在范围O([-1/L,1/L])内。这意味着我们可以期望直径约为L的漩涡,速度约为O(1/L):用户可以使用它来缩放Ψ的大小,以获得所需的速度。

通常的技巧是在不同的尺度上加上几个八度音阶,得到“湍流噪声”(在图形意义上,参见[Perlin 1985];另见Cook和DeRose的小波噪声[2005]),实际上,在这种情况下,会产生与物理湍流非常相似的东西。使用幂律来降低小尺度涡的速度量级,如Kolmogorov湍流谱,具有良好的物理基础(关于使用Kolmogorov模型合成速度场的讨论,见Stam和Fiume[1993],关于时间调制噪声纹理,见Neyret[2003])。

我们最后注意到,为了增加真实感,我们的速度场应该随时间而变化。这是非常简单地通过使用时变噪声来实现的。虽然我们还没有尝试过,但是看看FlowNoise的伪平流思想(Perlin和Neyret 2001)似乎是有益的,它使湍流涡的演化更加真实。

2.3.调制

我们不局限于势的线性叠加:由于旋度恒等式,我们可以随心所欲地操纵Ψ,仍然可以确定得到一个不可压缩的速度场。最简单的控制方法是在空间上调节气流:例如,让场衰减为零远离场景中的对象,或者根据烟柱的高度改变它。当简单地调制速度场A(x)v(x)不再给出无发散场时,调制势,v=∇×(A(x)Ψ(x))就起到了作用。

2.4.边界

考虑流中静止的实体对象。粘性流动必须满足的边界条件是v~=0。这可以通过简单地用平滑的距离阶跃函数将势调制为零来实现,这样新势的所有偏导数(以及旋度)在边界处都为零。

在动画中更感兴趣的是无粘边界条件,v·n=0,要求垂直于边界的速度分量为零,允许流体沿切线滑动,但不允许流体流过固体。大多数湍流流体的粘度很小,这是一个更合理的近似值。

在二维中,注意我们的速度场只是梯度∇Ψ的90°旋转:如果我们希望速度场与边界相切,我们需要梯度垂直于边界。当边界是Ψ的一个等高线时,即当Ψ沿边界有一个常数值时,这种情况正好发生。我们可以在不完全消除梯度的情况下实现这一点,方法是根据距离最近的边界点的距离,用0的斜率调制Ψ:
在这里插入图片描述
其中d(x~)是到所有实体边界的距离,d0是使用长度刻度为L的噪波时修改区域的宽度,设置d0=L是有意义的。我们使用以下平滑渐变:
在这里插入图片描述
在三维世界里,事情有点复杂。设和为最接近x~点处边界的法线,我们使用
在这里插入图片描述
也就是说,我们在边界附近降低了Ψ的切向分量,但保持法向分量不变。这可以被证明在光滑物体边界上给出切向速度场,使用的事实是,是有符号距离的梯度边界(因此其旋度消失)。

不幸的是,法向场可能沿几何体的中轴是不连续的:用方程式(5)计算卷曲时,特别是在锐边附近,可能会产生尖峰。这不是方程(3)的问题,因为距离场是Lipschitz连续的,这就足够了。因此,在系统中标记为锐利边缘的距离d0内,我们默认为(3),即删除正常组件。今后我们计划研究更复杂的解决方案。

2.5.其他势

到目前为止,我们只构造了遵守不动固体边界的噪声。当然,我们可以将现有的流图元叠加到速度场上以获得更丰富的功能,我们也可以更多地利用势本身。

使用线速度V和角速度ω获取一个刚体运动相对应的势很简单:
在这里插入图片描述
其中,x0是任意参考点,R是任意参考平面。(注意,总是有无穷多个势对应于同一个v:任何两个势只要不同于某个标量场的梯度,就具有完全相同的旋度。)

假设我们有一个势Ψ我们希望修正以遵守运动刚体的边界条件。首先利用方程(5)将物体表面速度的法向分量归零,得到Ψ0。然后,我们使用方程(6)选择x0作为刚体的中心,平滑地将其与物体的距离为零(选择R作为混合区域的半径,使混合的转动项单调地降为零),并将其相加得到Ψ(x)=Ψ0+A(x)Ψrigid(x)。例如,我们实验了一个混合函数A(x),它基于到每个刚体的平方反比距离。注意,在刚性物体的边界处,速度是刚性运动和与表面相切的向量场的总和:通过构造,这将考虑无粘边界条件。

而对于单个实体,参考点是任意的,如果我们有多个实体,它可以帮助使用相同的参考点,使混合更好。特别是,如果所有的物体都以相同的刚性运动运动,那么我们当然希望它们的势匹配,以使混合完美。

变形体周围的流场比较复杂。对于一个封闭的变形表面,如果身体不保存它的体积,这甚至是不可能的,因此我们把它留给未来的工作。

一些涡旋基元包括一个简单的伴有角速度w、半径r和平滑回落方程f的旋涡涡旋粒子
在这里插入图片描述
和一条简单的涡流曲线,对烟圈和烟羽很有用
在这里插入图片描述
其中x C是曲线上最接近x的点,ωC是角速度(与曲线相切)。其他有趣的流动结构也可以类似地用刚性运动公式来创建。

3.结论

在图1和图2中,我们展示了一些用本文的基本公式构造的简单湍流示例的屏幕截图,这些示例实时运行;请参见http://www.cs.ubc.ca/∼rbridson/用于动画、完整细节和代码。总之,利用一个简单的向量微积分恒等式,我们已经解锁了一个新的程序工具箱,用于创建流体样的速度场,包括湍流运动和绕任意刚性物体的流动。

在这里插入图片描述
图一:具有实体边界的不可压缩二维噪声。为了计算势Ψ,我们将标量噪声N(x,t)乘以调制函数(距离鼠标光标距离的平滑阶跃函数A)和基于距离d(x)到最近实体边界的斜率为零:在这里插入图片描述。速度场就是这个势的旋度:v=∇×Ψ。

在这里插入图片描述
图二:在左边,我们在一个刚体后面构造了一个湍流尾迹。在右边,我们建立了一个漩涡环,在通过湍流混合扩散之前将流体推过球体。在这两种情况下,湍流噪声的每一个倍频程都会按照几何体的适当比例进行调整:在这里插入图片描述
然后,我们乘以平滑振幅函数,仅在障碍物后面产生湍流,并将其添加到底层层流势中,该层流势在固体边界处也平滑地变为零:
在这里插入图片描述。(在3D中,只有矢量噪波的切向分量会降低;请参见公式5)。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值