风蚀之月

CEDEC2020-新樱花大战笔记

08 Feb 2021 CEDEC

这个是CEDEC2020上《新樱花大战》的分享的笔记。

CEDEC:https://cedil.cesa.or.jp/cedil_sessions/view/2328

《新樱花大战》是PS4上的游戏,开发是世嘉。分享的主要内容是关于角色制作与渲染。

开发时间为2016年到2019年。

概要

《新樱花大战》在初期开发的时候使用的是双色调的Toon渲染风格,没有使用PBR。

后面根据用户的诉求,将渲染的方向转向了具有Toon风格的PBR,在制作途中切换到了支持PBR的Hedgehog Engine 2引擎。

在做渲染切换时,团队制作了一个用于后续渲染质量参照的场景。在这个场景中对各种要素进行测试,之后所有的场景制作都要求达到同等的水平。

场景中包含的要素有:

模型制作

在谈到建模之前首先介绍了下角色设计上的一些变化。

女主角天宮櫻原本的设定更加强调开朗和柔和的部分,但是本作更加强调女剑士这一角色特征。所以在对制作的几个调整过的版本进行对比后,最终采用了基本表情时是凛然的剑士,而在其他如笑容的表情时则体现出女性的柔和感的形象设计。

在角色的设计方案确定之后,以2D的角色设计为基础,进行3D建模。在模型制作过程中,对原画的色彩分布和特征进行尽可能的重现。模型制作上,身体部分采用通用的体型模型,然后在其上制作服装来完成。

制作流程

模型制作时使用的建模工具有:Maya、ZBrush、SbustancePainter。

首先使用Maya制作出运行时使用的模型,然后在ZBrush中雕刻出表面的褶皱和详细的凹凸并烘培出法线贴图。

衣服的布料质感则是在SubstancePaiter中制作,最终在PhotoShop中合成到贴图中。

《新樱花大战》中,表情动画也是由角色制作负责的,所以在进行蒙皮权重后会进行Facia动画的制作。

最终,在Maya中导出模型、骨骼、表情动画以及材质动画,在引擎中对物理驱动的头发等摆动进行调整,就完成了角色的建模。

模型规格

模型的规格上,面数在40000~65000区间,根据角色设计的不同会有区别。

由于游戏制作的目标帧率是30帧,而同屏角色最多时会有14个,因此逆向计算出角色的面数上限。

骨骼数量根据角色会有不同,天宮櫻的是最多的,有350根。

通用骨骼

本作为了方便让动画可以在各个角色之间通用,基础的身体部分采用的是统一的骨骼构造。

通用的骨骼模型被称为Regulation Model, 在此基础上对各个角色进行制作。

模型的体型,按照男性和女性,各自有S/M/L三种。

每个角色在制作时,首先决定采用哪一个体格,然后依此进行骨骼构造。各个角色在S/M/L的规格之外的身高差,则通过在实际运行中调整Root骨骼的缩放来实现。

动画制作时,统一使用M体型来制作通用动画,然后通过Retarget应用到各个体型上。

可动饰物分类

对通用模型上的可动饰物进行分类:

总共分为六个种类,由于很多和服相关的,直接看图比较明确:

在制作通用动画时,必须保证不会与这六个分类的可动饰物出现穿模。

而模型制作这边,则不可以在制作服装时与分类中的饰物出现太大的形状偏差。

这样,在两边都遵循标准的情况下,就可以很好的避免实际运行过程中对可动饰物进行物理模拟时出现穿模。

当然,在标准模型上的可动饰物之外,每个角色都会有一些自有的特色物品,但是这些物品,例如头发都会有自己的骨骼。

ZBrush高模制作

ZBrush中制作高模时,主要对衣服的褶皱和一些细节部分进行雕刻。

服装制作虽然有考虑过使用Marvelous Designer,但是由于本次是以动画的风格为标准的,所以最终没有采用。

褶皱这些的雕刻,如果过于接近现实感就会变得过于详细。于是参考了通常手办的制作方式,对过于详细的细节部分进行省略。

Substance

SubstancePaiter被用于制作衣服的布料质感、金属感,通过Substance导出,然后在PhotoShop中进行合成。导入到引擎后发现有一些需要调整的地方会进行一些微调。

