查看原文
其他

虚拟人技术思考(一):3D内容生产的技术流程

李步宇 慧夜科技 2022-10-12


或因元宇宙的概念兴起,或因华智冰、柳叶熙等超写实数字人视频的传播,或因A-SOUL、彩虹社等VTuber团体的大热,越来越多的人们关注起了虚拟人。虚拟人是3D数字内容的重要载体,其制作主要依赖计算机图形学(CG)的相关技术。本文是虚拟人技术分析与思考系列的第一期,我们先来了解一下业界当前主流的3D内容生产流程。


3D内容生产的前期环节主要是美术设定、人物设定等,今天我们主要聚焦在这些步骤后的技术流程上,去讨论3D内容生产的技术流程,主要包括建模、纹理贴图、绑定、动画制作、视效制作、灯光设置、渲染、后期处理等环节。


在讲具体流程前,我们先简单介绍一下数字内容创作(Digital Content Creation)软件。数字内容创作软件简称为DCC软件,其中以Maya,3DS Max,Cinema4D,Blender,Houdini等为主流软件,它们基本可以覆盖后期处理之前的各个环节。而在针对特定环节,也有更加专业化的软件,比如高效建模工具ZBrush、专业材质软件Substance Designer、节点式后期软件Nuke等。


当然虚拟世界除了视频,还需要交互式的内容生产,也就是游戏化内容,3D游戏引擎最典型的代表是Unity 3D和Unreal Engine,而游戏引擎中也会涉及到模型运动、灯光、渲染等生产环节。


接下来我们逐一了解一下三维动画生产的这些技术环节具体在做什么:


1. 建模(Modeling)

建模可以简单理解为在虚拟世界“捏泥人”的过程。模型师一般需要原画或照片做参考,制作尽量还原参考图的3D模型。如果是物理世界的真实物体,也可以通过三维重建技术制作模型。不过把模型“捏”出来并不是建模的结束。为了确定其在运动时的形变单元以及与贴图的映射关系,还需要确定模型的拓扑结构,也就是所谓的“布线”。简单来说,布线就是将模型表面划分为网格状的区域,因此3D软件也将模型称为“网格体”。

根据原画进行建模


2. 纹理(Texturing)

纹理在有些地方也翻译为“材质”,贴纹理可以简单理解为给3D模型上色的过程。对于已布线的模型,需要确定每个网格对应纹理图片的哪个区域,这个从3D到2D的对应过程称为“UV展开”,而绘制好的纹理图会被映射回模型,这样就完成了上色。不过实际的CG工业中,着色(Shading)作为渲染管线(Rendering Pipeline)中的一个重要流程,往往不是把一张纹理图的RGB值映射到模型上这么简单,而是还需要法线、高光、粗糙度等多张图的配合构建材质球,再结合光照计算才能决定模型最终的显示效果。

UV展开与纹理映射


3. 绑定(Rigging)

一个模型的运动,本质的表征方法是网格体的每个顶点的位移,然而由于人物模型动辄几万个顶点(超写实能达到几十万甚至更多),如果每一帧都独立地计算每个顶点的运动,对于算力和数据存储都有巨大压力,因此CG业界引入了“绑定”来简化运动的表征方式。底层绑定主要分为骨骼和混合变形(Blend Shape)两种类型。

骨骼绑定顾名思义,就是在模型里架设一套骨骼,由每个骨骼的位移、旋转带动其附近表面的网格顶点同步运动,而关节处的网格顶点会同时受多个附近骨骼的影响。所以骨骼绑定的核心工作是确定各个顶点受各个骨骼影响的权重关系,这个过程也叫做蒙皮。

混合变形(Blend Shape)在一些DCC软件里也叫Morph Target,是解决非刚性形变的主要手段。以面部表情为例,我们通常将其拆解为若干个面部运动单元,如闭左眼、抬右眉、左嘴角上扬等等,每个运动单元会在网格层级像建模一样捏出对应的表情模型,并以无表情的中性脸(neutral face)为基础,记录这些表情脸的相对顶点位移,并将这个运动过程线性近似,赋予0-1之间的系数表达中间状态(如半闭眼),于是一个特定表情就可以近似地表示为这些基础表情变换的线性组合,而这些表情变换就是blend shapes。除了面部表情,blend shape还常用于辅助骨骼运动进行表皮的修型,比如膝盖、肘部由于骨骼绑定自身原理的局限性,会在弯曲程度较大时出现折痕、撕裂等不合理的表现,此时引入blend shape附加额外的非刚性变换就可以修成更合理的形态。


