学习CFD,没准还能成为电影艺术家

学习CFD,没准还能成为电影艺术家


blob.png

自上世纪90年代中期《泰坦尼克号》公映后,国人开始认识到了好莱坞电影的魅力——确切地说,是好莱坞大片特效的魅力。自此以后,每年都有大量的好莱坞特效大片涌入中国银幕,近几年更是数不胜数,而且越来越与全球同步放映。所谓的大片,即指投资大、制作大、阵容大、内容大。在今天电影时代,这一切的“大”,都可以被“特效大”来概括。统计这几年最卖座的好莱坞大片,你会发现它们不是视觉特效大片就是CG制作的动画片,电影工业的格局因此而彻底改变。但是如果你觉得特效仅仅是技术那么简单,那就错了。特效并非人们想像的视频处理“技术”那么简单,它蕴含很多科学与文化含量。特效最先产生于美国军工,部队通过电脑模拟物理现象来测试武器效果,后来好莱坞将其做成仿真效果移植至影片中。比如表现波涛,必须将液体或气体的多项物理特性(包括速度、压力、密度、温度等)进行数值实验、计算模拟和分析研究,并将此运算的整个过程以图形图像的方式进行演示表现。所以特效师并是简单的‘技师’,而需要有非常完善的知识体系,在国外成熟的特效公司,甚至还有个职位叫“首席科学家”。

今天向大家介绍一篇好玩的文章,名字叫“流体模拟背后的科学”,它的作者是Mike Seymour,他是澳大利亚最优秀的特效艺术家之一,擅长高端专业设备上的合成特效。曾获得澳大利亚所有特效大奖,包括ATV、AEAF和PROMAX,也曾在伦敦和纽约获奖。Mike是好莱坞视觉特效协会的第一个澳大利亚成员。

原文地址:http://www.fxguide.com/featured/the-science-of-fluid-sims




流体模拟背后的科学

虽然流体的解算是最耗计算机资源的,但对于视觉特效来说却十分重要。流体所指的也不单单只是液体而已,还包含了火焰、烟雾、气体等。而烟雾跟液体最大的差别在于,液体会有固定的体积,气体则不是。流体的这个概念也不仅仅只应用在视觉特效领域, 在科学领域里面也被广泛应用,从1960年代中期以来,流体动力学(CFD,computational fluid dynamics)或流体模拟的科学就开始在工程问题中得到应用。流体的方程式和数学原理被用于描述关于许多学术和经济利益中的模拟现象。它们可以用于建立诸如气象模型、天气预报、管道中水的流动和飞机机翼周围的气流这样的对象。当然这些都是题外话,但是流体模拟已经成为众多特效电影的一个重要部分,即便如此,它还是没有被大多数普通艺术家很好地理解。我们对流体模拟背后的科学进行了试验和解释,而且在Exotic Matter本人及其朋友对我们进行帮助下特别深入地研究了一个最具有代表性的一款流体模拟软件:Naiad。

