Sherman是一部由Unity官方团队开发制作的动画短片

《Sherman》,它由《大白的梦》的创作团队制作,展示了高级的实时毛发效果。

在制作方面,《大白的梦》制片人Andy Wood负责管理项目的制作,Isabelle Riva作为执行制片人领导团队。我们还得到Vlad Neykov的帮助,他负责使用全新的Visual Effect Graph进行创作。

《Sherman》的核心内容由8人组成的小型团队制作,从9月至12月历时三个月制作完成。此后我们锁定了动画部分,剩下的制作过程专注于对毛发等部分的研发工作。

最后感谢在创作《Sherman》短片时提供帮助的所有Unity成员,特别是Film R&D团队和EDU团队。

创作工具

通过制作《大白的梦》,制作团队已经非常熟悉Unity新的HDRP渲染器,包括:对HDRP进行重要改动,改进阴影过滤和PCSS。

对于新项目,我们希望尽可能充分使用渲染器和工具集。Unity图形工程师John Parsaie的工作让项目在很多方面提高了标准,特别是实时的毛发渲染。

我们使用Unity 2018.3制作《Sherman》,使用了许多Unity资源包,包括:Timeline、Cinemachine、Recorder、Alembic、FBX Exporter、Visual Effect Graph、Post Processing和HDRP等。

在制作期间,我们开发了许多工具和实用程序,并分享了其中一些,使它们成为Film / TV Toolbox资源包的一部分,该资源包可以通过Unity资源包管理器获取。其余功能在“影视工具库”中,目前我们仍然在将这些工具移植到Film / TV Toolbox资源包中。

项目基础

对于大部分内容,制作团队在《Sherman》上的工作不是完全独立的,这里特别要提到发布于2016年,Marza动画星球的短片项目《The Gift》,它是Marza动画星球和Unity Japan团队合作制作。

《The Gift》为Unity在实时动画方面的功能建立了很多基础,包括:Alembic支持、Unity Recorder、以及Unity中毛发着色器的第一个实现。这些都被我们用作《Sherman》项目的基础。

构造短片

曾为《冰川时代》中松鼠Scrat等经典角色制作动画的Bryan Larson开始进行短片的概念构造。通过使用Steven Shmuely创作的大致角色造型,他很快创作出了第一个动画草稿,以呈现设想中的基本故事。

有了大致的动画内容后,Mark Droste把动画导入Unity,使用Cinemachine快速构造出第一个摄像机设置,又用一天左右的时间制作出首个粗略的动画脚本,并向团队展示。

下图是《Sherman》动画脚本的短片片段,艺术家可以使用粗糙的资源快速加工出故事内容。

Unity强大的动画和摄像机工具允许制作团队仅花费几天时间,就可以把大致的创意实现为完整的动画脚本。实时进行快速迭代和尝试创意非常重要,这将允许制作团队快速“发现故事”。

在得到短片的完整动画脚本后,制作团队可以真正了解到制作该短片所需的内容。

使用HDRP进行外观开发

通过制作《大白的梦》,制作团队积累了大量使用HDRP的经验,非常熟悉其中的渲染器,并且拥有图形工程资源,可以根据需要来自定义和扩展渲染器。所以我们决定为《Sherman》使用HDRP。

我们为《Sherman》设定了高视觉质量标准。梦工厂新短片《Bilby》和Unit Image最新的迪士尼广告这二个短片都有非常好的毛发效果。

受此影响,我们希望在Unity中实现高级别的毛发质量,并拥有质量调整滑块,同时实现超快速的工作环境和最高质量的渲染输出结果。

我们为整体颜色分级外观使用了全局Post Processing Profile,使用Cinemachine摄像机剪辑配置文件来控制每个镜头的后期处理效果,例如:曝光,景深和晕影,以及所有类似镜头的效果。

这种对每个场景/节拍实现的颜色分级可以很好结合每个画面的镜头PPS组合效果,它可以用来对多个画面快速尝试不同的颜色分级调整,同时保留所有基于镜头的外观。

