萬燕 陳林下
摘 要:針對當前虛擬試衣技術普遍存在的一些問題,本文提出一套基于Kinect的3D實時虛擬試衣系統。本系統設備成本較低,設備體積小,操作簡單,適用于家庭或是個人使用。不需要任何的穿戴就可以完成虛擬試衣的流程,并且試衣效果相對真實,能夠實現基于即時演算并且能夠反映人衣交互效果的虛擬試衣系統。
關鍵詞:虛擬試衣; 三維; 布料仿真; 人衣交互
Abstract: Focusing on the problems of the existing virtual fitting systems, a real-time virtual fitting system based on the Kinect camera is proposed. The system has lower cost, small size and simple operation, which is suitable to family or personal use. This system could achieve real-time interactivity between the customer and the clothes, real-time cloth simulation and could provide real-time results without severe dependence of the equipment or environment.
Key words: virtual fitting; three-dimensional; cloth simulation; interactivity
引言
隨著人們生活水平的逐漸提高和網上購物的興起,生活在都市的人們對于線上選購衣物的需求變得更加深入和實際。有數據顯示,年輕的上班族和學生是網購服裝的主流群體。但是,同樣有數據顯示,在有關網購服裝的消費滿意度方面,有一個很大的影響因素就是網購服裝自身難以避免的一大缺陷——沒有試穿的體驗。為了解決這一問題,虛擬試衣技術也就應運而生了。
現存的虛擬試衣系統所采用的技術從框架和展現形式上來講主要可以分為三維和二維兩種;就服裝的建模方式上,二維技術路線試衣所用的服裝使用圖片完成服裝的構造,三維路線中采用三維模型實現[1]。使用圖片很難將布料仿真的效果加入到系統中,因為布料的方針效果更多的是基于渲染。相對的,利用三維模型,想要添加布料效果就會容易的多[3]。三維虛擬試衣系統對應的工作量和數據量會比較大,不利于網絡的傳輸,網絡協議傳輸的數據可能使用字節來表示的,所以只能去做資源的更新,而不能做運行時的同步。而二維利用圖片來完成的虛擬試衣技術在網絡傳輸上會顯得更有優勢,因為傳輸的數據量會大幅度的減少。
系統實現和數據維護的思路一般可以分為“構建”和“變形”兩種[10]。前者是指根據數據去“畫”服裝模型,這一思路對于二維和三維的模型都是通用的,但是使用這種思想來完成的虛擬試衣系統往往非常復雜。利用“變形”思想實現的虛擬試衣系統,需要預先設置好標準模型,然后根據數據對于模型的網格或者是預先設置的骨骼組進行調整和變形。這樣實現虛擬試衣不但在效率上會有非常大的改進,而且也能夠更大程度實現對于變形效果的控制。
Xitong Han提出的基于二維數字圖像的網絡虛擬試衣系統,主要是利用二維圖像分割融合,將服裝圖片融合到已有的圖片上,從而實現虛擬試衣[7]。Glasses.com網站上也推出了基于WebGL的眼鏡虛擬試戴系統,該系統通過攝像頭獲取人的頭像,然后根據頭像上獲得的數據來實現眼鏡三維虛擬試穿效果。優衣庫網站上也實現了虛擬試衣系統,讓客戶能夠根據自己的體型利用參數來調整三維模型的體型,然后再進行服裝的試穿,該系統在用戶體驗上獲了一定的好評,能夠較為直觀地展現出服裝試穿的效果。同樣也有網站曾經展示出虛擬試衣鏡系統,這一類系統利用了二維圖片,貼在通過攝像頭獲取的用戶和用戶所處環境的影像上,并且根據序列幀來調整圖片的信息,產生例如動作改變和形變等效果。也有一部分系統是預存了大量的圖片,這些圖片量非常的大,能覆蓋絕大多數用戶動作改變的需求[8]。Salin Boonbrahm提出過針對女性的三維實時虛擬試衣系統,該系統使用三維模型,與人體的骨骼點進行匹配和調整,但對于布料的實時仿真和物理效果實現上還有很大的改進空間[11]。Dimitris 和Protosaltou針對這一領域提出了布料構建的方法[5]。Takao Furukawa在文章中提出了基于圖片克隆的三維服裝建模方法[8]。該方法通過提取人物正面和背面照片的骨骼點和外輪廓,然后對服裝進行分割,將服裝部分和人體的頭部進行分離。Shiyi Huang和Won-Sook Lee提出了基于雙Kinect攝像頭的三維服裝重構技術[9]。
綜上所述,目前的虛擬試衣技術主要存在兩大問題:
一是實時的三維試衣效果不夠真實,對于用戶來說最佳的效果是實時的交互效果;其二是大多數不適合家用,設備較為昂貴,設備體積也較為龐大,甚至有一部分虛擬試衣系統需要通過用戶穿戴一定數量的傳感器才能實現較好的實時虛擬試效果。值得一提的是,可穿戴設備一般是指穿戴傳感器,這種方法實現的動作同步是目前存在的動作捕捉技術當中效果最好的。但如果試衣過程需要穿戴一系列的設備,那么虛擬試衣就沒有什么存在的必要了。
因此能夠滿足實時的、輕量級、設備體積較小、無需任何穿戴設備、符合家用需求的3D實時虛擬試衣系統,具有非常重要的研究意義和研究價值。
基于此,本文提出了一套基于Kinect的實時虛擬試衣系統,該系統利用Kinect作為用戶的信息獲取設備,同時采用Unity3D作為開發環境來實現。系統能夠實時的完成布料仿真,并且能夠實現實時的試衣動作捕捉和人衣交互,對于布料仿真的效率和效果方面也有一定的改進。系統最后成像部分加入了去遮擋效果的改進,能夠實現較好的實時人衣交互效果。
1 總體設計
現存的虛擬試衣系統普遍來說對試衣環境有著一定的要求,為了能夠降低虛擬試衣系統對于環境的依賴,還要避免虛擬試衣的過程中需要穿戴設備或是傳感器。本文采用Kinect深度攝像頭作為用戶信息的輸入設備,Kinect攝像頭可以獲取用戶的深度圖和彩色圖,并且利用對于深度圖和彩色圖進行分析來提取用戶的骨骼點和特征信息。這種方法可降低系統本身對于環境的依賴,而且Kinect攝像頭體積小、重量輕、使用方便,成本低、使用方便快捷,只需用戶站在攝像頭前就可以完成骨骼點信息的獲取,滿足了家庭以及大小商場的需求。
本文提出的技術方案主要針對兩個方面:一是三維與二維的選擇。因此,使用二維的圖像方法來實現虛擬試衣時,在試衣的實時動態效果和布料的仿真上會有一定的局限。第二點是實現的總體思路。本文所采用的方法是在三維世界中先預先放置所需要的資源(人體模型,服裝模型),再根據所獲取的數據對已有的人體模型和服裝模型進行變形,也就是更加偏向一種“異步”的思想,能夠實現較為高效的虛擬試衣效果。總體設計路線如圖1所示。
系統設計與實現的三個階段:
(1)目標信息的獲取。該階段包括對于目標深度圖、彩色圖、圖像骨骼點、身體參數、位置等信息的獲取,并接入到Unity3D當中,主要用來實現試衣動作的同步。
(2)布料仿真。虛擬試衣系統得到較為真實的動態布料效果的方法有多種,可用建模軟件在構建模型時實現動畫效果,然后將動畫作為模型的緩存接入到Unity3D當中。這種方法雖然能夠實現布料的效果,甚至是交互。但如果需要更為真實的實時布料仿真效果,就需在Unity3D當中對于布料效果進行優化處理。
(3)復合輸出。對于任何三維的虛擬試衣系統來說,最后的三維真實試衣效果展示都是不可忽視的一部分,因為這一部分的效果和效率直接影響了用戶的體驗。針對這一點,本文采用復合輸出的方式來實現。
2 布料仿真
布料仿真主要需實現兩點:首先將“彈簧質點模型”應用到布料網格的模型上,實現布料中質點的相互作用;另外,則需要物理系統的支持,這里所提到的物理系統是指重力和碰撞檢測。本文主要介紹其中優化部分;最后還有對于實時布料仿真效果的優化方案進行詳細的闡述。
2.1 彈簧質點模型
彈簧質點模型是利用牛頓定律完成對物體變形模擬的方法,如今這一模型逐漸在布料仿真等研究領域被廣泛的應用。該模型的理念是將物體的質量分布在各個質點上,質點之間的連接由彈簧完成,質點間的彈簧又是無質量而且自然長度不為零的;這些彈簧主要用來模擬內外力對于彈簧質點運動時的影響。彈簧質點模型如圖2所示。
彈簧質點運動時會受到內力和外力的影響,其中內力是指彈性力和阻尼力,外力主要是指重力和空氣阻力。由于彈簧質點模型的應用已經比較成熟,在很多文獻上都能找到非常詳細的資料,所以有關這一部分本文僅做簡述。
需要解釋的是彈簧的彈性力之間遵守胡克定律,而且不同材質的布料之間,不同的部分可以通過彈簧質點模型的力學參數來實現,而彈簧質點模型的應用并沒有實質上的變動。
2.2 物理效果的實現
單純的實現布料的仿真效果,能夠實現的只是布料質點之間的互動,反映到效果上也只是布料的波動效果。而實際應用中的布料仿真還需要讓布料受到重力的影響,以及要讓布料中的質點能夠實現碰撞的檢測。
2.2.1 重力的實現
基于圖形學API所構建的三維世界中,是不存在“力”這一概念的,與其對應的是“速度”,而速度在實現的過程中將以單位時間內的位移來表示。
計算公式如下:
不僅在此系統中是利用此方法實現重力,游戲引擎及利用到三維世界的軟件中,都是利用此原理完成重力系統的實現。利用彈簧質點模型中的彈簧的拉伸,可以保證布料只是下垂而不是無限的拉伸,而且可以根據系數的調整來完成不同種布料效果的模擬仿真。
2.2.2 碰撞和剛體檢測的實現
與重力系統相同,碰撞系統同樣是三維世界的環境中不可或缺的一部分。無論是物體與物體之間的碰撞,還是物體與場景之間的碰撞,都需要實現這樣一套檢測系統。現實中人們不能穿墻而過是因為有墻作為碰撞體阻擋,然而在三維世界中,和重力一樣,這些都是不存在的,需要后期自行實現。
以物體和場景之間的碰撞檢測為例。目前,幾乎所有的3D場景和物體都是由三角面片構成的。在圖形庫文檔中也都是以三角面片為例來進行圖形繪制的。還有一點需要完成的就是要記錄每一幀物體的位置。
首先要根據物體的運動規律或用戶指定的位置來計算當前幀的位置,然后遍歷場景中的每一個三角面片。然后先找到當前三角形所在的平面,稱之為平面S。沿著平面發現的方向對它做一個平移d,以此來表示物體和平面之間接近的距離。之后再判斷當前幀的位置和下一幀的位置與平面S的關系,如果當前幀物體在平面之前,而下一幀物體在平面后,則表明物體已經“穿透”了平面。如圖3所示。
但此時并不能斷定物體和三角形之間發生了碰撞,因為平面是沒有邊界的,還需進一步判斷物體是否在三角形的范圍內穿透了平面S。因此,在三角形的三邊做垂直于S的三個平面,并令這三個平面法線都指向三角形內部。為了體現物體和三角形所能接近的最短距離,這三個平面也需要沿著法線的反方向做一個平移,依靠以上提供的三個平面來檢測物體與平面之間發生的穿透是否發生在三角形的邊界范圍內。但是根據三角面片形狀的不同,很容易產生過大的邊界,對此人們還應該加以修正。如圖4所示。圖4中占線了碰撞檢測的過程中對于超過邊界檢測方范圍的控制和優化,通過裁剪冗余的邊界,來完成性能上的優化,并去除不必要的判斷。
判斷物體的位置是否在這6個平面之內,如果是則修正當前幀的位置,進行下一步的操作;否則繼續遍歷其余的三角形并進行最開始的操作。
以上介紹的就是利用DirectX實現的碰撞檢測系統。不難看出,如果在場景或者物體的網格特別復雜的情況下,進行這樣的遍歷,對于資源的消耗會非常的巨大。為了應對這種情況,如今很多游戲引擎已經將網格碰撞檢測移除,并用一些相對簡單的形狀來制作碰撞框,并且以此作為計算的標準。
圖5顯示的是利用圖形API模擬出的受重力影響的彈簧質點模型的效果圖。
2.3 布料仿真效果優化
實時布料效果需要根據彈簧質點模型進行實時的演算,并且在質點模型之中不斷的迭代。而圖5中所實現的效果并沒有使用到碰撞檢測,如果加入碰撞,布料仿真的效率將會成為一個非常嚴重的問題。仿真過程中不僅要對布料網格中的各個頂點進行不斷迭代的計算,計算過程中還需要考慮到碰撞體的網格頂點,這樣一來計算量就更為龐大。基于此本文在Unity3D中對于布料的仿真效果進行了一定的優化處理。
優化處理主要分為兩部分,首先是效率上的優化處理,因為處理布料效果實際上就是在處理頂點和頂點之間的關系,而模型的頂點數量可以達到上百萬甚至是上千萬,這種模型在實時驗算過程中是難以使用的;不僅如此,市面上的三維引擎對于頂點的讀入數量有著很多的限制。所以,在效率上的優化方案是將網格分開,分開后的網格再輸入時效率上會有比較好的提升。這也就產生了進一步效果上的優化。
效果上的優化方案是重新實現一套基于彈簧質點模型的布料仿真系統。這里需要對于讀入的網格定點進行反復的迭代處理,所以對于網格也有一定的要求,如果讀入的網格定點數量過大,會造成卡頓。
圖6顯示的是Unity中的布料仿真效果,本文對于這件衣服的頂點權重的設置和仿真后的效果,在圖6中的右上方的小圖片中可以看到,已經產生了明顯的撕裂效果。
圖7所展示的是調整后的碰撞體機構圖。并且基于這些碰撞體和布料頂點的權重設置進行計算,這些計算是脫離Unity3D本身的布料仿真。圖片中所展現的階段已經能夠較好地實現各種材質布料的模擬仿真以及有關碰撞檢測和重力的交互效果了。
如圖8所示,布料仿真需要實現的效果包括沒有撕裂,能夠自然下垂等等;為了保證效率和完整性,想要絕對的全身布料目前來說技術和設備上還很難達到本文的需求,所以只能使用分段的思想,將服裝的一部分作為布料質點來進行實時驗算,并且與人體進行交互的碰撞檢測也是在這一段布料上完成的。
3 復合輸出
對于虛擬試衣系統來說,最后的成像輸出效果和效率是十分重要并且不可忽視的一部分。最后 的效果是現實中的用戶“身穿”三維服飾,這一階段需要解決的最重要問題已經不是虛擬試衣的實時效果或是布料仿真效果,而是“遮擋”。本文所使用的設計思路需先對于渲染的部分進行介紹。渲染是指將三維世界的物體作為二維的像素點投射到屏幕上的過程。如今已有許多廠商更加側重于可編程渲染管線的部分,利用可編程渲染管線可以優化渲染效果。
3.1 渲染管線
實時渲染管線分為三個階段,每個階段實際上是并行運行的,但是數據流又是從一個階段到另一個階段的。渲染管線的效率并不是取決于最快的流程,而是由最慢的流程決定的。如圖9所示。
實際上每個階段又可以劃分為幾個階段,這三個階段本身也是管線;其中的每個階段之間是并行處理的。如前所述,效率是由最慢的部分決定。首先來看程序階段,此階段開發者對于程序可完全控制,此部分沒有利用圖形處理單元緩存,僅利用了CPU進行運算。盡管如此,本階段依舊會對余下的流程產生一定的影響。因為此處的算法可能直接決定了將會進行渲染的三角形面片數量。本階段結束之后將會把需要渲染的圖元發送給幾何階段。圖元包括三角形、點和線,這些也將是未來構成復雜圖形最為基本的要素。
幾何階段主要是對每個頂點和多邊形進行集中的處理。此階段分為:模型和視角轉換變形、頂點著色、投射、裁剪和屏幕映射等。由于可編程流水線的發展,頂點著色也將作為實現后續步驟的主要部分。光柵化階段根據之前處理過的數據將需要渲染的頂線顯示在屏幕的像素點上。這個階段又分成構建三角形、三角遍歷、像素著色、融合等過程。詳細流程如圖10所示。
渲染管線如今的應用已經非常的廣泛,在任何應用到圖形的程序當中,渲染管線都不可或缺。圖11中是本文系統中對于去遮擋顯示部分的流程設計。
3.2 頂點著色及像素著色
上述所提到的管線流程中,并非所有的部分都是可編程的。其中的頂點著色器,幾何著色器、像素著色器都是可編程控制。其它的部分有的完全固定,有的是部分可編程。本系統主要使用的是頂點著色器,對于模型的頂點以及覆蓋在模型上的材質進行改寫,以達到所需的效果。
頂點著色主要是用來針對物體的頂點以及材質進行調整。本文中并沒有應用到頂點的變形部分,主要是針對材質部分進行編程。需要將人物的表面材質對于調整成只能反射一種顏色光照的材質,并且毫無金屬質感,這樣表面看起來就會是不自然的單一顏色。這利用這種方法,可以進一步的進行操作,以便得到更好的效果。接下來進行像素著色的處理。
在此需要遍歷攝像機獲得的像素,并且剔除像素之前賦給人體模型表面的顏色。之后將這些處理過后的像素點重新顯示在屏幕上,再結合之前獲取的人體影像,就基本完成了虛擬試衣的部分。
4 實驗結果
圖12展示了服裝和外部目標動作的同步以及服裝的布料效果的實現,以及不同體型目標的適配等效果,可以看出,本系統所實現的試衣與外界試衣對象的交互效果已經基本實現,對外界環境沒有特別的依賴。
該系統同樣也存在著一定的局限,對于3D的建模工作有著相當大的需求,一旦投入到了實際應用當中,商家每增添新款,就需要專人來進行建模工作。而且由于Kinect本身不支持轉身的局限,也一定程度上限制了系統效果的展示。在外部條件允許的情況下本系統能夠較好地完成布料的效果仿真和動作同步,實現實時3D虛擬試衣效果。
5 結束語
本文所提出的是基于Kinect的3D虛擬試衣系統。對于其中的3D布料效果實現和3D物理系統的實現都進行了深入的討論和分析。利用Kinect來獲取人體的骨骼點信息,并通過相應的骨骼點數據來完成試衣目標和服裝的動作同步。最后再利用實時渲染思想,通過調整人物模型材質來完成像素的輸出,得到3D虛擬試衣效果。
[LL]
參考文獻
[1] HAUSWIESNER S, STRAKA M, REITMAYR G. Free viewpoint virtual try-on with commodity depth cameras[C]// Proceedings of the 10th International Conference on Virtual Reality Continuum and Its Applications in Industry.Hong Kong, China:ACM, 2011:23-30.
[2] 何瑋. 虛擬試衣系統的研究與實現[D]. 杭州:浙江大學, 2012.
[3] 徐康熙, 郝泳濤. 基于物理引擎PhysX的3D試衣系統的設計與實現[J]. 電腦知識與技術, 2014,10(8):1826-1829,1837.
[4] LIU Xiaohu, JIANG Congfeng, SZE K Y, et al. Online cloth virtual fitting room based on a local cluster[C]// International Conference on New Trends in Information and Service Science. Beijing, China:IEEE, 2009:139-144.
[5] 況鷹. 基于Kinect運動捕獲的三維虛擬試衣[D]. 廣州:華南理工大學, 2012.
[6] 楊建東. 虛擬試衣系統的研究[D]. 北京服裝學院, 2012.
[7] 李俊, 張明敏, 潘志庚. 人物替換模式的虛擬試衣[J]. 計算機輔助設計與圖形學學報, 2015, 27(9):1694-1700.
[8] 孟蕊. 虛擬試衣系統關鍵算法研究[D]. 哈爾濱:哈爾濱工業大學, 2015.
[9] 丁路. 基于深度圖像的人體輪廓識別技術[D]. 南京:東南大學, 2015.
[10]丁玉蘭. 人體工程學[M]. 4版. 北京:北京理工大學出版社,2011.
[11]李紅勤, 王建萍. 虛擬試衣系統原理與相關技術的探析[J]. 紡織科技進展, 2012(1):93-96.
[12][JP3]HAUSWIESNER S, STRAKA M, REITMAYR G. Free viewpoint virtual try-on with commodity depth cameras[C]// Proceedings of the 10th International Conference on Virtual Reality Continuum and Its Applications in Industry.Hong Kong, China:ACM, 2011:23-30.
[13]KANAMORI Y, YAMADA H, HIROSE M, et al. Image-based virtual try-on system with Garment reshaping and color correction[M]// GAVRILOVA M, TAN C, IGLESIAS A., et al. Transactions on Computational Science XXVI. Lecture Notes in Computer Science. Berlin/Heidelberg:Springer . 2016,9550:1-16.