Notifications
Article
《八重樱》实时渲染短片制作技术分享
Updated 10 days ago
5.5 K
4
《八重樱》短片参与人员大概20人 (6位美术师全职参与,其他为兼职。20人中40%为程序工程师,60%为美术师)。正式制作时间从2018年6月到2019年1月,2019年2月1日正式发布。贺甲拥有中国科学技术大学硕士学位,曾担任英伟达半导体科技的研发工程师,现任米哈游技术总监和美术指导,并专注PBR、NPR卡通渲染、过程动画及可交互物理等实时渲染领域。他致力于使用Unity做出高品质的卡通CG渲染。

高清视频请通过此链接观看:https://www.bilibili.com/video/av42250009

1. 创作《八重樱》这个短片的初衷和背景?

主要是通过结合最新的技术来探索新的渲染风格和表现的可能性,以及积累引擎实时渲染制作CG动画方面的经验。大家对短片的认可同时也验证了米哈游对于技术研发和美术结合的把控能力。

2. 为什么选择Unity,使用实时渲染的引擎去创作这个动画短片?

我们对Unity整套渲染流程做了全面的定制化处理:渲染管线,材质系统,特效表现,及整套后处理流程围绕最终表现完全重写,这些高度定制化的内容在Unity上是相对易于实现的(基于HDRP的默认模板开发出定制化的HDRP渲染管线,并为定制化的HDRP渲染管线制作了专门的Shader)。
使用实时渲染做动画短片无论从渲染开销还是效果调整迭代成本是极低的,渲染效率自然不必多说,从迭代效率的角度而言,我们可以直观的以所见即所得的形式去调整镜头,灯光,材质等效果,并且只需两个小时就可以输出一个4K 60fps 5分钟规格的视频进行最终效果迭代(使用了资源商店的插件AVPro Capture),这相对于传统流程来说都是不太可能做到的。
我们的制作团队也是一个比较年轻的团队,正是因为上述优势使得本片的制作成为可能。

3. Unity HDRP的功能在这个短片中具体体现在哪些方面,请从技术角度进行解析?

在《八重樱》之前,我们曾使用Unity的默认渲染管线渲染过另外两个视频。在开发过程中,我们遇到了很多在默认管线下开发的局限性。这些局限性主要是由于默认渲染管线的高度封装所导致的,使得我们无法自由地控制许多效果的渲染,以下举例说明:
首先遇到的问题是无法精确控制光源。为了实现高质量的角色阴影,我们需要为角色指定某个光源,并在渲染时判断当前光源是否为角色主光源:是则使用高质量阴影贴图,否则使用内置的默认阴影贴图。Unity的默认管线无法让我们方便地遍历整个光源列表,并且无法在shader中得知光源与场景中实际光源的对应关系,这使得我们无法在多光源下灵活地兼顾角色自阴影和默认阴影。而在新的HDRP渲染管线中,所有的光源列表可以在一个pass中遍历完成,同时可以依靠光源id判定是否为角色主光源,从根本上解决了我们的问题。
第二个问题是,在Unity的默认管线下,我们无法灵活控制很多screen space textures的渲染,比如camera depth texture、camera depth normal texture、camera motion vector texture等,这些screen space textures通常是由Unity使用replacement shader来渲染的,对用户来说几乎是完全黑盒的。而为了实现风格化的卡通渲染,我们需要高度定制化这些纹理的渲染。例如,角色渲染需要使用额外的pass来实现描边效果,而replacement shader无法支持多pass渲染,这使得很多屏幕特效在描边处会有问题,例如DOF、TAA、SSAO等。尤其是,描边区域对TAA的质量有很大影响,为了为描边区域渲染正确的motion vector,我们需要拿到前一帧skinned mesh的normal、tangent等数据(如果使用了ABC格式的网格或者对偶四元数,我们甚至需要更多的数据),而我们无法在Unity的默认管线下方便地拿到这些数据。在HDRP渲染管线下,我们可以通过自定义的lightmode和shader来完全控制这些纹理的渲染,极大地方便了我们的开发。
除此之外,HDRP渲染管线让我们可以在场景中使用大量实时光源,hybrid Deferred & Forward rendering大大增加了渲染的灵活性。得益于tile & cluster lighting,即便是需要使用forward rendering的物体,也可以高效地使用大量实时光进行渲染。一些屏幕后处理效果,如SSR和SSAO等,在HDRP管线下可以同时正确地应用于deferred和forward rendering上。而在Unity的默认渲染管线中,这些效果对forward rendering都很不友好。同时,灵活的渲染管线可以让我们高度定制许多风格化效果,例如上面提到的风格化的lighting、雾效、decal system等。
总体而言,原先Unity默认的渲染管线由于高度封装性给渲染开发造成了很多障碍,使得很多效果的高效实现变得束手束脚,甚至无法实现。新的HDRP渲染管线使用了更加先进和通用的渲染架构,给了开发人员极大的自由度和开放性,这对于实现高品质的游戏或影视渲染都是至关重要的。尽管目前HDRP仍有很多底层渲染是黑盒的(例如camera culling),很多渲染API也仍未开放,功能也尚未稳定,但我们相信对于有能力的开发团队来说,HDRP绝对是未来Unity下高品质渲染的最佳选择。