在制作过程中,我们使用Cinemachine Storyboard扩展来对比当前视觉效果和参考图像。使用Storyboard的SplitView功能来查看项目目标参考图像,使用Waveform Monitor来帮助了解画面在颜色方面和视觉目标之间的区别。这将可以在实时环境对每个画面进行这种级别的颜色改进。

下图为WaveForm Monitor SplitView视图,左右部分展示了参考画面和引擎内的波形图区别。

由于团队只有一个3D建模师Steven Shmuely,所以我们的环境不能过于复杂,也不能使用太多资源。

《Sherman》中的所有角色和物品都在Maya和3ds Max中建模,使用了Substance Painter来处理表面,其中一部分资源来自《死者之书》环境资源包,Steven Shmuely对这些资源进行了修改,以符合短片的风格和调色板。

《Sherman》的大部分资源使用标准HDRP Lit着色器,该着色器的功能丰富,提供了多种选项来实现理想的外观。

从角色开始,Steven Shmuely快速建模了浣熊、洒水器、食盆等主要资源的多个版本。下图展示主要资源的早期渲染效果。

我们最喜欢的一个资源是花园矮人雕像资源,矮人雕像的材质使用Substance Painter绘制,如下图所示。

在外观开发阶段,我们会在Unity渲染转盘效果,以进行查看和确认。

矮人雕像使用了标准HDRP Lit着色器,设置内容如下图所示。

使用Shader Graph处理材质

除了使用标准HDRP Lit材质,场景中的大量元素需要更高级的材质。我们使用了Unity可视化节点材质编辑器Shader Graph着色器视图来制作特别的材质。

对于水管部分,Steven Shmuely使用Stacklit shadergraph主节点制作了自定义Shader Graph,制作出二个独立的镜面部分,一个用于水管外部塑料层的光滑反射,另一个用于纤维编织的内部层。

水管的Shader Graph包含对泡泡动画,模拟焦散和表面波形的独立控制,表面波形的控制通过使用顶点动画来使表面变形。所有公开的参数都可以在Timeline上独立设置,这样有助于给膨胀的水管场景带来动态分层的外观。

下图是水管和Shader Graph属性。

下图是水管部分的材质的Shader Graph展示局部。(可点击大图观看)

使用Shader Graph着色器视图非常重要,它帮助Steven Shmuely快速创建和迭代水管的外观,而不需要图形工程师的帮助。

眼睛着色器

在开发和角色有关的项目时,关键元素是眼睛的着色和渲染。对于《Sherman》项目,我们尝试了多个眼睛着色器的变体,才确定最终结果,最后我们使用自定义着色器和相应的MonoBehaviour脚本来控制眼睛的视差方向。

眼睛的实现比我们想象的复杂许多。在许多实时制作中,眼睛通常简化为双壳几何体,用于表现眼睛的内壳和外壳,但这样会得到质量很低的眼睛外观。由于我们有很多小鸟和浣熊的近距离画面,所以我们需要更好的质量。

在尝试解决高质量眼睛着色时,最重要的是眼睛本身的实际制作。为了让着色器可以适当应用眼睛着色所需的视差效果,我们开始时把眼睛的UV设为处于0~1的范围。

下图是浣熊眼睛的UV图。

右上角的图是眼球的后半部分,主要部分用于面向前方的眼睛,它在UV空间位于中心位置(0.5,0.5)。这样设置眼球的UV可以让着色器根据视差效果修改UV,如下图所示。

另一个重要细节是:眼睛的骨骼朝向也用于视差效果的计算。这对于为我们提供摄像机观察方向的参考画面进行对比非常重要。眼睛的折射效果是二个向量函数即眼睛方向和摄像机观察方向,以指定应用视差效果的程度。

John Parsaie给眼睛着色添加的最终视觉细节是眼睛的环境遮蔽效果,该效果通过对眼睑进行光线步进,然后公开参数,从而让Steven Shmuely控制应用的AO量。