发展史

  在电脑图形工业发展之前,早至20世纪50到60年代,流体模拟就已经被活跃地研究并且有了数学模型。回溯至60年代,一个起主要影响研究的开创者就是Los Alamos国家实验室的T3组织。James Harlow是这个组织的领导者,Harlow和他的团队研究出工业化应用的理论,包括我们在下面会解释的交错MAC(marker-and-cell)网格结构,和PIC(Particle In Cell)方法,而后者就是今天FLIP、MPM和其他复合方法的前身!

  可惜,多数用于真实世界的CFD方法对视觉特效流体模拟来说显得不必要地复杂,而且数量很少。在计算机图形学领域,重要的先锋有Nick Foster和Dimitris Metaxas,他们计算了不可压缩和自由表面流体。正如我们下面所要强调的可压缩性,是通向可行解决方案的一个关键途径,但许多人都不能直观地理解。在Foster和Metaxas之前,视觉特效中的水都没有用物理学方法,大多数是运用了2D或者位移和凹凸贴图这类小“诡计”。Alias Wavefront的Jos Stam对不可压缩气态流体所做的工作也十分显著。在他1999年的Siggraph论文中,阐述了为什么比起关键帧动画,模拟动画是如此地重要。

  与关键帧或过程依赖技术不同,物理模型(流体模拟)可以让一个动画师毫不费力地创造有趣的类似漩涡流体行为。而且,流体与物体和虚拟力之间的互动能被轻松处理。Jos Stam. (1999). Stable Fluids, SIGGRAPH 1999 Conference Proceedings: SIGGRAPH Annual Conference Series. pp. 121-128.

  所有这些都发生在90年代早期,地点 在一些关键的地方比如Pacific Data Images (PDI)和 Alias (3D)。早期的努力,例如在Waterworld 和 Titanic这样的电影中,证明电脑合成的水图像是可以达到很高真实度,但是这种真实大都局限于平静、开阔的海洋镜头。Jerry Tessendorf, Rhythm and Hues (R&H)的首席图形科学家,在水特效的发展过程中做了大量的工作,因为他们研究的在CFD领域中传统流体动力学工具,他和R&H的其他三个成员一起获得了2008年学院奖的Technical Achievement 奖项。

  Stanely Osher做了开创性工作,使用层集方法表达动力学表面,后来他的博士生Ron Fedkiw将层集方法带入图形学并且创造了PLS( Particle Level Set )方法,这个方法通过沿流体表面种植粒子来保持其它方法可能损失的次网格质量,减少了纯层集方法的质量损失。Fedkiw的工作有极大的重要性,他获得了来自动态图像艺术与科学学院的技术成就学术奖。现在他是斯坦福计算机科学的副教授,发表了超过80篇计算物理、流体和视觉方面的论文。过去的十年中,他一直担任工业光魔(Industrial Light & Magic ,ILM)的顾问,在银幕上也有所成就,参与了 Terminator 3: Rise of the Machines(终结者3), Star Wars: Episode III – Revenge of the Sith(星球大战), Poseidon 和 Evan Almighty电影的制作。

  Robert Bridson,反过来又是 Ron Fedkiw的博士生,作为PhysBAM项目的创始人之一,在Fedkiw的管理下与工业光魔一起工作。PhysBAM延续了工业光魔物理模拟编程的主要工作。Bridson针对那些主要的研究者比如Harlow 追溯了20世纪60年代早期的研究,然后为不可压缩流体引入了 PIC/FLIP方法,同时也将不可压缩FLIP方法带入图形学。FLIP方法和它的变体在流体模拟的传递阶段有一个总数值扩散的近似缺陷,因为它将所有的数量都平流输送到粒子而不是网格上。

  在PhysBam项目中,Bridson帮助编写了布料模拟代码,这个使运用在工业光魔制作的Star Wars Episode II: Attack of the Clones(星球大战前传2)中。然后Bridson 到了英国为Double Negative合作设计了喷溅流体模拟器,在许多电影的烟、水、火、云、水墨特效中都可以见到,这包括Harry Potter and the Half-Blood Prince(哈利波特和混血王子)、2012、 The Boat that Rocked、 Inkheart、 Quantum of Solace(量子危机)、The Dark Knight 和Hell Boy II: The Golden Army(地狱男爵2)。

  正是在英国,Bridson 碰到了另一个业内传奇—— Marcus Nordenstam ,他们一起在2008年成立了Exotic Matter公司。Exotic Matter是Naiad流体模拟软件的制造者,这个软件参与了许多震撼的流体特效制作,包括Avatar(阿凡达)、Narnia: Voyage of the Dawntreader(纳尼亚传奇)、X-Men First Class、 Harry Potter and The Deathly Hallows Part 2(哈里波特和死亡圣器2)、Pirates of the Caribbean: On Stranger Tides(加勒比海盗:陌生的潮汐)、Rise of the Planet of the Apes(猩球崛起)等许多电影。Nordenstam现在有超过15年的VFX R&D和特效模拟经验。他联合研发了curl-noise,开创了火焰模拟中FLIP方法的运用,与 Bridson合作设计了喷溅流体模拟器。在参与组建Exotic Matter公司之前,Marcus在工业光魔有高级工程师的职位,在那里他是Zeno项目初始设计者之一。他在银幕上的贡献有 Star Wars Episode II、Spider-Man 2, Hellboy II、Inkheart、 Harry Potter and the Half-Blood Prince 和Avatar。

  作为Exotic Matter公司的一部分,Nordenstam 和公司的其他人深深地投入到关键方向之中,尤其是在公司早期的时候。最紧张之时,他们在新西兰威灵顿的Weta Digital做为R&D部门工作了十个月,制作了诸如Avatar这样的电影。

  Naiad软件获得了巨大的难以置信的成功,如今它有资格代表流体模拟艺术的发展现状。当然没有一个模拟器能做好每一个方面, Naiad因它的可扩展性、可信度和真实性广受欢迎。今天在流体模拟领域有几个主要的公司。Munich-based Scanline Productions (Stephan Trojansky领导) 和它们的获奖软件Flowline,帮助MPC(The Moving Picture Company )公司在Poseidon(海神号)电影中制作了逼真的海水,帮助Scanline冲垮了2012中的大部分建筑,还原了 Clint Eastwood的 Hereafter的恐怖。还有其他许多非定制流体工具,比如Maya、Hodini和其它专家公司或小组比如Blender 3D、 RealFlow、 FumeFX、Dynamite、ICE (Softimage/XSI软件的一部分)、 PhyFluids3D等等许多。但在这个文章中,我们只对Naiad的科学进行试验,对Naiad艺术背后的科学进行深入的研究。

