Unity实时渲染短片《Adam》揭秘:特效制作
在Unity实时渲染短片《Adam》揭秘的系列文章中,我们已经为大家分享了《Adam》的产品设计、资源创作、动画制作,本文将重点介绍Adam Demo中视觉特效背后所涉及的技术。
关于作者
本文作者是Zdravko Pavlov,一名拥有11年经验的视觉特效美术,专注于CG动画合成、游戏特效艺术、3D建模以及灯光与渲染。Zdravko Pavlov负责Adam Demo的美术制作,包括粒子效果及动态模拟。
粒子效果
气体
我使用PhoenixFD设置液态模拟。渲染序列以纹理图表(flipbook texture)的形式在Unity的Shuriken粒子系统中使用。
3D Studio Max中的PhoenixFD模拟预览
粒子控制体积雾的密度,场景中所有区域光也都会影响该雾状体。区域光代码由GFX程序员Robert Cupisz实现,现在可在GitHub找到相关内容。
体积雾密度由粒子控制
水坑
我还用PhoenixFD来做水坑涟漪的液态模拟。
3DS Max视口中模拟液态表面及渲染纹理的预览
Shuriken粒子系统在Adam脚下触发的效果
渲染序列被再次合并入法线贴图纹理的图表。粒子在机器人的脚下生成,并渲染到一个离屏缓存中。产生的结果用来修改水坑的表面法线。
尘土和烟
射击序列中子弹击中混凝土时产生的火星和尘烟,以及其他一些次级效果(例如,空气中流动的微尘颗粒以及城墙排气口上烟柱),我都是用Unity中原生的Shuriken粒子系统来制作。
部分环境效果示例
动态模拟
Adam中所有的角色都使用了运动捕捉技术。但是,我们仍然要为所有在运动捕捉集合中,无法物理呈现的布料及不同配饰添加另一层次级动画。对此,我们不是手工完成,而是采用一系列动态模拟来实现。
我们事先就预设好需要一些特写及慢动作镜头。模拟效果需要在精度及视觉真实度上与Demo的质量匹配,因此我们使用了一些高端离线模拟解算器。计算结果将烘焙并回放为动画。
袖子
“袖子镜头”,我们在整个生产过程中都这么称呼它。实际上,这是我第一个开始着手的镜头。我尝试了几个不同的布料解算器,以及一些蒙皮粒子方法。
最后选择3DS Max的内置布料修改器用于最终模拟。之后,我设置好一些简单测试并向导演演示。
一些最初的布料模拟测试(3DS Max视口预览)
经过一些迭代后,我开始用Adam的动画、几何体制作最终版本进行模拟。
布料模拟(3DS Max视口)
布料模拟的结果被烘焙后,我使用Alembic Importer ,将其导入到引擎。这个工具由Unity Japan开发,可在GitHub上免费下载。
Unity中展示以alembic流导入的不同版本的模拟
面具
我为损坏的面具构建了一个简单的Thinking Particles设置。
面具碎片的Thinking Particles设置
Thinking Particles的程序性及其集成的Volume Breaker能助我进行更快迭代,探索不同的可能性。我将完成的版本交给我们的3D建模师Plamen(Paco) Tamnev,他以此为基础制作最终模型。
不同的Thinking Particles模拟变体
主角扯破的袖子与破碎的面具不仅对剧情本身很重要,同时也能使Adam在后续群体情景中便于被区分出来。
CARONTEFX
Caronte是由Next Limit开发的多重物理模拟引擎,Real Flow将其作为刚体及软体动态解算器已有一些时日。通过与引擎无缝整合,CaronteFX为Unity提供了极高质量的物理解决方案,并帮助我们在紧张的生产时间中制作出尽可能多的特效镜头。
在我们第一次使用时,它还处于Alpha版本,尚未集成绳子与布料的物理模拟,但我们与CaronteFX团队进行了紧密合作。他们在整个制作过程中竭尽全力为我们提供所需的工具及功能选项。目前这些都已包含在Asset Store上的CaronteFX中。
电缆
制作阶段早期,我们对于连接Adam与机器的电缆有些犹豫。因为,我们有些担心电缆的物理表现、几何体交错等等无法达到令人满意的程度。
幸运的是CaronteFX的绳索解算器非常精确,它可以基于几何体三角形进行碰撞计算,因此会将绳索(电缆)的厚度计算在内。
Unity 5中的CaronteFX播放器
烘焙一个这样的复杂模拟会产生大量的缓存数据。我们使用了CaronteFX中添加的自动蒙皮选项。它会生成一个骨骼层级,并且可将结果导出为FBX文件。
Unity 5中蒙皮动画回放
射击
在这个动作序列中发生了很多事情。子弹的冲击会在地面产生尘土团与火花,伴以混凝土块四散飞溅。一个机器人的腿和手臂被撕成碎片。
早期Thinking Particles原型
这个镜头也是我比较早开始制作的,在一些早期版本中使用了Thinking Particles。Thinking Particles特别的灵活和健壮,让我能快速的尝试不同的场景。随后,当我们在流程中采用CaronteFX时,我在其中重建了这个效果,以便于使用它便利的Unity集成和自动蒙皮功能。
Unity中射击序列的早期原型
CaronteFX拥有一个非常灵活的分段系统。我作为一名视觉特效美术,可以在Unity编辑器内就可以将Asset拆分成不同部分。新生成几何体面的材质会和新Asset保存在一起。
CaronteFX制作的地面子弹冲击预览
Sebastian 和Lu
这两个角色的制作尤其麻烦。不仅是因为有多种不同类型的动态物体(软性、刚性物体和布料),而且有不少复杂几何体相互层叠,特别是Sebastian。
基础动画模型(左侧)以及设置好用于模拟的对象(右侧)
我将Sebastian的几何体分为三个组。斗篷、披风和悬挂在皮带上小碎片为一组。裙子、平板和刀在第二组。头巾与耳饰是第三组。然后我开始重新调整元素位置,避免交错,并开始制作低模代理以减少计算量。
刀的代理碰撞体对象以及一些关节辅助器的示例
Unity 5中Sebastian的模拟
我们已将Sebastian角色发布到Asset Store,其中包括了一个Caronte播放器,以便您能了解模拟的设置方式。
Lu的处理也是相同的过程,但需要模拟的对象没那么多,因此设置起来要更简单和直接。
3DS Max视口中待模拟的Lu模型截图
CaronteFX播放器预览烘焙前的模拟
我和我们的制作设计师Georgi Simeonov在Lu的裙子上花了不少功夫,才找到厚重皮革的感觉。
最后使用了软性物体来制作裙子,而非单层布料。软性物体能让外形保持的更好,也不会像布料那样波动太大,很符合我们所预期的那种外观和物理表现。
Lu也能在Asset Store下载,其中还包含Adam与Guard角色。我已使用Unity的原生布料模拟,重制了他们的模拟,方便您更轻松对这些角色和Unity的布料系统进行深入研究。
请点击【阅读原文】访问Unity官方中文社区,下载Adam Demo可执行文件及资源包。