上面的最终结果被公开在MonoBehaviour眼睛控制器脚本中,该脚本允许团队为场景中每个画面制作眼睛的动画,并处理眼睛的属性,根据需要来完全控制眼睛的虹膜细节,从而实现最终结果。

下面是《Sherman》的眼睛着色。

我们对最终结果非常满意,它将随着完整的《Sherman》项目发布。我们还希望将着色器和控制器打包为独立资源包,以便开发者在自己的项目中使用。

使用Cinemachine进行摄像机布局

Mark Droste使用Cinemachine来布局《Sherman》项目中的所有摄像机,我们也使用了FBX Exporter将摄像机路径从Unity导出到Maya,以便动画师制作动画。

最初,为了给Bryan Larson足够的工作空间,并使他实现自己的动画,短片拍摄得非常随意。随着动画从草图变为最终效果,Mark Droste可以加工摄像机的拍摄和移动过程。

由于角色已经在Bryan Larson设置的基本表演位置,Mark Droste可以直接在Unity中使用Cinemachine设置摄像机。他可以在大部分镜头中程序化跟踪浣熊,通过在一条Timeline上使用多个Cinemachine摄像机轨道来尝试新的摄像机,这让他发现哪些镜头的效果好,哪些镜头可以调整为更好的组成效果。

这样的过程比在Maya等传统工具中制作摄像机动画的速度更快。通过使用Cinemachine摄像机剪辑和动画轨道来调整摄像机属性,Mark Droste可以快速布局好短片的摄像机,快速进行迭代以实现最终结果。

小结

以上是《Sherman》项目创作系列文章的第一部分,希望你喜欢关于创作该项目所使用的制作流程和方法的内容。

在下一篇中,我们将深入了解如何使用Alembic来处理角色动画,并了解更多创作《Sherman》时关于毛发实现的内容,以及Innovation Group开发的帮助团队处理Unity线性动画的工具。

我们非常喜欢《Sherman》短片,期待了解用户如何使用Unity制作动画。最后提醒一下:在短片中,Sherman不是浣熊的名字,而是下图中毛茸茸小鸟的名字。

在《Sherman》项目背后的技术细节(1)中,我们介绍了项目背景、设计项目的方法、外观开发和摄像机布局。在第二部分中,我们将介绍角色动画、使用Alembic、使用Visual Effect Graph的方法以及毛发效果实现的细节。

工程下载

《Sherman》提供完整项目工程下载:https://connect.unity.com/p/sherman-unityguan-fang-zhi-zuo-ying-shi-duan-pian

友情提示:

你可以点击[阅读原文],进行工程下载。

在打开工程时,如果出现无法找到Git的错误信息,请先安装Git:https://git-scm.com/downloads

请使用Windows系统打开项目,下面最低配置和推荐配置。

使用Alembic实现高级动画

创作《大白的梦》系列短片时,制作团队把FBX作为主要格式,用来将资源从Maya导入到Unity。

在DCC工具之间传递数据一直是一个难题,从原始格式导出为外部格式会有损原来的内容,使用可用导出格式是有利有弊的。

FBX格式是大多数Unity项目使用的常见格式,它拥有明确定义的优化工作流程。对于大多数Unity项目的动画制作,开发者都会使用FBX文件中基于骨骼的传统动画,但是这种方法有二个限制:

骨骼蒙皮权重限制,存在于Unity 2019.1之前的版本

挤压拉伸的比例补偿

蒙皮权重设置

在Unity 2018.3及更早版本中,Unity最多可以使用4个骨骼对每个顶点添加权重,这让高级蒙皮权重处理起来更加复杂和麻烦。

这个限制在Unity 2019.1中被去除了,现在每个顶点最多支持256个骨骼,但是在制作《Sherman》的时候,Unity 2019.1仍处于早期Alpha测试阶段,所以我们决定继续使用Unity 2018.3制作《Sherman》项目。

挤压拉伸的比例补偿

作为动画师,首先要学习的第一个知识就是挤压拉伸,根据维基百科的话,挤压拉伸被视为动画的12项基本原则中“最重要的”原则。

