【TECH】MORE VFX《流浪地球》视效解析Part6 · 运载车的动画与绑定制作
小more要向大家介绍的是MORE VFX动画部门以及绑定部门在《流浪地球》 中主要参与制作的部分镜头视效解析。 绑定部门主要负责了片中部分车辆的绑定与工具开发;动画部门主要负责的是片中出现的高科技车辆及科幻道具、坠落的石头和部分三维角色的动画制作。
《流浪地球》对MORE VFX各部门来说都是一个前所未有的项目。它不仅资产数量多,资产的比例也相当庞大,片中赤道转向发动机的高度就超过了十公里,比珠峰还高。除此之外,电影镜头从一台车的维度,逐渐拉远,变成一个宏观的视角,拉至地球之外、宇宙之中的长镜头的制作,也是很有挑战性的一部分。所以,各部门之间的相互协作显得尤为重要。
【动画制作】
动画部门接到的任务制作量最庞大的是开篇时从矿区一镜到外太空的超长镜头和最后车库部分的超长镜头,这两个镜头极具挑战性。一来两个都是一镜到底的长镜头,二来都涉及到大全景,需要制作大量的车辆、机械及三维角色的动画。
【开始之前先进行动画预设】
动画部门制作的车辆体积非常大,如此大的车辆在道路上行驶时自身也会产生一定的震动和晃动,考虑到后续会有大量车辆行驶动画出现在镜头里,动画部门艺术家决定先做一些车辆动画预设来进行后续的批量使用。动画预设包括车体的震动与晃动,车辆的走停等,在后续的制作过程中使用公司自己的工具进行动画的批量导入并进行随机化处理,这些都节省了大量的人力和时间成本,大大的提高了制作效率,缩短了制作时间。
还有一个比较关键的地方是,我们在跟视效总监进行方案制定的时候发现大型斗车或拖车在路上行驶的时候车头和尾部会向斜下方倾斜,形成“入”字样。我们将这个细节加入到动画的制作当中,让车辆本身更具有说服力。
【绑定给予的强力支持】
有几场戏在矿坑里发生,由于矿坑的地面环境凹凸不平,所以车辆在这种路面上行驶时就不是简单的晃动,而是要按照地形的起伏进行非规则性的震动。这种动画如果单纯用人力进行制作相当耗时,为此绑定部门搭建了一套车辆轮胎及车身与地面交互的自动演算方式,按照这套设置进行常规操作后,车辆的轮胎及车身就会依照地面起伏进行非常自然的运动,后续再由动画部门把车辆的行驶轨迹做好。
【大量现实生活当中车辆动态参考】
影片有一些车辆之间以及车辆与场景相互碰撞的镜头,为了使动画看起来更加真实可靠,动画部门艺术家参考了大量的写实影片、纪录片,从这些参考当中提炼出车辆碰撞的运动规律及量感的体现进行制作,让如此庞大的家伙看起来更加逼真写实。
【CG角色的动画制作】
制作时所使用的数字角色并不是很多,基本上拿到需要制作的镜头之后按照需求寻找相应的参考,或者动画部门艺术家亲自进行演绎之后开始制作,也是一段很有趣的过程。
除了上述机械和角色类的动画之外,辅助类的动画制作的也比较多,占比最大的是坠落点的掉落物部分,由于这些物体会涉及到表演及构图等,所以借由动画部门制作,这样可以更加实时的去观看效果,反复修改的时候可控性更高,避免产生不必要的时间及人力的浪费。
由于前期的准备工作做的相对较为完善,所以制作的过程当中没有遇到太多的问题。与上下游组的频繁的沟通也是项目得以顺利完成的关键。
【绑定制作】
绑定部门在项目中不仅要负责绑定任务,还要考虑如何优化资产并开发工具,协助其他部门在体量与数量都如此庞大的环境下,进行批量生产。也因为这样,在单一个镜头中,除了场景,可能还会同时出现几十、甚至几百个绑定,这对镜头环节来说,是相当大的压力。
和过去的项目一样,绑定部门是模型与动画之间的桥梁,负责为静态模型添加设置,让动画师能在设置上尽情表演。而与与过去不同的点在于,项目中有许多问题都不能只依靠单一软件、单一部门自行处理,需要每个部门跳脱现有流程、部门框架,来回测试解决,因此跨部门合作成了这个项目的重点。对绑定部门来说,承担的不仅仅是被分配到的绑定任务,还有许多协助上下游环节的工作,比如少量资产的造型设计过程(如苏拉维西点火区的连动装置、撞针等),协助模型师在造型设计时间将机械的运动结构、连动系统做的更加完善。
绑定部门的任务有几类,第一类是交通工具绑定,像是运送火石的箱车、填装砂石的斗车、搭载弹药系统的军车,以及矿区中的挖掘机、工程车等,由于这类的绑定可能同时大量的出现在同一个镜头中,因此需要注意如何优化文件,与装置的使用如何能更自动化;第二类是机械绑定,行星发动机、点火区的连动装置,以及地下城的电梯等属于此类,这类的绑定需要在模型阶段便和模型师配合,针对机械结构进行研究、设计运动结构;第三类是角色绑定,比如剧中刘启、朵朵、Tim的数字替身,这类的绑定使用演员的扫描模型,并与动画部门合作,以动捕系统为角色赋予动画;第四类是工具开发,这类的任务主要是协助其他环节进行批量化生产,或解决一些单靠软件内部功能无法解决的问题,比方说,北京联外道路的批量Layout工具、木星UV变形工具等。
由于影片的资产数量与体量都相当大,绑定部门在项目前期便能预期镜头部门将会承担不小的压力,因此丙丁部门艺术家在制定制作方案时,优先考虑的原则有两个:一是文件的最优化,二是装置使用的自动化。在文件优化的部分,绑定部门制作时刻意减少受deform影响的对象,取而代之用transform进行控制,这样不仅能减少绑定文件的变形节点数量,也能减少镜头部门出缓存时的数据量。在装置使用的自动化部分,绑定部门艺术家希望可以减少动画部门调整一些较机械、能靠计算得出来的动态,比如,交通工具能自动受地形作用、车体转向时车轮会自动转向、车轮会随着行驶距离自行转动等。
以下将分别以《流浪地球》中在交通工具绑定遇到的挑战、道路组件批量Layout工具开发与UV变形绑定工具开发,分享我们的制作思路。
【交通工具绑定】
在地球停止转动、逐渐远离太阳的过程中,地球表面形成了一片冰封世界,《流浪地球》的交通工具,便是行驶在这样的极端的环境下,如何让数量这么多的交通工具在各种地形上奔驰,是绑定部门遇到的第一个挑战。由于地形需要带动车体的晃动,首先要确保在装置上有一个层级是能被所有车轮平均抬起的,并且在抬起的过程中,车体会随之倾斜(如图1),在装置上留下这样的接口后,便能将车轮受地形抬升的位移值,转移到车体的倾斜上。
图1 车体随车轮倾斜
那么如何让车轮被地形抬升呢?如果利用maya内建的closestPointOnMesh节点,找到地形与车轮的最近点,用它来计算抬升的位移值,可以做到类似的效果,但closestPointOnMesh是基于mesh运算,mesh上的transform不会对它产生作用,而为了动画师在使用装置时可以更自由的操作,不用另外为地形添加deform,自由调整地面与车轮接触的offset值,绑定部门最终选用了maya muscle的keepOut节点。keepOut的特性是,当碰撞物与keepOut接触时,会沿着属性上设定好的轴向移动,而碰撞物上的fat属性可以用于调整keepOut与碰撞物的接触距离,数值越大接触距离越远,这个属性可以方便动画师调节穿插,也可为灯光师调节车轮与地面之间的距离,留下阴影渲染的空间,绑定部门便是利用keepOut的这几个特性,来做为车体与地面交互效果的底层设置(如图2)。
图2 车体与车轮受地形抬升
完成车轮抬升、车体与地形的交互后,许多中远景的行驶镜头便能获得满足,但有些镜头车轮需要有与地面挤压膨胀的效果,因此绑定部门在keepOut的基础下也添加了车轮squash设置,一样是用距离作为挤压膨胀的driver,与一般身体装置的squash不同,绑定部门艺术家希望车轮的挤压结果能随地形改变,比如在倾斜的地面上,挤压的效果也会随之倾斜(如图3)。为了达到这样的效果,driver必须与车轮型态趋近一致(如图4),而且它们也要受keepOut作用,在接触地面时被一并抬起,抬起的同时,自然向四周挤压膨胀。
图3 与地形匹配的挤压效果
图4 车轮挤压driver
为了能让动画师在镜头中任意选择地形与交通工具碰撞,绑定部门为此开发了动画师使用的工具,在动画师选择好环境模型后,自动将其转换成碰撞体、与交通工具关连上,相较于在绑定资产内保留碰撞体,这样的做法可以适应各个场景,也方便动画师依据镜头需求调整地形。
解决了车轮与地形交互的效果后,下一个需要解决的是车轮转向与自转问题。影片中主要使用的交通工具需要适应极端气候与地形,才能在恶劣的环境下达成解救地球的任务。以剧中重要的「火石」运载车来说,它拥有14个车轮,且每个车轮都能进行转向,为了能让动画师更直观的表演,绑定部门为每辆交通工具搭建了行驶路径设置,每个车轮可以随着路径轨迹自动转向,动画师只需要先将行驶轨迹画好,这些交通工具便能行驶在路径上。
另一方面,《流浪地球》是由多家视效公司合作的项目,为了每家公司资产交流方便,利用maya节点搭建装置,不使用额外plugin,expression来进行车轮自转的计算。由于每个车轮都能独立转向,而且电影中也有不少急转、急煞的镜头,车轮自转不能单纯以交通工具某一轴的行驶距离运算,于是我们将每个车轮作为独立的计算个体,藉此满足不论交通工具往哪个方向行驶,每个车轮自转都能准确计算。
【道路组件批量Layout工具开发】
为了搭建城市级别的环境,asset环节将各个资产拆分成多个组件让Layout部门进行摆放,但若要单靠人力将这些组件摆放在场景中,那是相当耗时的工作。因此,在与模型部门、Layout部门的配合下,绑定部门开发了道路组件Layout工具,协助Layout部门进行批量化生产。
首先,在将实际模型摆放至场景前,Layout部门会先将作为路面参照的nurbsSurface摆上,接着绑定部门依据nurbsSurface的长度与路面模型的长度做换算,利用motionPath与Flow Path Object将桥面模型组件组装、吸附至nurbsSurface上。如此一来,便完成了场景路面的搭建。另一方面,需要批量摆放的道路组件分成两种类型,一种是Y轴需要垂直路面的组件,如摆放在路面上的路障、分隔岛等,一种是Y轴需要垂直于世界坐标轴、且Z轴需要与路面方向一致的原件,如桥墩、路灯等。不论是哪一种,都需要先获取组件在路面上的位置,由于在摆放路面时,Layout部门已经准备好作为路面参照的nurbsSurface,在批量复制时,活用这些nurbsSurface的特性,比如利用closestPointOnSurface找到起始组件的位置,再依据欲复制的数量换算,用简单的等差数列,求得批量复制组件的位置。
第一种Y轴需要垂直路面的组件较为单纯,在求得其路面位置后,使用nurbsSurface生成folicle便能得到Y轴垂直路面的结果。第二种Y轴需要垂直于世界坐标轴、且Z轴需要与路面方向一致的原件,利用aimConstraint的特性,以路面方向、世界坐标Y轴方向两个方向求得每个组件的旋转值,最终得到Y轴垂直于世界坐标轴、Z轴与路面方向一致的结果(如图5)。
图5 绿色为垂直路面的结果、蓝色为垂直世界坐标轴的结果
以数列换算的批量复制结果,相当仰仗找出每个组件的排列规律,然而,现实的道路组件排列虽然有其规律性,但每种组件的规律却不尽相同,如果只仰仗这样的方式,没办法满足镜头摆放的需求。因此,在与Layout部门的反复测试过程中决定不以每个道路组件作为批量复制的最小单位,而是以一段路面上的组件组为复制的单位(如图6)。
图6 道路组件组
以北京城联外道路为例,最小复制单位的道路组件组是由四个路面模型上的道路组件所构成,透过路面模型与上述取得垂直路面、垂直世界坐标的方式,将道路组件组进行批量复制,最终完成了批量摆放工具的开发。
【UV变形绑定工具开发】
大红斑,是木星赤道以南22度、存在了数百年的巨大反气旋风暴,也是《流浪地球》电影中贯串前后剧情的重要标志,在许多带到木星大红斑的镜头里,有时为了取得较好的构图,或是模拟物理摄影机的效果,无可避免地会微调木星的缩放,不过缩放后,虽然木星的弧面对了,但会导致大红斑与其他物体相对比例的改变。为了解决这样的问题,绑定部门需要针对大红斑进行变形,使它能在调整好木星大小后,有二次调节的空间。
让大红斑变形,最直觉的作法便是把整个木星当作眼球、大红斑当作瞳孔,用制作一般CG角色瞳孔缩放的思路进行。但因为大红斑需要维持长宽等比缩放,mesh缩放后会导致木星上水平的环状气流带也跟着变形,从原来的水平线变成弧线,且贴图容易拉扯、原先完美的弧面可能会被破坏(如图7)。另一方面,与mesh变形不同的是,不论UV怎么变形,都不会破坏原有模型的型态,且贴图纹理顶多会出现纹理的重复,并不会有拉扯(如图8)。因此会选择使用UV进行变形。
图7 mesh变形结果
图8 UV变形结果
然而,即便maya的place2dTexture节点上的repeat UV、offset UV、rotateUV等属性能对UV进行初步的调节,但仍有诸多限制。其中最麻烦的是,place2dTexture无法自定义变形的中心点。若使用repeat UV进行变形,每调整一次缩放,还要利用offset UV将大红斑位置对上,操作相当不方便,所以绑定部门决定针对UV变形开发自己的工具,解决了place2dTexture无法自定义变形的中心点的问题,也确保舍弃place2dTexture后,UV变形的数值能够存取,让下游环节可以向操作属性一般,透过精准的数字将UV变形的结果套用至不同镜头。
制作过程中,绑定部门遇到两个比较大的问题是起初没有预料到的,首先资产需要再次优化,即便在制作时已经用最少的deform、大多数对象受transform影响的方式制作,但在同一个镜头文件内,同时放进几十、几百个绑定后,下游环节还是带不动。由于这个时候已经进入项目中期,资产基本完成,动画也已经开始,决定更大刀阔斧地进行优化,但这个阶段的优化必须在各环节现有的基础下进行,比方说combine对象时,必须考虑被不同材质球assign的对象彼此不能进行combine,以及combine后的对象,是否能被现有控制器以被控制transform的方式影响。进行二次优化后,才基本满足下游环节的需求。
第二个问题是,渲染时发现有些镜头车轮的motion blur结果出现问题(如图9),一开始以为造成这个问题的原因,是车轮自转运算有误,于是和动画部门一起针对这些镜头,逐帧检查车轮的旋转值是否正常,但不论数值或是控制器的轴向上都是正常。后来发现造成这个问题的原因有二,一是控制器的轴心位置与被约束对象的轴心并不相同,二是导出缓存时采样的精度,未与motion blur渲染采样的精度一致。
图9 车轮motion blur渲染结果有误
要解释这个问题,得先从制作流程开始说起,通常模型在提交给下游组以前,会先经过freeze的过程,将所有transform上的数值清空,让轴心落在世界坐标中心,得到一个干净的对象。而绑定透过车轮控制器影响车轮模型时,利用了约束节点保持偏移的特性,让车轮模型虽然与控制器轴向不一致,但可以随着控制器移动。不过在动画导出缓存之后,缓存上不再有约束节点与控制器的正确轴向作为参考,因此若是导出缓存采样的精度只到整数帧,在两个整数帧之间,模型的数值便会出现偏差,而这个偏差也造成了motion blur的渲染结果。知道是什么原因造成这个结果之后,绑定部门把模型被约束对象的轴心调整成与控制器一致,动画导出缓存时也重新调整了设置,这个问题便迎刃而解。
绑定部门指导杨钧凯表示:“作为一个科幻电影迷,能参与《流浪地球》是一件令人激动的事,小时候总向往着好莱坞大片徜徉于宇宙与星球间的视效,没想到有一天自己也能参与其中。但这份激动,在实际制作时、与每个伙伴一起攻克各类难题的过程中,逐渐转化成感激。由于这个项目在体量、资产量都相当大,我们遇到了许多难题是前所未有的,除了本部门以外,很多都要和各个环节一起合力解决。很感激能有一群这么棒的同事——不论是面对各种难题也不会畏惧的绑定小伙伴们、一起测试找到解决方案的各个部门、保持沟通流畅的制片协调们、以及信任我们并为我们指引方向的总监——大家一同克服难题、一同成长,最终完成这么好的成果。”
墨镜天合无锡数字图像科技有限公司
点击了解更多墨镜天合无锡数字图像科技有限公司