分享

[干货]冰雪奇缘2中特效技术分析-CG猎人解读

 cghunter 2021-04-16

——  微资讯 · 微课程  ——

利用零碎时间,走上超神之路!


简介

Sidefx houdini发布了迪士尼《冰雪奇缘2》中的各种特效制作分析,包含了很多技术干货。但是由于里面设计了一些houdini专业的名词/术语,以及混合了大量的人名和其他介绍,表面看起来有点难。但是如果有houdini基础,阅读起来应该没问题:

原文地址

https://www./community/frozen-ii/?fbclid=IwAR0wYqz3-tfWFKjcenSKKQoWBY91vgNSMnBmxL2r2TGiA9DtkwB3zFPdt5w

小编这里结合自身的houdini知识,并且对文章做了优化了和重点总结(删除了所有人名和不重要的信息)花了一天时间整理出了这篇文章(重点内容加粗),希望对大家有所帮助。

文章总结

整体特效概述

1冰雪奇缘2在第一部的基础上不仅提升了冰雪模拟的技巧,还涉及了多种多样的巨量的特效模拟
2我们有风火水土四种精灵,拟人化的表现效果叠加各自属性的特性。制作这些内容需要各个部门的通力协作(layout,角色动画,技术动画和灯光)
3风精灵的设定是传递感情和想法,但是风看不见,需要通过迷雾森林中与各种植物的交互进行体现。
4水精灵,马形体,必须在水面和水底都可以看得清楚,还需要结冰的过程。
5火精灵,通过魔法火焰可以燃烧森林,并且需要于Elsa的冰交互抗衡的作用。
6土精灵,由巨大岩石构成的巨人,吵醒他们之后他们会丢巨石进行毁坏周围物品。这些巨人最后砸毁了大水坝。
7还有Elsa 贯穿全篇的魔法特效。
8为了创建如此大量的并且种类繁多的特效,houdini是核心的pipeline,提供了便捷与能力处理巨大或者精细控制的特效。

水特效

其中一场巨量海水模拟就是Elsa要突破巨浪,5倍于Elsa的高度。这个镜头需要自定义高度和频率,既考虑到模拟的特性,也要结合程序化控制。
1我们使用了houdini flip内置的wave tank rig,结合了 hird-order Stokes方程驱动海浪。这个函数方程是直接使用vex编写,封装成HDA,可以让艺术家方便调整海浪的波长和强度,基于这些生成一个矢量,驱动模拟。

2为了增加真实性,我们添加了airfield(空气扰动场)对海水进行模拟。我们在flip模拟的时候添加了低密度的粒子,并且能够在海浪模拟的时候让这些粒子脱离海浪主体,由airfield进行驱动。然后再提取这些粒子的速度场,再次驱动三级粒子(用来模拟水雾粒子)
3再做基础海浪模拟的时候就需要交给动画部门进行动画测试,因为这里涉及到Elsa踏浪时候脚步与海水的交互的问题。
4在高潮部分,Elsa创建了一个超级巨大的冰块结构(超越25英尺的巨浪)这个冰块的结构的设计是基于Elsa魔法特性设计并且建模,让特效师能够更好控制破碎和分崩离析的效果。houdini可以让我们结合flip模拟,流体雕刻,RGB模拟和冰块建模等多方面技术和需求,高效地整合各种元素。
5本片的另外一个高潮就是水坝崩塌巨量洪水冲向Arendelle,我们采取了多种技术叠加混合的效果。
对于山谷洪水镜头,我们模拟了一个2km长,300m宽的低精度流体,主要是给layout部门设定相机,这样layout不能就能确定重点有意思的洪水画面。在这个反馈基础上再做中高模拟以及各种浪花,雾气粒子的模拟。

