張 煜,陳天星,陳 力,李文鵬
(西南交通大學(xué) 機(jī)械工程學(xué)院,成都 610000)
虛擬試衣系統(tǒng)是利用計(jì)算機(jī)技術(shù)模擬服裝真實(shí)穿著于人體的一種應(yīng)用。其主要使用在電子商務(wù)領(lǐng)域,用戶可根據(jù)虛擬試穿的效果挑選商品。因此,系統(tǒng)中的三維人體需要能夠讓用戶根據(jù)自身尺寸進(jìn)行個(gè)性化定制。但對(duì)于獲取三維人體的主要途徑之一的建模法,存在不適用于大量個(gè)性化建模,難以集成到實(shí)際的開(kāi)發(fā)軟件的問(wèn)題[1]。另一方面,系統(tǒng)中服裝的真實(shí)感在于對(duì)它的布料模擬。其中最為廣泛使用的是Provot等[2]提出的彈簧-質(zhì)點(diǎn)模型,由該模型的一種試衣方式是將服裝試穿轉(zhuǎn)化為衣物2D裁片縫合過(guò)程中與人體的碰撞響應(yīng)的問(wèn)題[3]。另一種試衣則是將服裝視作整體進(jìn)而局部調(diào)整避免穿透,如Yongjoon等[4]將原有服裝與人體的關(guān)系映射到不同人體上,Jituo等[5]將服裝整體變形后與T字型人體對(duì)齊實(shí)現(xiàn)著裝等等。本文結(jié)合Unity3D設(shè)計(jì)實(shí)現(xiàn)虛擬試衣系統(tǒng),針對(duì)人體建模法存在的問(wèn)題提出了一種解決方案,并研究了服裝的布料仿真與碰撞處理,使其適用于人體動(dòng)態(tài)試衣。
三維人體模型常用的變形算法大致有Skeleton-Based變形算法[6]與FFD自由變形算法[7],它們的基本特性如表1所示。
由于Skeleton-Based變形算法主要用于處理人體姿態(tài)的調(diào)整,而本文討論的系統(tǒng)需要對(duì)人體輪廓外形進(jìn)行控制,因此不適合使用。另外,F(xiàn)FD自由變形算法因其需要大量的用戶參與調(diào)整,故也不適用。為了變形人體輪廓外形,本文引入一種常用于制作人物面部表情的BlendShape算法[8]進(jìn)行控制。它描述了一組模型間的線性變化關(guān)系,定義如下:
(1)
其中:m指的是最終形狀的頂點(diǎn)向量集,bk代表一個(gè)變形通道中目標(biāo)形狀的頂點(diǎn)向量集,wk是第k個(gè)變形通道內(nèi)的影響權(quán)重,范圍是(0,1)。設(shè)模型網(wǎng)格為M=(V,E,F),V代表模型的頂點(diǎn)向量集,V={vi∈R3}描述頂點(diǎn)的位置坐標(biāo)信息,E={ei}、F={fi}是模型的邊界集與三角面集,其中ei=(vi,0,vi,1)與fi=(vi,0,vi,1,vi,2)描述了模型表面的幾何連接關(guān)系與拓?fù)湫畔ⅰ?/p>
考慮單通道的變形,即m0=w0b0,設(shè)原模型Msource=(V0,E0,F0),當(dāng)權(quán)重w0為0時(shí),原模型不變形,而當(dāng)w0為1時(shí),原模型變化到Mtarget=(b0,E0,F0),即變化過(guò)程中僅僅變更模型的頂點(diǎn)位置信息,并不影響幾何連接關(guān)系與拓?fù)湫畔?。?dāng)w0介于(0,1)之間時(shí),原頂點(diǎn)集V0的各頂點(diǎn)與目標(biāo)頂點(diǎn)集b0相對(duì)應(yīng)的頂點(diǎn)沿直線方向線性插值得到Msource至Mtarget過(guò)渡變化的中間模型,如圖1所示。
圖1 單通道變形過(guò)程
圖2 多通道變形過(guò)程
虛擬試衣系統(tǒng)的總體框架圖如圖3所示。系統(tǒng)分為人體模型個(gè)性化定制模塊與服裝展示模擬模塊兩部分。
第一部分的核心支持是人體變形子模塊,它負(fù)責(zé)處理人體模型的輪廓變形,在由參數(shù)化控制子模塊進(jìn)一步控制之后得到的個(gè)性化人體將進(jìn)入服裝展示模擬模塊,該模塊負(fù)責(zé)把靜態(tài)著裝后的服裝進(jìn)行布料仿真,并讓人體與布料化的服裝參與碰撞處理完成動(dòng)態(tài)試衣過(guò)程。
圖3 系統(tǒng)總體框架圖
建模生成三維人體的主要途徑有基于體素法建模、基于NURBS曲面建模、以及在3dsMax、Maya等軟件中利用多邊形建模生成蒙皮骨骼綁定的人體模型的方法。本文使用的是第三種方法建立的人體模型。
3.1.1 人體模型的變形實(shí)現(xiàn)
由章節(jié)1對(duì)人體變形的討論,我們的實(shí)現(xiàn)步驟如下:
1)對(duì)人物模型需要調(diào)節(jié)的部位,如前臂、胸部、腰部、臀部及腿部等分別在不增減頂點(diǎn)個(gè)數(shù)的前提下,通過(guò)調(diào)整頂點(diǎn)位置獲得最大變形形狀和最小變形形狀,即原模型Msource經(jīng)調(diào)整得到M前臂最大,M前臂最小,M腰部最大,M腰部最小等等一組模型,為了讓調(diào)整過(guò)程更為平滑,我們借助了ZBrush軟件來(lái)調(diào)節(jié)頂點(diǎn)位置。
2)我們并未直接控制頂點(diǎn)集的插值過(guò)程,而是使用了3dsMax軟件的morph變形器得到中間過(guò)渡模型,它以分段插值的方式優(yōu)化了變形過(guò)程,并且修正了頂點(diǎn)插值過(guò)程中的法線變化,得到的模型更為平滑光順。將Msource→M前臂最大,Msource→M前臂最小等模型變化過(guò)程分別在3dsMax軟件的Morph變形器內(nèi)建立單獨(dú)的變形通道。
3)將模型與相關(guān)變形通道導(dǎo)入U(xiǎn)nity3D后,使用接口函數(shù)SetBlendShapeWeight( )對(duì)插值權(quán)重w進(jìn)行控制。
以人體前臂由原模型變形到我們調(diào)整的最大前臂模型為例,結(jié)果如圖4所示,依次取權(quán)重w為0、0.2、0.4、0.6、0.8、1,可以看出變形過(guò)程較為平滑。因此,由一個(gè)基礎(chǔ)模型與一組極限模型,通過(guò)對(duì)不同變形通道的權(quán)重w加以控制即可得到大量個(gè)性化的人體模型。
圖4 人體前臂部分變形過(guò)程
3.1.2 人體模型的參數(shù)化控制
為了讓用戶輸入如腰圍等人體特征尺寸時(shí)能夠得到相應(yīng)的體型,我們希望找到與輸入值對(duì)應(yīng)的插值權(quán)重w。因此我們需要獲得人體特征輪廓曲線[9],由于Unity3D并不支持模型的布爾運(yùn)算,而且人體模型的網(wǎng)格頂點(diǎn)并不總在一個(gè)平面內(nèi),以人體腰部的參數(shù)化控制為例,我們的解決方法如下:
1)在3dsMax中手工的選擇一組鄰近人體特征位置的點(diǎn)集,如圖5所示,將該組點(diǎn)集及其連接邊組成的新網(wǎng)格導(dǎo)入U(xiǎn)nity3D后,遍歷新網(wǎng)格的頂點(diǎn)集,根據(jù)頂點(diǎn)三維空間坐標(biāo)相同可找到人體模型網(wǎng)格內(nèi)相對(duì)應(yīng)的頂點(diǎn)集V腰部特征。
在區(qū)間[xi,xi+1](i=0,1...,n)構(gòu)造:
Si(x)=ai+bi(x-xi)+ci(x-xi)2+di(x-xi)3
(2)
由上述步驟,我們給出人體模型的參數(shù)化控制過(guò)程:設(shè)變形前曲線長(zhǎng)度為L(zhǎng)0,通過(guò)判斷用戶的輸入值L輸入與L0的大小關(guān)系找到相應(yīng)的變形通道,插值權(quán)重w由0開(kāi)始循環(huán)查找,當(dāng)經(jīng)過(guò)k次循環(huán),我們重復(fù)步驟2)、3)計(jì)算在插值權(quán)重w=kΔ下的當(dāng)前曲線長(zhǎng)度L當(dāng)前,若滿足|L當(dāng)前-L輸入|≤σ,循環(huán)查找終止,認(rèn)為此時(shí)的w即為用戶輸入的對(duì)應(yīng)值,其中Δ為循環(huán)增量,σ為預(yù)設(shè)誤差限。
圖5 在腰部網(wǎng)格手工選擇一組點(diǎn)集 圖6 人體腰部特征輪廓曲線
3.2.1 服裝的靜態(tài)著裝
我們參考了文獻(xiàn)[4]的實(shí)驗(yàn)初始條件,即約束在試衣開(kāi)始前要求服裝能夠匹配人體原模型。將服裝導(dǎo)入U(xiǎn)nity3D后,它以蒙皮骨骼綁定的網(wǎng)格形式渲染,我們重新綁定其骨骼為人體模型的骨骼,即可實(shí)現(xiàn)靜態(tài)著裝。
3.2.2 服裝的布料仿真
為了達(dá)到更真實(shí)的著裝效果,需要對(duì)服裝進(jìn)行布料仿真。我們采用Provot等[2]提出的彈簧-質(zhì)點(diǎn)模型,如圖7所示,每個(gè)質(zhì)點(diǎn)與相鄰質(zhì)點(diǎn)形成結(jié)構(gòu)彈簧,與網(wǎng)格對(duì)角線上的質(zhì)點(diǎn)形成剪切彈簧,與間隔的質(zhì)點(diǎn)在橫向、縱向上形成彎曲彈簧。其中,剪切彈簧保持了對(duì)角線上質(zhì)點(diǎn)之間的面內(nèi)相對(duì)位移,避免了質(zhì)點(diǎn)沿對(duì)角線方向的過(guò)度拉伸,彎曲彈簧則使得布料仿真中的褶皺效果更為理想。我們將服裝的所有網(wǎng)格頂點(diǎn)當(dāng)作是質(zhì)點(diǎn),對(duì)每個(gè)質(zhì)點(diǎn)由牛頓第二定律有:
圖7 彈簧-質(zhì)點(diǎn)模型
(3)
式中,F(xiàn)內(nèi)是質(zhì)點(diǎn)與連接彈簧間的變形合力,可表示為F內(nèi)=∑F結(jié)構(gòu)+∑F剪切+∑F彎曲。在彈簧的彈性限度范圍內(nèi),根據(jù)胡克定律有:
式中,R表示與該質(zhì)點(diǎn)連接成彈簧的質(zhì)點(diǎn)集,ki,j表示該質(zhì)點(diǎn)i與質(zhì)點(diǎn)j間的彈簧勁度系數(shù),xi、xj、li,j表示該質(zhì)點(diǎn)i與質(zhì)點(diǎn)j的空間位置與彈簧原長(zhǎng),我們限定彈簧的拉伸上限,以避免彈簧的內(nèi)力過(guò)大而導(dǎo)致“超拉伸”現(xiàn)象。對(duì)式(3)中的F外,我們僅考慮重力與空氣阻尼力,即F外=G+F阻,其中,重力G=mg,阻尼力用來(lái)減緩質(zhì)點(diǎn)運(yùn)動(dòng)的劇烈程度,讓系統(tǒng)更快達(dá)到平衡,阻尼力可表示為F阻=-cdvt,cd為空氣阻尼系數(shù)。
為了實(shí)現(xiàn)仿真,每個(gè)時(shí)刻都需重新計(jì)算質(zhì)點(diǎn)的受力情況,將式(3)寫成微分形式:
(4)
(5)
由式(4)與式(5)相加可得質(zhì)點(diǎn)在t+Δt時(shí)刻的位置表達(dá)式:
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積分的運(yùn)行不是自啟動(dòng)的,我們將初始條件S(t)=S0,v(t)=0,a(t)=g代入式(4)作為仿真的開(kāi)始條件。時(shí)間步長(zhǎng)Δt在迭代過(guò)程中取為定值。
3.2.3 服裝的碰撞處理
圖8 一組碰撞球近似擬合人體邊廓
圖9 虛擬試衣系統(tǒng)集成工作流
虛擬試衣系統(tǒng)集成的工作流如圖9所示。我們將基礎(chǔ)人體模型與相關(guān)變形通道、服裝模型、手工選擇的特征輪廓分別以.fbx文件格式導(dǎo)入U(xiǎn)nity3D。在Unity3D中首先實(shí)現(xiàn)人體模型的靜態(tài)著裝,參數(shù)化控制腳本集在用戶與手工選擇的特征輪廓的輸入下控制變形腳本更新著裝后的人體輪廓外形,接著我們?cè)O(shè)置碰撞球集并讓靜態(tài)著裝后的服裝進(jìn)行布料仿真與碰撞處理。最后,我們將積分迭代、碰撞處理后的服裝網(wǎng)格頂點(diǎn)位置信息、法線信息傳入到服裝材質(zhì)所用的著色器中實(shí)現(xiàn)布料化服裝的實(shí)時(shí)渲染。系統(tǒng)中除著色器由Cg語(yǔ)言編寫,其他腳本均使用C語(yǔ)言進(jìn)行編寫并運(yùn)行在CPU上。
系統(tǒng)測(cè)試環(huán)境的搭建如圖10所示,依次為原人體模型、原人體模型靜態(tài)著裝與動(dòng)態(tài)著裝、變更體型后的人體模型、變更體型后人體的靜態(tài)著裝和動(dòng)態(tài)著裝。我們?cè)谌梭w肩部區(qū)域取較大的彈簧勁度系數(shù)以限制質(zhì)點(diǎn)運(yùn)動(dòng),實(shí)現(xiàn)服裝的固定。當(dāng)變更體型后,手工將適應(yīng)原模型的碰撞球集進(jìn)行位置和大小的調(diào)整以貼合新的人體輪廓形狀。
圖10 不同體型下服裝試穿結(jié)果
由圖10可以看出,適應(yīng)原人體模型的服裝在變更體型的人體上靜態(tài)穿著出現(xiàn)了穿透現(xiàn)象,而服裝經(jīng)過(guò)3.2節(jié)討論的布料仿真與碰撞處理后,相同的服裝能夠在不同體型的人體上進(jìn)行試穿,并且仿真運(yùn)行過(guò)程中質(zhì)點(diǎn)不斷調(diào)整位置使得服裝呈現(xiàn)出形態(tài)的小幅變化,這種動(dòng)態(tài)試衣的效果相對(duì)于靜態(tài)著裝更具有真實(shí)感。因此,本文討論的系統(tǒng)能夠滿足虛擬試衣系統(tǒng)對(duì)人體個(gè)性化定制與服裝試穿的需求,較好的模擬了服裝真實(shí)穿著于人體的效果。但系統(tǒng)并非完全自動(dòng)化,對(duì)于動(dòng)態(tài)試衣過(guò)程中手工參與碰撞器調(diào)整的部分需要進(jìn)一步完善,使其能夠伴隨人體變形自動(dòng)更新。
本文提出一種由BlendShape算法控制人體各局部特征變形的方案,該方案使得各特征的調(diào)整互不影響,變形過(guò)程自然平滑,通過(guò)疊加不同特征的變形能夠解決人體建模法存在的難以得到大量個(gè)性化模型的問(wèn)題。接著引入人體特征輪廓曲線實(shí)現(xiàn)參數(shù)化控制變形過(guò)程,使其更適用于虛擬試衣系統(tǒng)。并對(duì)服裝進(jìn)行布料仿真,采用一組球形碰撞器近似擬合人體邊廓實(shí)現(xiàn)了不同體型人體的動(dòng)態(tài)試衣。
[1] 陳 亮,趙曙光,張麗娟,等. 虛擬三維服裝展示的發(fā)展歷史與研究熱點(diǎn) [J].紡織學(xué)報(bào),2011,32 (10):153-160.
[2]ProvotX.Deformationconstraintsinamass-springmodeltodescriberigidclothbehavior[J].GraphicsInterface,1995,23(19):147-154.
[3] 陳青青. 三維虛擬服裝縫合技術(shù)及布料仿真的研究與實(shí)現(xiàn)[D]. 廈門:廈門大學(xué),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] 李 健,李鵬坤,丁露露. 基于區(qū)域控制的三維人體模型個(gè)性化定制 [J].陜西科技大學(xué)學(xué)報(bào), 2009,27 (3):130-133.
[8]LewisJP,AnjyoK.Direct-manipulationBlendshapes[J].ComputerGraphics&ApplicationsIEEE,2010,30 (4):42-50.
[9] 姚 礪,李?yuàn)W瓊,王慧潔. 個(gè)性化人體特征曲線驅(qū)動(dòng)的三維服裝變形 [J].計(jì)算機(jī)仿真,2015,32 (7):426-432.
[10] 文 靜. 基于GPU的布料實(shí)時(shí)運(yùn)動(dòng)仿真研究 [D]. 成都:電子科技大學(xué),2009.