25Sep

动态海洋制作技术的摸索与实践

时间: 2014-9-25 分类: 经验分享 作者:CG风火连城 7292 次浏览

TAGS: , , , , ,

  《天下3:八歧大蛇》CG过场动画中的海洋特效,是本片的最大难点,在最初听到导演对片中海洋镜头的描述后感到压力巨大,后来一想也是个挑战自我的机会,如果能把海洋这块拿下,对自己来说也是一个提升。在这种想法支持下把压力转化为动力,遂由浅入深的开始进行尝试与摸索。
  原片地址:http://v.youku.com/v_show/id_XMzk4NDI5MDAw.html
  Technical Showreel:http://v.youku.com/v_show/id_XMzk4NDAzNDY4.html

  从外观的角度来说,真实的海洋动态效果是一系列自然现象的集合,包括海洋主水体动态、主水体与浪花之间的转换、浪花与海面泡沫之间的转换、主水体与礁石、船体等的交互作用等等。这些自然现象完全是根据水与空气的物理特性自然形成的,从计算模拟的角度来说,可以理解为“无限精度的流体/粒子动力学计算的结果”,在计算机中可以使用经过参数提炼的、有限精度的动力学解算工具来计算大面积的海域以及在海水交互作用力下产生的浪花与泡沫,在精度足够高的情况下,我们也能得到尽可能接近真实海洋的效果(经典情况就是使用houdini、realflow或naiad来“生算”动力学效果),不过代价就是高昂的硬件成本和解算时间成本。在本片中考虑到有限的时间预算,因此我并没有走“生算”这条路。而是尽量采用手动模拟的方法,把现实中的水体效果抽象化,提取核心特征/核心参数,并在三维软件中加以模拟。

  我个人习惯把海洋特效分为海面表面、浪尖浪花、与物体交互浪花、海面泡沫这四个部分,要把这四个部分都做好,首先必须做好“能够显示并调节的海洋变形平面”。

  第一阶段 海面的制作方法

  承上文所述,这种“能够显示并调节的海洋变形平面”的原理通常是由程序纹理(Procedural Texture)所驱动的多边形顶点动画(Polygon Vertex Animation),所以制作的关键点就在于海洋程序纹理的仿真度以及驱动多边形顶点动画的执行效能。1

  《天下3:八歧大蛇》项目中用到的海洋程序纹理分为两种,一种是Maya自带的OceanShader(包括OceanTexture),另一种是Houdini Ocean Toolkit for Maya(简称为HOT for Maya,算法基于Jerry Tessendorf 所撰写的siggraph海洋论文)。使用这两种海洋程序纹理所对应的驱动多边形顶点动画的组合方案共有四种,总结如下:

海洋程序纹理

海洋动态效果

多边形顶点动画驱动技术

执行效能:单位FPS,越高越好

CPU线程使用情况

OceanShader

(OceanTexture)

良好 Interactive Displacement 3.0方法 1.3 单线程
OceanShader

(OceanTexture)

良好 softbody使用colorAtPoint方法 5 单线程
OceanShader

(OceanTexture)

良好 displaceD方法 10.4 单线程
Hot For Maya 优秀 HotOceanDeformer

(HOT for Maya组件)

20.1
单线程

  从表格可以看到虽然OceanShader(OceanTexture)对应有三种顶点动画的驱动技术,但无论是从动态效果还是从执行效能上看都不及HOT for Maya配合其自带的hotOceanDeformer方案,但为何本项目中还会同时用到两者呢?因为OceanShader(OceanTexture)+displaceD的方案在处理“异形海面坐标偏移”的情况时具备HOT for Maya所没有的优势。

  综合考虑,本项目中选定的海洋表面制作方案为:
  1)、OceanShader(OceanTexture)+DisplaceD;
  2)、HOT for Maya。两种方法的初始设定(setup)工作均经历了不断的调节与测试,设置好的节点连接图如下图所示:23  海洋表面渲染合成测试如下:
