基于三维网格卷积的布料仿真模拟

2024-04-23 04:35靳雁霞刘亚变史志儒乔星宇
计算机工程与设计 2024年4期
关键词:池化布料细分

靳雁霞,刘亚变,杨 晶,史志儒,张 翎,乔星宇

(中北大学 计算机科学与技术 大数据学院,山西 太原 030051)

0 引 言

布料模拟在动画、虚拟游戏、电影3D角色设计等领域中发挥着重要作用。然而,物理模拟成本会随着分辨率和对象数量的增加而增加,不管物体是否从屏幕中可见,都需要进行模拟。近年来,深度卷积神经网络(CNNs)已经成为许多领域的宝贵工具,它在物理模拟中的应用显著增加。但是,限制其使用的一个主要问题是,最常见的二维CNN在图像领域成功的基础是图像固有的规则和层次结构,这允许CNN通过下采样和上采样探索不同大小的特征,而大多数布料和可变形物体组成是不规则的,并且缺乏图像中像素的排列,这使得很难定义一个标准的二维卷积。因此,将布料三维网格转换成二维图像,再针对二维图像运用深度学习进行超分辨率的方法被相继提出,但这种方法在转换过程中不仅会丢失网格细节而且有成本高、耗时长等缺陷。在本文中,我们考虑了使用网格表示的三维几何学习进行布料模拟。与体素[1]相比,网格更有效的表示几何上下文,因为它只表示对象的边界而不表示对象内部的冗余元素;与点云[2]相比,网格具有拓扑信息,适合施加几何约束。最近,基于网格的CNN已经开始在这一领域找到应用,但它被设计用于刚体分类、分割,而不是在可变形的流形三角形上工作。针对上述布料模拟成本高且耗时长的问题,提出了一种基于三角形网格的CNN,该网络提供了一种有效的、不均匀的形状表示。一方面,只需少量的三角形来捕获大的、简单的曲面,减少成本;另一方面,允许对几何上复杂的突出形状特征进行重建或描绘,保留细节。由于充分利用了网格间的拓扑信息,故能够提高布料模拟的视觉效果。

1 相关工作

近年来,针对布料模拟的物理技术已日趋成熟,能够生成逼真且具有丰富褶皱细节的布料模拟结果。但是,这些褶皱细节需要高分辨率表示出来,因此需要大量时间来计算求解复杂方程,需要巨大工作量来调整参数。后来,数据驱动的方法[3,4]通过预计算数据和数据驱动技术提供了快速生产,同时生产了与训练数据高度相似的褶皱效果,高分辨率可以直接合成,也可以从物理模拟的低分辨率网格进行超分辨率。然而,现在的数据驱动方法要么依赖于人体姿态,要么缺乏对运动中布料产生一般褶皱行为的动态建模。因此,本文通过引入深度学习的方法来进行布料建模。

在布料仿真领域中,深度超分辨率网络已被验证是图像细节增强的强大而快速的机器学习工具,Chen等[5]提出的多特征超分辨率(MFSR)方法将LR和HR编码的位移、法线和速度等3个特征作为卷积输入,学习其服装形状的共享表示和特定任务表示,最后生成动态褶皱和一致的网格序列;贾瑶等[6]将真实布料运动中的帧数据信息转换成图像做为卷积神经网络的输入,再结合缩小网格得到高分辨率图像,将图像转化成高分辨率布料网格;Zhang等[7]将服装参数化表述为相关法线贴图,通过匹配基于Gram矩阵的风格损失来产生高分辨率细节,再通过法线贴图引导变形生成褶皱丰富的布料模拟。以上方法都是对处理好的图像进行操作,这种将三维网格转换成二维图像的方式会丢失掉很多网格细节,还会在转换过程中耗费大量时间。因此,本文采用直接对三维网格卷积的方法实现布料模拟。

