基于机器学习合成高分辨率布料褶皱
2021-04-06靳雁霞陈治旭
贾 瑶,靳雁霞,马 博,陈治旭,芦 烨
(中北大学 大数据学院,山西 太原 030051)
0 引 言
近年来布料动画在很多领域有着重要的应用[1],尤其是在游戏、电影和虚拟试衣领域,服装的逼真度严重地影响着用户的体验感。布料在动画模拟中有着重要的作用,因为布料是一种柔性材料,很容易发生弯曲形变,产生不同程度的褶皱。这些褶皱可以显示出不同程度的细节特征,准确而逼真地模拟布料的褶皱,是布料动画的关键。近年来有许多布料模拟方法[2-7],都可以准确而逼真地模拟布料动画。已有的许多工作中主要针对布料多精度建模[8-10],石敏等人[8]提出一种基于实例的多精度网格精化,在动画中获取布料弯曲模式,通过计算曲率得到变形模式,然后对精度不足的布料网格区域进行加精,从而形成高精度网格使模拟效果逼真,但是计算曲率的方法使得计算量大成本高。Narain R等人[3]提出了一种基于物理的动力学方法,合成高分辨率布料褶皱,通过使用隐式积分法,计算下一阶段布料质点的运动状态,最终得到逼真的布料效果。基于物理的方法虽然能生成逼真的动画效果,但是计算复杂耗时长。针对上述计算复杂耗时长的问题,该文提出了一种基于机器学习的方法合成高分辨率布料褶皱,通过输入低分辨率布料网格特征,最终得到高分辨率布料网格,以实现逼真的动画模拟。
1 相关工作
布料精化的演化过程有以下几个阶段:
(1)最初刘浩[10]通过建立弹簧质点模型,通过计算虚拟弹簧所连质点的外力以及它们间的相互作用力,去模拟布料的受力变现,实验表明可以模拟出逼真的布料动画效果,但是由于弹簧质点所产生的拉伸问题使得实验结果没有预期效果好。
(2)针对逼真性问题,李娜等人[11]提出了一种更好的方法对布料进行模拟,提出了一种基于平均曲率的布料弯曲模型,该方法通过获得真实布料属性参数,建立基于平均曲率的弯曲近似模型,然后对布料区域进行划分不断更新,实验结果表明可以模拟出衣服的褶皱细节。但是由于曲率计算是一项很复杂的工作且计算量比较大,往往需要花费大量时间。
(3)针对耗时长问题,Oh Y J等人[12]提出了一种基于机器学习的方法对布料进行模拟,提出了基于深度神经网络的布料分层建模方法,通过将传统的物理方法与深度神经网络相结合,对更深层次的布料进行精化,实验结果表明该方法可以快速且高效地模拟出高质量的布料动画效果。该方法模拟出的布料效果在时间效率上有了很大的提升,但是模拟效果却没有物理方法那样精确。
(4)针对物理方法耗时长问题,Benameur S等人[13]提出了一种基于粒子位置校正的多分辨率布料模拟的方法,通过使用一阶有限元方法处理任意三角形,不仅仅局限在规则三角形上,校正粒子位置,最终模拟出高分辨率布料。该方法虽然能模拟出逼真的布料动画效果,但是在处理角度和布料层次方面比较复杂。
针对实时性以及逼真性问题,该文提出了一种基于机器学习[14]的方法合成高分辨率布料褶皱,对布料进行模拟,提高布料逼真的视觉效果。
2 算法思想
首先将低分辨率布料褶皱图像放入CNN中进行训练,其次将训练出的高分辨率布料褶皱图像转换为高分辨率布料网格,最后对布料进行模拟。
算法步骤如下:
Step1:模拟布料运动获取布料运动的帧数据信息,将帧数据转换为图像进行存储,此时图像为低分辨率图像。
Step2:将得到的低分辨率图像数据信息作为CNN的输入,在网络中进行训练。
Step3:通过将CNN网络与缩小网络相结合,最终得到输出图像,即高分辨率图像。
Step4:将高分辨率图像转换为网格,对布料进行模拟。
算法流程如图1所示。
图1 算法流程
2.1 网格转换为图像
首先对布料进行模拟,在模拟阶段获取布料帧数据信息,将帧数据信息进行保存,即为低分辨率布料网格。而此时低分辨率布料网格为三角形面片网格,需要将布料网格数据转换为布料图像数据,即低分辨率图像,然后将低分辨率图像数据输入神经网络中进行训练。
在布料模拟过程中,获取布料帧数据信息,此时帧数据信息为初始布料网格。在初始布料网格中标记每一个三角形面片的三个顶点坐标,并计算由这三个顶点所组成的三角形面片的法向量,然后求每一个顶点所连三角形面片的平均法向量(如图2所示),其中V表示三角形顶点,F=(F1,F2,…,Fm)表示与该顶点V相邻的所有三角形面片数。最后将得到的平均法向量恢复到三维坐标系中,将其作为RGB的值,将坐标值归一化到[0,255],此时网格就被转换成了图像。计算平均法向量的公式如式(1)所示,其中n为法向量,m为与三角形顶点相邻的所有三角形面片数。
(1)
图2 三角形顶点与其相邻面示意图
2.2 基于CNN合成高分辨率图像
通过对布料进行模拟,得到归一化后的RGB值,将得到的RGB值作为输入,输入到CNN中进行训练,最终得到高分辨率图像。卷积神经网络[15-16]在图像领域有着显著的效果,所以选取卷积神经网络合成高分辨率图像。它的网络结构由输入层、卷积层、池化层、全连接层以及输出层组成,优点是权值共享,降低了训练过程中的复杂性,提高了拟合度。
文中的网络框架不同于普通的卷积神经网络框架,首先将归一化后得到的RGB值作为输入在网络中进行训练,卷积神经网络框架由输入层、卷积层、全连接层以及输出层组成。该框架取消了池化层,选取三个带有步幅的卷积层进行特征提取,代替了池化层的特征提取功能,其中卷积核选取3×3的卷积操作且步幅长度为2进行特征映射。卷积操作公式如式(2)所示,其中Mk为卷积响应矩阵,Ck为卷积核,A为输入矩阵,s为步幅长度。
(2)
其次在卷积层后加入了一种特殊的网络结构,该结构为缩小网络,此网络选取等比例缩放,在缩放过程中选取比例系数为1.5倍进行缩放,整体布局保持不变,目的是能够得到更高分辨率的图像,缩放比例效果如图3所示。最后选取三个全连接层进行批量归一化处理,最终输出高分辨率图像。该网络框架如图4所示。
图3 缩放比例
图4 网络框架
为了评估最终输出效果,通过残差均方误差进行评估,将残差均方误差定义为RMSE,当RMSE的值越小说明输出效果越好,输出的预测值越接近真实值。计算公式如式(3)所示,其中yc为实际值,yp为神经网络输出值,i,j为像素索引。
(3)
2.3 图像转换为网格
通过卷积神经网络与缩小网络对低分辨率图像进行训练,最后合成高分辨率图像,需要将合成的高分辨率图像转换为高分辨率网格。在得到高分辨率图像后,标记每一个像素点,用像素点来恢复三角形网格,其中一种方法是通过使用双线性插值的方法恢复三角形网格。具体操作步骤为首先将得到的像素网格放入二维坐标系中进行标记,在x轴方向上找到两处顶点位置x1x2和x3x4方向进行插值,插值后的坐标为p1、p2,然后沿着p1、p2方向在y轴方向进行插值,最终得到坐标p,此时点p的坐标为最终三角形网格的顶点坐标,双线性插值如图5所示。将图像转换为网格的另一种方法,通过像素值恢复三角形网格的三个顶点坐标,每一个像素网格由RGB值组成,RGB值是由三组值来确定的,由这三组RGB值分别作为三角形的三个顶点,为了使最终的网格具有连续性可以取RGB近似值进行恢复,最终得到三角形网格。
图5 双线性插值示意图
3 实验结果与分析
该文基于机器学习的方法,通过将卷积神经网络与缩小网络相结合,生成高分辨率图像,最终形成高分辨率网格。实验环境配置如下:处理器为Intel(R) Xeon(R) CPU E5-2630 v3 @ 2.40 GHz,64 GB内存的计算机,以及Windows 10操作系统的软件环境。为了验证实验的高效性,在不同场景下将低分辨率布料模拟效果、高分辨率布料模拟效果以及真实布料模拟效果进行对比。
3.1 不同场景下的布料模拟
为了验证该方法的高效性,设置不同的场景对布料进行模拟,对比在同一场景中低分辨率、高分辨率以及真实布料的模拟效果。分别将场景设置为风中飘动的旗帜、布料与小球发生碰撞以及布料在悬挂状态下施加外界风力这三个场景。图6为低分辨率、高分辨率以及真实场景下旗帜随风飘动的模拟效果。图7为低分辨率、高分辨率以及真实场景下布料与小球发生碰撞的模拟效果。图8为低分辨率、高分辨率以及真实场景下布料在悬挂状态下施加外界风力的模拟效果。
图6 旗帜随风飘动的模拟效果
从图6可以看出,图6(a)为低分辨率下旗帜在风中飘动的模拟效果,布料没有明显的弯曲形变,只有微小的变化,模拟效果不佳。图6(b)为文中方法高分辨率下旗帜在风中飘动的模拟效果,可以看出布料有明显的褶皱,也可以看出细节性的褶皱,使得模拟更加真实效果更加逼真。图6(c)为真实场景中的旗帜随风飘动的效果,可以看出真实场景下布料有着丰富的褶皱。
图7 布料与小球发生碰撞的模拟效果
从图7可以看出,图7(a)为低分辨率下布料与小球发生碰撞的模拟效果,可以看出布料与小球接触后发生碰撞,在接触周围只有少量的褶皱,模拟效果不好。图7(b)为高分辨率下布料与小球发生碰撞的模拟效果,通过使用文中方法进行模拟,在布料与小球发生碰撞时,该方法可以产生大量且丰富的褶皱,且可以看出细微的褶皱变化,模拟出的效果更加逼真。图7(c)为真实场景中布料与小球碰撞的模拟效果,在发生碰撞后发生碰撞的接触面布料有大量的褶皱。
图8 布料在悬挂状态下施加外界风力的模拟效果
从图8可以看出,图8(a)为低分辨率下布料悬垂且施加外界风力的布料模拟效果,可以看出布料在悬垂状态下随风飘动,有几处明显的褶皱,但褶皱量少模拟效果欠佳。图8(b)为高分辨率下布料悬垂且施加外界风力的布料模拟效果,可以看出布料在此状态下有明显的褶皱且褶皱量大,在细节处也有丰富的褶皱,模拟效果逼真。图8(c)为真实场景中布料悬垂且施加外界风力的效果,可以看出布料有丰富且细微的褶皱。
实验结果表明,在三个不同场景中,低分辨率情况下布料模拟的效果一般,没有细微的褶皱,与真实场景下的模拟效果进行对比低分辨率下布料模拟效果不佳。在高分辨率情况下布料模拟效果逼真且有着细微的褶皱,而且没有产生僵硬的现象,与真实场景下的模拟效果比较两者的模拟效果相似,没有明显的差异。所以该方法能够模拟出高质量的布料动画效果,且效果逼真。
3.2 布料模拟时间
实验中比较在两个不同场景中布料网格的质点数以及布料模拟的时间性能,场景分别为风中飘动的旗帜以及布料在悬挂状态下施加外界风力。分别比较了两个不同场景中,低分辨率质点数与高分辨率质点数。还比较了在两个场景中高分辨率布料模拟与真实场景中布料模拟的运行时间。实验结果如表1所示。
表1 不同场景下的布料性能比较
实验结果表明,在同一场景中不同分辨率的布料网格拥有的质点数不同,可以看出高分辨率布料拥有更多的质点数,说明高分辨率拥有着更丰富的褶皱,且模拟效果更加真实。从表中可以看出,在两个不同的场景中,使用文中方法合成高分辨率布料模拟所运行的时间比真实场景中布料模拟运行的时间短,可以说明该方法具有高效性。
上述实验表明,文中方法不仅可以模拟出逼真的布料动画效果,而且可以快速地模拟出动画效果,在实时性和逼真性上都有很大的优势。
4 结束语
提出了一种基于机器学习的方法合成高分辨率布料褶皱,采用卷积神经网络与缩小网络相结合的方法。通过比较低分辨率布料模拟、高分辨率布料模拟以及真实的布料模拟,验证了该方法可以充分展示出细致的布料褶皱,与真实的布料模拟效果相似。通过模拟风中飘动的旗帜以及布料与小球碰撞,实验结果表明该方法在受外力情况下仍可模拟出逼真的布料效果。但该方法仍然存在一些不足之处,在处理网格边界时不是很理想,下一步的工作将对网格边界问题进行重点讨论。