下图展示了《Sherman》短片在早期动画测试中的挤压拉伸效果,该视频用于测试早期皮毛实现如何作用于角色的动画和绑定。

为了实现真正的挤压拉伸动画,我们使用了“比例补偿”方法。

在制作《大白的梦》项目时,我们使用一些绑定技巧即平整绑定层级实现了这个方法,但对于《Sherman》项目,我们希望使用另一个方法,即Alembic方法。

解决方案:Alembic

Alembic是VFX和动画制作中常见文件格式,它作为交换格式而流行起来,允许工作室把内容从不同软件工具移动到工作室的管线中。

与使用蒙皮网格和骨骼来平移和变形网格的FBX不同,Alembic资源是原始模型烘焙后的顶点形式,允许你把原始资源的“所见即所得”副本导入到任何支持Alembic文件的工具中。

Alembic for Unity的第一个实现要追溯到Marza动画星球和Unity Japan团队合作创作《The Gift》短片,那时Alembic被用来在短片结尾形成大型海洋球的波浪动画。我们在和Oats Studios合作制作《ADAM 2》和《ADAM 3》短片时加入了更多相关功能。

Alembic资源包脱离预览阶段

在Unity 2019.1中,Alembic资源包已经脱离预览阶段,这意味着它是一种Unity完全支持的格式。对CG动画行业的从业者来说,这是一个好消息,创作者能够使用自己熟悉的格式并用在自己现有的管线上,这样会有很大好处。

了解Alembic for Unity以及如何使用该资源包,请查看:https://docs.unity3d.com/Packages/com.unity.formats.alembic@1.0/manual/tutorial.html

Alembic的问题

Alembic是一种优秀的格式,原因有很多:它的WYSIWYG(所见即所得)功能可以把内容从一个工具传递到另一个工具,从而使它成为从Maya烘焙动画的理想格式,开发者不必担心FBX等其它格式对特殊绑定或动画约束的限制。

但是,Alembic格式也有一些问题,包括:文件大小、附加对象、材质管理。

文件大小

Alembic文件中每帧动画都是特定帧模型顶点位置的烘焙快照,这会产生大量需要缓存的数据,网格的多边形数越多或动画越长,相应的Alembic文件就会越大。

对于《Sherman》项目,我们在短片上总共有7个序列。对于每个序列,我们都会为场景中每个角色输出相应的Alembic文件,包括:洒水器、水管、矮人雕像等。

最终的Alembic格式动画文件大约有7GB的动画数据,这比相同动画长度的FBX格式文件大很多。由于在实时帧率传输该数据量的开销并不小,因此这部分是需要斟酌改进的。

例如:我们使用过Alembic在《ADAM 2》和《ADAM 3》短片传输角色的元素,包括:服饰和面部动画,我们希望以30fps播放动画,但是实时环境的限制要求我们调整场景中Alembic的细节层级,才可以实现这样的播放帧率。

附加点

我们经常需要附加光照探针或反射探针到场景的动态元素。如果使用骨架动画的话,这个任务会很简单,只要把附加对象作为子对象嵌套到场景层级窗口即可。Cinemachine会使用这些本地引用变换来控制摄像机观察和跟踪的位置。

在把动画导出到Alembic格式时,即导出为“Renderable only”设置,默认不会包含角色的骨架。我们需要找到一种不同方法使Alembic动画在播放时可以附加到正确的位置。

幸运的是,Maya的Alembic导出器提供了一些选项,可以不仅仅导出可渲染网格数据。下图是Maya的Alembic导出选项。

通过取消勾选“Renderable Only”选项,Maya不仅可以导出渲染网格,还可以导出完整的IK绑定和角色的骨架/骨骼位置,这让我们能够使用这些位置来把光照探针、反射探针和VFX附加到合适的节点。

材质管理

Alembic的另一个缺点是:Alembic格式不会在文件中存储任何材质定义。

FBX和一些其它格式都包含哪些纹理应用到哪些材质的定义信息,但对于Alembic格式,这类信息不会从Maya等DCC工具传递到Unity。

