​TGDC | 合从连衡,相得益彰——基于异质图神经网络的自动蒙皮系统

1,008 阅读19分钟

大家好,我是来自浙江大学-腾讯游戏智能图形创新技术联合实验室的金小刚。今天与大家分享的题目是《基于异质图神经网络的自动蒙皮系统》,这项工作由浙江大学与腾讯光子工作室群合作完成。

image001.jpg

在计算机动画中,我们需要各种各样的角色以表现剧情。以迪士尼和皮克斯公司今年的最新动画长片《Luca》中的主角Luca为例,数字建模师首先会对这些角色进行设计、建模,一般来说角色设计始于艺术家创作的草图和泥塑,以使每个角色恰到好处,然后数字建模师创建角色的虚拟三维模型,有时也会对模型进行数字扫描以用作参考,数字建模师必须了解解剖学,因为骨骼和肌肉所在的位置会影响表面形状。

在计算机动画中,数字角色通常是动的,如何让角色动起来?那需要用到一种称为Rigging,中文称为角色绑定的技术,什么是Rig?我们看一下皮克斯动画工作室的定义,Rig的中文意思是索具,数字索具(Digital Rig)是允许数字模型移动的虚拟骨骼、关节和肌肉,这有点像牵线木偶上的绳子,一个好的索具具有恰到好处的灵活性,如果没有正确的控制,动画师就无法创建他们需要的姿势,但是太多的灵活性又会使模型摆姿势太耗时,索具在游戏和电影的动画角色中最为常见,这种技术简化了动画过程并提高了生产效率,将任何三维对象与骨骼绑定后,我们就可以根据需要进行控制他们和改变他们的形状。在数字娱乐行业,骨骼绑定几乎是对角色设置动画的标准方式,也是极其为重要的一步,实现流畅和复杂的动画完全取决于动画流水线中索具阶段的质量

image003.jpg

Rigger也就是角色绑定师,角色绑定师从角色的虚拟三维模型开始,他们根据故事研究角色需要如何移动,例如电影《怪物公司》中的兰德尔(Randall)像变色龙一样移动,但他也是用两条腿走路,角色绑定师将这些动作分解为单独的元素,并创建数百个动画师可用来创建姿势的控制点,在这个图例中角色绑定师从左侧的线框模型开始,添加虚拟骨骼也就是右侧的骨骼,这样来自电影《怪物公司》的主角毛怪就可以摆姿势了。

image005.jpg

Rigging在电影和游戏领域都得到了广泛的应用,上图是一些典型的角色绑定例子,左侧呈现的是电影中的绑定,功夫熊猫中的所有角色都用到了骨骼绑定技术,右侧是在游戏中的例子,无论是《堡垒之夜》还是《天涯明月刀》,都使用了角色绑定技术。

image007.jpg

绑定技术可以用骨骼来驱动模型的动画,具有应用范围广、动作范围大、运算速度快、效果好等优点。例如左侧关于手的骨骼,通过调整骨骼的姿势可以让手呈现丰富的状态,右侧呈现的是两个不同的模型一个是马、一个是人,也就是说 该技术不仅可以用于人形模型,还可用于其它非人形角色模型。

image009.jpg

在绑定的过程中,动画师首先为处在T-pose的模型创建一套骨骼,如图中第二步RIG所示,之后用一定的蒙皮权重将骨骼和模型顶点相联系 ,这就是第三步Skin,随后就可以用人物骨骼的运动来驱动模型的运动了。

image011.jpg

骨骼绑定技术具有非常广泛的应用,不仅可用于动画、游戏,还可应用于社交媒体、虚拟现实、虚拟主播、智能制造等任何需要虚拟角色的领域。例如腾讯Next工作室的Matt AI项目 也需要用到骨骼绑定技术。

image013.jpg

回到论文的核心内容,先讲一下我们的研究动机:在骨骼蒙皮中蒙皮权重的确定是最耗费时间的,为了达到骨骼对模型的精细控制,动画师通常采用手工的方式精细调整蒙皮权重,即使是一个专业的动画师,要得到一个令人满意的蒙皮结果也是非常耗时的。我们的第一个动机是能否充分利用动画师的这些经验知识。第二个动机,在我们实践中发现不同的骨骼对不同大小的模型区域会产生不同的影响。例如人物脊柱的骨骼会影响距离它很远的躯干的顶点,而手指的骨骼只影响很近范围的部分,因此我们需要寻找一种自动蒙皮的算法同时考虑骨骼和顶点的不同之处。第三个动机,在一些复杂的模型中有一些骨骼可能被放置在模型以外,例如示例模型的蓝色骨骼,甚至有一些模型可能由多个不相连的部分组成,例如右侧模型的手臂和腿,因此,我们需要寻找一个鲁棒的算法,能够处理这些一般性的情况