基本概念

  有些流体模拟是主要是关注于表面属性,比如在早期,海水模拟制作出来的半平坦的大洋。最近的模拟都关注于体积,这样既能表达一个倾泻镜头或者洪水在刚体周围冲击的镜头,也能表达水下位置的高度对水表面的影响,即在海滩上陆地降低造成的破碎波(Breaking waves)。上述关于体积的流体模拟底层的一些基本问题列出如下:

  • 质量守恒,即模拟过程(或者说算法)中水不会消失。

  • 动量或能量守恒。

  • 体积守恒->即不可压缩性->不像真实的水,这可能看上去很奇怪,声音不可以在水下传播吗?但对于视觉特效来说,这个假设已经足够接近真实,使数学运算极大地简化

  • 相关加速度(connective acceleration)—空间控制的加速度,例如水流出去或者灌入时作用于流体的主要有两种力,用一两段我们可以用数学把它们表示出来的话说,流体被认为受重力和它自己压力的影响。

  • 对于大多数流体我们忽略了粘度,但不是全部忽略,粘度影响小的时候我们忽略它

  • 边界情况——最后也是最关键的——流体的边界非常重要,那可能是一个表面或者一个分界。在Bridson的书Fluid simulation for CG (2008)中,提到“大多数数字流体模拟的‘趣味’就在于正确地得到边界情况。”有三种情况——固体面,或自由流动的表面,和最困难的,其他液体(最后一种情况在电影中很少见)。

模拟解算斯托克斯方程

  Navier-Stokes方程是一套描述多种流体(包括气体)行为的方程。Navier-Stokes方程已经出现了两百年左右,但如同我们上文中所做的规避,它是一套一般问题的子集,建立在一些特效工业最关注的关键性假设之上。Navier Stokes方程的解并不是一个42之类的数字,它解出一个速度场——或者说一个复合矢量。Navier Stokes方程不指示位置,而是速度。这点很重要,也困惑了很多人——这些矢量不是如同速度一样分布在空间中的点。我们得到的是一个层流等式,描述微粒或者用计算机图形学的术语来说——粒子——在速度场作用下的移动。

  Navier Stokes方程,因Claude-Louis Navier和 George Gabriel Stokes而命名,描述了流体物质的运动。在半技术术语中这些等式是将牛顿第二定律运用于流体运动中而得来(F=ma),但同时也使用了一个说法,流体“压强”,即流体运动趋向的方向,是一个扩散粘度项的综合(与速度梯度成正比),加上一个压力项。

  这个方程很有用处,因它描述了许多理论和经济上感兴趣的物理现象。它们可以用于建立天气模型,海洋涌流,管道水流和翅膀周围的气流模型。Navier–Stokes方程,以完整和简化形式用于航空器和车辆的设计、血流动力学的研究,发电站的设计、污染分析以及其它许多方面。

  Navier–Stokes的一个解叫做速度场或者流场,即描述了一种在一个给定的空间和时间的点流体流动的方法。只要解出速度场,与一个真实可信的镜头有关的其它事情,比如流动速度或者拖曳力就能够被得到。传统机械或者刚体模拟得出的解都是典型的粒子位置轨迹或者运动偏向,这与流体模拟不同。研究速度而不是位置使我们更加了解流体;无论怎样要达到视觉目的,这样都可以计算出不同类型轨迹。这里是一个极简数学模型——建立在上述假设之上,这个“不可压缩斯托克斯方程”就足够了。

