?

一種三維參數化虛擬人臺建模的新方法

2013-10-27 02:28王小波李英琳
天津工業大學學報 2013年5期
關鍵詞:繪制向量部位

王小波,李英琳

(天津工業大學紡織學部,天津 300378)

近年來,高級定制和個性化設計越來越廣泛的受到人們的關注,傳統的量體裁衣方法耗時耗力,無論是顧客還是設計師都迫切希望從這繁瑣的測量工作中解脫出來.顯然,建立參數化虛擬人臺是解決這一問題的良策,設計師可以通過三維虛擬服裝CAD系統設計出合體的服裝.因此尋求一個合理可行的參數化人臺建立方法已經成為一個迫在眉睫的問題.但迄今為止,人們在人體建模領域的研究工作主要是集中在計算機圖形學方面,雖然這些研究在很大程度上推動了人體建模的發展,但是真正針對服裝CAD系統的人體建模方法還有待探究.近年來,在這一領域里已經有了很多學術方面的研究,但依然迫切需要尋求出一些能應用于實際生產的技術方法.基于以上原因,本文對傳統的模型建模法進行了改進,以獲得更加令人滿意的參數化人體模型.首先在建模軟件中建立標準基本模型,然后在OpenGL中讀取標準模型的點和面信息,繪制出標準模型;通過輸入參數來分析目標模型和標準模型之間尺寸的差別,通過控制函數對需要進行變換的點的點信息進行計算和更新,最后將得到的新模型繪制出來.此方法不僅可以通過用戶界面對模型特征部位的尺寸信息進行調整,而且允許用戶通過用戶界面對模型的變換函數進行微調設置.通過此方法得出的模型具有良好的精確度和可用性,而且人體不會走形,具有良好的外觀.

1 相關研究

隨著計算機圖形學和建模技術的發展,人體建模方法也越來越多樣化.概括起來可以分為4類:①直接建模;②模版建模;③圖片識別建模;④統計綜合建模.直接建模方法分為2種:3D人體掃描法和骨骼建模法.3D人體掃描法無疑是各種人體外形獲取方法中最精確的方法之一.隨著3D圖形捕獲技術的發展,3D人體掃描技術的應用也日趨成熟和普遍.但是對于服裝CAD系統來說,3D人體掃描技術仍然存在一些嚴重的不足:首先,三維人體掃描設備過于昂貴;其次,三維人體掃描設備得到的人體數據在后期轉換為建模數據時非常復雜.所以目前來說,三維人體掃描法并不適合用于服裝CAD系統.骨骼建模法則除了要求對人體的表層建模外,還要對人體的一些內部組織進行建模,如肌肉、骨骼、皮下組織等,之后再將皮膚覆蓋在它們的表層.此過程要求建模人員對人體結構和計算機圖形學有著深入的了解,所以盡管其建出的模型非常逼真,但是它并不適用于服裝CAD系統.

模版建模是指程序員先在系統中建立一個基礎模型,之后的其他模型以此為基礎進行變換.這種方法因其簡單易行而被廣泛采用,特別是在一些在線的試衣系統上.但是它無法保證其精確度,且大多數此類建模方法無法建立人體各部位間的變換關系.

圖片識別建模法,首先對建模對象拍攝一系列照片,然后通過圖片處理技術獲得被拍攝人體的外形輪廓和一些測量數據.這種方法在一定程度上減輕了開銷和勞動強度,但是其也有相當的局限性.譬如其對照片的拍攝背景有著嚴格要求,并且其建立的模型有著相當的噪點[1].

統計綜合建模法為每個示例模型的掃描數據生成同類的網格結構,最后通過這些網格結構生成我們需要的新模型的網格結構.此法以同類網格生成為核心技術,以此確定所建標本模型的拓補結構和網格連通性.這種建模方法的缺點是難以自行輸入模型尺寸,其主要應用PCA(即主元分析算法)技術代替之前提到的三維掃描技術和模型獲取技術.PCA的模型中存在諸多的假設條件,這就決定了它存在一定的限制,在有些場合可能會造成效果不好甚至失效.

本文采用的是模版建模方法,通過一種新的算法來在原先建模方法的基礎上進行改進,從而在保留此方法簡單易行優點的同時彌補此法的不足.

2 建立基本人臺

首先建立一個標準的人體模型.本文試圖通過Poser軟件獲得一個特定的女性人體模型.模型的數據信息為:身高165 cm,肩寬38 cm,胸圍84 cm,腰圍68 cm,臀圍84 cm.