6当Elsa骑着水精灵在海浪上面的镜头,使用了不同的方法。难点就在于洪水需要看起来很危险但是又必须看的清楚角色。我们跟着角色动画同步雕刻/修改流体发射源,让flip模拟具有很高的可预见性以及控制性。
The Mist 迷雾
当角色进入到迷雾森林,遇到了一个50英尺厚的不可穿过迷雾墙。这里的难点就在于既有特写镜头又有远景镜头,我们最后选择模拟+实例化拷贝的方法。
1我们先创建了一个墙壁模型,转化为VDB
2基于这个VDB模型做碰撞,计算了vellum布料,类似一块巨大的窗帘布。为了增加顶部褶皱和变化,我们添加了rest 状态控制。这种方法能非常快速得到最终想要的效果。
3我们解算了十几个 1000frame的pyro模拟,使用了非常强烈的distrubance和方向流动控制
4在每次pryo模拟的时候同步让流体驱动粒子得到粒子版本,这些粒子可以渲染单独的散光片层
5对于pyro VDB缓存和粒子缓存我们使用了相同的路径和名字,展示后缀格式不一样(一个是.vdb另外一个是.bgeo)
6 我们设置好了vdb实例化(对frame进行偏移,可以得到各种变化),当需要切换到粒子渲染时候,只需要更改一下后缀名,这个效率非常高。
7基于vellum布料的曲率生成发光发体积
8打开这个迷雾墙类似于打开多重的窗帘,使用这个动画缓存同步驱动体积和粒子实例化。只是在边界与Elsa与互动的部分重新做了pyro解算。
基础特效的作用
在工作室自身的基础特效工具套装中的 TempFX tool工具,迪斯尼可以快速创建低质量的流体代理用于各部分的协作。这是各个不同部分协同合作的关键。
这个对于Elsa在黑海上与海浪搏斗的镜头特别有用,可以同步交给layout和动画部门。这个对于峡谷中的大洪水的制作同样流程。场景模型之前没有考虑到水的速度,通过这个匹配,最终把峡谷模型缩小了一半,这样流体解算的速度就正确了。

水精灵Nokk

基于对真实马的观察设定Nokk这个角色。在做水特效的时候,我们的目标就是尽量保留动画中Nokk的微表情,动作姿势。同时又要叠加水和光的特性。

1特效师首先基于Nokk身体的动画生成拖尾曲线,用于POP粒子模拟,基于相邻的粒子计算自身坐标排斥力,模拟水流的效果,使用了了POP和VOP模块的辅组。

2这个基本的模拟用于三个渲染图层 A partilefluid surface 转化为mesh,使用水材质渲染。B把这粒子rasterize栅格化成volume,使用体积材质渲染 C直接对粒子渲染,作为离散的小水滴。
3最后,使用这些粒子转化为pyro发射源,生成pyro再次驱动细小的悬浮粒子,同样直接渲染为不透明的粒子。
4马的身体部分重新高细分采样,基于运动状态添加了noise或者ripple solver,这些控制可以基于角色运动的状态以及交互生成正确的水纹理。
5对于身体内部,我们创建了体积结构,这些结构是基于摄像机视角创建的,包含了vector fields矢量场用于定义albedo和emissive的发光效果。
6对于马蹄也有特殊要求,因为是水做的马蹄,所以在接触的时候也是具有水的特性。动画已经制作了一些形变模拟,比如分裂,形变和拉神等。交给到特效师的时候,我们加强了从腿部拖尾出来的流体。制作原理就是从腿部运动生成平滑的拖尾曲线(resample+转化为nurbs)基于这条曲线做pop粒子发射。
7对于Nokk变成冰的特效,用了2种方法
当在水底的时候,转化的过程从模型表面到内部,scatter到马的身上,使用了一个k了动画的小球,属性传递到,使用了sop solver 进行累计叠加(经典的生长/拓展动画技巧)伴随着材质切换。
8冰块的设定效果是look部分提供,基于Elsa的特效设计,通过solver sop解算得到的递增衔接的mask,用于做水和冰之间的过渡切换。并且由冰晶和水蒸气覆盖加持。

火精灵和森林大火
火的特效主要包括火精灵和森林大火。工作室的TD已经提前优化和分装好了带有火焰的树木资产。
layout部门与特效部分紧密协作,由于有了快速预览,在最终解算之前layout部门就可以快速预览和确定火焰的效果,从而更好地设置相机和构图。
我们TD团队使用python开发的工具dubbed firestater,通过视图选择,layout团队就可以快速定义着火的位置点。Maya中会显示为粉色区域。特效解算。在houdini中,每颗树都是在原点进行pyro解算。pyro 解算后的VDB,叠加Hyprsion材质以余烬粒子会整体打包发布(Hypersion是 Disney动画工作室的渲染器)
这样打包发布的数据资产,可以让艺术家修改树,可以选择不同着火的版本(包含了各种着火信息)
对于火精灵自身,有两种状态,一种是着火的,一种是熄灭的,但是带有火星的。对于快速运动的时候,使用了预先降低速度的传统方法处理。