blob.png

加速度+某东西+在压力与密度的改变=本体的力+动态的黏度

  但是假定流体是不可压缩的话,黏度的计算就可以被忽略

  加速度+0+在压力与密度的改变=本体的力+0
  整理一下公式会得到:

  加速度=本体的力-压力与密度的变化
  而密度又等于质量除以体积, 压力的改变又与体积有关, 流体的某一点的加速度=重力(外力)-压力,就是密度的改变,因此流体的加速度就与他所受到的力相关。流体的某一点的加速度=重力(外力)-压力或是密度的改变,流体的加速度就与他所受到的力相关。

  这样的公式要怎样实际导入到流体软件里面呢?如果直接把公式写成程序语言很简单,但是实际在计算的时候需要考虑产业需求,计算机运算时间。写实度往往必须跟速度达到平衡。因此实际上需要很多偷步的技巧才能满足不同流体状况。其中一种偷步技巧是Surface Tracking Euler method。他是用Height map来控制流体表面,但是忽略掉水面以下发生的事情。某些软件的解算法并不能满足所有尺度, 从小尺度的倒酒杯到大尺度翻滚海浪上的船。某些则是数学公式上面有缺陷,会导致流体会随着时间让体积越来越小, 例如在测试《加勒比海盗神鬼奇航:幽灵海》里面有一幕玻璃箱装载了美人鱼, 而Naiad则是解决了这方面的问题。

以下是让你可以在合理的时间里面计算出写实流体的一些关键技术点: SPH(Smooth Particle Hydrodynamics)方法是一种用Navier-Stokes的粒子系统,仿真完后再把这些粒子变成polygon。这种方式对于倒酒的流体特效很适合,但是对于如海水般大量流体就会有困难。

blob.png



  Volume Grid 
  只有表面的流体, 又被称为Volume Fluids。例如在Houdini里面,可以很有效率地描述海洋波浪的高度与频率, 这种方法没有粒子, 对于小尺度的倒酒效果不合适. 这种方法通成被称为Euler法。

  FLIP
  FLIP解算法是粒子解算法与volume解算法两种的混合,《加勒比海盗神鬼奇航:幽灵海》美人鱼装在玻璃牢笼里面的流体, 就是用Naiad的FLIP模拟出来的。FLIP跟粒子或是SPH相比最大的优点在于每个Frame需要计算公式的次数不需要这么多,SPH解算法在计算的时候,每个Frame都要计算好几次,有点像是时间上的反锯齿计算,这样的公式往往必须要解算10-100次才有可能得到好效果,要不然很容易产生分子炸开的问题。Houdini也提供三种解算模式,包含了FLIP的方式。针对Houdini 11 Side Effects的资深数学家Jeff Lait说: ” 当FLIP流体被解算的时候, 会暂时产生速度场,粒子的速度场会被转移到grid里面。用来处理流体的弹射方向,这样可以避免粒子重迭,也可以避免它们都往同一个方向移动。FLIP流体的另外一个优点是不同的流体可以迭在一起,不会影响到系统的稳定度。SPH法当两个粒子很靠近的时候很容易就炸飞,对于FLIP来说,你可以添加新的粒子到流体里面,例如石头丢到水里面飞溅起来的分子。

  Naiad案例分享 
  Exotic Matter公司的Naiad流体软件用的方法是PIC-FLIP,deFLIP甚至更先进,但是求发布。Exotic Matter CEO Marcus Nordenstam做了这样的解释: “FLIP用了新的方法来改善以粒子呈现流体的计算方式,每次的模拟过程中我们会从粒子产生grid,把粒子的速度与表面信息转移到grid上面,然后压力会透过grid来计算,而把计算的结果更新到粒子身上,然后粒子再把新的速度转移到grid上面,这样来计算称为一次的step,反复的跑这样的流程可以算出很写实的流体。

blob.png