这意味着每次动画重新导出为Alembic格式时,我们都需要为特定动画重新映射材质。在制作过程中,使大量Alembic剪辑与合适材质保持同步是很费时间的事情。

我们在《Sherman》项目期间开发了多个工具,以帮助简化Alembic格式文件的材质映射过程。其中二个工具已经添加到新版Film/TV Toolbox资源包,该资源包可以在GitHub获取,或者在Unity的Staging Package库作为资源包获取。

下图为Unity资源包管理器内的Film / TV Toolbox资源包。

USD格式及其未来

皮克斯的开源USD格式在过去几年逐渐受到关注,最近Unity通过资源包发布了USD Unity SDK,提供对USD格式的支持。

在USD格式方面有一些很不错的开发内容,它们展示了USD格式的前景。制作团队对USD格式提供的功能很感兴趣,我们会在未来的制作中持续关注该格式的发展。

线性内容的光照策略

实时环境中的光照和使用传统离线渲染器的光照有很大区别。虽然它们有相同的基础,例如:都要把光线放入到场景,但是各自的技术方法有很大不同。

《Sherman》这类短片中的实时光照通过多种技术实现,包括:光照探针、反射探针、级联阴影贴图和烘焙全局光照。

在处理《Sherman》项目的光照时,我们邀请Unity光照主管Jean-Philippe Leroux为我们提供更专业更优化的光照效果支持。

为了实现实时效果的第一步,对于光照解决方案的特定部分需要进行预计算,为此要做一些前期准备。

全局光照

间接光照需要进行预计算,以实现高质量局部环境光照。所有大型静态对象都标记为对解决方案产生作用,而且这些对象都要制作光照贴图。在这个过程中,我们使用了渐进式光照贴图的Baked Indirect烘焙间接模式。

所有小型对象和动态对象都会被探针组照亮,对于不适合制作光照贴图的较大对象,我们通过使用代理体积使这类对象获得更精细的探针光照。

我们没有烘焙光线,场景里只有天空的影响和定向光的反弹效果。

反射效果

我们还需要使用反射探针,为烘焙局部反射效果设置合适的覆盖。

我们将大部分采集点放到摄像机层级中。由于天空和接近地平线的太阳有很强的定向光,所以需要额外设置,以便正确的覆盖阴影区域。

一些高反射物体会从实时反射中得到更大的受益。在我们的项目中,这类物体主要是金属食盆和有光泽的水管,前者使用球体实时反射探针,后者使用平面反射。

光线

所有光线都是纯动态的,它们的属性可以调整,也可以四处移动,并得到即时反馈。

我们使用的一个工作流程技巧是:使用轴心对象来处理光线位置。轴心会作为目标使用,放置后,它允许我们通过使用“x”键切换本地和全局方向,从而轻松围绕特定对象进行旋转。

请注意:所有光线都会投射阴影。

使用预制件有很多优点:

预制件允许我们不必在场景处理单个对象,让其它对象在场景中可以正常工作。

预制件允许我们快速把改动传递到序列和项目中。

预制件允许我们快速还原重写数值。

对于《Sherman》项目,我们对这些内容创建了主预制件和嵌套预制件:太阳、填充太阳、填充天空、边缘太阳、边缘天空、反射亮光。

主预制件会根据每个画面而构造,我们在Timeline中使用了激活轨道来触发预制件。

在预制件中,我们会找到很多内容,例如:画面特定光线、重写特定全局光照属性的体积、控制大气光照的密度体积、阴影对象。

后期处理等其它属性通过Cinemachine Post Processing剪辑和Timeline来调整,例如:分级、摄像机效果、摄像机剔除等其它优化。

如下图所示,图中是每个画面的Custom Post Profiles,对每个虚拟摄像机应用了CinemachinePostProcessing组件。

毛发和视觉特效

有动画脚本以后,我们很快确定对短片非常重要的关键要素:水的视觉特效和浣熊的毛发。

