近期热门
粉丝2708
关注 3
获赞 10680
首页 CGJOY论坛 特效作品交流 特效参考+源文件
《天下3:八歧大蛇》特效制作花絮 ——动态海洋制作技术的摸索与实践(转)

[特效参考+源文件] 《天下3:八歧大蛇》特效制作花絮 ——动态海洋制作技术的摸索与实践(转)

 !heats_icon! [复制链接]
3975 1 0 5 9年前 举报


原片:
Technical_showreel:
《天下3:八歧大蛇》CG过场动画中的海洋特效,是本片的最大难点,在最初听到导演对片中海洋镜头的描述后感到压力巨大,后来一想也是个挑战自我的机会,如果能把海洋这块拿下,对自己来说也是一个提升。在这种想法支持下把压力转化为动力,遂由浅入深的开始进行尝试与摸索。
从外观的角度来说,真实的海洋动态效果是一系列自然现象的集合,包括海洋主水体动态、主水体与浪花之间的转换、浪花与海面泡沫之间的转换、主水体与礁石、船体等的交互作用等等。这些自然现象完全是根据水与空气的物理特性自然形成的,从计算模拟的角度来说,可以理解为“无限精度的流体/粒子动力学计算的结果”,在计算机中可以使用经过参数提炼的、有限精度的动力学解算工具来计算大面积的海域以及在海水交互作用力下产生的浪花与泡沫,在精度足够高的情况下,我们也能得到尽可能接近真实海洋的效果(经典情况就是使用houdini、realflow或naiad来“生算”动力学效果),不过代价就是高昂的硬件成本和解算时间成本。在本片中考虑到有限的时间预算,因此我并没有走“生算”这条路。而是尽量采用手动模拟的方法,把现实中的水体效果抽象化,提取核心特征/核心参数,并在三维软件中加以模拟。
我个人习惯把海洋特效分为海面表面、浪尖浪花、与物体交互浪花、海面泡沫这四个部分,要把这四个部分都做好,首先必须做好“能够显示并调节的海洋变形平面”。
1、第一阶段——海面的制作方法(图14)
图14:海洋表面测试
承上文所述,这种“能够显示并调节的海洋变形平面”的原理通常是由程序纹理(Procedural Texture)所驱动的多边形顶点动画(Polygon Vertex Animation),所以制作的关键点就在于海洋程序纹理的仿真度以及驱动多边形顶点动画的执行效能。
在《天下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)工作均经历了不断的调节与测试,设置好的节点连接图15、16:
1.jpg
图15:Ocean Shader(Ocean Texture)+DisplaceD制作海洋表面的节点连接图
图16:HOT for Maya制作海洋表面的节点连接图
海洋表面渲染合成测试如下图17:
3.jpg
图17
一号镜头的测试渲染结果如下图18:
4.jpg
图18
2、浪尖浪花的制作
在确定好海洋表面的制作方法后,接下来需要制作的是海洋表面浪尖出所形成的浪花效果,我使用了Maya的粒子系统来制作浪花,在使用粒子系统来制作浪花时需要考虑三个因素:A、发射边界条件;B、粒子动态;C、着色与渲染。
A、在本项目中我使用高度、velocity和noise函数来确定粒子发射的边界条件。如图19:
图19
B、粒子动态部分,我使用particle expression_r(粒子表达式)和力场来控制粒子的动态,需要注意的是:海面的动态效果好坏直接影响到发射出粒子的动态效果。如图20:
图20
C、本片中的粒子渲染我用得最多的是3delight渲染器(如图21),其次是maya自带的硬件渲染器和Mentalray。3delight再经过一定的设置后,能够非常快速的得到带运动模糊与阴影的粒子渲染结果。
7.jpg
图21
3、与物体交互浪花
与物体交互浪花指的并不是一种方法,而是一类特效,在这一类特效里,为了应对不同镜头机位、不同情况下的浪花,使用的手段有很多种,例如:1手k动画、2提取与海面的交线、3表达式控制粒子分布、4流体力学解算、5渲染成素材在合成环节反复调用等。
图22是手k动画控制的水花在某一喷溅状态的渲染效果: 8.jpg                                            图22
外加一张或多张gif序列图,展示动态及测试playblast
图23演示的是在图22中所生成的六套水花渲染序列被作为素材,在合成环节被反复调用的效果:
9.jpg 图23
图24为超近距离的水花渲染,通过手k动画、表达式、场等多种方式来控制粒子形态,用3delight来完成粒子的渲染,图24为其中一帧的渲染素材:
10.jpg
图24
图25为提取海面与礁石的交线发射浪花,用表达式控制粒子形态分布,并设置好与礁石模型的碰撞:
11.jpg
图25
4、海面泡沫的制作
海洋表层的泡沫是构建大风大浪类型海洋所不可或缺的一部分,在本项目中为了得到漂亮的泡沫分布形态而使用了大量的粒子表达式,在不断的调节——反馈——调节的过程中测试了约莫8个版本后得到了项目中能够使用的效果的基础模板,如下图26、27:
12.jpg
图26:海洋表层漂浮泡沫的形态模板
图27:部分粒子表达式设置
基础的模板做好之后,还要想办法将之跟随海洋表面一同运动,也就是要使粒子漂浮在海洋表面上而不是XYZ空间中,意味着要将粒子从三维世界坐标系转换到海洋模型的UV坐标系下,于是对表达式再次进行修改,并反复调节参数以达到之前在XYZ世界坐标下所得到的效果,如下图28、29:
14.jpg
图28:表面漂浮的泡沫的测试效果
图29:基于UV坐标的表达式设置
在以上工作完成后,便可以将这些测试成果应用到实际镜头中去,虽然针对实际情况免不了有些意想不到的问题与修改,但由于有之前的测试积累,问题都被一一解决。海面泡沫效果在实际镜头中的应用如下图30、31:
16.jpg
图30:大漩涡的表面泡沫制作
图31:大漩涡镜头的最终效果(图片颜色有损失,见谅,视频效果比图好)
--全文完--
补充:1、Mentalray(for Maya2011)在渲染displacement的时候,某些机位下,某些帧会忽然占用大量的内存,制作时需要考虑该状况。
2、HOT for Maya2012_64bit在渲染置换时会出现隔帧闪烁的情况,目前的解决办法就是一个后台渲染进程只渲染一帧,渲完后再启动下一个后台渲染进程。


0
点赞
0
打赏
5
添加到收藏夹

0

点击复制链接

使用微信扫码分享
一次扣10个券
全部评论1
您需要登录后才可以回帖 登录

好高端~  ~
9年前
回复

使用道具 举报

您当前使用的浏览器IE内核版本过低会导致网站显示错误

请使用高速内核浏览器或其他浏览器