近几年刚提出的将卷积直接运用在三维网格上的方法主要用在图形分类、分割等领域。Rana等[8]提出的MeshCNN对三角形网格采用以一条边为中心、相邻四条边或两条边为一环邻域的无变量卷积,创建任务感知流程确定池化折叠边的优先级,将上池化和卷积结合来恢复池化操作中丢失的原始分辨率,该方法较好保留了图形的明显特征,对图形分类效果显著;Hu等[9]提出的SubdivNet框架对三维网格预处理成相等的三角形面,以三角形面为中心,基于每个面都恰好相邻于3个面的特性构建卷积算子,其卷积模式和二维像素卷积的内核、步长设定方式相似,池化和上采样操作采用Loop细分和逆Loop细分算法,该方法对形状对应关系和形状检索等各种应用程序提供了良好的结果;Milano等[10]将图神经网络中提出的原始-对偶框架扩展到三角形网格,以三维网格的边和面特征作为输入,并利用注意机制进行动态聚合,引入一个具有精确几何解释的池化操作折叠边,在形状分类和形状分割任务中具有优越的性能。以上三维网格卷积方法都用在形状分类、分割领域,对于布料模拟研究不能保留真实的褶皱细节。因此,本文提出针对布料模拟的三维卷积神经网络。

2 三维卷积神经网络构建及分析

本文针对当前布料仿真模拟方法中成本高且耗时长的问题,提出了直接对三维网格卷积的布料模拟方法(以下简称三维卷积神经网络),使得大的平面区域用少量大三角形表示,褶皱丰富的区域用大量小三角形表示,在低耗时情况下得到逼真的布料仿真效果。本文将三维卷积神经网络分为卷积、池化和上采样等模块,具体流程如图1所示。首先,对输入布料的三角形顶点螺旋卷积,使用点填充方法对卷积序列增加采样点减小误差,存储卷积序列作为局部域;其次,运用Gauss-Bonnet定理计算局部域的曲率K值作为顶点抽取的惩罚因子,抽取K值较小的局部域直至剩余顶点数低于初始顶点数的60%;最后,用布料模型训练神经细分网络,通过记录4次迭代中初始化模块I、顶点模块v和边模块ε的L2损失函数优化权重几何集,将池化后的网格输入神经细分网络进行上采样,输出布料模拟结果。

图1 基于三维网格卷积的布料模拟流程

2.1 卷积层

虽然布料在外力作用下变形程度复杂,但每帧网格数量和序列还是保持不变的,对不规则三角形网格卷积的侧重点在于如何构建一个可以与每个点相关联的全局坐标系。本文采用螺旋卷积算子[11]强制对网格上每个顶点的邻居进行显式排序,允许在邻居和可学习局部滤波器的参数之间进行“1-1”映射,对螺旋卷积算子点填充降低采样误差。

(1)

其中,r为卷积算子半径,与经典CNN中核的大小相似。那么,螺旋卷积为

(2)

其中,f类似于图像中的像素强度,g为滤波权值,L为卷积算子长度。

(3)

其中,dM是网格M上两个顶点之间的测地线距离。为了允许固定大小的螺旋,选择一个固定长度的L作为超参数,然后根据其大小截断或零填充每个螺旋,结果如图1所示。

虽然螺旋卷积算子能够针对顶点显示排序,但对于顶点数量少的非流形三角形布料依然存在较大误差,会丢失大量褶皱细节,导致模拟布料结果失真。本文采用点填充方法增加螺旋采样点,设螺旋中心顶点为p,其邻居为p0p1…pn-1, 首先计算

(4)

然后沿着间隔为l/(L-1) 的分段线性曲线创建均匀采样点,将采样后的螺旋作为局部域存储在表Rs中,采样点示例如图1空心圆圈所示。点填充方法只需在卷积层处理一次,并且不会给下一节讨论的池化层和上采样层增加很大成本。

2.2 池化层

运用二次误差最小化技术[12]作为池化方法虽然能在均匀网格表面上产生非常好的结果,但它无法检测网格中细节的存在,为了充分保留布料褶皱区域,本文对表Rs中每个局部域的中心顶点p增加惩罚因子来惩罚较小曲率绝对值的顶点。根据惩罚因子大小利用顶点抽取的网格简化算法对三角形网格池化,用少量大三角形表示网格较稀疏区域,池化效果如图2所示。