image015.jpg

在接下来的讲解中我会首先介绍相关工作,之后介绍我们的方法和我们的实验,最后会进行一些相关的讨论。

image017.png

对于自动蒙皮研究者已经探索过非常多的方法,这些方法可以大致分为几何特征、基于几何特征和数据驱动的方法两类。基于几何特征的方法也就是PPT上半部分,例如匹诺曹Pinicchio和体素测地距离,使用特定的数学方程来计算蒙皮权重,这些方法的缺点在于他们对蒙皮权重的分布存在人为的假设,而实际上蒙皮权重的分布并不一定符合这些方程,数据驱动的方法也就是PPT下半部分,从一系列由动画师蒙皮的模型中学习,从而能够获取模型的解剖学信息来克服以上的缺点。例如RigNet就是使用一个图神经网络作为蒙皮权重的方程,以上方法都将蒙皮权重作为模型顶点某些特征的方程,但是这些方法具有如下局限:RigNet虽然可以处理任意模型,但是没有考虑到骨骼的不同之处,NeuroSkinning方法对于不同的骨骼学习不同的蒙皮权重方程,但NeuroSkinning只能用于固定的人形骨骼结构,并不能用于非人形骨骼的模型。

image019.png

另一个相关领域是图神经网络,近年来,将图神经网络应用于计算机图形学是近几年的一个热门方向。图神经网络分为两类:空域(spatial)的网络可以处理不同拓扑的图,例如MeshCNN,基于谱域(spectral)的网络只能够处理一种拓扑结构的图,例如针对Mesh的AutoEncoder,与MeshCNN类似,我们的网络可以应用于具有不同结构的网格模型。另一方面 在图神经网络中异质性,也就是具有不同种类节点和边的图是一个热点方向然而研究者对于这方面的尝试很少。

image021.png

我们提出的自动蒙皮方法包括两个关键的贡献点,首先我们构建了一种异质的图神经网络,它不仅能够考虑不同模型顶点的特征,也能考虑不同骨骼的特征,在这个网络当中,我们使用了一种新的图网络操作来将不同类的节点关联起来。其次我们提出一种距离方程,HollowDist,来计算模型顶点和骨骼的关系,这种距离方程可以鲁棒地处理体外的骨骼,和由不相连部分组成的模型网格结构。

image023.jpg

接下来 我们简单概述一下我们的方法,给定一个角色我们有它的网格模型和它的骨骼结构,这两者可以分别看作图的结构。

image025.jpg

然后对于每一个模型网格上的顶点和骨架中的骨骼对,我们计算它们之间的HollowDist,这种距离函数用于把模型网格图和骨架图相连,从而构建了一张异质的图。

image027.jpg

我们的网络在这张异质图上进行一系列的图卷积操作,包括在模型网格图和骨骼图两张同质图内的卷积,以及在两张图之间的卷积操作,并最终推断出每个顶点和骨骼对应的蒙皮权重。

image029.png

下面我们将详细阐述本文方法,首先介绍HollowDist它的计算过程,这个距离函数用来计算从模型网格上的顶点到角色骨架上的骨骼的距离,我们希望寻找一种从骨骼到网格顶点的距离,该路径不能与网格有穿透,然后我们以路径长度作为骨骼到顶点的距离,为了同时考虑模型网格的形状,我们从体素测地距离的计算中获得了灵感

首先也就是PPT上半部分我们将模型网格的表面进行体素化,该操作将空间分割为三个部分,分别是:网格体素,它们在图中用粗体边框标识出来;骨骼体素它们在图中是白色的;以及其它空方块,在这里用灰色来表示。在这里我们把模型的表面体素化而不是将它内部体素化,这样做可以忽略骨骼和网格之间的位置关系,也就是说可以鲁棒地处理模型外部的骨骼。

之后也就是PPT下半部分,用广度优先搜索(Breadth First Search,BFS),从骨骼体素开始寻找到网格体素的一条路径,右图中展现了这一过程,体素的颜色深浅代表了它们距离左下角骨骼的距离远近。

image031.png

