影视动画渲染
为影视行业提供澎湃算力
本文介绍了一位艺术家如何使用Houdini软件创作了一个充满活力的动漫舞蹈场景,其中包含了炫目的火焰效果。艺术家不仅分享了创作背后的灵感,还详细介绍了建模技巧、纹理和材质的选择与搭配。让我们一起来探索这个创作过程的详细内容。
人物介绍
一年前,我从 Cinema 4D 转向了 Houdini。我觉得是时候投入到一个不同于以往慢节奏动画创作的新项目中去了。我想挑战一些只有通过程序化工作流程才能实现的作品。
于是,我立刻想到了动漫舞蹈。
动漫一直是我个人项目的重要灵感来源,甚至比真人电影或 CG 动画更为重要。作为一个每天与 CG 打交道的人,我发现动漫中的 2D 线条和独特的阴影效果令人耳目一新。
在我观看过的众多系列动画片中,如果要选择一个场景来代表我眼中的动漫精髓,那无疑是高中动漫舞蹈。这些场景捕捉到了一种独特的活力,现实中不存在的天真。我希望在我的CGI幻想中带来同样的氛围。
于是,"変身!"项目诞生了。
"変身!"是日本动漫中一个深受喜爱的术语,意为启动电光火石的变身场景,象征着我从 Cinema 4D 到Houdini动态世界的艺术和隐喻转变。
我首先在 Reallusion ActorCore 上搜索角色动画。然后结合使用 iClone、Marvelous Designer、Rhino 和 Houdini,建立了我的程序化工作流程,总结如下:
1_在 iClone 中编辑角色动画
2_在 Marvelous Designer 中准备布料
3_在 Houdini 中进行布料模拟
4_在 Houdini 中制作特效
5_在 Houdini 中进行程序建模
6_使用 Houdini 和 Redshift 进行渲染
7_使用Premiere Pro添加后期效果
角色动画
在整个工作流程中,这是唯一一个我仍然喜欢在 Houdini 之外完成的环节。虽然 Houdini 20 中的 APEX 看起来非常适合制作角色动画,但由于我我缺乏传统CG角色动画制作经验,所以这个挑战还是留待以后再尝试。
最初,我选择了两组 ActorCore 动作,并将它们混合在一起。
我经常使用 iClone 中的 "Edit Motion Layer" 和 "Motion Correction" 功能;事实上,它们是我的主要工具。通过 "Edit Motion Layer",我可以使用 IK 关节对角色的运动进行手动关键帧,这对于调整手与衣服的接触位置特别有用。
我还非常依赖 "Motion Correction"。虽然 ActorCore 的动作捕捉经过了很好的处理,但 iClone 并没有考虑到添加鞋子后角色高度的变化,导致脚偶尔会穿过地面。
"Motion Correction" 是我解决脚部穿插或滑动问题的首选方法。当它不起作用时,我会在地面上放置一个盒子,将摄像机切换到正射影像模式,然后一帧一帧地调整脚和地面的接触。
在从 iClone 导出角色之前,我总是将第一帧设置为 A-pose 或 T-pose,并在动画的第一帧之前添加 15 帧缓冲区。
A-pose对于在 Marvelous Designer 中试穿服装和在 Houdini 中进行人物服装的点变形都至关重要。从 iClone 导出时,我总是以 Alembic格式导出。Houdini 20 有一个已知的错误,有时会导致 iClone FBX 配件(如鞋子或头发)的位置不正确。虽然 Alembic 文件比 FBX 文件占用更多磁盘空间,但它们是最安全的导出选项。
布料准备
我使用 Marvelous Designer 制作所有服装,通常通过在 Etsy 上找到的缝纫图样进行描绘、修改 Marvelous Designer 自带的模板,或将网上找到的图样组合在一起。
在这个过程中,我牢记的最重要的几点是尽量避免布料重叠,因为 Houdini Vellum 不能很好地处理重叠的布料,同时跳过细节如衣服的下摆或袖子,这样可以简化以后的工作流程。
此外,在 Marvelous Designer 中,我始终将Particle Distance (粒子距离)保持在 10 以上。虽然低于 10 的粒子密度可以增加更多细节,许多教程也建议将Particle Distance 降低至 2,但我更倾向于将最低 Particle Distance 保持在 10,以保持合理的模拟时间。
当我将所有服装调整到角色的 A 姿态后,我会将它们转换成Quad Mesh(四边形网格),然后以OBJ 文件形式导出到 Houdini 中。
OBJ 是从 Marvelous Designer 导出材质数据的唯一文件格式。除非导出动画,否则我总是使用 OBJ 格式。
Marvelous Designer提示(TLDR):
a_保持服装简洁;在进行 Vellum 仿真后,在 Houdini 中添加布料厚度、缝合线和纽扣等细节。
b_始终以Quad Mesh导出。
c_保持Particle Distance大于 10。
d_始终以 "Weld "和 "Thin "的形式导出。
9_MD_export_settings
对于角色的头发,我使用 iClone 的头发网格作为基础。最初,我将头发网格转换为曲线的设置非常复杂,但在项目后期,我在 GitHub 上发现了 "Cards to Curves",这是一种从头发网格创建头发的更优雅方法,我强烈建议大家探索一下。
Cards to Curves:
https://github.com/jamesrobinsonvfx/cards_to_curves
Vellum布料模拟
当所有角色动画的 Alembic 文件和服装的 OBJ 文件导入到 Houdini 后,我的第一步总是对角色本身进行 Vellum 仿真。在动画过程中,腋窝和膝盖后部等身体部位可能会发生相交。在现实中,当穿着 T 恤时,腋窝折叠时布料因摩擦而被夹住或松开。然而,在 Vellum 仿真中,一旦网格相交,要解决它们几乎是不可能的。为了解决这个问题,我会在角色的腋窝周围绘制一个mask,将masked区域定义为唯一的仿真区域,其他部分不受影响。这样的仿真可以解决网格相交问题。
SideFX 网站上也详细介绍了这一工作流程:
https://www.sidefx.com/tutorials/vellum-cloth-tips-tricks/
需要注意的是,Houdini 默认使用米作为单位,而 iClone、Marvelous Designer 和大多数其他 DCC 软件使用厘米。因此,在将文件导入到 Houdini 后,对导入的文件进行正确的缩放非常重要,因为所有的仿真都依赖于单位的一致性。
我的 Vellum 设置包括将按材质分离的 OBJ 文件导入,应用不同的 Vellum 布料属性,并绘制mask来指定仿真区域。通常情况下,我会屏蔽掉整个背部和腰部,使用 "Point Deform" 将 OBJ 文件与角色动画粘合在一起。这样可以确保mask的区域会随着角色的移动而粘连和变形,而其余区域则会进行仿真。
根据SideFX官方文档建议,在进行Vellum仿真之前,使用“Remesh”节点将服装转换为三角形网格,因为三角形网格能用更少的点捕捉更多细节。个人而言,我也会用四边形网格和不同的网格分辨率来测试Vellum仿真。我发现对于像皮革这样厚实的织物,四边形网格能够产生更逼真的效果,因为皱褶过多的细节可能并不理想。
虽然理论上Vellum仿真看似简单明了,但在实际操作中却颇具挑战,因为Vellum参数并不与现实世界的度量标准对应,并且会随网格密度的变化而变化。因此,要模拟特定织物的行为,需要尝试不同的参数,而不是采用适用于所有项目的一刀切方法。
与在Marvelous Designer中进行仿真相比,这可能显得更具挑战性,但Houdini能够根据可用硬盘空间无限延长仿真时间,而Marvelous Designer的仿真则受到RAM或VRAM限制。
在Marvelous Designer中,仿真严格遵守物理规律,即使在某些服装部位如T恤的领口或裙子的腰线在微妙的动画中保持静态。相比之下,Houdini让我能够通过绘制多个遮罩来创造性地操控仿真,因此更容易进行艺术指导,并且迭代效率更高。
最终,达到我满意的最终效果花费了一个多月的时间,并涉及了40-50次的尝试。一些Vellum仿真在空闲帧上出现抖动问题,我通过使用“post-Vellum”节点或偶尔使用AELib的“Temporal Smooth”节点解决了这个问题。
从这一点开始,关键是使用“Point Deform”将按钮、缝线和针脚固定到仿真的衣物上。
以下是我一直记得的一些 Vellum 提示(TLDR):
a_将缓存内存增加至大约 50GB,这样可以在仿真过程中暂停和检查,而无需从头重新开始。
b_使用单独的 "'Vellum Constraint" 节点来实现 "Pin to Target"。
c_在 Vellum 仿真中尝试使用四边形和三角形网格,结果可能会有很大差异。
d_网格密度不一定越高越好,对于皮革等厚实的织物,低密度网格效果更佳。
e_使用 "post-Vellum" 节点或者 AELib 的 "Temporal Smooth" 节点来消除抖动。
特效
在完成所有模拟后,我开始制作 "布料变形",基本上是校服碎成花瓣,哥特式服装从从火中浮现等多种效果融合在一起。这个造型是我在使用 Cinema 4D 的时候发展起来的。在Cinema 4D,瓦解效应是一场噩梦;而在 Houdini 中,它大体上是一个 “Solver "和一个 Pyro 模拟。
Applied Houdini —Particle IV 详细介绍了disintegration 和 petal spawning效果:
https://www.appliedhoudini.com/blog/2018/9/5/particles-iv-physical-instances
现在回想起来,我会选择使用MOPs的瓦解效果,因为它使用起来更简单,设置起来也更快。
MOPS
https://github.com/toadstorm/MOPS
我使用 Axiom Solver 进行 Pyro 模拟,尽管 Houdini 的 Pyro Solver 也同样出色。
我将所有缓存的 Pyro 模拟用作 POP 模拟的volume advection source来生成“余烬”,并在“余烬”粒子上instance循环飞行的蝴蝶,为场景增添色彩。
关于Axiom Solver以及如何生成余烬的介绍:
https://www.youtube.com/watch?v=nJa5RbQK9zU&t=2s
龙火是整个项目中规模最大、耗时最长的模拟。主要的挑战在于模拟的持续时间和迭代时间。为了加快进程,我向 Foxrenderfarm 上传了多个具有不同火焰模拟参数的文件。这样,我既能利用他们的资源,又能腾出我自己的电脑,大大提高了效率。如果您的本地设备无法满足Houdini的模拟需求,我强烈推荐使用 Foxrenderfarm 进行模拟。
接下来,通过属性转移,用模拟的龙火点燃树木火焰,再触发两个火焰模拟。
Voxyde VFX 有一个免费教程,介绍如何在 Houdini 中设置龙的喷火模拟:
https://www.youtube.com/watch?v=Ogzm2gnkMTU
SideFX 内容库中有一个 "村庄火灾 "设置,我将其作为树火模拟的基础:
https://www.sidefx.com/contentlibrary/village-fire/
程序建模
该环境的模型参考了法国阿尔比大教堂的祭坛空间。
在环境设计阶段,我并不确定角色在空间内的互动方式,特别是当时我只有一套角色动画。因此,我的目标是保持环境的程序性和灵活性,以便能够调整比例、大小和延展部分,以适应稍后的摄像机动画。
首先,我使用 Rhino 绘制了祭坛的屏幕。虽然 Houdini 也能完成类似的任务,但它缺乏 CAD 程序的精确性。接下来,我创建了几条轮廓曲线,并将其导出为 IGES 和 NURBs 曲线。
在 Houdini 中,我导入了这些曲线,并将它们作为“Sweep”操作的主干曲线,将我绘制的轮廓曲线融入其中。这就是我模型的基础。
学习 Houdini 从来都不是一件简单的事,而我发现程序建模因缺乏标准配方尤其具有挑战性。
我的工作流程围绕曲线操作展开,主要依赖于几个关键节点。
其中一个非常重要的节点是“Match Size”节点。我经常使用它将对象居中对齐或相互对齐。它还能方便地将对象快速缩放至特定尺寸,这比使用“Transform”节点要快得多。
我经常使用的第二个节点是 "Labs Extract Silhouette(实验室提取轮廓)"。这个节点可以生成输入几何体的二维轮廓,我经常用它来提取主干曲线,然后用于 "Sweep "操作。我发现这个节点是不可或缺的,因为它非常类似于在 Rhino 中复制曲线或提取边界曲线,这是我多年来一直使用的工作流程。
此外,我还经常对提取的轮廓应用 "Polyextrude"。这样,我就可以将其用作 "Boolean "形状来创建窗洞、门和类似的建筑特征。
我工作流程中的另一个重要节点是“PolyExpand2D”,它可以按指定距离偏移曲线。这对于添加程序化的建筑细节(如瓷砖边框、裙边和装饰)非常有用。
我还经常使用 "Sweep"、"Polyextrude "和 "Boolean "等节点,这些我之前都提到过。
Assembly, Look-dev & Shot-framing
主要环境元素建模完成后,我开始尝试不同的拍摄角度和动画效果。
事实证明,取景颇具挑战性。起初,我考虑用两个角色在黑色背景下的转换来结束这个项目。然而在融入环境、调整灯光和尝试镜头移动之后,我意识到这个场景感觉过于简短。
为了增强视觉效果,我尝试使用实例对象复制角色,将它们对称和不对称地放置在一起,目的是最大限度地利用这两个角色及其动画。
经过无数次的镜头测试和调整后,我确定了最终的动画效果。这个版本引入了两组额外的角色动画,并有一条龙从屏幕外进入画面。
模拟更多的角色确实需要时间,但由于角色及其服装基本相同,我可以重复使用整个设置,只需极少的手动操作。
在对所有模拟进行微调后,灯光成了一个重大挑战。通常情况下,大教堂的主要光源是吊灯和落地灯。然而,落地灯的灯泡与视线高度相近,可能会分散注意力。为了吸引注意力,我在第一段舞蹈中战略性地使用了地灯,但它们并不适合动画的其他部分。
于是,我尝试使用其他方式来替代地灯。然而,传统的地灯显得过于简约,与我想要表达的氛围不符。经过进一步研究,我在网上发现了一些时尚照片,布景设计师将吊灯放置在地面上。受此启发,我也采用了类似的手法。将吊灯放在地面上,光线从下到上逐渐减弱,突出了人物在镜头中的视觉存在感。
为了进一步丰富场景,我使用了 iClone 的法式建筑包作为地灯。我将窗玻璃分离出来,将其用作 Redshift 网格灯。这样既增加了视觉趣味性,又不会过度影响整体照明效果。
iClone 法式建筑包:
https://www.reallusion.com/ContentStore/iClone/pack/building-gen/3d-building-french-style/default.html
起初,地板上是棋盘格大理石图案。随着动画的进行,我发现白色方格显得过于突出,分散了注意力。为了解决这个问题,我在整个地板上使用了渐变色,并将其与大理石材料混合在一起。
为了增加视觉趣味性,我还在地板上添加了金杉裂纹。这些裂纹暗示舞台经历了多次排练,也许是在龙的重压之下。
为了容纳巨龙,我使用了强制透视法,将大教堂的后墙推得更远,并且放大了比例,使其看起来比实际距离更近、更小。
在深度和氛围方面,我尝试了Redshift scattering、fog attenuation、VDB雾和VDB云。需要注意的是,Redshift的fog attenuation与VDB的交互效果并不理想;激活Redshift的fog会显著改变其他VDB元素的外观。因此,我选择使用带有细微噪点的雾VDB。
Redshift的网格灯光(mesh light)自3.6.0.1版本以来获得了显著的升级。以前,我经常需要额外的假区域灯来增强真实光源的效果。现在,使用吊灯灯泡就足够了。我使用"Object Merge"将所有灯泡合并到一个geo container,然后使用"MOPs linear falloff"和"clip by attribute"对所有灯光进行集体动画制作,从而简化了制作过程。
为了增加真实感,我通过Null为摄像机引入了微妙的随机晃动。此外,我还添加了额外的噪音,以与龙的喷火过程同步。我尽量减少摄像机的移动,模仿重型电影摄影机的稳定性,避免手持拍摄带来的混乱效果。
渲染
我经常遇到的一个难题是运动模糊,特别是当我将Deformation Blur的步数增加到 1 步以上时,角色的皮肤有时会穿透衣服。虽然我不清楚 Redshift 或 Houdini 的官方建议,但我通过将Velocity数据从角色转移到所有服装来解决了这个问题(Attribute Transfer)。这一简单的调整有效地缓解了问题。
在项目结束时,另一个长期存在的问题是由于irradiance ache导致的光斑(light splotches)或闪烁(fireflies)。Redshift 建议对特定对象进行多帧混合或使用强制全局光照(Brute Force)来解决这个问题。然而,这些解决方案在本已要求苛刻的项目上又增加了大量的渲染时间,每帧渲染时间长达 30 分钟。我使用了从 Archviz 学来的一种技术——单帧辐照度缓存(single-frame irradiance cache),并将motion blur设置为总帧数的两倍。虽然不是完美无缺,但这种方法为我节省了大量的麻烦和渲染时间。
以下是我始终牢记的一些关键渲染技巧(TLDR):
a_将动画 OBJ 导出为 Redshift 代理时,始终启用 "motion blur "设置。
b_在启用 "Dromation Blur "时,将Velocity从角色转移到服装上,以防止皮肤穿透服装。
c_尽可能降低 Redshift 的 "Sample Filtering",以减少萤火虫(fireflies);较高的强度会增加渲染时间。
d_在可行的情况下使用单帧辐照度缓存(single-frame irradiance cache),以防止光斑(light splotches)或闪烁(flickering)。
最终的动画是在 Foxrenderfarm 上渲染的。我组装了一个相当复杂的场景,其中包含大量自定义的 HDA。Foxrenderfarm 慷慨地为我安装了所有自定义的 HDA,以保持其渲染与我本地设置的一致性。然而,我要指出的是,Foxrenderfarm 使用的 Houdini 20 配置的 OCIO 与 Houdini 20 自带的 Redshift 官方 OCIO 有所不同,因此可能会导致细微但明显的色彩差异。为了解决这个问题,我不得不联系 Foxrenderfarm 定制我的渲染设置,以确保与 Redshift 的 OCIO 保持一致。
后期
渲染整个序列后,我会在 Premiere Pro 中使用 Neat Video 进行降噪,并用 Red Giant Looks 进行微调的色彩校正。为了使最终渲染效果更加柔和和”电影化”,我添加了光晕效果和色差等镜头伪影。
后记
使用Houdini为我的个人和专业工作带来了无限的可能性。在Cinema 4D或其他 DCC 中,软件的限制极大地限制了CG项目的规模。
然而,Houdini的潜力也带来了艺术上的挑战。在Cinema 4D中,项目范围和时间有严格的限制,而Houdini则允许我不断扩展项目的范围——从一个角色动画扩展到三组,从7秒扩展到25秒。我甚至加入了一条喷火龙,并深入研究了火与环境的互动方式。从最初的周末实验发展成了为期四个月的工作。
在我早期使用Houdini时,它的程序性有时会将本应是艺术性的实验变成技术性的难题。我发现自己经常上网搜索解决方案、排除故障,大大分散了我的注意力。
尽管存在这些技术障碍,这个项目对我来说是一个重要的里程碑。技术上,它标志着我从destructive的工作流程过渡到几乎完全的程序化(proceduralism)。艺术上,这是我第一次探索以哥特式时装和建筑为背景的现代快节奏舞蹈动作,这一主题和技术上的飞跃深刻地影响了我今后的项目。