风精灵 Gale

因为风不可见,所以只可以对场景物体k动画进行表现
1动画部分先使用一个代理模型用于可视化风的位置,方向,影响宽度和长度
2基于这个代理动画物体,在houdini中生成曲线动画,并且在点中存储了驱动交互的属性
3特效团队与环境团队密切合作,我们用来各种流程和数据,但是最终都是bgeo进行存储。通过结合bgeo以及迪士尼自身的CAF格式,特效艺术家使用自定义的OTLs快速加载整个环境数据资产,使用了delayed load packed primitive优化模式。
4通过使用packed primitive,数据轻量化非常容易控制,对于大部分的情况,像落叶和简单的植物动画,都可以基于pack点进行动画设置,完全不需要unpack。这样可以综合使用DOP,POP和vellum solver得到快速又方便的解算效果。
5有时候Gale是龙卷风形态,使用houdini的pyro solver解算以及sop中控制的debris,使用sop直接对碎块和体积进行形变和动画处理。
6有时候gale又与小雪花交互,使用pyro 的速度驱动粒子运动,然后实例化雪花粒子到粒子上,叠加上一层薄的pyro解算volume。对于看起来复杂的效果只需要简单的解决方法。

大地巨人
动画与特效部门的合作,由巨石构成的巨人
1记录了巨人步幅,每次都是实例化一个ripple到脚踩的位置,然后由整个ripple涟漪驱动周围的植被,形成震动,既有衰减,也有时间偏移。

2还有就是巨人与植被的交互,使用了vellum curve based流程,用于树木碰撞影响。
3还有就是当树木受到足够的力,树叶会自动脱落,在pop中解算。

Destruction FX 坍塌破碎
对于大坝的镜头,是电影的高潮部分,要设置一套流程可以让各个部分都快速参与进来,正确设置。
由于整个镜头主要是靠特效驱动的,所以流程和其他部分有点不一样。所以大巴破碎的效果制作是早于layout和相机设置,包括都动画。
整个镜头也是包含了大全景和特写镜头,所以模型材质以及特效都必须要做到真实细节和不能重复。
一旦特效解算通过了,就会交给layout和相机部门进行调整,之后就是动画和技术动画,然偶就是加各种破碎细节,烟尘,水特效是在破碎之后添加,水是基于RBD破碎进行计算的。一次性解算比较长的特效可以运动用在不同镜头。

Ice visions 冰块
这些特效需要很高程度的自定义,我们结合了程序化和关键帧动画。我们先让动画单独构成一个个元素,比如小鹿或者树,然后通过python脚本进行缩放
我们基于houidni strokes SOP封装出了rotomation toolset工具包,可以给特效快速添加 手k动画的效果。对曲线或者surface表面k动画,这对现象自身有连续的uv,可以实例化复制点,用于动画控制。
另外一个方法是使用了vex来实现 quasi pops like效果,使用了均化后的age年龄属性来采样曲线或者surface表面的位置。我们可以通过ramp渐变实时控制效果。

Elsa'Magic
Elas的魔法从开始的优美,欢快的效果转变为后面强烈有力的扑灭火焰和抗击暗海的魔法
工作室添加了模块化的特效,大部分都是基于sop完成。对魔法特效的拆解block,使用曲线代理古怪顺滑的粒子特效,大的圆锥形作为攻击性的冲击波。这样可以让艺术家在真正制作之前更加专注于位置,形态和时间。

欢快的粒子是使用Pops基于曲线进行扰动,附加了mist和发光的体积。
对于大的冲击波,我们使用的程序化贴图volume,通过一个形变的坐标空间。整个数据用于生成额外的mist,粒子和森林材质覆盖。

重要信息

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多