由于洒水器在短片中扮演“主要”角色,因此早期遇到的挑战之一是弄清如何处理流体模拟效果。处理动画流体模拟的传统方法很多,包括:使用Houdini,或Maya中原生支持的流体系统。

Steven Shmuely使用Maya对流体效果进行了测试,但由于他对Maya流体系统或Houdini不是非常熟悉,我们担心这些工作无法达到想要的结果。

此时,Unity发布了基于节点并使用GPU加速的特效工具Visual Effect Graph。这个工具看起来很强大,但我们没有任何使用经验。随着首席图形测试工程师Vlad Neykov的加入,最终帮助我们实现了惊艳的视觉特效。

使用Visual Effect Graph实现动态效果

在Unity 2018.3中,全新的Visual Effect Graph面向HDRP发布预览版。在《大白的梦》短片中,制作团队使用传统粒子系统和实时物理功能,用于实现破坏效果。

虽然制作团队中没有成员使用过Visual Effect Graph,但我们清楚的知道,为了实现高级水模拟效果和视觉效果,我们需要Visual Effect Graph提供的高级粒子功能和HDRP集成。

我们非常幸运找到了Vlad Neykov,它帮助我们实现短片中华丽的水效果和其它效果。

所有视觉效果都在其对应的Timeline序列上管理,这让Vlad Neykov可以单独在时间和动画上进行迭代,使用Visual Effect Graph提供的自定义Visual Effect Activation Track和传统动画轨道,从而改变视图的属性。

对于洒水器的效果,Vlad Neykov最初想使用一个水效果来管理所有效果,逐渐把它扩展为包含新的情况。

例如:在第一个画面中,水从摄像机角度出现,所以必须给它添加控制功能。在另一个画面中,水在食盆上反弹,所以要给它添加碰撞效果,但该效果要在其它画面中隐藏起来。

在其它画面中,深度碰撞无法在足够近的距离碰撞,所以要替换为球体碰撞。最后,制作过程中几乎所有画面都有单独的水效果来处理特定情况。

Vlad Neykov最初使用屏幕空间深度测试来处理水的碰撞效果,但在测试多种情况后,他改为使用各种碰撞体积的简单平面/球体碰撞形式。

最初,我们主要考虑如何为洒水器实现动态水效果,Vlad Neykov最后解决了短片的所有特效,包括:树叶从树篱落下的细节效果,脚步的尘土效果,泥土爆发的效果和触电效果。

《Sherman》项目对Visual Effect Graph进行了很好的实际测试,并提供了大量反馈,以便后续改进Visual Effect Graph。

处理实时毛发和羽毛效果

在制作短片的时候,我们有一些想要解决的技术目标,其中最大的目标是,关于使用实时引擎制作动画方面经常提到的话题:毛发效果的实现。

起初,我们对处理毛发渲染犹豫不定。虽然我们对John Parsaie作为图形工程师的能力很有信心,但在实时环境实现“离线渲染质量”的毛发效果是一项重大的挑战。

讨论在任意引擎中实现毛发效果时,有四个关键元素组成了解决方案:几何体、着色、动态效果、制作方法。

对于小鸟Sherman身上的毛发,我们解决了前二个元素几何体生成和着色,并对动态效果做了一些实验,但最终决定不将该方法用于最终的短片。

最后的关键内容是毛发的实际制作,给艺术家提供处理毛发的方法对毛发的最终效果非常重要。制作团队做的第一件事是:评估此前对毛发渲染的已有工作内容。Unity中的首个毛发渲染实现由Marza动画星球为《The Gift》短片而开发。

在Unity的Hack Week活动中,某个团队想继续《The Gift》短片所完成的工作,了解Unity中实时毛发效果的其它可能性。该团队把Marza的毛发效果移植到HDRP,为《Sherman》团队实现毛发解决方案提供了工作的基础。

基于Hack Week项目所提供的基本实现内容,John Parsaie和Steven Shmuely开始处理制作毛发的工作流程。但是本文不会过多深入介绍其中的技术细节,我们只希望介绍团队在该方法上使用的要素。

源毛发网格和SDF

