米哈游技术总监分享:如何用Unity做出高品质的卡通CG渲染?

来自 Unity官方平台 2019-03-20
专栏

[ 转载自 Unity官方平台 ]

米哈游技术总监分享:如何用Unity做出高品质的卡通CG渲染?

《八重樱 · 桃源恋歌》

米哈游,在业届素有“一家被游戏耽误的动画公司”之称。在Unite 2018大会中,米哈游技术总监贺甲就曾分享过《崩坏3》:在Unity中实现高品质的卡通渲染

本文将由米哈游技术总监贺甲分享米哈游最新动画短片《八重樱 · 桃源恋歌》中的制作技术。

米哈游使用Unity实时渲染的MMD次世代动画短片《八重樱 · 桃源恋歌》,今年2月在B站发布以来,获得了260多万的播放量。

《八重樱 · 桃源恋歌》这部短片,对于玩家来说绝对是一场美的享受,而对于从事Unity开发者来看,这部短片中的模型角色,动画渲染的技术绝对顶尖。

米哈游2.jpg

米哈游技术总监 - 贺甲

访谈嘉宾:贺甲拥有中国科学技术大学硕士学位,曾担任英伟达半导体科技的研发工程师,现任米哈游技术总监和美术指导,并专注PBR、NPR卡通渲染、过程动画及可交互物理等实时渲染领域。他致力于使用Unity做出高品质的卡通CG渲染。

技术访谈

米哈游创作《八重樱 · 桃源恋歌》短片的初衷和背景是什么?

贺甲:《八重樱 · 桃源恋歌》短片参与人员共20人,其中包含程序8人,其余为美术,但实际项目仅6名美术全职参与,其余人员则为兼职。2018年6月开始制作,2019年1月完成,历时半年。

我们主要是希望通过结合最新的技术来探索新的渲染风格和表现的可能性,以及积累Unity引擎实时渲染制作CG动画方面的经验。

大家对于《八重樱 · 桃源恋歌》的认可,同时也验证了米哈游对于技术研发和美术结合的把控能力。

米哈游3.jpg

为什么选择Unity进行实时渲染创作这部短片?

贺甲:我们对Unity整套渲染流程做了全面的定制化处理:渲染管线、材质系统、特效表现及整套后处理流程围绕最终表现完全重写,这些高度定制化的内容在Unity上是相对易于实现的。

使用Unity 2018,我们基于Unity默认的HDRP高清晰模版进行定制化开发,并制作了专门的Shader。

米哈游4.jpg

使用实时渲染引制作动画短片无论从渲染开销还是效果调整迭代成本是极低的。渲染效率自然不必多说,从迭代效率的角度而言,我们可以直观的以所见即所得的形式去调整镜头,灯光,材质等效果。

我们使用了Unity Asset Store资源商店的插件AVPro Capture,只需2个小时就可以输出一个4K 60fps 5分钟规格的视频进行最终效果迭代,这相对于传统流程来说都是不太可能做到的。

我们的制作团队也是一个比较年轻的团队,正是因为上述优势使得这部短片的制作成为可能。

Unity中HDRP高清晰渲染管线在这部短片中具体体现在哪些方面?

贺甲:在《八重樱 · 桃源恋歌》之前,我们曾使用Unity的默认渲染管线渲染过另外二部短片《琪亚娜·极乐净土》和《芽衣·染上你的颜色》。

在开发过程中,我们遇到了很多在默认管线下开发的局限性。这些局限性主要是由于默认渲染管线的高度封装,使得我们无法自由地控制许多效果的渲染。

首先,遇到的问题是无法精确控制光源。

为了实现高质量的角色阴影,我们需要为角色指定某个光源,并在渲染时判断当前光源是否为角色主光源,是则使用高质量阴影贴图,否则使用内置的默认阴影贴图。

Unity的默认管线无法让我们方便地遍历整个光源列表,并且无法在Shader中得知光源与场景中实际光源的对应关系,这使得我们无法在多光源下灵活地兼顾角色自阴影和默认阴影。

在新的HDRP高清晰渲染管线中,所有的光源列表可以在一个Pass中遍历完成,同时可以依靠光源ID判定是否为角色主光源,从根本上解决了我们的问题。

米哈游5.jpg

其次,在Unity的默认管线下,我们无法灵活控制很多渲染。

例如:Camera depth texture、Camera depth normal texture、Camera motion vector texture等,这些Screen space textures通常是由Unity使用Replacement shader来渲染的,对用户来说几乎是完全黑盒的。

为了实现风格化的卡通渲染,我们需要高度定制化这些纹理的渲染。

米哈游6.jpg