將建立的標準女體模型導入3DMAX,并對其進行切片,保留其主體部分,再將所有身體部位合并為一個物體,如圖1所示.然后將文件命名導出為women.ASE,并將其數據精度設為小數點后2位,其他設置默認.這個文件包含之后繪制時需要的所有網格和頂點信息.

圖1 人體模型Fig.1 Model of human body

3 基本人臺在OpenGL的中的數據讀入和繪制

導出了包含網格和頂點信息的ASE文件之后,就需要對ASE中的文件信息進行讀取和繪制.為了方便和簡化之后的讀取工作,可對之前獲得的ASE文件進行適當簡化,這些簡化并不會影響網格和頂點的數據信息.過程為:將ASE文件用記事本方式打開,在其工具欄選擇:編輯——替換.將所有的多個連續空格符替換成一個空格符,并將TAB符也替換成單個空格符,完成后保存文件.ASE文件的文件格式非常規范,所用關鍵字都是對應含義的英文全稱.文件內容的開始部分是一些3DMAX文件信息,以及一些場景設置信息,這些對本文模型的建立沒有影響,“*GEOMOBJECT”字符之后的一些信息為場景內的物體信息,包括物體的名稱等,在此不做深究.從“*MESH”字符開始,之后的信息就是關鍵的網格和頂點信息,其對應的含義如表1所示.

之后需要對這些數據進行讀入和存儲,限于文章篇幅,本文對其將從簡介紹.本文主要是通過自己編寫的一個GetString(FILE*fp)函數來對文件進行讀取.其算法如圖2所示.

GetString(FILE*fp)函數完成讀取之后,數組s[i]中將產生一個字符串.本文通過判定這個字符串是什么,來改變一個標志位(這個標志位是事先創建的一個整型數據).具體方法為:首先為每個關鍵字定義一個字符串變量,并將其初值設置為與其相對應的關鍵字字符串.之后通過判斷所讀入的字符串是否與剛才定義的字符串變量相同來識別當前讀取的字符串是什么,進而改變標志位的值.其算法如圖3所示.最后得到的標志位與字符串信息的對應關系如表2所示.

表1 關鍵字含義對照表Tab.1 Meaning of key words

圖2 讀取算法圖Fig.2 Reading algorithm

識別讀取之后就需要對數據進行循環存儲,首先構建一個結構體object,其成員包括:double x[4630],double y[4630],Double z[4630],int facex[7742],int facey[7742],int facez[7742],double nx[7742],double ny[7742],double nz[7742],double vtxnum,double facenum.這些成員用于之后存放網格和點的信息.這里事先在ASE中確定了物體的面和點的數量,所以數組的大小是確定的,也可以用動態數組來構建成員變量,但是這將影響程序的效率和運行速度.構建數據結構的算法如圖4所示.

圖3 識別算法圖Fig.3 Identification algorithm

表2 flag標志位含義對照表Tab.2 Meaning of flag

圖4中的“讀取指針向后移動”和“讀取數據”都是指運行一次GetString(FILE*fp)函數.圖中建立了2個object類型的指針變量,一個是用于實時繪制模型,另一個是用于存儲原始模型.需要注意的是3DMAX中的坐標系與OpenGL中的略有不同,OpenGL中坐標Z值應該為3DMAX中坐標Y值的相反數,而OpenGL中坐標Y值應該為3DMAX中的坐標Z值,讀入時應注意其坐標的轉換.另外,之前構建的object結構體中的成員變量都是整型或者浮點型,但是ASE文件的數據被讀入后存儲在s[i]中卻是字符串,所以需要用atof()函數和atoi()函數進行轉換,在圖中為了便于描述對此進行了省略.至此,模型的所有數據都完成了從ASE文件格式到模型程序的讀取存儲,之后就需要對模型進行繪制.這個過程比較簡單,直接利用OpenGL自帶的三角形繪制函數即可完成,需要注意的是在給定三角網格的每個頂點之前,先要給定這個頂點的法向量坐標,這樣最后的模型才有正確的三維光照效果.

圖4 構建數據結構算法Fig.4 Build data structure algorithm

4 在OpenGL中對模型數據進行變換

