楠木轩

知乎日报:3D动画里的流体一般是怎么实现的?

由 机东林 发布于 经典

  3D 动画中的流体一般是怎么实现的,

  - 是解微分方程吗?还是用某种假的物理模型?或者就是直接控制反光什么的让流体感觉在流动?

  关于微分方程数值解以及流体模拟技术上的细节, 我不多说, @Raymond @叛逆者 他们讲得都有覆盖了。

  我特别要讲一讲针对于动画和电影制作的话, 最有趣的莫过于“不滞于物”这四个字, 真正使用到的, 其实并不是这几种方法中的任何其中一种, 而是所有的方法的集合,而其目的,则是围绕着两个核心:“真实性”与“可控性”

  出于真实性的需求, 我们可能需要解微分方程,出于可控性的要求, 我们有时则不得不调整对方程数值解的依赖。

  这是来自于一本早期的工业光魔制作的影片, the abyss。 也是很早的运用计算机成像技术制作特效的影片之一,像这样的镜头, 并不是由数值算法解算得到, 而是对于动画师手调的 mesh 进行正确的材质渲染得到的, 但这个镜头中最值得注意的反而是这个虚拟的影像对于真实的演员的手指的倒影,这个倒影该如何制作呢? 是在虚拟制作的时候做了一个虚拟的手然后进行反射运算, 还是在实拍的时候放置一个反射球在对应位置之后在后期把反射给取出来调整进画面? 哪一个成本更低呢?亦或是什么更聪明的办法?这才是好莱坞比全世界的电影制作厉害的地方,他们有太多解决细节问题的经验了,而恰恰是这样的细节把握, 大大增加影片的可信度的根本。这些经验, 是买不到的, 也是研发不出来的。 只能是在不断的尝试不断的失败和成功中积累出来的, 都在谈什么叫工业化, 这就是工业化的其中一块。

  然后我们再来看看另外一本大家耳熟能详的影片特效制作:

  这里有几个很值得注意的问题, 既然我们可以用 CG 合成, 为何还要花钱造一个真实的水池? 为何虚拟拍摄屋的布景要那样放? 多放的那块白布平添了更多的抠图成本, 却为何要在那里? 单造一个水池还不够, 为何还需要造浪设备?所以这一点又完美体现了好莱坞影视制作中的工业化水准: 即使我一个镜头已经准备好是用 cg 合成了, 我也需要在虚拟实拍的布景上尽可能地还原目标情景。

  - 之所以需要一个真实的水池是因为在阳光的照射下, 水面会反射阳光, 可能在船体以及角色身上打下复杂的光斑, 这很难通过后期去添补。

  - 之所以要造浪, 是需要船体的运动规律是符合在海中漂泊的情况, 如果离开了造浪器, 那镜头中船的运动就有瑕疵了。

  - 之所以要挂白布, 是因为效果镜头中的对应方向是有一大片白云的, 所以需要一块白布去制造出更贴切的自然光漫反射或散射效果, 令角色身上的光影更为可信。

  我再列举一个大家很眼熟的镜头

  来自于迪斯尼的冰雪奇缘中的 elsa 公主, 对于这本影片中所运用到的雪的模拟运算我不说, 我倒是特别想强调一下影片中 Elsa 公主放小法术时诸如画面中这样的流体模拟, 又是一个很好的“控制”>“真实”的例子, 在诸如这样的需求中, 导演对流体运动的形态, 动量都有很显式的要求, 而同时又希望其运动规律在一定程度上符合流体的运动规律。 在这种情景中, 如何开发出程序去高效地控制流体的运动, 做到所要即所得, 一点也不是容易的事。

  最后还是总结一下, 3D 动画里的流体一般是怎么实现的, 其实是没有“一般”这个说法的, 所有的方案, 都要针对镜头来具体问题具体分析。 国内导演的特效化思路还是比较落后, 很多镜头, 并不只是“这个镜头特效能不能做”这么直率单路的问题就能回答的, 而应该是说“这个镜头如果要特效来做,那么应该怎样做?”