角色渲染需要使用额外的Pass来实现描边效果,而Replacement shader无法支持多pass渲染,这使得很多屏幕特效在描边处会有问题,例如DOF、TAA、SSAO等。

尤其是,描边区域对TAA的质量有很大影响,为了为描边区域渲染正确的Motion vector,我们需要拿到前一帧Skinned mesh的normal、tangent等数据。如果使用了ABC格式的网格或者对偶四元数,我们甚至需要更多的数据。

我们无法在Unity的默认管线下方便地拿到这些数据。但是在HDRP高清晰渲染管线下,我们可以通过自定义的Lightmode和Shader来完全控制这些纹理的渲染,极大地方便了我们的开发。

米哈游7.jpg

此外,HDRP高清晰渲染管线让我们可以在场景中使用大量实时光源,Hybrid Deferred & Forward rendering大大增加了渲染的灵活性。得益于Tile & cluster lighting,即便是需要使用forward rendering的物体,也可以高效地使用大量实时光进行渲染。

SSR和SSAO等一些屏幕后处理效果,在HDRP高清晰渲染管线下可以同时正确地应用于Deferred和Forward rendering上。而在Unity的默认渲染管线中,这些效果对Forward rendering都很不友好。

米哈游8.jpg

灵活的渲染管线可以让我们高度定制许多风格化效果,例如风格化的Lighting、雾效、Decal system等。

总体而言,原先Unity默认的渲染管线由于高度封装性给渲染开发造成了很多障碍,使得很多效果的高效实现变得束手束脚,甚至无法实现。

新的HDRP高清晰渲染管线使用了更加先进和通用的渲染架构,给了开发人员极大的自由度和开放性,这对于实现高品质的游戏或影视渲染都是至关重要的。

尽管目前HDRP仍有很多底层渲染是黑盒的,很多渲染API也仍未开放,功能也尚未完全稳定,但我们相信对于有能力的开发团队来说,HDRP高清晰渲染管线绝对是未来Unity下高品质渲染的最佳选择。

米哈游9.jpg

这么漂亮的布料解算是怎么实现的?

贺甲:布料部分我们使用Qcloth做解算,通过Alembic格式导入Unity。

Abc动画文件的大小和模型面数有很大关系,我们把布料主体控制在2W面左右,基本可以保留褶皱模拟所需要的网格精度。要保证表面的平滑则需后续在渲染的时候做曲面细分,这样4分钟30fps的动画数据大概只有1G大小,是一个相对适中的大小尺寸。

米哈游10.jpg

导入Unity引擎后,我们使用自定义实现的基于GPU的Catmull-Clark Subdivsion以渲染出绝对平滑的布料表面,整套流程从表现方面非常令人满意。

由于是离线烘培的数据,对于效果迭代会有一定的数据交换成本。为了进一步提升迭代效率,我们还初步完成了Position Based的GPU Cloth模拟。

在模拟4万个粒子的情况下已经可以实时跑60fps且表现出自然的褶皱。这将极大减少效果迭代所需要的时间,基于GPU实时模拟的方案将在之后的制作流程中开始应用。

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

贺甲:基础的Diffuse shading使用了Multi-layer toon ramp实现丰富的阴影及色彩的渐变和细节。高光计算则使用了各向异性材质,并使用两层高低频高光叠加来获得更丰富的层次和变化。

为了体现更为风格化的高光形状,我们还使用参数化曲线结合Jitter noise来定义头发高光的形状,这些参数都可以实时调整,方便最终调出满意的效果。

卡通造型的头发如果要实时计算光照对模型制作方面的要求也比较高,要按照严格的硬表面来制作要求才能保证高光的顺滑。

米哈游11.jpg

眼睛看上去那么有神是如何实现的?使用了特殊的Shader吗?

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

米哈游12.jpg

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

贺甲:毫无疑问实时渲染技术对于未来影视动画是一个趋势,已经逐步开始有厂商使用实时引擎去做动画。对于整体行业制作方面转型以及大规模使用还有很长的路要走,但是它的优势已经逐步开始显露。

一方面可以从渲染效率和迭代成本上极大加速现有制作流程,另一方面也使得小型团队甚至个人做出高品质的影视及动画作品成为可能。

新兴技术的出现,例如:基于机器学习的Procedural animation,GPU实时Raytracing等也都将加速这一进程。实时渲染技术对动画影视行业的影响将经历一个从量变到质变的过程。

米哈游还会有计划基于Unity创作实时渲染的动画项目吗?贺甲:我们还在进一步完善提高整套流程以及渲染品质来推动引擎在动画制作方面的应用,敬请期待后续作品。

文章评论
游戏葡萄订阅号