4  一号镜头的测试渲染结果如下:5

  第二阶段 浪尖浪花的制作

  在确定好海洋表面的制作方法后,接下来需要制作的是海洋表面浪尖出所形成的浪花效果,我使用了Maya的粒子系统来制作浪花,在使用粒子系统来制作浪花时需要考虑三个因素:发射边界条件、粒子动态以及着色与渲染。
发射边界条件:在本项目中我使用高度、velocity和noise函数来确定粒子发射的边界条件。6  粒子动态:我使用particle expression_r(粒子表达式)和力场来控制粒子的动态,需要注意的是:海面的动态效果好坏直接影响到发射出粒子的动态效果。7  着色与渲染:本片中的粒子渲染我用得最多的是3delight渲染器,其次是maya自带的硬件渲染器和Mentalray。3delight再经过一定的设置后,能够非常快速的得到带运动模糊与阴影的粒子渲染结果。8

  第三阶段 与物体交互的水花

  与物体交互浪花指的并不是一种方法,而是一类特效,在这一类特效里,为了应对不同镜头机位、不同情况下的浪花,使用的手段有很多种,例如:1手k动画、2提取与海面的交线、3表达式控制粒子分布、4流体力学解算、5渲染成素材在合成环节反复调用等。
  下图为手k动画控制的水花在某一喷溅状态的渲染效果:9  下图所示效果是在上面图所生成的六套水花渲染序列被作为素材,在合成环节被反复调用的效果:10  下图为超近距离的水花渲染,通过手k动画、表达式、场等多种方式来控制粒子形态,用3delight来完成粒子的渲染,图为其中一帧的渲染素材:
11  下图为提取海面与礁石的交线发射浪花,用表达式控制粒子形态分布,并设置好与礁石模型的碰撞:
12

  第四阶段 海面泡沫的制作

  海洋表层的泡沫是构建大风大浪类型海洋所不可或缺的一部分,在本项目中为了得到漂亮的泡沫分布形态而使用了大量的粒子表达式,在不断的调节——反馈——调节的过程中测试了约莫8个版本后得到了项目中能够使用的效果的基础模板,如下图所示:
1314  基础的模板做好之后,还要想办法将之跟随海洋表面一同运动,也就是要使粒子漂浮在海洋表面上而不是XYZ空间中,意味着要将粒子从三维世界坐标系转换到海洋模型的UV坐标系下,于是对表达式再次进行修改,并反复调节参数以达到之前在XYZ世界坐标下所得到的效果,如下图:
1516  在以上工作完成后,便可以将这些测试成果应用到实际镜头中去,虽然针对实际情况免不了有些意想不到的问题与修改,但由于有之前的测试积累,问题都被一一解决。海面泡沫效果在实际镜头中的应用如下:
1718

  补充

  1、Mentalray(for Maya2011)在渲染displacement的时候,某些机位下,某些帧会忽然占用大量的内存,制作时需要考虑该状况。
  2、HOT for Maya2012_64bit在渲染置换时会出现隔帧闪烁的情况,目前的解决办法就是一个后台渲染进程只渲染一帧,渲完后再启动下一个后台渲染进程。

CG风火连城

本文作者: CG风火连城

原文地址: http://blog.sina.com.cn/s/blog_760e11a901012m08.html想要投稿?

喜欢我们的文章请您与朋友分享:

相关文章:

Comments

目前有 4 条精彩评论

  1. 旅行者
    旅行者 发表于: 2014-10-6 21:20:31

    效果很逼真啊,科幻电影估计就是这样做出来的吧

  2. 梦轩丽人
    梦轩丽人 发表于: 2014-9-29 14:22:51

    看起来很厉害啊,如果学会这些技术,都可以自己慢慢打造出一部大片出来了

  3. 偏方
    偏方 发表于: 2014-9-29 09:48:43

    好专业的术语啊。

  4. 大A
    大A 发表于: 2014-9-25 11:21:31

    不错,干货。

Comments
发表评论

电子邮件地址不会被公开。*标记为必填选项

按 [ Ctrl+Enter ] 键直接提交

  • 正确格式为: http://www.anzyu.com
返回顶部