Steven Shmuely对毛发效果做的第一件事是为一部分毛发建模,作为单独的毛发部分,该模型烘焙为SDF有向向量场,用作毛发几何体积本身的原始模型。

通过为毛发提供高分辨率原始模型,毛发的保真度比纯粹基于外壳的方法高很多。例如:法线可以根据每根毛发进行计算,从而得到比目前大部分实时毛皮实现更好的光照效果。

随着我们在该实现方法取得进展,第二种分析式SDF被用于结合毛皮的“外层”,从而把二种效果混合起来。

下图为原始毛发网格,用于生成SDF。

底层部分使用了烘焙式SDF,而外层使用了分析式SDF,因此我们加入选项来根据需要选择使用的SDF。

分析式SDF会提供无限制的分辨率,未来会提供直接在Unity中修改毛发配置文件或属性的功能。烘焙式SDF允许烘焙更复杂的几何体,例如:通过分析方法很难实现的羽毛几何体或毛发风格,提供复制DCC工具中制作内容的可预测结果。

刷毛贴图和高度图

毛发本身的效果很好,但浣熊这类动物没有笔直的毛发垂直于身体部分。此外,毛发在动物的身体上往往没有相同的长度。

为了获得合适的结果,提供制作刷毛贴图的功能非常重要,从而用于修改毛发发线和几何体。Steven Shmuely使用Mari生成刷毛贴图,并生成了高度图来控制浣熊身体不同位置的毛发长度。

影视级动态模糊和超采样

制作团队在《Sherman》项目制作期间开发了大量自定义工具,大多数工具在概念上很简单,但是为团队提供了有效的工作流程,并节省了时间。其中一项关键技术是称为“Filmic Motion Blur”影视级动态模糊的系统。

在开发《大白的梦》期间,我们需要解决的主要技术难题之一是动态模糊。在玩游戏时,目前“实时”状态的动态模糊在高帧率下看起来效果很好,但对于离线渲染器,例如:电视要求的24fps,它会出现瑕疵,这对电视播出效果来说是无法接受的。

为了通过迪士尼的质量标准,John Parsaie开发了Filmic Motion Blur系统。Filmic Motion Blur的核心是一个基于积累效果的渲染器。时间轴序列不是在24fps下渲染,而是在960fps下渲染,中间缓冲区会积累到最后写入硬盘的实际帧数中。

由于该效果只是结合现有渲染缓冲区的结果,所以它不必经过修改就可以处理任何材质或着色器。在《Sherman》项目中,同样的技术也用于将毛发采样结合到最终画面。在未来,我们将研究如何使用这种方法来创建高端影视级景深效果和其它超采样效果。

这种渲染画面的方法并非没有缺点,最大的缺点是:它不能运行在实时FPS中。

实际上,在具有毛发细节和毛发效果的4K画质下,我们开始以“每分钟多少帧”的速度范围来输出最终画面,但考虑到现有CPU和GPU离线渲染器需要数小时渲染最终画面,这种方法的速度依旧快得多。

渲染窗口

Filmic Motion Blur系统大幅提高了最终画面的质量,取得了非常好的结果,但最大的缺点是:为了看到带有所有超采样和结合的最终结果,制作团队必须渲染正在制作的序列或画面。

为了解决该问题,我们开发了Render Window渲染窗口,任何团队成员都可以使用这个自定义编辑窗口来输出最终质量的渲染效果。它让Steven Shmuely可以根据需要调整刷毛贴图和毛发,同时可以快速看到最终结果。

下面为Alpha抖动毛发和最终结合画面的对比图。

Unity Recorder录制器

创作《Sherman》项目的过程和常见Unity项目不同。最终结果是从编辑器输出序列化帧数,并组成最终的动画。为此,我们使用了Unity的Recorder资源包,从编辑器渲染出最终画面。

Filmic Motion Blur功能会关联Recorder的Timeline集成,允许我们结合毛发效果,为最终画面创建超采样动态模糊效果。

下图为Unity Recorder的轨道和剪辑设置。