章程

角色美术:角色制作以及最后打光时需要注意的事项


皮肤高光:

角色皮肤材质的制作,一开始大家从新技术角度出发,可能会把目标聚焦在3s效果上,但在实际应用中,从最终的综合视觉效果来说,皮肤所特有的磨砂油腻高光表现至少对皮肤质感的表现起到了50%以上的作用。所以也是不能忽视的。
这就是包括天刀在内的很多高端游戏,在皮肤高光表现的时候选取了独特的: 克莱门高光算法(Kelemen_Kalos_BRDF)。
Kelemen BRDF 是物理高光的一种,比较独特,下面我们来看一下为什么这种算法特别适合来做皮肤的表现。
平时美术调节的材质效果中,高光都是遵循一定的比例和曲率,进行线形的衰减的,我们平时材质调节的高光,不外乎以下几种原始形态:
image
而克莱门高光,却可以出现这样的效果:
image
这种多层的,近乎非渐进式的,非线性的高光过渡,正是构建皮肤特有高光反射特性的一个必备要素.

这里我们来观察和验证一下天刀的皮肤高光结构:
image
从上图可以看到,在解构天刀的皮肤高光以后,发现如果要实现 天刀那种皮肤既有”油腻”感,又有”粉嫩”感的皮肤光泽效果,那就只有在比较锐利的高光和比较松散的亚光高光同时存在,并且多层layers之间有算法配合的情况下,才能出来。 所以只有克莱门独特的算法可以胜任这种特殊材质的特殊需求。
当然在不做解构的情况下,天刀自己的pdf文档也直接给出了答案:
image
这里说一下,在教科书里,公版的克莱门的算法,给美术的调节是这样的:
image
这个是Nvidia给出的公版的克莱门高光的算法,美术要通过对(c),这张所谓的Beckmann Texture来不断地进行烘焙/绘制/调节,从而观察高光的变化,这无疑是非常不直观而且不高效的。所以我用的算法是,用两组数据,分别代表每层高光的范围以及强度,来模拟这张BeckmannTexture的衰减和曲线。
image
上面一组数字代表各层高光的范围,下面这组数字代表各层高光的强度,然后在算法里把每层的权值根据BeckmannTexture的曲线大致还原成贴图(c). 这样,美术绕开了复杂的贴图烘焙,修改环节,调节效果更加实时,所见即所得。更重要的是,这种方式把原来像素级别的纹理采集运算,缩略简化成了简单的方程式,在程序的角度来说,克莱门高光这样本来比较昂贵的算法,用比较轻负载的方式实现了。
所以最后要说的是,我们引擎自己的皮肤克莱门高光,在最终视觉效果,使用简明程度,算法硬件负载上,都是比较经得起推敲的选择。
下面是我们自己引擎里,使用克莱门高光后的皮肤效果,而且是在场景仅仅只有一盏平行光的单光源条件下:
image
皮肤效果上有了我们引擎的这个特性功能的支持,无论是欧美风的硬核,还是中国风的柔美,都可以靠美术来调节参数配合不同的美术素材来实现不同的风格和定位。

摄像机灯光的谨慎使用

现在在我们引擎的灯光属性里,增加了摄像机灯光的属性,其原理是,灯光方向和摄像机方向完全绑定,玩家的视角看到哪里,该灯光就无视场景灯光明暗和素描关系,对玩家的角色探照灯式的照明,人走到哪里,光源就跟随到哪里.在计算机图形学的业界,因为这盏灯光的作用和效果都很像矿工安全帽上的那盏灯,所以都统称为”head light”,头灯。
Head light本来的出发点是,防止角色走到关卡很暗的角落看不清,所以要在这些时候做一个加成的提亮。做得合适,可以让角色在关卡里显眼一些,但做得过头,就会导致角色光影效果和关卡剥离,人物几乎不受场景灯光影响,素描关系混乱,以及高光永远直射摄像机等比较大的副作用。
image
上面这个例子可以看出,左边的图,角色背景的关卡场景里,关卡物件都是全部受左上角光源的影响,各个元素的亮面以及高光方向都在左上角。但人物过于受到head light的影响,尤其是高光这里,所有的高光都集中在眼睛,脸,衣料的正中央,无论画面怎么转,光源在哪个方向,人物虽然也会受到场景灯光的影响,但由头灯产生的这个强烈高光永远停留在物体的中央,缺乏变化,导致物体没有和背景融为一体,像是PS上去的。
右边那张图,场景的左下角有个暖色调的火盆,右上角有个冷色调的月光,而人物身上和场景物体的灯光很接近,一冷一暖,左下右上,没有过于强烈的头灯高光来破坏光影的逻辑和素描关系,角色感觉和背景氛围比较融入。
以上是头灯没有调好的时候,在材质上给角色带来的副作用,我们细化到更具体的元素,比如眼球,由于人类在观察角色的时候,对眼睛的观察是比较敏感的,所以当眼球的效果出现问题的时候,玩家的“不适感”也比其他部分出问题的时候要大。
下面我们先看一下高光形成的规律:
image
光线照到物体表面以后,一部分是直射反弹回去,一部分是漫反射的状态被反射到其他方向。 当人眼处于光线直接被反射的那个狭窄区域的时候,就是完全正面观察高光的时候,这个时候就会觉得高光亮,特别清晰。离开这个区域观察高光,就会觉得高光比较柔和,没有这么强烈了。一般的三维游戏的shader,虽然都不是严谨的光线追踪,但都是在尽力模拟上面这个原理。
好了,现在要是把灯光和眼睛绑定起来以后会怎么样呢?
image
本来,物体的高光直射双眼的”全高光“状态,是一个概率事件,在第一张示意图里面可以看到,观察点进入某个物体的全高光直射区,并不是随时随地都能发生的状况。但一旦光源和视点完全绑定以后,那就是每一帧都是高光反光的直射区了。我们引擎默认的物理高光本来就是有点瑕疵的,比如从高光正面拉远距离的时候,高光会缩成一个纯白的像素点,会闪烁,缺少随着场景的纵深渐隐等等。但本来这个小概率事件的视觉瑕疵,一旦在绑定头灯以后,因为视点时时刻刻都处于物体的高光的全正面,就变成必然事件了,像在一些高光范围比较小,又强烈的材质上,这个瑕疵就很明显很难回避了。