问: Naiads能允许添加新的粒子吗?例如当石头丢到水里溅起水花。
  答:可以。有很多发射的operators可以做到这件事,不论这是一级流体或是二级流体都可以。

  问: Naiad的精度到多少?你认为还要花很多时间开发才能得到好的精度吗?
  答:Naiad的精度几乎是一等一的。是目前的尖端科技,如果是工程用的流体软件价格是Naiad的十倍,能达到最棒的精度。Naiad还可以同时计算刚体与流体,而大部分的流体仿真软件都是把刚体与流体分开计算的, 这会影响到细节与精度。
  另外一个重点是细节与分辨率,即便是分辨率很粗糙,Naiad也能提供大量的细节,。Naiad不是用传统的方式调整分辨率, 它不是靠单纯固定大小的细胞或是称voxel来计算的。而是以动态的自适应的方式来处理。因此,Naiad的流体不会局限在某个框框里面计算, 这要归功于Naiad独特的3D tiling系统。

  问:有没有可能靠一种方式就能计算所有尺度的流体呢? 
  答:Navier- Stokes方程式可以应用到分子般大小的尺度都可以,也可以适用于大尺度上面,所以物理上方程式都是通的,唯一的差别是在不同尺度上面某些方程式变得比较重要,例如在小尺度的世界里面,表面张力的影响很大;但是大尺度里面,表面张力就可以忽略。

  问: 在做需要计算黏度的项目的时候, 要考虑到什么? 
  答:Naiad会计算黏度, 不同于其他软件Naiad会分别计算速度的向量, 因此结果会更精确, 也因此Naiad算出来的黏稠流体会有写实的缠绕效果。从用户的角度来看, Naiad调整黏度很容易使用。甚至还可以用3D材质来控制黏度的变化,同样的观念也可以用来控制流体的密度。

  问:Naiad可以怎样整合到工作流程里面? 要怎要输出到Houdini?
  答:没有预设的输出。但提供里一个图表,有点像是Nuke里面合成的节点那样。Naiad图表般含了File Operators,可以让你把数据快取到硬盘里面,你可以输出成mesh,也可以输出成3D场的数据,例如速度,也可以输出成粒子。
  Naiad图表里面也有render operators。目前只支持Solid Angle’s Arnold renderer,而我们也有跟Chaos Group合作,让它支持使用V-Ray。所以输出的时候不只是可以输出成mesh甚至还可以算图! 最常用的整合方式是透过我们的外挂软件。例如Maya与Houdini的外挂。例如你可以把动态的角色自Maya输出/输入到Naiad,计算流体模拟,然后在把数据导回到Maya里面。

  问:关于当今流体方面的研究有趋缓吗? 变得更加成熟?
  答:当今大部分的研究都希望用最新的硬件架构让计算更有效率, 但是对于多物理(multiphysics) 例如同时计算流体与软件或是刚体,这方面的研究还有很多要做。

  问:我们如果用Naiad来算流体 速度会多快? 
  答:跟分辨率有关。 Naiad很稳定,不管你计算的step有多少次。如果step太少的话结果会过于平滑,所以大部分的人会用多一点的粒子,高分辨率来计算出写实的流体效果。



RealFlow简介

RealFlow是由西班牙Next Limit公司出品的流体动力学模拟软件。它是一款独立的模拟软件,可以计算真实世界中运动物体的运动,包括液体。RealFlow提供给艺术家们一系列精心设计的工具,如流体模拟(液体和气体)、网格生成器、带有约束的刚体动力学、弹性、控制流体行为的工作平台和波动、浮力(以前在RealWave中具有浮力功能)。你可以将几何体或场景导入RealFlow来设置流体模拟。在模拟和调节完成后,将粒子或网格物体从RealFlow导出到其他主流3D软件中进行照明和渲染。

RealFlow专用于水面波浪的模拟,如海面、落入物体后水面泛起的涟漪、行驶在水中的船(包括破浪泛起的粒子水花和产生的水面拖尾),能够完成的项目包括:物体落入水面后激起波浪,并且随水面上下波动,还能产生溅起的水花。粒子落在水面上泛起的涟漪。在水面上快速运动的物体产生尾迹、水花和波浪,常用于船只的航行模拟。表现动态、自然波动的水面,如湖泊、水池、海洋等,还能产生海水拍岸溅起海浪水花的效果。

RealFlow在电影、电视剧、广告、游戏等领域均有非常广泛的应用。

RealFlow应用的电影有:《冰河世纪4》,《复仇者(2012)》,《洛杉矶之战》等等大型国际电影。

blob.png



欢迎关注微信公众号:南流坊

默认 最新
当前暂无评论,小编等你评论哦!
点赞 评论 收藏
关注