在上一步中,可能存在一些广度优先搜索无法遍历到的网格体素,这是由于模型网格由不相连部分构成导致的,在这些体素中,我们从已经遍历到的网格体素边缘开始重启广度优先搜索,直到所有的网格体素都被遍历到,最终 也就是PPT下半部分,基于在之前步骤计算得到的体素之间的距离,我们可以计算骨骼到顶点的距离,公式列在下方。

image033.png

下一步我们开始构建图 (PPT上半部分)给定一个模型的网格以及与之相对应的骨架,我们为他们分别构建图,模型网格图Gm的每个节点都对应着模型网格的顶点,它的边也是模型网格的边,模型骨架图Gs的构建与骨架的形态略有区别,它的节点代表着骨架中的骨骼,而边代表着把一根一根骨骼相连的关节。在构建完模型网格图和模型骨架图之后,我们可以使用计算得到的HollowDist,将模型网格和模型骨架构成的两张图连接起来,构建异质图,根据HollowDist的远近关系,我们将顶点所代表节点和与其最近的K个骨骼节点相连接,也就是说 我们假定一个节点只受其接近的K根骨骼影响,在这个图当中,我们对节点赋予一系列属性作为图神经网络的输入(PPT下半部分),对于模型网格图的节点,它的属性是其所代表的顶点的位置以及与它最近的K根骨骼的HollowDist的倒数,对于模型骨架图中的节点,它的属性就是两端关节的顶点位置。

image035.jpg

我们的异质图神经网络在刚刚构建的异质图上进行操作,它的结构如上图所示,Intra-Graph Conv表示图内卷积、Inter-Graph Conv表示图间卷积 这两个卷积交替进行,图内卷积操作分别在模型网格图和模型骨架图内部进行。而图间卷积操作在模型网格图和模型骨架图之间进行,在之后会详细阐述这两种操作,两种卷积操作能够提取顶点对应节点和骨骼对应节点的局部特征,而我们也使用池化操作提取全局的特征,把局部特征和全局特征拼接,再用一个多层感知机进行处理,就可以得到最终的蒙皮权重了。

image037.png

图内卷积能够聚合节点及其相连接的同类节点的信息,我们基于EdgeConv来构筑图内卷积模块,在模型网格图和模型骨架图中的卷积操作略有一些不同,对于模型骨架图(PPT上半部分)而言 我们直接采用EdgeConv,而对于模型网格图(PPT下半部分),一个节点的感受域受模型的细分程度影响,为了解决这个问题,我们使用了RigNet中介绍的卷积操作,它同时对节点和它的测地距离邻居和相连的邻居进行EdgeConv操作,将结果拼接并通过一个多层感知机处理得到最终结果,一个节点的测地距离邻居是与它的测地距离在一定范围内的节点。

image039.png

在Inter-Graph Convolution图间卷积模块中,顶点所代表的节点和骨骼所代表的节点互相聚合并交换信息,由于模型网格图和模型骨架图并不平衡,一般的模型网格都具有上千个顶点,而模型骨架只有几十根骨骼,我们为从骨骼节点到顶点节点,和从顶点节点到骨骼节点设计了不同的卷积操作,对于从骨骼节点到顶点节点的卷积操作(PPT上半部分)由于一个顶点节点与其最相近的K个骨骼节点所影响,简单把它们的特征拼接起来就可以了,这样做生成的特征长度是固定的,而对于从顶点节点到骨骼节点的卷积操作(PPT下半部分),由于骨骼影响的顶点数不同,类似的操作无法生成固定尺寸的特征,因此我们转而提取骨骼所影响顶点节点的特征的最大、平均和方差,以上两个卷积操作都在特征拼接操作之后添加了一个多层感知机来保证非线性。

image041.png

在方法的最后我们介绍一下损失函数的设计,损失函数由两项构成,首先是Data Fitting Term也就是数据里合项,该项的意义在于使预测的结果与真实结果相近,对于顶点而言 所有骨骼的蒙皮权重是正的而且它们的和为一,因此我们不适用简单的L2距离 而是使用KL散度来计算这一项,此外(PPT右侧)我们希望蒙皮权重在模型网格表面分布是平滑的,这样才能使模型的骨骼动画看起来平滑,因此我们添加了Smoothing Term平滑项,我们使用一个拉普拉斯矩阵来计算这一项。

image043.jpg

我们使用的数据集是ModelResource-RigNet-v1,这个数据集包含了一系列不同种类的模型,比如人形、鸟形和鱼形等,它们具有完全不同拓扑和骨骼,在一些模型中,甚至存在体外骨骼和非连接部分,但这些模型我们都能够处理。

image045.jpg

