基于物理引擎PhysX的3D试衣系统的设计与实现
2014-05-30徐康熙郝泳涛
徐康熙 郝泳涛
摘要:为了实现3D试衣功能及解决虚拟试衣建模算法时间复杂度比较大的问题,该文结合虚拟现实等技术,首先用弹簧-质点模型对服装布料进行建模,然后以牛顿第二定律为理论基础分析以质点-弹簧模型建模的服装布料的受力情况,结合以GPU为基础的物理引擎PhysX,建立3D试衣间,仿真服装布料与人体模型的运动交互状况。最后加入人体模型调整、选衣、试衣等功能。该系统在Windows平台下,利用VisualStudio2008设计开发,结合虚拟现实等技术的综合应用,建立了一套包括选衣、试衣、人体参数调整等功能的3D试衣系统。
关键词:3D试衣;布料仿真;弹簧—质点模型;物理引擎;PhysX
中图分类号:TP391.9 文献标识码:A 文章编号:1009-3044(2014)08-1826-04
随着计算机技术及网络的快速发展,虚拟现实等技术已广泛应用于生活的各个方面。在网络购物的广泛发展中,虚拟现实的需求逐渐增大,3D虚拟试衣作为网络购物中的必要环节应运而生。目前,试衣系统普遍采用虛拟试衣间的方式。所谓虚拟试衣问,就是一个供用户和机器实时交互的平台,用户通过此平台在各种服装中做出选择,并把选中的衣服在虚拟模特身上进行试衣。虚拟试衣间须具功能:选衣、试衣、展示等[1]。
目前,国内的虚拟试衣间大都是2D系统,以模特平面贴图作为主要技术。此类系统观赏缺乏真实性,交互性单一,试衣效果较差。国外的虚拟试衣较成熟,典型的系统有日内瓦大学MIRALab课题组的Virtual Try On[2]和Online Clothing Store[3]。但此类系统服装模拟的时间复杂性较大,无法实现3D试衣的实时性要求,用户体验不足。
本文从实际需求出发,针对于国内虚拟试衣以2D系统为主的不足,设计出一套可以全方位展示模型以及服装的系统,促进了国内3D试衣系统的发展。借鉴与国外服装模拟的算法复杂性较大的不足,本系统以弹簧-质点模型模拟服装布料建模,引入物理引擎PhysX作为模型算法,该引擎结合OpenGL、GPU计算等技术,可快速的模拟服装的运动及与模型的碰撞等过程。此外,在用户试衣过程中,用户可根据自身条件方便的调整人体模型的具体参数,在不同场景中,系统可全方位的展示服装和人体模型,极大地提高了用户的真实性体验。
1 弹簧-质点模型
在3D试衣系统中,首要解决的问题是对服装布料的模拟。服装布料的仿真一直是虚拟现实及图像领域的热点。服装布料是天然或人工纤维的网状编织物,具有各向异性、不可压缩性、抗拉不抗弯等一些明显的力学特性[4]。由于服装布料为非线性的应力形变关系,服装布料的外形会随着服装内力及外力的改变而变化。因此,服装布料的建模比一般物体复杂。
目前,三维服装布料的建模和仿真大致分可分为三类:几何模型,物理模型和混合模型。其中,物理模型随着计算机硬件技术以及图形算法的不断发展而成为服装布料主流的仿真方法。而在物理模型中,Provot[5]建立的弹簧-质点模型因其模型简单、计算效率高而被广泛应用。
Provot建立的弹簧-质点模型把服装布料看成横向和纵向均匀分布的网格。整个服装布料的质量都浓缩到相交的网格点上,网格点用质点来表示,我们认为所有质点质量相同、且在网格中均匀分布。质点与质点之间通过弹簧来连接。由于服装布料内部在不同方向上都有作用力,根据主要的三种作用力拉伸、剪切、和弯曲,弹簧可分为结构弹簧、剪切弹簧、弯曲弹簧。如图1所示:
如果把质点的分布看成M[×]N的矩阵,那么结构弹簧连接质点(i , j)和(i+1,j),(i , j)和(i+1,j),模拟横向和纵向的拉伸作用力;剪切弹簧连接质点(i , j)和(i+1,j+1),(i+1,j)和(i,j+1),模拟倾斜方向的剪切作用力;弯曲弹簧连接质点(i , j)和(i+2,j),(i ,j)和(i,j+2),模拟布料折叠式的弯曲作用力。弹簧-质点模型的工作流程主要有以下几个步骤:
1)给定个点位置及速度初始值。
2)各点受力清零。
3)计算各点受力与加速度。
4)求解各点位置及速度。
5)处理碰撞中变形约束。
6)更新各点位置与速度。
7)循环处理2到6。
2 服装布料的运动仿真
由于本文对布料采用了物理的建模和仿真方法,则对布料的运动仿真则至关重要。在采用弹簧-质点模型的服装布料模拟过程中,该文假定所有质点质量相同,质点由弹簧连接,弹簧的弹性系数相同。
服装布料在运动模拟过程中收到各种不同力的作用。作用于质点上的力大致分为内力和外力。内力主要包括拉伸力、剪切力、弯曲力等,主要是粒子间的相互作用。外力主要包括重力、空气阻力、风力、摩擦力等。
服装布料的运动规律可用牛顿第二定律F=ma确定。具体表现为作用到某一质点上的作用力与质点质量,质点加速度之间的关系。这里的作用力力应为内力和外力的总和,即:
其中,m表示质点的质量,X表示质点下一时刻的位移,[Fi]表示质点所受的内力,[F0]表示质点所受的外力,t表示时刻。质点所受的作用力随之时间t的改变而变化。同样,质点的位移也随着时间t的改变而变化。
3 3D试衣系统实现
3.1 物理引擎PhysX简介
本文采用物理引擎PhysX作为模拟试衣的主要方法。物理引擎对具有物理特性的实体进行受力分析及碰撞分析,进而计算出每一个实体对象的运动状态和碰撞响应。物理引擎的作用是把真实的物理规律应用的虚拟场景中。
目前世界上主要的物理引擎有PhysX、Havok、Bullet Physics等。PhysX是Nvidia公司的一款优秀的物理引擎。主要用于刚体模拟、布料模拟、粒子模拟、任务控制[6]等。同时,它还提供Nvidia强大的CUDA加速能力,因此PhysX在各领域被广泛使用。在本文中,我们使用PhysX中的布料模拟部分作为我们服装试衣模拟的主要开发引擎。3D试衣从本质上来讲是服装与人体模型的运动模拟,是一种物理现象,遵从牛顿第二定律。因此,引入物理引擎PhysX是完全可行的。
3.2 试衣间的构建
使用物理引擎PhysX模拟试衣过程中,我们需要对整个物理场景建模,包括试衣间、人体模型、服装等。使用物理引擎PhysX对场景建模,首先要创建场景(Scene)并给场景添加上物理材质;然后创建角色(Actor)并把角色添加到创建的场景中。本系统中,试衣间、人体模型、服装等都是作为角色被添加。最后是场景内,角色与角色之间的运动模拟。
在物理引擎PhysX构建的物理场景中,试衣间场景是作为物理场景中的单独角色(actor)而创建。该文首先创建了试衣间角色,通过创建的角色描述(NxActorDesc)对试衣间进行初始化。试衣间为一个正方形盒体,如图2所示:
在构建的3D试衣系统中,用户可根据习惯自由选择试衣间,在试衣过程中,也可以实现试衣间的自由切换,用户试衣的个性化需求得以提升。
3.3 人体模型的载入
人体模型以PhysX支持的文件格式而存在。人体模特有多种,用户在试衣过程中,可以任意挑选与自己体型接近的人体模型。如不合适,可以对人体模型进行微调,试衣系统提供了微调接口。微调的接口如图3所示:
人体模型作为物理场景中的角色而载入,如图4所示。载入用PhysX中的CookASE()函数,在此函数中,我们设定了人体模型的类型、位置、显示大小的信息。
3.4 服装与人体模型的运动仿真
在使用物理引擎PhysX对服装布料进行模拟仿真时,首先要创建一个场景作为我们的物理世界;然后加入不同的角色以及每个角色的属性及描述;这样我们可以利用物理引擎PhysX对创建的物理世界进行运动模拟。
其服装布料的模拟流程如图5所示。
当服装布料作为角色载入物理场景后,我们利用弹簧-质点模型对服装布料进行建模。把我们的服装布料分割成不同的网格结构。在系统中,根据不同的试衣间场景,我们可以施加不同的作用外力,包括重力、風力、摩擦力等。
在初始化试衣间和载入人体模型、服装后,该文通过调用物理引擎PhysX中的模拟函数StartPhysics()来对服装及人体模型进行运动模拟。在函数StartPhysics()中,我们首先获得上一次计算到现在计算的时间步长,然后调用模拟函数simulate()进行运动模拟,直至达到结束条件。具体的试衣效果如图6所示。
在具体的运动模拟中,当服装布料接触到人体模型时会发生碰撞。我们使用物理引擎PhysX内置的碰撞检测算法[7-8]来模拟碰撞检测及碰撞后的碰撞反应。在物理引擎PhysX中,我们需要打开物理场景中的碰撞检测标志。物理引擎自动的把物理场景中的几何体划分空间块,碰撞检测时,PhysX首先找出发生碰撞的碰撞对,检测附近空间的几何体块的情况,最后发生碰撞的几何体块做出碰撞相应。
3.5 3D试衣系统的实现
在以上试衣间、人体模型、服装模拟的论述基础上。我们开发了基于物理引擎PhysX的3D试衣系统。该系统可方便的让用户在不同的场景中体验选衣、试衣等。具体的试衣流程如图7所示。同时,我们致力于丰富试衣过程中的用户交互功能,包括观看视角的调整、衣服的拖拽、试衣间光照调整、风速环境的设定等用户操作。
4 结束语
本文介绍了基于物理引擎PhysX的3D试衣系统的设计和实现。重点介绍了服装布料的弹簧-质点模型建模方法以及应用以牛顿第二定律为基础的物理引擎PhysX来模拟服装布料的仿真方法。本系统目标在于创建一个3D试衣系统,改善国内试衣系统以2D贴图为主的客观局势,加速国内试衣系统的快速发展。随着虚拟现实技术的发展,人们对试衣效果的良好体验需求快速增加。如何用CUDA等加速技术为3D试衣系统加速时我们继续研究的目标。
参考文献:
[1] 高峰,董兰芳.网上3D试衣系统技术研究[J].计算机仿真,2006(6).
[2] Dimitris Protopsaltou, Christiane Luible, Marlene Arevalo, Nadia Magnenat-Thalmann. A body and garment creation method for an Internet based virtual fitting room[C].Computer Graphics International Conference Proceedings,July,2002.105-122.
[3] Frederic Cordier , Hyewon Seo and Nadia Magnenat-Thalmann. Made-to-Measure Technologies for Online Clothing Store[C].IEEE Computer Graphics and Applications, January February 2003.38-48.
[4] 武继银.基于OSG的实时布料仿真[D].济南:山东大学,2009.
[5] Xavier Provot, Deformation Constraints in a mass-spring Model to Describe Rigid Cloth Behavior[C].n Graphics Interface,1995,95:147-154.
[6] 魏立新.浅谈物理引擎PhysX SDK的使用[J].电脑知识与技术,2009(20).
[7] 素新新,李学庆,祁斌.基于PhysX物理引擎的布料仿真技术的研究与实现[J].计算机应用,2009(12).
[8] Nvdia. NVIDIA PhysX SDK v2.8.1[CP/OL].2008.