图2 池化效果

在微分几何中,Gauss-Bonnet定理是曲面微分几何中最深刻的定理,它是关于曲面的图形(由曲率表征)和拓扑(由欧拉示性数表征)间联系的一项重要表述。对于平面上的三角形,其内角和为180°,那么对于推广到任意一个光滑曲面上的内角和可用Gauss-Bonnet定理表示:在曲面S上给出一个由k条光滑曲线所围成的曲线多边形,它围成了一个单连通曲面域G多边形为曲面的边缘,记为∂G。设曲面S的高斯曲率和测地曲率分别为K和kg,曲面的微元和弧长微元分别记为dσ和ds。则曲线多边形的Gauss-Bonnet定理可以表示为

(5)

图3 局部域曲率计算

(6)

在多边形情况下,Gauss-Bonnet定理(5)可以简化为

(7)

由式(6)可知

(8)

(9)

假设K在局部邻域内为常数,式(8)可以改写为

(10)

由于考虑了曲面的高斯曲率,可以惩罚较小的高斯曲率绝对值的局部域,增加局部域的代价,从而使它们比更平坦和有更少细节区域的局部域处理的更晚。对于平坦局部域,K值接近0;对于褶皱丰富局部域,K值接近1,根据惩罚因子K值由小到大的顺序对局部域顶点抽取,终止标准指定为局部域网格的中心顶点数量小于开始时中心顶点数量的60%。

对抽取后的不规则孔洞用累加和求重心坐标的方式得到新的中心顶点

(11)

如图1所示,根据顶点位置构成新的三角形网格。整合表Rs中的局部域网格,形成对原始模型的新近似。

2.3 上采样层

为了学习布料复杂的非线性细分,而非传统技术中使用的简单线性平均(如Loop细分法、蝶形细分法、√3细分法等),本文希望使用机器学习的方法学习布料网格权重来细分池化后的网格,神经细分网络[13]的出现很好的满足了本文的上采样需求。神经细分网络是一种新颖的自我监督训练框架,只需要一组高分辨率网格来学习网络权重。对于任何训练形状,随机生成不同低分辨率网格与其对应,同时保持双射映射来规定细分过程中每个新顶点的精确目标位置(如图1中层次1、层次2…层次m所示),该方法对本文上采样模块具有重大意义。由于文献[13]主要是训练刚体进行分类、分割,本文将用布料模型训练该网络,通过记录4次迭代中初始化模块I、顶点模块v和边模块ε的L2损失函数优化权重几何集以达到本文上采样目的,具体训练流程如图1所示,训练数据等将在3.1.2中介绍。

在神经细分网络训练中,本文使用改进的蝶形细分算法[14]对三角形网格进行拓扑更新,与文献[13]中的Loop细分算法相比,可以缓解数据量与平滑性之间的矛盾,能获得更好的适应度,并能很好处理三维网格在网络中的平稳细分。改进的蝶形细分算法生成新顶点具有以下情况:

(1)边两端顶点的相邻点数为6时,具体表示如图4(a)所示,不同位置顶点的权值如下

图4 蝶形细分算法生成新顶点3种情况

(12)

(2)侧边的一端顶点为奇异点时,具体表示如图4(b)所示,新顶点产生的位置奇异点与相邻顶点的数量有关。不同位置的顶点权值设置如下(N表示相邻点的数量)

(13)

边两端的顶点均为奇异点时,必须对每个奇异点执行方程(12)中的操作才能得到两个顶点。新的顶点是根据在上一步中获得的两个顶点的平均值生成的。

(3)边缘为边界时,具体表示如图4(c)所示,图中的数字是不同位置的权重。

在神经细分网络中使用改进的蝶形细分算法能够产生高质量的拥有原模型特征的布料细分结果。下面对比了上采样前后的布料模拟网格,模拟效果如图5所示,可以看出改进的神经细分网络能够适应布料的变形趋势,提高布料平滑度。

