张 煜,陈天星,陈 力,李文鹏
(西南交通大学 机械工程学院,成都 610000)
虚拟试衣系统是利用计算机技术模拟服装真实穿着于人体的一种应用。其主要使用在电子商务领域,用户可根据虚拟试穿的效果挑选商品。因此,系统中的三维人体需要能够让用户根据自身尺寸进行个性化定制。但对于获取三维人体的主要途径之一的建模法,存在不适用于大量个性化建模,难以集成到实际的开发软件的问题[1]。另一方面,系统中服装的真实感在于对它的布料模拟。其中最为广泛使用的是Provot等[2]提出的弹簧-质点模型,由该模型的一种试衣方式是将服装试穿转化为衣物2D裁片缝合过程中与人体的碰撞响应的问题[3]。另一种试衣则是将服装视作整体进而局部调整避免穿透,如Yongjoon等[4]将原有服装与人体的关系映射到不同人体上,Jituo等[5]将服装整体变形后与T字型人体对齐实现着装等等。本文结合Unity3D设计实现虚拟试衣系统,针对人体建模法存在的问题提出了一种解决方案,并研究了服装的布料仿真与碰撞处理,使其适用于人体动态试衣。
三维人体模型常用的变形算法大致有Skeleton-Based变形算法[6]与FFD自由变形算法[7],它们的基本特性如表1所示。
由于Skeleton-Based变形算法主要用于处理人体姿态的调整,而本文讨论的系统需要对人体轮廓外形进行控制,因此不适合使用。另外,FFD自由变形算法因其需要大量的用户参与调整,故也不适用。为了变形人体轮廓外形,本文引入一种常用于制作人物面部表情的BlendShape算法[8]进行控制。它描述了一组模型间的线性变化关系,定义如下:
(1)
其中:m指的是最终形状的顶点向量集,bk代表一个变形通道中目标形状的顶点向量集,wk是第k个变形通道内的影响权重,范围是(0,1)。设模型网格为M=(V,E,F),V代表模型的顶点向量集,V={vi∈R3}描述顶点的位置坐标信息,E={ei}、F={fi}是模型的边界集与三角面集,其中ei=(vi,0,vi,1)与fi=(vi,0,vi,1,vi,2)描述了模型表面的几何连接关系与拓扑信息。
考虑单通道的变形,即m0=w0b0,设原模型Msource=(V0,E0,F0),当权重w0为0时,原模型不变形,而当w0为1时,原模型变化到Mtarget=(b0,E0,F0),即变化过程中仅仅变更模型的顶点位置信息,并不影响几何连接关系与拓扑信息。当w0介于(0,1)之间时,原顶点集V0的各顶点与目标顶点集b0相对应的顶点沿直线方向线性插值得到Msource至Mtarget过渡变化的中间模型,如图1所示。
图1 单通道变形过程
图2 多通道变形过程
虚拟试衣系统的总体框架图如图3所示。系统分为人体模型个性化定制模块与服装展示模拟模块两部分。
第一部分的核心支持是人体变形子模块,它负责处理人体模型的轮廓变形,在由参数化控制子模块进一步控制之后得到的个性化人体将进入服装展示模拟模块,该模块负责把静态着装后的服装进行布料仿真,并让人体与布料化的服装参与碰撞处理完成动态试衣过程。
图3 系统总体框架图
建模生成三维人体的主要途径有基于体素法建模、基于NURBS曲面建模、以及在3dsMax、Maya等软件中利用多边形建模生成蒙皮骨骼绑定的人体模型的方法。本文使用的是第三种方法建立的人体模型。
3.1.1 人体模型的变形实现
由章节1对人体变形的讨论,我们的实现步骤如下:
1)对人物模型需要调节的部位,如前臂、胸部、腰部、臀部及腿部等分别在不增减顶点个数的前提下,通过调整顶点位置获得最大变形形状和最小变形形状,即原模型Msource经调整得到M前臂最大,M前臂最小,M腰部最大,M腰部最小等等一组模型,为了让调整过程更为平滑,我们借助了ZBrush软件来调节顶点位置。
2)我们并未直接控制顶点集的插值过程,而是使用了3dsMax软件的morph变形器得到中间过渡模型,它以分段插值的方式优化了变形过程,并且修正了顶点插值过程中的法线变化,得到的模型更为平滑光顺。将Msource→M前臂最大,Msource→M前臂最小等模型变化过程分别在3dsMax软件的Morph变形器内建立单独的变形通道。
3)将模型与相关变形通道导入Unity3D后,使用接口函数SetBlendShapeWeight( )对插值权重w进行控制。
以人体前臂由原模型变形到我们调整的最大前臂模型为例,结果如图4所示,依次取权重w为0、0.2、0.4、0.6、0.8、1,可以看出变形过程较为平滑。因此,由一个基础模型与一组极限模型,通过对不同变形通道的权重w加以控制即可得到大量个性化的人体模型。
图4 人体前臂部分变形过程
3.1.2 人体模型的参数化控制
为了让用户输入如腰围等人体特征尺寸时能够得到相应的体型,我们希望找到与输入值对应的插值权重w。因此我们需要获得人体特征轮廓曲线[9],由于Unity3D并不支持模型的布尔运算,而且人体模型的网格顶点并不总在一个平面内,以人体腰部的参数化控制为例,我们的解决方法如下:
1)在3dsMax中手工的选择一组邻近人体特征位置的点集,如图5所示,将该组点集及其连接边组成的新网格导入Unity3D后,遍历新网格的顶点集,根据顶点三维空间坐标相同可找到人体模型网格内相对应的顶点集V腰部特征。
在区间[xi,xi+1](i=0,1...,n)构造:
Si(x)=ai+bi(x-xi)+ci(x-xi)2+di(x-xi)3
(2)
由上述步骤,我们给出人体模型的参数化控制过程:设变形前曲线长度为L0,通过判断用户的输入值L输入与L0的大小关系找到相应的变形通道,插值权重w由0开始循环查找,当经过k次循环,我们重复步骤2)、3)计算在插值权重w=kΔ下的当前曲线长度L当前,若满足|L当前-L输入|≤σ,循环查找终止,认为此时的w即为用户输入的对应值,其中Δ为循环增量,σ为预设误差限。
图5 在腰部网格手工选择一组点集 图6 人体腰部特征轮廓曲线
3.2.1 服装的静态着装
我们参考了文献[4]的实验初始条件,即约束在试衣开始前要求服装能够匹配人体原模型。将服装导入Unity3D后,它以蒙皮骨骼绑定的网格形式渲染,我们重新绑定其骨骼为人体模型的骨骼,即可实现静态着装。
3.2.2 服装的布料仿真
为了达到更真实的着装效果,需要对服装进行布料仿真。我们采用Provot等[2]提出的弹簧-质点模型,如图7所示,每个质点与相邻质点形成结构弹簧,与网格对角线上的质点形成剪切弹簧,与间隔的质点在横向、纵向上形成弯曲弹簧。其中,剪切弹簧保持了对角线上质点之间的面内相对位移,避免了质点沿对角线方向的过度拉伸,弯曲弹簧则使得布料仿真中的褶皱效果更为理想。我们将服装的所有网格顶点当作是质点,对每个质点由牛顿第二定律有:
图7 弹簧-质点模型
(3)
式中,F内是质点与连接弹簧间的变形合力,可表示为F内=∑F结构+∑F剪切+∑F弯曲。在弹簧的弹性限度范围内,根据胡克定律有:
式中,R表示与该质点连接成弹簧的质点集,ki,j表示该质点i与质点j间的弹簧劲度系数,xi、xj、li,j表示该质点i与质点j的空间位置与弹簧原长,我们限定弹簧的拉伸上限,以避免弹簧的内力过大而导致“超拉伸”现象。对式(3)中的F外,我们仅考虑重力与空气阻尼力,即F外=G+F阻,其中,重力G=mg,阻尼力用来减缓质点运动的剧烈程度,让系统更快达到平衡,阻尼力可表示为F阻=-cdvt,cd为空气阻尼系数。
为了实现仿真,每个时刻都需重新计算质点的受力情况,将式(3)写成微分形式:
(4)
(5)
由式(4)与式(5)相加可得质点在t+Δt时刻的位置表达式:
S(t+Δt)=2S(t)-S(t-Δt)+a(t)Δt2
(6)
注意到Verlet积分中速度是隐式给出的,而空气阻力F阻=-cdvt,因此将式(6)改写为S(t+Δt)=(2-cd)S(t)-(1-cd)S(t-Δt)+a(t)Δt2。
由于Verlet积分的运行不是自启动的,我们将初始条件S(t)=S0,v(t)=0,a(t)=g代入式(4)作为仿真的开始条件。时间步长Δt在迭代过程中取为定值。
3.2.3 服装的碰撞处理
图8 一组碰撞球近似拟合人体边廓
图9 虚拟试衣系统集成工作流
虚拟试衣系统集成的工作流如图9所示。我们将基础人体模型与相关变形通道、服装模型、手工选择的特征轮廓分别以.fbx文件格式导入Unity3D。在Unity3D中首先实现人体模型的静态着装,参数化控制脚本集在用户与手工选择的特征轮廓的输入下控制变形脚本更新着装后的人体轮廓外形,接着我们设置碰撞球集并让静态着装后的服装进行布料仿真与碰撞处理。最后,我们将积分迭代、碰撞处理后的服装网格顶点位置信息、法线信息传入到服装材质所用的着色器中实现布料化服装的实时渲染。系统中除着色器由Cg语言编写,其他脚本均使用C语言进行编写并运行在CPU上。
系统测试环境的搭建如图10所示,依次为原人体模型、原人体模型静态着装与动态着装、变更体型后的人体模型、变更体型后人体的静态着装和动态着装。我们在人体肩部区域取较大的弹簧劲度系数以限制质点运动,实现服装的固定。当变更体型后,手工将适应原模型的碰撞球集进行位置和大小的调整以贴合新的人体轮廓形状。
图10 不同体型下服装试穿结果
由图10可以看出,适应原人体模型的服装在变更体型的人体上静态穿着出现了穿透现象,而服装经过3.2节讨论的布料仿真与碰撞处理后,相同的服装能够在不同体型的人体上进行试穿,并且仿真运行过程中质点不断调整位置使得服装呈现出形态的小幅变化,这种动态试衣的效果相对于静态着装更具有真实感。因此,本文讨论的系统能够满足虚拟试衣系统对人体个性化定制与服装试穿的需求,较好的模拟了服装真实穿着于人体的效果。但系统并非完全自动化,对于动态试衣过程中手工参与碰撞器调整的部分需要进一步完善,使其能够伴随人体变形自动更新。
本文提出一种由BlendShape算法控制人体各局部特征变形的方案,该方案使得各特征的调整互不影响,变形过程自然平滑,通过叠加不同特征的变形能够解决人体建模法存在的难以得到大量个性化模型的问题。接着引入人体特征轮廓曲线实现参数化控制变形过程,使其更适用于虚拟试衣系统。并对服装进行布料仿真,采用一组球形碰撞器近似拟合人体边廓实现了不同体型人体的动态试衣。
[1] 陈 亮,赵曙光,张丽娟,等. 虚拟三维服装展示的发展历史与研究热点 [J].纺织学报,2011,32 (10):153-160.
[2]ProvotX.Deformationconstraintsinamass-springmodeltodescriberigidclothbehavior[J].GraphicsInterface,1995,23(19):147-154.
[3] 陈青青. 三维虚拟服装缝合技术及布料仿真的研究与实现[D]. 厦门:厦门大学,2009.
[4]LeeY,MaJ,ChoiS.Automaticpose-independent3Dgarmentfitting[J].Computers&Graphics, 2013,37 (7):911-922.
[5]LiJ,YeJ,WangY,etal.Fitting3Dgarmentmodelsontoindividualhumanmodels[J].Computers&Graphics,2010,34 (6):742-755.
[6]YanHB,HuSM,MartinR.Skeleton-basedshapedeformationusingsimplextransformations[J].SpringerBerlinHeidelberg,2006,4035:66-77.
[7] 李 健,李鹏坤,丁露露. 基于区域控制的三维人体模型个性化定制 [J].陕西科技大学学报, 2009,27 (3):130-133.
[8]LewisJP,AnjyoK.Direct-manipulationBlendshapes[J].ComputerGraphics&ApplicationsIEEE,2010,30 (4):42-50.
[9] 姚 砺,李奥琼,王慧洁. 个性化人体特征曲线驱动的三维服装变形 [J].计算机仿真,2015,32 (7):426-432.
[10] 文 静. 基于GPU的布料实时运动仿真研究 [D]. 成都:电子科技大学,2009.