在Substance中进行制作时,作为基础贴图烘培的AO贴图以及ZBrush输出的高模烘培这些都能够起到作用。

贴图

衣服贴图

首先是衣服部分的贴图:

Albedo:Alpha这张贴图的作用,是用来在Albedo上添加一个渐进的Alpha下降,避免内部的形状出现过度的发光。

上边中间的ID的贴图,是用于给衣服绘制轮廓线的。在颜色不同的边界线上,就会在PostEffect中绘制这种贴图中对应的颜色。而ID:Alpha则用于控制轮廓线的消失和混合。

《新樱花大战》的角色有两种轮廓线,一种是使用上面提到的ID贴图进行绘制的衣服的轮廓线,一种是通过背面法将身体模型反向扩展的通用的轮廓线。

法线贴图部分是通用的切线空间的法线贴图。

左下的Param贴图,是用于PBR的参数的

这个贴图中,G通道的光滑度与UnrealEngine相比在0和1的作用上是反过来的。

右下角的CDRF贴图,用于调整阴影的色调,之后会说明。

脸部贴图

接下来是脸部贴图:

基本上和衣服的贴图用法差不多,不同的部分是,脸部没有使用法线贴图,而Albedo:Apha则于衣服的黑白部分的作用是相反的。这种相反的作用,是为了让脸部特定的部位更加的发光,所以和衣服的表现目的不同。

脸部没有法线贴图,而是依然保留了采用PBR渲染之前的ToonShader风格的特殊法线调整。

顶点颜色

本作有使用VertexColor,顶点颜色按照RGB通道控制不同的效果:

CRDF

本作采用了会将曲率考虑在内的RampTexture。

RampTexture是指,根据光照的反向和法线的角度来对光照计算进行影响的贴图。

使用方法图中左上有提到:

R=法线和光照反向的内积

G=曲率

最右边代表光照与法线反向相同时的颜色,而最左边指定的是最暗时的颜色。

曲率是在上面的顶点颜色的G中指定的。

会添加曲率这个维度,是为了模拟Subsurface Scattering一样的表现,所以分为上下两段的RampTexture并用曲率在上面采样。顶点颜色的G值越高,则会采样出更加明显的阴影边界,而G值低时则会取出更加平滑的阴影。

根据部位的不同,会采用不同的RampTexture设计。例如,皮肤的RampTexture在设计上会让皮肤的阴影更加平滑。

头发贴图

头发贴图使用除了天使光环的部分,基本和衣服相同

天使光环是头发上的那一圈高光。根据通道控制不同的属性

根据摄像的移动,会控制头发上的天使光环的移动。在竖直反向移动时,高光会有较大的移动量;而在水平反向上移动时,移动量就会很小。

前发透过

对于一部分前发会挡住眉毛和眼睛的情况,会对前发使用特殊的Shader。

在单独的Buffer中进行眉毛的绘制,并在后处理时进行合成,让眉毛和眼睛产生一种透视感。在渲染时如果由于摄像角度导致前发会挡住眼睛时,会进行这个计算。

瞳孔表现

本作的眼睛分为三个部分,眼白的部分是一个内凹的形状,瞳孔的部分则分为了向内凹的部分和向外突出的部分。

瞳孔的高光叠加在其突出的半透明部分上。根据摄像角度的不同,各个部分的贴图会分开进行移动,使得在哪个角度高光都能处在一个刚好的位置。

控制上,有针对高光上下左右的移动强度与控制移动范围的参数共同作用。

眼睛的贴图

眼睛的贴图部分比较特殊:

从左边开始,是作为基础颜色的Albedo,以及用于Mask瞳孔的Alpha贴图,用于在Albedo上进行叠加的spt贴图,以及两张瞳孔高光,以及反应环境的matcapture贴图。

虽然很多动画风格的渲染中会省略掉瞳孔中的虹彩部分,但是本作为了提高角色靠近时的效果,进行了详细的绘制,同时为了体现环境的变化与matcap的贴图进行叠加。

高光贴图有两张,分别使用不同的UV动画进行控制,用于表现眼睛的湿润感。虽然是很细微的操作,但是对于表现角色的感情非常的有用。

角色光照

角色光照主要依赖于在场景中的直射光以及烘培到GI中的光照缓存,GI中会有间接光缓存。

GI中能够烘培场景的一些细节光照信息,可以让角色在场景中的渲染变得更真实。