图5 上采样前后的布料网格

2.4 损失函数

为了提高视觉质量,本文使用L1、L2损失函数来训练误差网络以回归重构误差、Ln损失函数来衡量生成的网格与地面真实值之间的法向一致性。

在本节中,N表示顶点个数,上标t表示地面真实值,上标o表示输出值。设xi是第i个顶点的顶点位置,nj是第j个面的法线,第j面由顶点x0、x1、x2按逆时针顺序组成,则

nj=normalize((x1-x0)×(x2-x0))

(14)

L1顶点位置误差为

(15)

L2顶点位置误差为

(16)

L1法向误差Ln为

(17)

总损失函数为

Ltotal=aL1+bL2+cLn

(18)

其中,a、b、c为L1、L2、Ln损失函数的权重。

3 实验设置与结果分析

针对提出的基于三维卷积神经网络模拟真实布料褶皱的仿真框架,本文对影响仿真效果的各个因素进行了对比和探究。本实验在Linux系统下使用python语言实现,硬件为2.4 GHz的Intel Core i7 9700CPU,8*2 GB双通道内存,显卡型号是NVIDIA GeForce RTX 2070 Super。

3.1 数据处理

3.1.1 数据集构建与参数设置

本文使用开源的ARCSim[15]系统完成物理模拟,对于ARCSim提供的网格,选择风中的旗子、茶壶上不同位置的布以及悬挂的布等3种布料模型进行实验。对于风中的旗子,固定旗杆一侧并施加风力和重力使其在空中飘扬,通过改变风力大小,共形成了10个序列,每个序列600帧,每帧5972个顶点数;对于茶壶上的布,固定茶壶刚体不动,将只受重力的布料自由落下覆盖茶壶,通过改变覆盖位置(壶嘴、壶把和壶身等)及布料大小(顶点数不变),共形成了16个序列,每个序列400帧,每帧3020个布料顶点数;对于悬挂的布,固定布料一点使其自由垂下,通过改变固定点数和布料大小,共形成了18个序列,每个序列1200帧,每帧6570个顶点数。对于3个数据集分别进行训练,每个训练集中70%作为训练集,30%作为测试集,实验中使用的网格边界框长度均在0.6~1.5个单位之间,重力-9.8 N/Kg,UV弯曲单位各0.5,UV拉伸和压缩变形单位均为50,密度为0.005,厚度为0。在螺旋卷积中,设定固定长度的L为100个顶点作为超参数,存储表Rs大小设置为50 MB,其存储形式为顺序存储。为了提高计算效率,在池化操作中,对每个局部域只进行一次K值计算。本文池化与CNN图像的初始调整大小相似,几何网格抽取有助于降低分辨率,并由此降低训练所需的网络容量,使用神经网络上采样时能减少大量运行时间,但是为了保留布料细节,只对最小K值局部域顶点抽取,直到顶点数小于原始顶点数的60%。对于大多数实验来说,仅使用L1误差就可以产生视觉上光滑的表面,但在某些情况下,表面可能会有轻微的凹凸不平,因此考虑法向误差Ln提高表面平滑度,在极少数情况下,网络在大多数顶点上产生较小误差,但在少数顶点上产生较大的误差,增加L2误差可以消除这些影响因素,当a=1,b=1,c= 0.02时视觉效果最好。

3.1.2 神经细分网络数据集构建

文献[13]中的神经细分网络训练对象皆是刚体,主要用于分类分割,本文使用多种布料类型重新训练双射映射。虽然这种新颖的自我监督训练只需要一组高分辨率网格来学习网络权重,但是为了保证布料形态的准确性,本文使用3组模型进行训练,布料网格来自ARCSim系统,布料分别覆盖在球体、圆柱体和断开的双圆柱体上,通过改变覆盖在几何体上的布料大小分别生成10个序列,每个序列200帧,每帧2830个顶点数。损失函数设置a=0,b=1,c=0进行训练,目的是最小化L2误差。

3.2 定量实验对比