接下来展示我们方法的结果,我们使用手工构建的骨骼动画来驱动绑定好的模型,从结果中可以看到,我们的方法生成的结果与真值非常接近

image047.png

这里展示我们的方法与其它方法的对比,首先呈现的是定性的结果(PPT上方)在上方一列,我们的方法可以较好地处理裙子的末端和马尾的末端这些部分,这是因为我们的方法提取了对应骨骼的特征,从而在身体骨骼和马尾、裙子骨骼上使用了不同的蒙皮权重方程,在下方一列,我们的方法在关节区域具有更小的误差,这是因为我们的方法学习了骨骼之间的关系,这是之前的方法无法做到的,在定量结果方面(PPT下方)我们的方法在各种定量指标上都优于其它方法,我们的精度指标是83.04% 召回率是81.11% L1-norm是0.3269,距离误差是0.005682 ,这些指标都比目前的SOTA方法都要好

image049.jpg

我们的方法对体外骨骼和由非连接部分组成的模型是鲁棒的,上图体外骨骼被标注为红色,我们的HollowDist可以处理体内和体外的骨骼,同时对非连接部分也非常鲁棒。

image051.png

在实验的最后是一些消融实验,用来保证网络中的每一部分都起到了效果,定量的结果呈现上方,在下方我们展示在损失函数中使用和不使用平滑项的结果,可以看到平滑项使蒙皮权重在模型网格表面分布更加平滑了。

image053.jpg

我们将这个方法集成进maya,开发了一个maya插件,使用者只需要导入网格模型和骨骼就可以自动进行蒙皮,插件提供选择需要蒙皮的骨骼的功能,方便使用者增加辅助骨骼,对于一个5000顶点、50根骨骼的模型,我们的方法只需要一分钟左右就可以完成处理。

image055.jpg

当然我们目前的方法还存在一些局限性,例如 由于缺少复杂模型的Rigging数据,论文处理的模型不是很复杂,在将来 我们会在更加复杂的模型上测试我们的方法,因为在动画界使用的模型可能比我们实验使用的数据集中的模型更加复杂,其次我们也希望能够提升HollowDist的计算速度,它是整个流程中的时间瓶颈。最后 我们也希望探索更多的模型网格-模型骨架之间的特征。

image057.jpg

好,最后我们把我们的工作做个简单的总结。第一我们提出了一个异构图神经网络的方法来自动估计,角色骨骼绑定的皮肤权重,我们的方法图间卷积操作允许异构节点之间的特征聚合,因此我们的网络可以提取顶点和骨骼特征。第二基于一种新的距离计算方法 HollowDist,我们的方法可以处理包含多个不相交部分或在骨骼外部的模型,我们的相关的工作发表在今年的ACM SIGGRAPH Symposium on Interactive 3D Graphics and Games这个国际学术会议上 并得到了非常正面的评价,认为我们的工作解决了一个公开的挑战性”问题“Open Challenge”,使得这方面的研究向前跨了一大步。好,我的汇报就到此结束,感谢大家聆听。

Q & A

Q1:我看目前这个办法处理的模型还不是很复杂,对于复杂模型,有没有可行的方案?

A(金小刚):如果这个模型的顶点数非常多的话 我们可先把复杂模型简化,简化以后我们对相对比较简单的模型应用我们的方法进行处理,如果是更密的模型 我们通过插值的方法来得到其他顶点的权值,目前我们有一个问题 我们缺少非常复杂模型的标定数据,而且这个也是国际上目前都比较缺的一个数据集,今后,如果我们整个业界都能贡献自己的一些非常专业的骨骼绑定结果,然后构建一个非常大的一个虚拟数据集,那这样的话我们也可以处理一些非常复杂的模型,而且能够得到一些更加好的结果。

Q2:目前这个办法有没有投入应用?

A(金小刚):刚才我们已经介绍了 我们这个方法已经开发成一个Maya插件,目前已经在腾讯的光子工作室进行应用,这个方法可以辅助动画师减少骨骼绑定的时间,提高他们的生产效率。

Q3:用了这个办法后,美术是否完全能接受自动化处理的结果?

A(金小刚):实际上用我们的方法的话,生成的结果跟美术做的已经非常接近了,但在应用中 可能也会有些美术认为有些部分还需要再调整,但这个调整相应的工作量就比较小,所以我们可以把我们的结果作为一个比较好的初值,然后美术可以花比较少的时间对结果进行调整,这样可以非常快地达到他所需要的和期望的骨骼绑定结果。