对于部分完全位于阴影中的场景,会在角色身上挂一个胶囊体的碰撞,根据其遮蔽信息,脚下投下阴影。

由于战斗中有大量的敌人,会相应的只在脚边进行操作。

这个应该是通过Overlap信息在周围投射假的阴影

背光灯

会在主光照的180度相反位置和左右90度的位置添加用于角色亮度修正的背光灯。

主要用于防止角色站在逆光的位置导致变暗的问题,以及背光灯的光照也可以强调出材质的质感。

阴影修正

本作在光照中,对角色专门进行了光照的调整。

上图左右采用的是同样的光照环境,虽然右图的光照是物理正确的,但是并不是所想要达到的风格。

对Shader进行修改,在ShadowMap上添加一个Bias来对光照进行修正。由于是直接在被投影表面进行的调整,导致有的时候会将想要保留的阴影也抹除的情况,例如头发等在脸部的投影也会消失。

本作由于没有采用将头发的阴影另外绘制的方法,所以并没有完全解决这个问题,只是通过调整参数来尽可能的达到一个好的效果。

角色风格统一

本作由于角色设计由多人进行,所以角色之间会具有不同的风格。

为了让这些风格不同的角色在游戏中很好的进行风格融合,主要对头身比和瞳孔的表现进行了统一。

最开始的时候虽然为了忠实于角色设计,没有统一头身比,但是实际运行中发现,头身比不同的角色在同一个场景中的话,头更大的角色看起来就像是穿着人偶服一样,效果很不好,所以最后还是做了统一。

瞳孔方面,不同的角色原案会有不同的风格。这个也实际尝试过之后发现违和感很强,进行了统一性的调整。

表情全部采用的是骨骼动画,基本会按照原画的风格来。然后在其基础上制作更多的派生表情。表情制作时如果出现无法完全判断正面表情的情况,会使用正面的原画作为基准进行想象来进行制作。

此外,以基础表情为基础,在场景中还可以将表情进行融合形成更多的表情。将眉眼左右和嘴型各自设置成不同的表情并保存成Preset来使用的话,就可以组合出新的表情。

对于每个角色,还会在「あ」的口型之上有一个用于大叫的表情。

除了骨骼的动画表情之外,还有用于叠加的四个特殊表情:

脸红的表情是直接通过透明度来调节的。

眼泪的话,是通过在眼泪的模型的Shader中进行顶点动画来实现的。而流下来的眼泪则是从眼泪的模型为起点播放UV动画来实现的。

可动饰物

本作的可动饰物是通过使用Bullet物理引擎来实现的。

专门制作了一个场景,方便在其中通过编辑器对可动饰物进行调整和设置。可以对各个骨骼进行角度范围、质量、惯性、摩擦系数、反弹系数、速度衰减、角度衰减等参数进行逐个调整。另外也可以添加碰撞来防止可动饰物穿模。

对于一些单纯依靠物理无法很好的实现的部分,会将其根骨骼挂到动画中,由动画进行控制。

除了骨骼的纵向运动传递外,也会设定横向的运动传递。让头发、振袖和裙子可以同步的进行摇动。

制作过程中,会在编辑器中,对行走、跑步、左右转弯、坐下等动作进行预览,以此为基准保证不会穿模。在实际的场景中,如果出现穿模的话,也会进行微调。

总结

将动画风和写实风进行融合过程中,这两者最大的不同点在于:夸张和省略。

根据角色的部位不同,会采用不同的写实与动画的比例。

角色的头部、脸和头发,会想要更多的保留原画中的印象。

衣服的质感、整体的阴影,则会更多的采用写实的方案。

本次的结论是:只要角色的脸的印象很好的保留的话,其他的部分采用写实的风格也不会有多少违和感。

以下是官方总结的想要改进的部分:

  1. 希望能对阴影的形状进行控制
  2. 更加强化脸部的细节
  3. 添加更多的表情。追加母音区分大小的表情以及固有表情。
  4. 强化眼睛的表现力。即便画面中只有眼睛也能有足够的细节。
  5. 头发的强化。根据光照和摄像角度有更多的变化。
  6. 手的表演的强调。改善手的现状和添加细节。

由于是官方自己的想要改进的部分,所以是否会改进以及是否之后会有更多的需求就不确定了~