数值实验比较与其它方法的泛化能力差异,比较的方法包括文献[16]、文献[5]和文献[12]等。

本文对比了文献[16]的物理模拟方法、文献[5]的MFSR方法和文献[12]的三维网格卷积方法在模拟结果中的不同,其中包括用于度量模拟顶点与每帧初始顶点的豪斯多夫距离(本文用H代替)和平均每帧耗时(本文用T代替),豪斯多夫距离用于描述两组点集之间的相似程度,设点集X′={x′1,…,x′n},Y′={y′1,…,y′n}, 则这两个点集合之间的豪斯多夫距离定义为

H(X′,Y′)=max(h(X′,Y′),h(X′,Y′))

(19)

其中

(20)

(21)

对比结果见表1,文献[16]对截取的布料帧计算法向量夹角,根据曲率大小进行布料变形,在各种情况下都能精准的衡量曲面弯曲程度,具有较小的误差距离和较强的鲁棒性,但该方法本质上仍然使用物理模拟方法,耗时依旧很高。文献[5]使用深度学习进行布料模拟,时间上比文献[16]快12~14倍,但是该方法将一对高分辨率和低分辨率网格转换成相对应的图像再进行模拟,转换过程中不仅会丢失大量网格细节,导致在帧运动时出现失真现象,而且预处理时间过长,仍然会增加耗时。文献[12]虽然也使用基于三角形网格的卷积神经网络,但是由于卷积和池化阶段未考虑时间成本和模拟成本,其重建误差和耗时仍高于本文方法。使用本文方法虽然在风中的旗子数据集中H略大于文献[16],但基本上是一个较好的模拟精度,其余数据表明本文方法均取得了最好结果。

表1 不同数据集上测试集重建误差和耗时的对比

本文方法与文献[12]方法的模拟顶点数进行对比。对比结果如图6所示,两种方法的模拟顶点个数均比初始顶点个数少,文献[12]池化操作采用二次误差对边设定优先级进行边折叠,能根据拓扑信息产生接近真实场景的结果,但剩余顶点个数依然很多,最后模拟成本仍然很高。本文使用Gauss-Bonnet定理计算K值,再对K值小的局部域顶点抽取的池化方法,不仅能极大地减少顶点数量,而且能产生良好的模拟效果(模拟效果见3.3节),这对降低模拟成本具有重大意义。

图6 模拟顶点个数对比

本文优越性还展现在上采样过程使用基于布料的神经细分网络,其拓扑细分方法为改进的蝶形细分法,这种细分网络能够遵循布料变形趋势,提升布料平滑度。基于三维网格的卷积方法上采样大多来自池化操作时(如最大值、平均值等)的历史记录,如MeshCNN方法[8]、SubdivNet方法[9]和PD-MeshNet方法[10]的池化层等。为了验证神经细分网络的优越性,本文方法与Loop细分法、蝶形细分法和√3细分法进行细分对比,采用欧几里德距离作为测量标准,对比结果见表2。从表中可以看出,无论哪种布料模型,本文细分方法的欧几里德距离均小于其它细分方法。

表2 不同网格细分方法的欧几里德距离对比

3.3 仿真结果对比

3.3.1 二维布料模拟方法效果对比

本实验对3种布料模型进行训练,图7(a)~图7(c)分别展示了布料模型的物理模拟、MFSR方法和本文方法的仿真效果。第一行为风中的旗子模型,布料受风力和重力作用,吹动方向为右下,布料变形主要集中在中部;第二行为茶壶上的布模型,布料受重力落于壶身和壶嘴区域,布料变形主要集中在交界处及下垂区域;第三行为悬挂的布模型,布料受拉力和重力悬停在空中,布料变形主要集中在中部碰撞区域。可以观察到:图7(b)MFSR方法与图7(a)物理模拟相比,布料均丢失了明显的褶皱细节,尤其在壶身和壶嘴连接处布料较为平坦,不能展现良好的模拟效果;图7(c)本文方法与图7(a)物理模拟相比,能够保留物理模拟的实际褶皱,对于拉力、风力和重力作用下产生的变形,具有逼真的效果,对于本文用大三角形网格表示的平坦区域(图7(c)黑色圆圈标注的地方)也和物理模拟结果相似;图7(c)本文方法与图7(b)MFSR方法相比,在布料模型的各个变形部位均能展现细微褶皱。因此,本文方法在模拟过程中耗时比二者少的情况下,能大量减少网格顶点数量,并且能保留布料模拟细节,呈现良好的视觉效果。