一般的模版建模方法是將人臺在3DMAX中或者其他建模軟件中切割為多個特征部分,然后通過數據輸入對某個特征部位的整體進行縮放變換[2-3].這種算法存在著相當的缺陷,譬如:每個模塊縮放影響的特征部位已經被人為的規定,這導致在后來建模的過程中無法按照實際情況對變換的部位進行調整;人體部位的變化不應是部位整體按照某個比例一起縮放;事先將人體按照特征部位切分成不同的切片,再經過放縮函數變換后,切片與切片的接合處會出現結合失真,甚至會出現明顯的撕裂或者過渡不勻.

本文所研究的算法并不對人臺進行切分,而是針對各個部位的點坐標進行不同的變換,各個部位前后的變換不是簡單的整體按照一個參數變換,而是獨立的按照用戶的設置進行變換[4-5];變換函數計算出的新的點坐標在模型重新被繪制后,特征部位之間平滑的接合,不會出現部位之間結合過渡不勻或者裂縫,并且每個部位作用在人臺上的實際范圍允許用戶自行調整.下面將詳細介紹這一步驟的具體算法.

首先分析一下人體特征部位的變化規律,譬如腰部.一個標準體人臺的腰部應該是向內凹陷的,那么如果給予腰圍一定的增量,最明顯的變化應該是向內凹陷的程度會逐漸減小,之后隨著尺寸的繼續增大凹陷會消失,最后取而代之的是原來向內凹陷的地方會變的凸起.并且在此過程中橫向增長和縱向增長的程度也會有所不同.又譬如胸部,隨著胸圍的增加,其點坐標的增量應當隨著它們遠離胸點所在的水平面而逐漸衰減,臀部應當隨著其遠離臀圍線而逐漸衰減.為了達到這一目的,必須賦給每個坐標點不同的變換系數,而這個系數的變化應當隨著其遠離中心線而逐漸減小,直到為零.為此可以構造一個二次函數,將特征部位的y軸坐標看成自變量,將放大的比例系數看為因變量.這樣構造出來的函數正好滿足了變換的需求,而且由于二次函數的圖像特點還會使得人體各部位之間的銜接過渡非常平滑.假設人臺某個部位的y坐標范圍為[y1,y3],而這個部位關鍵面(本文稱特征點所在的面為關鍵面,如胸點所在的面、臀圍線所在的面)的y軸坐標為y2,關鍵面的變換系數為β,如圖5所示.

圖5 拋物線示意圖Fig.5 Sketch map of parabola

則這個拋物線經過3個已知的點,分別為:(y1,0),(y2,β),(y3,0),可求解其方程式.之后只需將每個點的縱坐標代入方程式就能求出該點的變換系數.已知3 點分別為(x1,y1),(x2,y2),(x3,y3),設其方程為y=ax2+bx+c.

則其拋物線系數的求法為:

為實現參數化變換,最后需要計算求解人臺特征部位的y坐標范圍.由于模型從3D中導出后每個點的坐標都是經過特定的轉換,無法直接得知這些y值的大小.本文采取的方法是將之前的人臺的副本在3DMAX中做切片,即把每個部位切成單獨的物體,再把這些物體編號.再將本來的程序復制一個副本,并簡單修改用于求解,程序的整體算法與原本的程序區別不大,這里就不作贅述,只介紹一下其算法的主要思想.其主要算法為:建立一個object類型的指針數組,在識別一個物體名稱后新建一個object指針,并將其存儲于指針數組內.然后編寫一段求解最大值最小值的代碼,分別將指針數組中的指針賦給求解代碼中的指針,求出每個物體y坐標的最大值和最小值,這些值主要用于設置拋物線形狀,以及之后用戶調整變換范圍界面的初值設置,切分圖和用戶范圍設置界面圖如圖6.

圖6 模型切分和軟件設置Fig.6 Model segmentation and software setting

得到人臺各個部位的y坐標范圍之后,解出控制函數的方程式.在得到變換方程式之后,可以以此計算各部位中每個點的變換系數,更新之前用于繪制的存儲地址中的網格和點信息.譬如更新第i點的z坐標,則為:

以上求解并更新了用于繪制的存儲地址中的網格和點的一些信息,此時已經可以繪制出符合用戶輸入參數的人臺模型了.但是繪制完畢后會發現有些凹陷的面看起來并沒有凹陷,或者凹陷的程度與看到的不一致.這是由于程序只更新了網格和點的一部分數據,還有一些關鍵的數據沒有得到更新,它們就是法向量信息.

