徐康熙 郝泳濤
摘要:為了實(shí)現(xiàn)3D試衣功能及解決虛擬試衣建模算法時(shí)間復(fù)雜度比較大的問(wèn)題,該文結(jié)合虛擬現(xiàn)實(shí)等技術(shù),首先用彈簧-質(zhì)點(diǎn)模型對(duì)服裝布料進(jìn)行建模,然后以牛頓第二定律為理論基礎(chǔ)分析以質(zhì)點(diǎn)-彈簧模型建模的服裝布料的受力情況,結(jié)合以GPU為基礎(chǔ)的物理引擎PhysX,建立3D試衣間,仿真服裝布料與人體模型的運(yùn)動(dòng)交互狀況。最后加入人體模型調(diào)整、選衣、試衣等功能。該系統(tǒng)在Windows平臺(tái)下,利用VisualStudio2008設(shè)計(jì)開(kāi)發(fā),結(jié)合虛擬現(xiàn)實(shí)等技術(shù)的綜合應(yīng)用,建立了一套包括選衣、試衣、人體參數(shù)調(diào)整等功能的3D試衣系統(tǒng)。
關(guān)鍵詞:3D試衣;布料仿真;彈簧—質(zhì)點(diǎn)模型;物理引擎;PhysX
中圖分類號(hào):TP391.9 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2014)08-1826-04
隨著計(jì)算機(jī)技術(shù)及網(wǎng)絡(luò)的快速發(fā)展,虛擬現(xiàn)實(shí)等技術(shù)已廣泛應(yīng)用于生活的各個(gè)方面。在網(wǎng)絡(luò)購(gòu)物的廣泛發(fā)展中,虛擬現(xiàn)實(shí)的需求逐漸增大,3D虛擬試衣作為網(wǎng)絡(luò)購(gòu)物中的必要環(huán)節(jié)應(yīng)運(yùn)而生。目前,試衣系統(tǒng)普遍采用虛擬試衣間的方式。所謂虛擬試衣問(wèn),就是一個(gè)供用戶和機(jī)器實(shí)時(shí)交互的平臺(tái),用戶通過(guò)此平臺(tái)在各種服裝中做出選擇,并把選中的衣服在虛擬模特身上進(jìn)行試衣。虛擬試衣間須具功能:選衣、試衣、展示等[1]。
目前,國(guó)內(nèi)的虛擬試衣間大都是2D系統(tǒng),以模特平面貼圖作為主要技術(shù)。此類系統(tǒng)觀賞缺乏真實(shí)性,交互性單一,試衣效果較差。國(guó)外的虛擬試衣較成熟,典型的系統(tǒng)有日內(nèi)瓦大學(xué)MIRALab課題組的Virtual Try On[2]和Online Clothing Store[3]。但此類系統(tǒng)服裝模擬的時(shí)間復(fù)雜性較大,無(wú)法實(shí)現(xiàn)3D試衣的實(shí)時(shí)性要求,用戶體驗(yàn)不足。
本文從實(shí)際需求出發(fā),針對(duì)于國(guó)內(nèi)虛擬試衣以2D系統(tǒng)為主的不足,設(shè)計(jì)出一套可以全方位展示模型以及服裝的系統(tǒng),促進(jìn)了國(guó)內(nèi)3D試衣系統(tǒng)的發(fā)展。借鑒與國(guó)外服裝模擬的算法復(fù)雜性較大的不足,本系統(tǒng)以彈簧-質(zhì)點(diǎn)模型模擬服裝布料建模,引入物理引擎PhysX作為模型算法,該引擎結(jié)合OpenGL、GPU計(jì)算等技術(shù),可快速的模擬服裝的運(yùn)動(dòng)及與模型的碰撞等過(guò)程。此外,在用戶試衣過(guò)程中,用戶可根據(jù)自身?xiàng)l件方便的調(diào)整人體模型的具體參數(shù),在不同場(chǎng)景中,系統(tǒng)可全方位的展示服裝和人體模型,極大地提高了用戶的真實(shí)性體驗(yàn)。
1 彈簧-質(zhì)點(diǎn)模型
在3D試衣系統(tǒng)中,首要解決的問(wèn)題是對(duì)服裝布料的模擬。服裝布料的仿真一直是虛擬現(xiàn)實(shí)及圖像領(lǐng)域的熱點(diǎn)。服裝布料是天然或人工纖維的網(wǎng)狀編織物,具有各向異性、不可壓縮性、抗拉不抗彎等一些明顯的力學(xué)特性[4]。由于服裝布料為非線性的應(yīng)力形變關(guān)系,服裝布料的外形會(huì)隨著服裝內(nèi)力及外力的改變而變化。因此,服裝布料的建模比一般物體復(fù)雜。
目前,三維服裝布料的建模和仿真大致分可分為三類:幾何模型,物理模型和混合模型。其中,物理模型隨著計(jì)算機(jī)硬件技術(shù)以及圖形算法的不斷發(fā)展而成為服裝布料主流的仿真方法。而在物理模型中,Provot[5]建立的彈簧-質(zhì)點(diǎn)模型因其模型簡(jiǎn)單、計(jì)算效率高而被廣泛應(yīng)用。
Provot建立的彈簧-質(zhì)點(diǎn)模型把服裝布料看成橫向和縱向均勻分布的網(wǎng)格。整個(gè)服裝布料的質(zhì)量都濃縮到相交的網(wǎng)格點(diǎn)上,網(wǎng)格點(diǎn)用質(zhì)點(diǎn)來(lái)表示,我們認(rèn)為所有質(zhì)點(diǎn)質(zhì)量相同、且在網(wǎng)格中均勻分布。質(zhì)點(diǎn)與質(zhì)點(diǎn)之間通過(guò)彈簧來(lái)連接。由于服裝布料內(nèi)部在不同方向上都有作用力,根據(jù)主要的三種作用力拉伸、剪切、和彎曲,彈簧可分為結(jié)構(gòu)彈簧、剪切彈簧、彎曲彈簧。如圖1所示:
如果把質(zhì)點(diǎn)的分布看成M[×]N的矩陣,那么結(jié)構(gòu)彈簧連接質(zhì)點(diǎn)(i , j)和(i+1,j),(i , j)和(i+1,j),模擬橫向和縱向的拉伸作用力;剪切彈簧連接質(zhì)點(diǎn)(i , j)和(i+1,j+1),(i+1,j)和(i,j+1),模擬傾斜方向的剪切作用力;彎曲彈簧連接質(zhì)點(diǎn)(i , j)和(i+2,j),(i ,j)和(i,j+2),模擬布料折疊式的彎曲作用力。彈簧-質(zhì)點(diǎn)模型的工作流程主要有以下幾個(gè)步驟:
1)給定個(gè)點(diǎn)位置及速度初始值。
2)各點(diǎn)受力清零。
3)計(jì)算各點(diǎn)受力與加速度。
4)求解各點(diǎn)位置及速度。
5)處理碰撞中變形約束。
6)更新各點(diǎn)位置與速度。
7)循環(huán)處理2到6。
2 服裝布料的運(yùn)動(dòng)仿真
由于本文對(duì)布料采用了物理的建模和仿真方法,則對(duì)布料的運(yùn)動(dòng)仿真則至關(guān)重要。在采用彈簧-質(zhì)點(diǎn)模型的服裝布料模擬過(guò)程中,該文假定所有質(zhì)點(diǎn)質(zhì)量相同,質(zhì)點(diǎn)由彈簧連接,彈簧的彈性系數(shù)相同。
服裝布料在運(yùn)動(dòng)模擬過(guò)程中收到各種不同力的作用。作用于質(zhì)點(diǎn)上的力大致分為內(nèi)力和外力。內(nèi)力主要包括拉伸力、剪切力、彎曲力等,主要是粒子間的相互作用。外力主要包括重力、空氣阻力、風(fēng)力、摩擦力等。
服裝布料的運(yùn)動(dòng)規(guī)律可用牛頓第二定律F=ma確定。具體表現(xiàn)為作用到某一質(zhì)點(diǎn)上的作用力與質(zhì)點(diǎn)質(zhì)量,質(zhì)點(diǎn)加速度之間的關(guān)系。這里的作用力力應(yīng)為內(nèi)力和外力的總和,即:
其中,m表示質(zhì)點(diǎn)的質(zhì)量,X表示質(zhì)點(diǎn)下一時(shí)刻的位移,[Fi]表示質(zhì)點(diǎn)所受的內(nèi)力,[F0]表示質(zhì)點(diǎn)所受的外力,t表示時(shí)刻。質(zhì)點(diǎn)所受的作用力隨之時(shí)間t的改變而變化。同樣,質(zhì)點(diǎn)的位移也隨著時(shí)間t的改變而變化。
3 3D試衣系統(tǒng)實(shí)現(xiàn)
3.1 物理引擎PhysX簡(jiǎn)介
本文采用物理引擎PhysX作為模擬試衣的主要方法。物理引擎對(duì)具有物理特性的實(shí)體進(jìn)行受力分析及碰撞分析,進(jìn)而計(jì)算出每一個(gè)實(shí)體對(duì)象的運(yùn)動(dòng)狀態(tài)和碰撞響應(yīng)。物理引擎的作用是把真實(shí)的物理規(guī)律應(yīng)用的虛擬場(chǎng)景中。
目前世界上主要的物理引擎有PhysX、Havok、Bullet Physics等。PhysX是Nvidia公司的一款優(yōu)秀的物理引擎。主要用于剛體模擬、布料模擬、粒子模擬、任務(wù)控制[6]等。同時(shí),它還提供Nvidia強(qiáng)大的CUDA加速能力,因此PhysX在各領(lǐng)域被廣泛使用。在本文中,我們使用PhysX中的布料模擬部分作為我們服裝試衣模擬的主要開(kāi)發(fā)引擎。3D試衣從本質(zhì)上來(lái)講是服裝與人體模型的運(yùn)動(dòng)模擬,是一種物理現(xiàn)象,遵從牛頓第二定律。因此,引入物理引擎PhysX是完全可行的。
3.2 試衣間的構(gòu)建
使用物理引擎PhysX模擬試衣過(guò)程中,我們需要對(duì)整個(gè)物理場(chǎng)景建模,包括試衣間、人體模型、服裝等。使用物理引擎PhysX對(duì)場(chǎng)景建模,首先要?jiǎng)?chuàng)建場(chǎng)景(Scene)并給場(chǎng)景添加上物理材質(zhì);然后創(chuàng)建角色(Actor)并把角色添加到創(chuàng)建的場(chǎng)景中。本系統(tǒng)中,試衣間、人體模型、服裝等都是作為角色被添加。最后是場(chǎng)景內(nèi),角色與角色之間的運(yùn)動(dòng)模擬。
在物理引擎PhysX構(gòu)建的物理場(chǎng)景中,試衣間場(chǎng)景是作為物理場(chǎng)景中的單獨(dú)角色(actor)而創(chuàng)建。該文首先創(chuàng)建了試衣間角色,通過(guò)創(chuàng)建的角色描述(NxActorDesc)對(duì)試衣間進(jìn)行初始化。試衣間為一個(gè)正方形盒體,如圖2所示:
在構(gòu)建的3D試衣系統(tǒng)中,用戶可根據(jù)習(xí)慣自由選擇試衣間,在試衣過(guò)程中,也可以實(shí)現(xiàn)試衣間的自由切換,用戶試衣的個(gè)性化需求得以提升。
3.3 人體模型的載入
人體模型以PhysX支持的文件格式而存在。人體模特有多種,用戶在試衣過(guò)程中,可以任意挑選與自己體型接近的人體模型。如不合適,可以對(duì)人體模型進(jìn)行微調(diào),試衣系統(tǒng)提供了微調(diào)接口。微調(diào)的接口如圖3所示:
人體模型作為物理場(chǎng)景中的角色而載入,如圖4所示。載入用PhysX中的CookASE()函數(shù),在此函數(shù)中,我們?cè)O(shè)定了人體模型的類型、位置、顯示大小的信息。
3.4 服裝與人體模型的運(yùn)動(dòng)仿真
在使用物理引擎PhysX對(duì)服裝布料進(jìn)行模擬仿真時(shí),首先要?jiǎng)?chuàng)建一個(gè)場(chǎng)景作為我們的物理世界;然后加入不同的角色以及每個(gè)角色的屬性及描述;這樣我們可以利用物理引擎PhysX對(duì)創(chuàng)建的物理世界進(jìn)行運(yùn)動(dòng)模擬。
其服裝布料的模擬流程如圖5所示。
當(dāng)服裝布料作為角色載入物理場(chǎng)景后,我們利用彈簧-質(zhì)點(diǎn)模型對(duì)服裝布料進(jìn)行建模。把我們的服裝布料分割成不同的網(wǎng)格結(jié)構(gòu)。在系統(tǒng)中,根據(jù)不同的試衣間場(chǎng)景,我們可以施加不同的作用外力,包括重力、風(fēng)力、摩擦力等。
在初始化試衣間和載入人體模型、服裝后,該文通過(guò)調(diào)用物理引擎PhysX中的模擬函數(shù)StartPhysics()來(lái)對(duì)服裝及人體模型進(jìn)行運(yùn)動(dòng)模擬。在函數(shù)StartPhysics()中,我們首先獲得上一次計(jì)算到現(xiàn)在計(jì)算的時(shí)間步長(zhǎng),然后調(diào)用模擬函數(shù)simulate()進(jìn)行運(yùn)動(dòng)模擬,直至達(dá)到結(jié)束條件。具體的試衣效果如圖6所示。
在具體的運(yùn)動(dòng)模擬中,當(dāng)服裝布料接觸到人體模型時(shí)會(huì)發(fā)生碰撞。我們使用物理引擎PhysX內(nèi)置的碰撞檢測(cè)算法[7-8]來(lái)模擬碰撞檢測(cè)及碰撞后的碰撞反應(yīng)。在物理引擎PhysX中,我們需要打開(kāi)物理場(chǎng)景中的碰撞檢測(cè)標(biāo)志。物理引擎自動(dòng)的把物理場(chǎng)景中的幾何體劃分空間塊,碰撞檢測(cè)時(shí),PhysX首先找出發(fā)生碰撞的碰撞對(duì),檢測(cè)附近空間的幾何體塊的情況,最后發(fā)生碰撞的幾何體塊做出碰撞相應(yīng)。
3.5 3D試衣系統(tǒng)的實(shí)現(xiàn)
在以上試衣間、人體模型、服裝模擬的論述基礎(chǔ)上。我們開(kāi)發(fā)了基于物理引擎PhysX的3D試衣系統(tǒng)。該系統(tǒng)可方便的讓用戶在不同的場(chǎng)景中體驗(yàn)選衣、試衣等。具體的試衣流程如圖7所示。同時(shí),我們致力于豐富試衣過(guò)程中的用戶交互功能,包括觀看視角的調(diào)整、衣服的拖拽、試衣間光照調(diào)整、風(fēng)速環(huán)境的設(shè)定等用戶操作。
4 結(jié)束語(yǔ)
本文介紹了基于物理引擎PhysX的3D試衣系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn)。重點(diǎn)介紹了服裝布料的彈簧-質(zhì)點(diǎn)模型建模方法以及應(yīng)用以牛頓第二定律為基礎(chǔ)的物理引擎PhysX來(lái)模擬服裝布料的仿真方法。本系統(tǒng)目標(biāo)在于創(chuàng)建一個(gè)3D試衣系統(tǒng),改善國(guó)內(nèi)試衣系統(tǒng)以2D貼圖為主的客觀局勢(shì),加速國(guó)內(nèi)試衣系統(tǒng)的快速發(fā)展。隨著虛擬現(xiàn)實(shí)技術(shù)的發(fā)展,人們對(duì)試衣效果的良好體驗(yàn)需求快速增加。如何用CUDA等加速技術(shù)為3D試衣系統(tǒng)加速時(shí)我們繼續(xù)研究的目標(biāo)。
參考文獻(xiàn):
[1] 高峰,董蘭芳.網(wǎng)上3D試衣系統(tǒng)技術(shù)研究[J].計(jì)算機(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的實(shí)時(shí)布料仿真[D].濟(jì)南:山東大學(xué),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].電腦知識(shí)與技術(shù),2009(20).
[7] 素新新,李學(xué)慶,祁斌.基于PhysX物理引擎的布料仿真技術(shù)的研究與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用,2009(12).
[8] Nvdia. NVIDIA PhysX SDK v2.8.1[CP/OL].2008.