图7 布料模拟结果

3.3.2 三维布料模拟方法效果对比

本实验对风中的旗子模型进行训练,物理模拟、文献[12]方法和本文方法的模拟效果和对应网格如图7(d)、图7(e)所示。可以观察到,本文方法在旗子平坦区域用少量大三角形网格表示,褶皱细节区域用大量小三角形网格表示,能产生与文献[12]相似的模拟结果,但顶点数量却大大减少。本文使用Gauss-Bonnet定理计算惩罚因子K值再顶点抽取的池化方法比文献[12]对整体采用二次误差最小化的池化方法更能在保留网格细节的同时减少顶点个数,二次误差池化方法需要设置大量全局参数来指导整个简化过程,而不考虑模型不同位置存在的特征差异,因此文献[12]在保留细节的同时也需大量网格填补平坦区域。由于神经细分网络训练过程中对所有局部网格相同权值集进行了优化,所以对池化后的网格进行神经细分也不会破环整体网格布局,能够呈现逼真的视觉效果。

3.4 消融研究

3.4.1 池化网格数量

本文比较了风中旗子的布料模型中池化顶点数量在剩余初始顶点数量的50%、60%和70%时对神经细分网络的影响,比较结果如表3和图8所示,结果显示网格剩余60%时能够在满足保留布料褶皱细节的情况下尽量减小网格参数量。更少的网格剩余量因不能捕捉足够的褶皱信息而导致失真现象,更多的网格剩余量因过拟合的原因导致精度提升有限甚至下降,还会大大增加模拟成本和时间消耗。因此,保留初始顶点数量的60%是最佳选择。

表3 不同剩余池化顶点数量的网格参数量和用时对比

图8 池化顶点数量占初始顶点数量的50%、60%和70%时(从左至右)的布料模型

3.4.2 神经细分网络迭代次数

本文设定神经细分网络迭代次数为4,实验结果表明,在一定范围内,神经细分网络迭代次数越多,顶点个数越多,误差越小,耗费时间越长,顶点个数超过初始顶点个数140%以后,误差值趋于平缓。以图1长方体上的布料模型为例,顶点个数取到4000左右时误差可以达到最小,此时迭代次数为4,具体数据结果如图9所示。

图9 迭代次数对误差的影响

4 结束语

本文为平衡布料仿真中的模拟成本、逼真度和效率,提出一种直接对三维布料网格卷积的布料模拟方法。本文实现了在网格上进行布料模拟的深度学习算法,为提高布料模拟效率,提供了新思路。实验结果表明,本文方法通过对布料网格螺旋卷积和点填充、采用Gauss-Bonnet定理计算K值进行顶点抽取和训练神经细分网络构建的三维卷积神经网络,其模拟的布料不仅能够产生逼真的效果,而且模拟效率比其它方法提升了15.6%~23.1%。

本文只针对简单布料模型进行了模拟,并且在上采样中神经细分网络层次数较少,未来可以针对复杂布料(如服装等)进行模拟,上采样可采用更适合序列预测的架构(如递归神经网络)以获得更广泛的邻域信息并深入到更深的细分层次,提高该方法的灵活性和准确性。

猜你喜欢
池化布料细分
面向神经网络池化层的灵活高效硬件设计
基于Sobel算子的池化算法设计
卷积神经网络中的自适应加权池化
用布料拼图形
深耕环保细分领域,维尔利为环保注入新动力
烧结机布料器的改进优化
基于卷积神经网络和池化算法的表情识别研究
1~7月,我国货车各细分市场均有增长
按约定付账
整体低迷难掩细分市场亮点