4. 请问这么漂亮的布料解算是如何做到的?

布料部分我们使用Qcloth (Maya插件)做解算,通过alembic格式(简称abc格式)导入unity。
abc动画文件的大小和模型面数有很大关系,我们把布料主体控制在2万面左右,基本可以保留褶皱模拟所需要的网格精度。要保证表面的平滑则需后续在渲染的时候做曲面细分,这样4分钟30fps的动画数据大概只有1G多,是一个相对适中的大小尺寸。
导入引擎后,我们使用自己实现的基于GPU的Catmull-Clark Subdivsion以渲染出绝对平滑的布料表面,整套流程从表现方面非常令人满意。
由于是离线烘焙的数据,对于效果迭代会有一定的数据交换成本。为了进一步提升迭代效率,我们还初步完成了Position Based的GPU Cloth模拟。在模拟4w个粒子的情况下已经可以实时跑60fps且表现出自然的褶皱。这将极大减少效果迭代所需要的时间,基于GPU实时模拟的方案将在之后的制作流程中开始应用。

5. 能否介绍一下头发的实现细节?

基础的diffuse shading使用了multi-layer toon ramp实现丰富的阴影及色彩的渐变和细节。高光计算则使用了各向异性材质,并使用两层高低频高光叠加来获得更丰富的层次和变化。
为了体现更为风格化的高光形状,我们还使用参数化曲线结合jitter noise来定义头发高光的形状,这些参数都可以实时调整,方便最终调出满意的效果。卡通造型的头发如果要实时计算光照对模型制作方面的要求也比较高,要按照严格的硬表面来制作要求才能保证高光的顺滑。

6. 请问眼睛看上去那么有神是如何实现的?用到了特殊的Shader吗?

眼睛是卡通渲染核心的表现点,我们一方面希望眼睛可以从不同角度体现质感,另一方面又要保证卡通插画的感觉,因此专门为眼睛定制了特殊的shader,主要模拟了眼球折射和光束焦散效果,再配合手绘的纹理材质,最终达到了期望的效果。

7. 您如何看待实时渲染技术对于未来动画影视行业的意义?

毫无疑问实时渲染技术对于未来影视动画是一个趋势,已经逐步开始有厂商使用实时引擎去做动画。
当然,对于整体行业制作方面转型以及大规模使用还有很长的路要走,但是它的优势已经逐步开始显露,一方面可以从渲染效率和迭代成本上极大加速现有制作流程,另一方面也使得小型团队甚至个人做出高品质的影视及动画作品成为可能。新兴技术的出现比如基于ML的procedural animation,GPU实时Raytracing等也都将加速这一进程。
实时渲染技术对动画影视行业的影响将经历一个从量变到质变的过程。

8. 米哈游下一步还会有计划基于Unity做一些实时渲染的动画影视项目吗?

有的。我们还在进一步完善提高整套流程以及渲染品质来推动引擎在动画制作方面的应用,敬请期待后续作品。

Unity China
492
Comments
cs
colsd slightly
7 days ago
太强了,衣服果然还是外部软件解算了啊,整体效果太棒了,如果以后实时的衣服能做出来这种效果就好了
0
Luis Dong
Staff
7 days ago
Unity Connect - 产品汪一条
JianpingWang我要收藏功能
马上就来!暂时可以通过以下办法收藏你喜欢的项目:点赞->个人主页->我赞过的项目
0
baba libai
8 days ago
李白爸爸
太强了8
0
JianpingWang
8 days ago
Game scene editor & maker
我要收藏功能
0