本文首发于知乎专栏“一个想法,不一定对”,作者为游戏制作人潘翔(知乎名称:我乱写的),游戏葡萄已获转载授权。
想了想好像在国产游戏开发中,真正称得上电影级的游戏角色还真是不多,就算是射击赛车之类的游戏,为了迎合大众的审美口味,角色造型也是以偏日韩风格的卡通唯美为主。所以国内游戏公司对制作写实类型游戏角色的经验大多也都比较浅(国外大作角色外包经验不算完整经验,模型资产只是整个角色制作流程中很小的一部分)。
主机游戏中高精度的写实角色在制作上和传统网游角色差别是非常大的,流程上更接近影视。写这个也是为了分享一点经验,起个抛砖引玉的作用。本文由本人写的我们游戏中的角色制作规范修改而来,业内人士也可以把它当制作文档来看。
国内目前流行的是这种唯美的角色,严格来讲不算太写实。
即便是写实为主的射击游戏的脸型也更像玩偶而非真人
高精度的游戏角色一般在单机和主机游戏上应用比较多。相对于网游,因为游戏内出现的内容可控,通常情况下不用考虑用户配置和多人在线的限制,所以在玩家控制的角色上能投入大量资源把角色做得很精细很生动,让玩家游戏过程中能产生良好的带入感,增加游戏感染力。在模型面数的预算上比多人游戏要高很多。PS3时代一个主角级别的角色面数通常在5万面左右。PS4时代则升级到了15~20万面。多边形数量的提高带来了角色细节的提升,从PS3到PS4,玩家能明显感受到角色细节的变化。
古墓丽影9
古墓丽影10
模型
所以写实类角色非常吃多边形数量,要做出足够生动的角色,在不超过面数限制的前提下,能用模型表现的细节就不要用贴图。同时为了让角色的动画生动自然,在模型能够运动的关节部位都需要留出足够多的布线。布线应该尽量以4边面为主,在重点区域需要重点照顾,比如眼睛,嘴等部位。而且能够运动的部分的结构都需要用模型做出来。比如毛发,眼球,泪腺,眉毛,睫毛,口腔,牙齿,舌头等。图中是我们游戏中的角色,可以看到角色面部的多边形数量是非常丰富的。
眼球和口腔的制作也要尽量按照真实眼球来做,至于为什么这么做下文会有解释。
隐藏掉头部后眼睛和口腔内的结构,这个画面在很多游戏出bug的时候会经常看见
起伏较大的布褶也要用模型表现
贴图
同样高精度角色对贴图分辨率要求也不低。一个角色通常由好几张贴图组成,贴图分辨率一般在4K以上。根据换装和shader的要求,贴图会分为由皮肤,衣物,毛发,眼睛,其他组件等组成,根据实际需求增减。
一个角色的贴图组成
模型和贴图质量的好坏是游戏画面的基础,也是美术成本消耗最大的部分。随着硬件机能的提升,一个高精度角色的制作周期也大大拉长,类似神秘海域那种精度的角色制作周期会长达数月。不少大厂也开始尝试新技术如扫描建模来降低制作成本。但是对于现实中不存在的角色,还是需要美术自己动手制作,这也是一个非常考验美术基本功的环节。
皮肤材质
当然光有模型和贴图是远远不够的,这篇文章也不是模型贴图的教程。要做出令人信服的真实角色效果,材质表现更加重要。在本时代主机上,因为PBR(Physicallly-BasedRendering基于物理渲染)技术的大范围使用,材质效果的真实性有了很大程度的提高。而如何表现真实自然的皮肤材质,更是提高的重点。
皮肤材质类型属于次表面散射材质(Subsurface Scattering),顾名思义,就是光线会在物体内部产生散射,呈现出一种柔软剔透的效果。简称3S材质。
生活中常见的玉、皮肤、蜡烛、水果、树叶等都具有次表面散射特性
本时代成熟的3D引擎一般都自带次表面散射的shader,例如在我们使用的虚幻引擎中,就可以将材质类型选为subsurface profile来配置次表面散射参数。通过修改指定的subsurface profile来调整出想要的皮肤透光效果,通过一张遮罩贴图来控制不同部位散射的权重。
当然,真实的皮肤并不只具有次表面散射这一特性。除此以外,人类的皮肤上还有无数细小的毛孔,分泌的油脂,汗水等会影响皮肤表面的纹理,高光和光泽度。要想角色效果真实,这些细节也必须体现出来。我们的做法是在基础纹理上叠加一张无缝的细节纹理来模拟皮肤表面细小的毛孔,皮肤的光泽度和高光分别由不同的参数控制强度,由遮罩贴图控制其范围和权重。
贴图使用如下,皮肤部分基础纹理一共三张,分别是颜色法线,和细节贴图。其中3S贴图和粗糙度,高光贴图整合在一起,分别放置在RGB通道上。
材质节点如下
眼睛
接下来是眼睛。眼睛角色中结构最特殊的部分,也是最出彩的部分。一个水灵灵的眼睛能让角色显得神采飞扬。所以表现眼睛的重点是高光和反射。传统的做法是将高光绘制在眼睛的贴图上,这样的缺点也很明显,眼睛的高光是死的,不会随环境的改变而改变。复杂一点的可能会单独处理高光的位置,让高光能有一定程度的变化。但是这样也有缺陷,就是不能真实反应角色和环境之间的关系。因为眼睛质感其实像一个玻璃球,能反射出周围景象和光源位置,所以在制作眼睛的时候,需要考虑到这个特点,对材质进行特别处理。
传统网游的做法,将眼睛的高光绘制在贴图上,实际上位置是不正确的
单独处理过的眼睛高光,能一定程度模拟眼球的反射效果
为了得到真实的效果,眼球的建模也必须按照真实的结构来制作。人的眼球并不是一个标准的球形,眼球的前方有一个突起,里面填充着角膜和前角房等物质,瞳孔则是凹陷进去的,正是这个结构让眼球呈现出一种特别的高光。
眼球的贴图和模型比较简单,但是材质比较复杂,虚幻引擎中提供了单独的眼球shader,但是除了常规的颜色粗糙度高光反射属性外,需要添加一个bumpoffset节点用来模拟瞳孔的凹陷效果,这样才能得到正确的眼睛高光。另外,还需要一张切线空间贴图来控制光线通过角膜产生的折射。因为引擎中光照的精度并不能总是满足照亮角色眼睛的需求,为了让眼睛看起来有水灵灵的质感,在眼睛的自发光通道上也加入了环境贴图模拟眼球的反射。材质如下
眼球的效果,眼睛的高光和瞳孔有一定距离的,在光源不足的暗部可以提高环境反射让眼睛看着透亮。
另外,在眼睛和眼皮相交的位置,为了呈现出眼睛的湿润感,通常会单独制作一个线条状的模型放置在相交处模拟眼睛上的水分。同时为了让眼睛在人脸上的位置关系更加明确,还会用透明贴图模拟眼睛周围的淡淡的阴影。
注意下眼皮和眼球相交位置的细小反光,这个是用模型模拟的,眼睛周围的阴影也是用透明贴图模拟的
毛发
毛发一直是实时渲染中的难点,传统的做法是透明贴图面片模型。这样做的问题也是一大堆,比如不够真实,排序问题,运动困难,费资源等等。现在有了实时毛发,可以解决一些真实性和运动的问题,缺点就是更费资源,同时因为技术不够成熟,在某些硬件上可能会有bug。为了方便优化和照顾大众配置,大部分游戏还是使用传统做法,用贴图加面片表现。通过改进shader,传统做法也能取得不错的效果。
毛发有以下几个特点:1,头发的高光并不是汇集在一个点上,而是沿表面散开。这种效果通常被称为各向异性反射(效果见洗发水广告)。2,光线会穿过毛发,所以稀疏的发丝会比浓厚的发丝看起来显得更亮。3:发根和发梢因为粗细程度不一,光源穿过的效果也会不同,并且导致每缕头发上颜色上也会有区别。
虚幻引擎提供了单独的毛发shader,毛发shader用散射Scatter,切线tangent代替标准材质中的金属度和法线。另外还增加了背光backlit参数,但实际上并没有什么卵用。
基于shader的变化,贴图绘制的要求也发生了改变。毛发的贴图由五张贴图组成,分别是diffuse贴图,控制颜色,alpha贴图,控制不透明区域,root贴图,控制发梢到发根的变化,depth贴图,控制头发的层次感。贴图效果如下
材质节点如下,看不清也不要紧,这些官方范例里都有
值得一提的是为了表现出良好的发丝效果,alpha贴图中的发丝要画的比较粗,必须一根一根的都能看出来,而不能按常规做法一缕一缕的画。另外这个shader对毛发面数要求比较高,必须要有足够多的面数才能呈现出比较好的效果,我们角色毛发就使用了18000个三角面。
毛发效果
背光效果,可以看出发丝边缘呈现出真实的透光感
最后是角色整体效果
官方参考文档:照片级角色(可点击此处查看)
光照
仅仅完成角色模型贴图和材质的制作是远远不够的,必须要放到游戏的实际环境中运行才能看到最终效果 。因为光照环境的改变,所以角色在游戏中实机运行的效果和预览效果经常有很大差别。
引擎中的光照一般分为静态光照和动态光照。在虚幻及大多数引擎中,静态光源只影响静态物体,而角色属于动态物体,要照亮角色,必须使用动态光照。但是在不开启动态全局光的前提下(也不建议开启),动态光源是不会产生间接光照的,所以角色的阴影效果会很难看。所以需要在场景中放置LightmassCharacterIndirectDetailVolume(作用类似于unity的Light Probes),让静态光照烘焙产生的间接光能影响角色。
动态光照可以同时照亮角色和静态物体,但是不会产生间接光照,所以阴影的效果非常难看
静态光照会产生间接光照但是不会照亮动态物体,所以角色只收到间接光照影响,没有被光源照亮
同时受间接光照和直接光照影响的角色,阴影效果自然了很多
所以在游戏场景中角色能到达的区域,必须保证角色同时都收到间接光照和动态光源的影响。另外天光也能有效的改善角色的光照效果,但是天光也有其自身的局限性。天光作为无方向的光照,会让整个暗部的效果平淡,缺乏细节层次变化,另外在室内环境中,天光的效果并不是很理想。
有光照就会有阴影,阴影精度的效果对角色影响极大。在3D游戏中,影子都是非常消耗渲染资源的。所以实时光照的阴影精度都不会很高,这就会导致游戏中角色细节大量丢失。因此角色的阴影一般都需要单独处理。
默认阴影效果,可以看到脸上五官的体积感很差
提高阴影精度后的效果,角色的五官毛发都变得立体起来。
之前说过,阴影的渲染非常消耗硬件资源,所以角色的光照和投影一般都是和场景采用不同的通道处理,某些时候会为角色单独设置一套光照。
表情
动不起来的角色做得再精细也是无法让玩家产生代入感的,表情则是角色动画中比较难表现的部分。不过随着技术的进步,低成本的表情捕捉也可以做到不错的效果。一个kinneck摄像头配合faceshift表情捕捉软件,花费数千元就可以在普通PC上实现表情捕捉效果。但是在次之前有大量前置工作需要准备。
表情的制作通常有两种方案,一种是骨骼驱动,根据生物面部的肌肉结构创建骨骼,通过骨骼驱动模型表情。这样做的优点是调整方便,缺点是需要大量骨骼支持才能做到自然的表情运动,优化起来略麻烦。例如神秘海域4的角色面部就使用了500多根骨骼。另一种是变形器驱动。制作大量morhp target模型,用顶点变形的方式实现表情运动。优点是可以实现很多细腻的表情效果,缺点是调整麻烦,需要制作大量模型。在我们的游戏中,经过评估测试,决定采用第二种方式。
骨骼驱动的面部表情
morhp target驱动的表情,需要制作大量有不同表情头部模型
任何捕捉得到动画数据都是不能直接使用的,捕捉的过程中会产生大量错误,为了修正这些错误,最后呈现的动画仍然需要美术手动调整。另外真实的角色动画在游戏中是比较复杂的技术,后面有空再写。
最后核算一下成本吧。高精度模型和贴图的制作通常要花费数月时间,根据要求不同,人工成本可能会有3到5万。shader的编写和调整也要花上一两个月时间,成本2~3万。然后就是表情制作也要花上几个月的时间,成本差不多也的5万以上,再加上角色动画,以刺客信条那样的动作游戏为例,一个角色大概需要500种以上不同的动画来驱动,需要动用演员捕捉,动捕设备和场地,然后动画师修正数据,加起来成本也得30多万了。
最后再在引擎里整合,优化。加上特效换装什么乱七八糟的功能,一个高精度的游戏角色开发成本上百万并不稀奇,当然流程熟练的话成本会低一些,如果不熟悉,中间犯点什么错误需要来回返工,再多花一倍的钱也是有可能的。而这只是一个角色。如果是像大型网游这种动不动几十个职业门派种族的,都用这种规格来开发,几千万就没了,所以一般也只有单人游戏的角色才会这样做。当然,随着技术的进步成本也会降低,所以未来高精度角色在游戏中的应用会更加普遍。