由于人类对观察角色的眼睛有强于其他元素的敏感性,所以在眼球效果上,上面这个副作用尤其明显:
image
近距离正面观察角色时,高光会落在瞳孔的正中,产生不舒服的“白色瞳孔”的效果。
image
而远距离看角色的时候,由于上面我们说过的原理,又很容易触发“正面看高光被缩略成一个纯白的像素点”这个渲染上的瑕疵。
所以头灯的高光,在现实世界中,是和造成类似于照相机“闪光灯眼”,黑夜中的“野兽眼”原理是一样的。
image
抛开美术角度来说,人类对这种眼球的高光,是有本能的不适感,和感觉到吓人的潜意识反应的。所以开发人员不宜过于依赖head light的效果功能,要谨慎使用。
然后既然不用head light夸张的正面高光来表现眼睛,那用什么方法来增添眼球的细节呢?
image
天刀的解决方案是,在关卡不同的位置,渲染出不同的环境反射贴图也就是cubemap, 作为反射贴到眼球上。所以眼球的质感更加强,更加水灵,非常符合美女型角色的定位。
这是在修改提升的场景里,角色眼睛加上cubemap以后的效果:
image
在上面的截图里可以看到,有了合适的反射贴图以后,眼睛的细节更加丰富了,而且更重要的是,有了cubemap来增添细节,在角色背光的时候,也不需要靠硬是增加head light的不符合物理原理和美学原理的,吓人高光,来避免眼球无光,无细节的现象了。
image
这张图是发过来的原始场景里,仅仅用head light来构建一个高光,不用环境反射的效果,可以看出,尤其是在角色完全背对光源的时候,和修改后的效果或者天刀的范例效果比较,表现上是缺乏细节同时不太符合物理原理的。(眼睛正对的方向上能有产生如此强烈高光的光源,这个位置就不会是关卡的背光面,而是对光面了。)
image
关于整个眼球的制作,这里向大家推荐这套双层高光虹膜制作的方法,仅用同一张法线贴图,在同一个非常非常低面的模型和纹理材质上,模拟出一凸一凹的晶状体和虹膜的两种状态。再配合环境反射,可以花非常少的资源作出非常逼真的写实眼球。 源文件在和原理讲解可以联系廖诚陈波。
由于我们引擎和天刀比,暂时还不具备在关卡的各个位置抓取和烘焙不同的cubemap供角色实时来转换套用。但是,妥协的方法是,美术花点功夫,生成一套明暗关系有点变化的,但是比较抽象的cubemap,在反射的内容里不出现清晰的桌椅门窗,或者花草树木,只有一个大概的模糊感觉。只要不是太具象的反射内容,无论在关卡的 任何位置,都不会觉得视觉上有太不搭调的感觉的。
image
比如这种比较抽象模糊的,有个大体光影关系的cubemap,就可以在不引起视觉不适的情况下,通行整个关卡了。
综上所述,就画面效果来说 :天刀的“一个关卡内自适应多套环境反射贴图” ,效果好于 “一个关卡通用一套抽象反射贴图”。但“一个关卡通用一套抽象反射贴图”,效果又好于 “完全不用反射贴图”。 所以,基于目前引擎的功能的局限,选择“通用一套抽象反射贴图”的方案是让视觉和细节效果最佳的选择。

PS:

  • 本文主要介绍角色制作以及最后打光时需要注意的事项,主要两方面:皮肤的克莱门高光以及摄影机灯光的谨慎使用。
  • 如果有疑问或者错误不足之处,请和TA组联系!欢迎交流,我们会及时补充纠正!