《Sherman》项目背后的技术细节(1)
我们分享了最新的实时渲染动画短片《Sherman》,它由《大白的梦》的创作团队制作,展示了高级的实时毛发效果。Unity Innovation团队的技术总监Mike Wuetherick将为你揭秘《Sherman》背后的技术细节。
本文将重点介绍《Sherman》的项目背景、设计方法、外观开发和摄像机布局等。
制作团队
我是Mike Wuetherick,担任Unity Innovation团队的技术总监。我们的团队专注于改进Unity影视和CG动画方面的功能,参与制作的项目包括:《ADAM 2》和《ADAM 3》,《Sonder》,以及与迪士尼电视动画公司的合作的动画系列短片《大白的梦》。
《Sherman》制作团队成员包括:《大白的梦》副导演Mark Droste、角色建模师Steven Shmuely、Unity图形工程师John Parsaie、光照主管Jean-Philippe Leroux、Cinemachine开发者兼创意总监Adam Myhill。
Bryan Larson确定了《Sherman》最初的创意,Nicolas Langois-Demers负责处理角色绑定,Mark Droste和Steven Shmuely则负责改进项目中使用的Unity功能。
在制作方面,《大白的梦》制片人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》的信息,包括完整项目的获取方式,请访问Unity影视解决方案:
https://unity.com/solutions/film-animation-cinematics
下载Unity Connect APP,请点击此处。 观看部分Unity官方视频,请关注B站帐户:Unity官方。更多Unity新功能介绍,尽在Unity Connect平台(Connect.unity.com)。
推荐阅读
Made with Unity | 实时渲染动画短片《Sherman》
喜欢本文,请点击“在看”