Learning an Intrinsic Garment Space for Interactive Authoring of Garment Animation

前导内容

alt text

这篇文章是Siggraph Asia 2019年的一篇文章,作者是米哈游公司的员工,点这里可跳转到文章主页。

整篇文章是基于一个假设而展开的:服装形变由两个部分组成:人体的姿态参数(黄)以及服装的固有参数(蓝)

人体姿态参数: 即人体的关节运动信息,红色的点代表关节点。

服装的固有参数: 由以下三个部分组成:

  1. 模拟器参数(红):模拟器通过对服装进行物理仿真,可以将服装穿着到人体之上,其设定会影响服装形变,如仿真时长、最大迭代次数;

  2. 服装材质参数(橙):不同材质的服装具有不同的材质属性,进而影响到服装的摩擦力、弯曲程度等信息;

  3. 环境参数(灰)组成:由环境引起的服装形变,如重力、空气阻力等

服装形变的划分
服装形变的划分

下图给出了三组服装动画序列,同一组的服装具有相同的服装固有参数,而具有不同的人体姿态参数。不同组的服装具有不同的服装固有参数。可以看出,具有相同服装固有参数的服装在隐空间中学到的表达汇集在了同一个区域内,这样便可以区分出具有不同服装固有参数的服装。接下来,再根据给定姿态的人体,利用解码器将隐空间中的降维表示解码为具有不同固有参数的服装造型。

姿态无关的服装材质空间
姿态无关的服装材质空间

网络结构

接下来介绍文章的网络结构,整体上看,网络由多个自编码器嵌套而成。输入由人体运动序列M和服装模型V两个部分组成(绿),输出为符合目标人体姿态的服装模型(红),如下图:

网络结构
网络结构

第一个部分是下图虚线框标出的部分,这一部分负责学习给定服装模型的形状特征:

形状特征编码子网络
形状特征编码子网络

现在把这个部分先单独拿出来看



这样做的目的有两个:

1.降低输入数据的维度,减少运算量;

2.不同类型服装的顶点数不同,这样做可以统一不同服装对应形状特征的维度;

第二个部分是下图虚线框标出的部分,这一部分负责将给定姿态下的人体及其对应的服装模型投影到一个隐空间z中:

运动特征编码子网络
运动特征编码子网络


运动特征编码子网络
运动特征编码子网络

\(F_{e}\)实际上是一个多层的Encoder:

\(F_{d}\)的过程与\(F_{e}\)对称。


总地来说,网络运行的流程可以表示为四个步骤:

Step1: 对于给定姿态下的某件服装,网络首先通过\(N_{e}\)提取出服装形状特征\(S\),并通过\(M_{e}\)提取出人体姿态特征\(M_{d}\);

Step2: \(F_{e}\)在服装形状特征\(S\)和人体姿态特征\(M_{d}\)的共同驱动下学习一个与人体姿态无关的隐空间\(z\),将具有不同固有参数的服装类别投影至隐空间中的不同区域;

Step3: \(F_{d}\)以隐空间\(z\)和人体姿态特征\(M_{d}\)为输入,重构出服装形状特征\(S\);

Step4: 最后,\(N_{d}\)利用重构出的\(S\)还原出服装模型\(V\)

损失函数

实际训练过程中,首先训练出服装形状特征\(S\),然后训练网络的剩余部分,这两个子网络的损失函数也是分开计算的。

对于服装特征编码子网络,Loss由两个均方误差项组成:

可以看出,训练服装形状特征\(S\)的时候施加了两个特别强的约束,就是为了能够以低维向量去表示输入的服装模型,可以有效降低运算量并提升网络的泛化能力。

损失函数:服装特征编码子网络
损失函数:服装特征编码子网络

对于运动特征编码子网络,Loss由隐空间误差项、服装形状特征的平均绝对误差项两个部分组成:

损失函数:运动特征编码子网络
损失函数:运动特征编码子网络

实验结果

该方法生成的服装模型存在部分的穿透,需要进行穿透修正。如下图,右侧为网络的原始输出,可以看出存在明显的穿透。往左依次为迭代1、2、3次后的服装模型,穿透现象逐渐减弱直至消失。

穿透修正
穿透修正

\(E_{b}\)是穿透修正的目标函数,由两部分组成:

也就是说,每经过一次穿透修正,服装模型中存在穿透的部分都以一定的步长被拉出人体。

接下来介绍实验结果。样本数据集的构成:

a)三款服装

b)相同姿态,不同服装的内在参数。训练时随机生成了200种不同参数的服装,并选取了3万帧人体运动进行训练,这样就形成了600万个帧序列用于训练。

样本数据集
样本数据集

作者首先验证了服装形状特征网络的提取能力:

  1. Ground Truth

  2. 本文方法重构出的服装模型,完整的loss

  3. 不加拉普拉斯项

  4. PCA,也就是主成分分析法。原理是将数据从高维的空间投影到低维空间上,使得投影后的数据方差最小,是一种线性的降维方法

蓝色的代表重构的服装与Ground Truth间的距离,颜色越亮代表误差越大

服装特征编码子网络的表现
服装特征编码子网络的表现

接下来是针对服装特征编码子网络的量化分析,左边那张是PCA的维度与重构误差间的关系图,可以看出,PCA的误差在厘米级。右边是文章中的服装形状特征提取网络的迭代次数与重构误差间的关系图,可以看出,误差在毫米级别。蓝色的是文章中服装形状特征所取的值,即50维。从25到50误差出现了明显的下降,而从50维到200维,性能提升相当有限。

服装特征编码子网络的误差
服装特征编码子网络的误差

下面的实验目的是为了证明网络可以学习到与人体运动无关的服装内在参数空间,一共有四组服装:

可以看出,即使服装形状及人体姿态发生了变化,网络仍可以预测出给定姿态下的服装形变

运动特征编码子网络的表现
运动特征编码子网络的表现

然后是针对运动特征编码子网络的一些量化分析:

运动特征编码子网络的误差
运动特征编码子网络的误差

作者还给出了文章方法在动画创作领域的一个应用:

(a) 表示动作序列

(b) 表示将动作序列的第一帧和最后一帧设置为关键帧(黄)输入到网络,可以生成其它动作对应的服装模型(绿)

(c) 直接将两个关键帧进行线性差值的结果,存在严重的穿透、错位

(d) 表示添加更多的关键帧得到的结果,效果也不理想

(e) 仅使用服装形状特征提取的子网络生成的服装,也无法得到理想的结果

(f) 也是添加更多的帧,同样效果不好

应用:动画创作
应用:动画创作

总结

这篇文章的卖点在于:

  1. 提出了一种半自动化的服装动画设计方法,通过设定少量的关键帧以生成平滑、视觉上合理的服装动画;

  2. 提出了一种从服装模型中将不同服装固有参数相互分离的方法,也就是一开始的假设;

  3. 提出了一种服装动画合成方法,可以根据服装的固有参数和目标姿态对服装模型进行重构。

这篇文章的不足之处在于:

  1. 训练出的网络仅能够处理特定类型的服装和人体;

  2. 仅选取了当前帧对应的人体运动及该帧的前W帧进行训练,生成的服装动画仅蕴含了前W帧的运动信息。可能会丢失褶皱细节,并且服装模型可能与人体发生穿透;

  3. 需要花费大量时间去手动生成样本数据集:需要进行物理仿真。

项目是开源的,点击这里跳转。