在实际生产中,直接调节底层骨骼和blendshape是相对低效的,所以基于这些底层绑定,我们会制作控制器以便动画师更高效地工作。控制器(controller)的本质是一种驱动关系,一个控制器可以连接若干个骨骼/或blendshape,以一定权重控制其属性值。引入控制器的目的是让动画师更加简单高效地制作动画,例如可以绑定出一键握拳的控制器从而节省一根根手指头调节配合的时间。这里我们再着重介绍FK和IK控制器。FK即正向运动学(Forward Kinematics),人体骨骼可以看成多条运动链(Kinematic Chain),上级骨骼运动时,会自然带动下级的各个骨骼一起产生全局运动,这就是FK。而IK指反向运动学(Inverse Kinematics),是以末端位置倒推上级骨骼的位置旋转,例如我们需要手摸到桌子上,会先确定手的位置,再根据物理约束反推小臂、大臂的位置旋转,这就是IK。


在实际应用中,绑定方案是由具体的项目需求决定的。比如在一些对客户端体积、运行效率要求高的手游中,会采用纯骨骼绑定的方案,就连面部表情也由虚拟的骨骼驱动网格体运动。

骨骼绑定蒙皮(左)与Blend Shape表情脸基底(右)

在实际应用中,绑定方案是由具体的项目需求决定的。比如在一些对客户端体积、运行效率要求高的手游中,会采用纯骨骼绑定的方案,就连面部表情也由虚拟的骨骼驱动网格体运动。


4. 动画(Animating)

动画就是让3D模型动起来,分为主动动画与被动动画两大类。


主动动画相对好理解——基于绑定好的控制器,动画师可以操作骨骼进行位移旋转,以及面部表情进行变换,并按照表演需求将一个个姿态(pose)与表情记录为关键帧(key frame),这个行为俗称“K帧”,主动动画制作本身也常被称为“K动画”。DCC软件会将关键帧通过光滑曲线进行连接以便任意插值,动画师也可通过进入曲线编辑器调节关键帧位置、曲线斜率来实现细节打磨。动画制作是个知易行难的工作,好的动画效果要兼顾运动上的合理性和表演上的艺术性,业内最经典的指导性理论是迪士尼的十二条动画法则。


被动动画指不由主观意识直接驱动的运动,主要包括布料运动模拟、毛发运动模拟等。虽然我们可以在衣服、头发上绑定虚拟骨骼,强行由动画师制作这些动画,但是因为这些运动有着强物理规律,通过程序仿真解算通常能达到人力无法企及的逼真度和生产效率,所以这些在业内通常是由计算机解算的。

调节角色动画及记录关键帧


5. 视觉效果(Visual Effects)

视觉效果一般简写为VFX。由于VFX、CGI、特效之间有交叉也有区别,我们这里不做明确定义,这些概念较为正式的定义和区别可以参考Autodesk的解释:https://www.autodesk.com/solutions/visual-effects。通常内容制作中的VFX多是粒子、火焰、烟雾、刀光剑影这些,本质上仍然是通过模型变化、光线处理等方式实现的。

角色技能特效VFX


6. 灯光(Lighting)

虚拟环境中的灯光是通过建立数学模型和算法对物理世界光照进行模拟而实现的,细节我们在这里不做展开。在DCC软件中,灯光设置的实现是通过创建平行光、点光源、面光源等光源,并调节其强度、颜色、方向等属性实现的。灯光是场景不可缺少的重要部分,基础的灯光运用能够塑造被摄体的明暗关系,打造画面的立体感,高级的灯光运用能够进行特定的艺术表达

不同的灯光配置可使同一个角色产生截然不同的视觉效果


7. 渲染(Rendering)

简单理解渲染,可以认为绘制画面,模型、贴图、视效、灯光最终屏幕上的呈现都是通过渲染实现的。业界主流的渲染流程可以简单分为两个主要步骤:确定几何形状、确定像素颜色。确定几何形状有光栅化(Rasterization)和光线追踪(Ray Tracing)两种主流算法,光栅化可以简单理解为将三维空间的几何体投影到屏幕平面上转化为离散的像素点,而光线追踪则是利用光路可逆的性质,从观察点反向发射光线,经过屏幕平面后到达物体,再经过物体的若干次反射追踪到光源的过程。确定像素颜色一般是通过编写着色器(Shader)实现的,同一个模型用不同shader可以打造出写实、美漫、二次元等各种截然不同的风格。一直以来,渲染算法都需要在精度与效率之间寻找平衡。高要求的影视动画会采用复杂而精度高的算法,对应着漫长的渲染时间,以《玩具总动员1》为例,当时有117台电脑同时工作,每帧需要45分钟到30小时不等的渲染时间。而以游戏为代表的需要实时交互的应用中,往往需要帧率到达30fps以上,此时就需要在算法上做很多调整,牺牲一部分精度来达到足够高的渲染速度

光栅化(左)与光线追踪(右)示意图*


8. 后期处理(Post-Processing)

对于视频型的内容生产,在将3D素材渲染成片后,往往还有剪辑、混音、2D视效等后处理流程,这个环节与传统2D视频制作与处理的技术是相同的。


最后放一张国外艺术家Andy Beane制作的图片,很生动地描绘了皮克斯、梦工厂等国际一流动画公司的3D内容生产流程


*致谢:感谢太极图形的胡渊鸣博士提供的内容优化建议



往期文章推荐


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存