求解一個點的法向量的基本方法為:遍歷所有經過這個點的面,求出這個點在每個面中的法向量值,最后算出它們的平均值.但是這樣計算法向量有一個缺點,當很多小面共一個大面或者接近共一個大面時,會導致局部光照粗糙,在此本文使用另外一種法向量計算方法.前面所說的求平均值的方法之所以會出現局部法向量粗糙,是因為程序將每個面對最終法向量的影響看成是一致的.其實,每個面對點最終的法向量的影響程度在大多數情況下是不同的,當這個點所在角的角度較大時,這個面對點最終的法向量的影響就更大,如圖7所示,θ2的值最大,所以θ2所在的面的法向量對A點最終法向量貢獻最大.基于這個思想,必須求出每個三角網格面中所求點所在角的角度,由于已知這3個點的坐標,假設要求角A的度數θ,那么求解方法為:

這樣得到了所求點在每個面上的角度的大小,然后以這個角度為權值,計算最終的法向量值.假設為圖7中所示情形,則點A法向量的求解方法為:

式中:nori為A點在第i個面中的分法向量;θi為A點在第i個面中的角度.

以上為求得某點在各個面中的分法向量后如何求解其最終法向量,還需求解一個點在某個面中的法向量.點在某個面中的分法向量其實就等于這個面的法向量,因為一個面上所有點的法向量都是相同的.假設已知 3 點(x1,y1),(x2,y2),(x3,y3),則這個面的法向量(xn,yn,zn)的求解方法為:

圖7 法向量合成Fig.7 Compounding of normal

使用以上方法可以求出每個點的法向量,進而更新內存中用于存儲繪制數據的內存空間的網格和頂點信息.至此已經全部完成了網格和頂點信息的更新工作,之后再調用一次之前的繪制函數便能繪制出新的模型.

以下是軟件的運行效果.

相同的變換范圍和前后比例,不同的部位尺寸,在不同的視角下觀察,效果如圖8所示(注意各部位的尺寸變化).

圖8 效果圖1Fig.8 The first rendering

相同的部位尺寸和前后比例,不同的變換范圍,在不同的視角下觀察,效果如圖9所示(注意胸部和臀部的變化曲線).

相同的尺寸和變換范圍,不同的前后比例,效果如圖10所示(注意觀察前四幅胸部和后四幅腰部的前后曲線變化).

圖9 效果圖2Fig.9 The second rendering

圖10 效果圖3Fig.10 The third rendering

5 結束語

本文主要研究一種新的參數化人體模型的建模方法,此算法是在模型建模法的基礎上加以研究和改進的,較好的實現了參數化人體模型的快速建立.模型的效果精確實用,并且用戶可以從多方面對模型進行調整控制,能夠較好應用于服裝在線試穿系統和服裝CAD系統.但是由于筆者能力和時間有限,程序中必定還存在著一些問題.后續的研究可以從圍度變化的比例與圍度上點坐標的變化比例換算入手,從數學角度進一步提高模型的精確度.

[1]BAEK Seung-Yeob,LEE Kunwoo.Parametric human body shape modeling framework for human-centered product design[J].Computer-Aided Design,2012,44(1):56-57.

[2]KANG Tae J,KIM Sung Min.Development of three-dimensional apparel CAD system PartⅡ:Prediction of garment drape shape[J].International Journal of Clothing Science and Technology,2000,12(1):39-49.

[3]蔡劍.基于特征尺寸的個性化三維服裝人臺參數化建模系統的研究[D].上海:華東理工大學,2011.

[4]SHI Xiu-jin,WANG Zhi-jun,LE Jia-jin.One new method to generate 3-Dimensional virtual mannequin,physics procedia[J].Physics Procedia,2012,25:1919-1925

[5]YASSEEN Z,NASRI A,BOUKARAM W,et al.Magnenatthalmann,sketch-based garment design with quad meshes[J].Computer-Aided Design,2013,45(2):562-567.

猜你喜歡
繪制向量部位
每個女孩都有不允許別人觸碰的隱私部位
每個女孩都有不允許別人觸碰的隱私部位
向量的分解
聚焦“向量與三角”創新題
基于Excel VBA和AutoCAD的滾動軸承參數化比例圖繪制方法
分析當歸中不同部位有效化學成分
超萌小鹿課程表
放學后
五個部位冬天尤其要保暖
向量垂直在解析幾何中的應用
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合