首发知乎:https://zhuanlan.zhihu.com/p/556689917
终于抽出点时间写这个年更专栏了。最近忙了很多事情,压力也比较大,无论是回答还是文章更新频率都有一点小慢了,这次多写点东西。
俗话说,人靠衣装,佛靠金装,服装是塑造角色形象的重要一环,也是游戏产品收入贡献的重要一环。因此在游戏资源生产,服装制作也是不少厂商关注的重点。在游戏角色服装制作环节中,有两个要点是必须保障的,第一是量大,游戏中的角色往往有大量换装需求,而皮肤产量又直接和产品营收挂钩,第二是质量要求高,衣服制作不能马虎,否则玩家不会买账。那么问题来了,因为美术人员制作水平高低不齐,我们如何设计一套既能满足高效率,又能满足高品质的稳定高效的生产管线?
首先是资源生产环节:
1:自动化
要想品质稳定,我们在设计生产流程的时候必须尽可能的降低人员水平因素的影响,能用软件自动解决的坚决不使用人力.因此在流程设计上必须尽可能的减少人工建模的比重.这里有两个比较切实可行的方案,可以并行使用
第一是使用摄影测量建模技术,将需要制作的服装拍摄全角度照片,然后进行数字化重建.好处不言而喻,缺点就是你必须在现实中把这套衣服先做出来.或者现实中有近似的服装原型,可以去淘宝买,也可以拍手办,总之得有东西让你拍.这样做比较适合写实类型的项目,我在2020年的李宁数字服装发布会上主要采用这套流程制作数字化资产.关于摄影测量建模可以看我之前的这篇文章:
建立下个时代的高清游戏美术资源生产管线(一):摄影测量建模
第二是使用Marvelous Designer进行服装版型和拓扑制作
Marvelous Designer (简写为MD)是一款由韩国人开发的专业的3d服装设计软件,它可帮助用户快速的在软件中制作精美的虚拟服装,并且制作出来的效果跟真实的效果一模一样。该软件还可以实时进行服装修改和试穿,可以与其它3D软件完美兼容,新版本带来更多的新功能,包括重拓扑、GPU模拟以及网格细分等等。Marvelous Designer 9制作出来的结果可以完美的展现出现实服装中的垂坠感、皱褶效果和各种面料独有的细节和感觉,让大家能够在最初的阶段就能够展现出最终的效果,能够节省您的设计时间,同时能够提高服装品质,及时进行优化和改善,避免后期的成本和资源浪费,使用软件,您不仅可以制作常规的T恤,还可以制作各种复杂细节的连衣裙和职业装等,同时,对于一些扣子、饰品等的物理属性效果也能最真实的展现出来,精确的模拟展现。
目前应该大部分角色美术都能熟练掌握MD打板的制作流程.使用MD制作衣服的思路跟现实中一摸一样,需要模型师先进行衣服版型设计,确定服装的缝线,褶边,板片的分割,纽扣,拉链等部件的位置和衔接关系等等,还要考虑衣服的层数,厚度,这样制作出来的衣服才有足够的表现力和说服力.
美术习惯的传统的制作流程是在MD里面进行版型制作后进入zbrush中进行细节雕刻,生产成本中的效率问题的大头和品质的不确定性往往也是来自于这个环节.我的方式是除非是万不得已,不允许在zbrush中做这些无谓的操作,因为布料的纹理细节可以用SD进行程序化制作,每个布料纹理都可以视为简单元素的重复排列组合,而这种操作对人类来说是最费时费力但是对机器来说又特别适合程序化处理的,在shader中处理也可以,这个后面会写到.而布料的褶皱细节完全可以通过物理解算得到,美术人工雕刻的细节不可能有物理解算的精确,就算是有少数大神雕刻出来的结果比物理解算的更优美,也无法作为量产标准推广,你不可能指望每个参与制作的美术人员都是业内顶级大神水平,要量产只能尽量依靠机器.并且人工雕刻的布褶有时候会和实时布料模拟结果产生冲突.
拓扑和UV也必须按照固定规范制作,因为这牵涉到shader,绑定,布料模拟,LOD优化等后续一系列流程,随意分配或者让美术按经验规范会导致后续流程不可控。在我设计的生产流程中,拓扑和UV也必须在MD里完成,并且UV分配需要和版型一致。UV的缩放也必须依照规范好的像素比进行缩放,关于贴图像素比的概念可以见我前一篇文章:
建立下个时代的高清游戏美术资源生产管线(二):材质与纹理规范——场景篇
实际上,我们也可以将MD的版型制作和摄影测量建模同时使用,比如我们可以单独扫描衣服的褶皱形状,建立成统一的素材库,然后将在MD中制作的模型导进zbrush中,选择性的映射扫描模型对应部位的褶皱,这样可以快速得到逼真的服装效果。
通过MD设计和制作服装模型基础形状,zbrush进行细节映射处理,最后maya或max统一整理模型单位,比例,UV空间,顶点序号,坐标轴等,这样做的好处就是每个软件负责的模块彼此独立,可以根据人员擅长领域分配不同的工作内容,有的时候可以并行制作,最终统一整合,完全的工业化作业。熟练的美术师通常2-7天就可以高品质完成一套常规服装的制作。
2:模块化
当然,游戏中的角色往往不止布料一种材质。可能还有皮革,盔甲,外骨骼,紧身衣等各种设计。这些设计超过了MD能制作的范围。但是硬表面建模有个好处就是比较简单,很多细节我们不需要在模型上做出来而是可以直接在贴图或者shader中处理。这里就可以应用到模块化的制作思路。
游戏行业发展了这么多年,已经累计了大量的素材库,稍加心思我们就可以在各大网站上搜索到,利用这些素材库,我们可以建立一套模块化生产流程,来满足一些建模软件无法快速实现的需求。类似上面的案例,我们可以将角色服装拆分为头盔,肩甲,胸甲,腿甲等分别建库,从已有的类似素材上修改比从0开始做要快很多.例如下图就是A站上的模块化怪物生成器。
对于复杂的服装,我们可以进行流程上的拆分,比如硬表面部分我们可以采用模块化的思路构建,布料部分我们可以采用服装设计的思路构建,保证每个工序都有序可控,并且可以随时朔源,按工序检查效果,出了问题可以及时修改,而不是非要等整套做完才能检查出问题,要整个推翻从头修改。可以大幅度提高生产效率和效果。
其次是渲染环节
有人总结得好,游戏画面效果是两部分决定的,美术资源的品质决定画面效果的下限,shader,光照,后处理等引擎内实时渲染的品质决定画面效果的上限。我们从资源生产管线把控了下限,如果渲染层面搞不好,那下限就是我们画面的上限了。所以要呈现一套高品质服装效果,shader也非常重要,它同时承接了美术资源制作规范和材质的质感表现两大重担。
要调好shader,我们首先要做好材质规划。
角色服装常用材质类型有布料,丝绸,塑料,皮革,金属,宝石等,一般不会超过这些类型,我们通常会制作好对应的材质模板,调整好参数和渲染效果,然后按材质类型为模型指定材质。这样只要调用对应的材质模板,就可以快速实现正确的材质效果,不用为每个模型重复调整参数.方便量产化处理.
比如布料部分使用同样的材质,金属使用同样的材质,需要注意的是,同一材质属性的物体,透明和不透明也要区分开(半透明和不透明要分别指定不同的材质),这个情况布料和塑料比较常见
为了简化和优化,也可以把相似材质类型合并处理,比如金属,皮革,塑料用一个通用材质搞,这属于项目细节需求,这里不再赘叙。
为了方便进行资源管理,尽量要求美术将同材质物体的贴图画在同一张上面,这样一张(或者说一套)贴图对应一个材质类型,当然也可以不同材质共用一张贴图,但是切忌同一材质使用不同贴图,例如材质类型都是布料,但是画这个布料用了四五张贴图。如果因为精度问题同一质需要使用多张贴图,也不要和其他材质类型的贴图混用,比如说把布料和金属画在一起,这样会造成材质类型混乱,为了区分材质类型,那么可能需要为使用同样贴图的模型指定额外的材质,增加不必要的工作量和材质效果调整难度,核心原则就是贴图尽量与材质类型对应,所以贴图和材质数量对应,材质数量又和模型的mesh分割方式有关,一般是建议同一贴图对应同样的材质,对应同样的部位,这样逻辑清晰,方便管理。
为了表现服装精度和质感,我们在设计shader的时候就必须考虑如何最大程度表现服装细节。在我的前一篇文章中已经分析过细节和质感的关系,没看过的可以移步这里先补课:
建立下个时代的高清游戏美术资源生产管线(三):细节与质感。UE和unity中都有自带的布料shader,效果都很不错,能满足大部分需求,但是也有自己的限制,比如UE的布料shader不兼容各向异性,大多数布料shader不支持移动平台,而现实中的布料材料类型十分丰富,项目需求也经常变化,所以有的时候我们需要一个能兼容易用性和通用性的服装shader,方便我们调整效果。
现实中的布料可能同时具备菲涅尔,次表面,各向异性,薄膜干涉等特点,如果这些都写在一个shader中会十分臃肿,在尽量不修改引擎的前提下,我们可以用一些拟合的思路解决各种质感问题。很多效果我们可以直接在base color通道中处理。
布料的散射效果,光线照射到布料上往往呈现出柔和的感觉
丝绸效果,除了各向异性,丝绸高光部分的颜色也会有变化
现实中的布料往往同时具备好几个以上举例的属性
以下是一些材质效果的实现方式
模拟光线在布料内部散射
镭射材质效果
模拟各项异性,详细做法和原理可以参考@落月满江树的文章
如何在UE4中制作拉丝金属的各向异性
https://zhuanlan.zhihu.com/p/344507917
这些修改也可以适当添加到rouhness和specular通道,也可以配合shader本身对应属性调整,这样我们可以做出一些既尊重现实,却又高于现实的效果。
旗袍效果
肉隐肉现的白衬衫
还有绅士们最喜欢的黑丝
同时材质也要兼顾美术工作流。为了让服装呈现更好的效果和精度,我们在材质设计上最好按功能划分层次。一般可以分为结构层(表现服装版型,衣褶等结构),细节层(表现微表面细节),环境层(表现环境的影响,比如脏旧,磨损,湿润效果等),这样方便我们在引擎中实时调整细节,简单的说,其实就相当于把SP一部分功能直接搬进引擎。不同质感的面料和纹理可以用mask贴图进行区分混合,能混多少种主要看项目需求。总的来说混合越多效果越好,从宏观角度看项目的整体效果也更加可控。
以下图为例,服装的缝线,板片之间的衔接关系,褶皱这些属于结构层,结构层无法复用,和对应美术资源深度绑定。主要是法线贴图,和一些颜色贴图。(也可以解耦,但是效果会打折,要想弥补只能增加shader的消耗)。面料的纹理,质感属于细节层,细节层可以使用统一的材质库表现。搞清楚了效果之间的层次关系,我们就可以很轻松的以很小的消耗表现极其细腻的细节效果。
好的层次规划可以轻松表现毫米级的细节
当然,调整材质的时候也要考虑到光照的影响,这个放到后面聊,这里展示一些整体效果:
从上面图中也能看出,案例中的服装完全按照现实中的规则制作,从内衣内裤,到衬衣,外套,依次穿搭在虚拟角色身上,可以任意搭配,并没有没有删掉衣服遮住部分身体mesh,这样才能实现最高自由度的换装效果。
绑定与动画:
游戏是需要交互的,我们最终的目标并不是做一个静态画面,所有的步骤都要考虑到动起来的效果。实现布料运动的方式主要有3种,骨骼动画,骨骼物理,布料模拟,此外还有顶点动画可以作为辅助手段。前两种效果较差,但是很省性能,通常用于移动端。实时布料模拟性能消耗高,效果好,一般用于PC和主机端。
实时布料模拟一直是计算机图形学中的难点,主要问题有2个,1:如何实现精确碰撞防止穿模。2:如何自然的模拟布料运动时的褶皱,拉扯。以目前CPU和GPU的算力,完全靠算法来模拟布料在游戏中的效果还是有比较大的风险。虽然目前也有不少插件可以实现高品质的实时布料模拟,但是性能消耗很大,一般用户的配置很难抗住,要实现普通用户配置也跑得动的产品级布料效果,我们还是要从制作pipeline入手解决问题。
首先底层逻辑还是要从绑定解决问题。优秀的绑定方案可以在不依赖碰撞的情况下解决穿模问题。我们可以先暂时不考虑布料模拟的效果,先保证在纯绑定条件下,服装不能与身体穿模。其次可以用骨骼动画或顶点动画来进行初步的布料运动模拟。我们可以使用离线解算的方式将常规的关节运动下的布料状态保存为pose动画,然后在角色播放骨骼动画读取这些pose动画,从而实现实时驱动离线解算的布料效果。这种做法主要用于需要直播的虚拟偶像角色,如果是游戏动画则更加简单一些,游戏动画都是固定死的,直接全部解算成离线布料动画就可以。
这个时候MD流程的重要性就凸显出来了,美术可以在衣服制作完成的同时将服装的布料运动效果解算出来。
使用ssdr可以将离线解算的顶点动画转成骨骼动画,关于ssdr的介绍文章见这里:
线性蒙皮分解算法及其在游戏中的应用
https://zhuanlan.zhihu.com/p/78377681
如果觉得骨骼动画不好用也可以将解算结果存成顶点动画,用VAT(vertex animation texture)驱动。为了加强效果还可以同时烘一套皱褶法线贴图,用当前pose的曲线值驱动对应贴图0-1变化。
不过还有一种情况,就是玩家的操作输入并不是固定的,一昧的使用固定的动画会使得最终效果非常僵硬。所以我们需要加入骨骼物理来衔接各个pose之间的过渡。unity和UE都有不错的骨骼物理动画插件来实现这类效果。通过调参我们能在离线动画和实时动画中得到效果上的平衡,实现丝滑的过渡。
我之前制作的使用物理骨骼驱动的布料范例:
使用离线动画+物理骨骼方式,可以在不消耗大量硬件性能的前提下,满足绝大部分应用场景需求并且取得不错的效果,如果希望细节能够再上一层楼,我们这时可以再把布料实时模拟加上。一般来说,UE和unity自带的布料方案就够用,此时的布料效果主要是为了修正一些细节和细小的穿模问题,使我们布料效果更加生动。例如通过绘制逆止距离和半径的权重来控制布料模拟的运动方向和范围,通过绘制布料被动画驱动的权重系数来调整模拟和动画的比重,经过无止境的调参修炼后,我们可以以较小的性能代价实现接近离线解算的布料效果,这也是目前顶级3A游戏服装效果的主要生产流程。
以下是我做的unity和UE中一些服装动态效果展示:
如果你有关游戏,虚拟偶像,数字人等开发技术或游戏产品及相关行业的想法可以加群908353590一起聊聊。
先写到这里
相关阅读:
建立下个时代的高清游戏美术资源生产管线(一):摄影测量建模
建立下个时代的高清游戏美术资源生产管线(二):材质与纹理规范——场景篇
建立下个时代的高清游戏美术资源生产管线(三):细节与质感