?

基于Sqrt3細分算法的人體模型網格平滑?

2019-03-26 08:44胡新榮李佳黎陳思園
計算機與數字工程 2019年3期
關鍵詞:人體模型面片曲面

蘇 剛 胡新榮 李佳黎 尹 汪 陳思園

(武漢紡織大學數學與計算機學院 武漢 430073)

1 引言

近年來,隨著網絡及虛擬現實技術的迅速發展,數字人體建模及動畫模擬已經成為計算機圖形學研究的熱點方向之一。目前,數字人體建模技術主要分為五大類,分別是基于解剖學的數字人體建模、基于三維掃描數據的數字人體建模、基于圖像序列的數字人體建模、三維軟件(3DMax、Maya、Poser)人體建模以及參數化數字人體建模技術[1~2]?;诮馄蕦W的數字人體建模技術采用了基于數字橫斷切片圖像數據的幾何建模方法,這類建模技術需要太多人工干預,建模效率低?;谌S掃描數據的數字人體建模采用結構光或激光三維掃描儀進行三維數字人體重建,利用該方法能重建與實際人體體型非常逼真的三維模型。但該方法的實現依賴于昂貴的設備,獲取數據量大,重建速度慢,很難對數字人體模型進行控制和修改?;趫D像序列的數字人體建模是利用從視頻圖像序列或照片序列中獲取的二維圖像來重建數字人體模型,這種方法花費較低,但對人體著裝要求高,在獲取三維人體模型精度和建模速度上難以達到平衡。通過三維建模軟件繪制人體三維模型可以得到美觀的人體模型,但建立模型成本較高,不適用于建立大量個性化的數字人體模型。

綜上所述,我們采用的是參數化數字人體建模,該方法是基于傳統幾何建模方法上的一種更為抽象化的建模方法,通過幾何約束來表達數字人體模型的形狀特征,以抽象的特征參數表達真實人復雜的外部幾何特征,依托于常規的幾何建模方法,使設計人員能夠在更高更抽象的層面進行人體設計[3]。由該方法建立的人體模型是由多邊形面片組建的三維人體網格模型,雖然具有規則的網格結構,與原始掃描人體獲取數據相比,不僅大大減少了人體模型數據量,并能夠極大地提高系統的計算效率,同時還保持了掃描人體的表面基本特征,但是表面不夠光滑,沒有真實人體圓潤的感覺,不能滿足實際應用的需要。因此,本文引用Sqrt3曲面細分算法[4~7]來實現三維人體模型的網格平滑。Sqrt3細分具備三角形面片增加緩慢,連續性自動保留等優點,并能在任意網格上達到C1連續。實驗證明,利用該方法對三維人體模型進行光滑處理取得了很好的效果。

2 參數化數字人體建模

參數化數字人體建模是根據人體著裝時服裝與人體表面接觸的特點和人體的整體結構特征,將人體模型分為肩部、軀干、上肢和下肢4個部分,每層有各自的數據結構和造型方法。它使得人體模型的曲面建模更加靈活,可以針對人體模型不同部位的幾何特征,選擇適合的曲面建模方法,而不必拘泥于某一種曲面表達方式。為建立個性化虛擬現實人體建模系統,滿足不同用戶的精度需求,本文提出了個性化人體模型重建方案,通過參數化數字人體建模思想和特征化建模方法,實現了個性化數字人體建模系統。如圖1所示,用戶通過該系統只需要修改形體參數的值,就可以使形體形狀改變,實現個性化數字人體建模。通過參數化數字人體建模得到人體模型是由多邊形面片組建的三維實體模型,雖然具有規則的網格結構,但是網格表面不夠光滑,不能滿足實際應用的要求,所以本文引用Sqrt3曲面細分法對人體網格模型進行光滑處理。

圖1 個性化數字人體建模系統

3 Sqrt3細分曲面原理

細分曲面是用低分辨率的控制網格和定義在控制網格上的一種細分規則來表示光滑曲面的。目前,細分曲面方案有很多,典型的細分曲面方案有Loop細分法,改進Butterfly細分法,Sqrt3細分法、Catmull-Clark細分法、Doo-Sabin細分法以及基于GPU的PN-triangle 細分法等[8~12]。其中,Loop細分法,改進Butterfly細分法,Sqrt3細分法,PN-triangle細分法主要用來對三角網格進行網格平滑。從而結合我們建立的人體模型為三角網格模型,對這四種算法進行實驗測試,來選擇一種最合適的算法來對三維人體模型進行網格平滑處理。測試三維模型具有498個頂點,992個三角形面。測試數據如表1所示。通過參考文獻[9]和表1實驗數據可以了解到,Sqrt3細分法在面片的增長速度上和算法的邏輯復雜度之間達到了一種平衡,該細分算法簡單高效,能緩解三角面片的增長速度,所以本文選擇該曲面細分方案來對人體網格模型進行光滑處理。

表1 曲面細分算法運行效率分析表

Sqrt3細分方案是由Kobbelt在2000年提出的一種逼近型、面分裂的三角網格細分方案,該細分曲面方案能有效緩解面片增長速度。Sqrt3采用一種全新的頂點插入和分裂方式,每次細分時,在每個三角形面插入一個新頂點,連接每個三角形面片的中心點和其頂點,然后去掉原三角形的內部邊,這樣使得三角形面的個數增加3倍,細分過程如圖2所示。Sqrt3細分法使得三角形面片增加緩慢,不會出現尖銳三角形,并且連續性自動保留,適用于局部性適應性細分。

圖2 Sqrt3細分過程

對于原始頂點,設新頂點(V-vertex):頂點v相鄰頂點為 v1,v2,v3,…,vn-1,則(V-vertex)新頂點 Vv

新面點(F-vertex):設原始面片三角形的三個頂點為v1,v2,v3,新插入的中心點由下面的公式計算:由下面的公式計算:

其中n為頂點個數,vi為其領域內的頂點,an的求解公式如下:

根據以上介紹,可以總結出Sqrt3細分法進行細分的步驟大致如下。

在大數據的背景下,教學環境也開始向信息化的方向發展。因此,對于高職院校而言,也應該積極地利用大數據的這一優勢,建立相關的數學實驗室,提高學生的數學實際操作能力。對于學生來說,信息化數學實驗室的建立不僅能力吸引到他們的學習興趣,也能夠提高實際的數學學習效果,培養他們的數學應用能力。

Step1:逐個遍歷三角形面片,通過面片求出每個面片對應的三個頂點,利用式(1)求出中心點的坐標,保存在面片的屬性內;

Step2:把面片分為三個單獨的面片,使中心點連接三角形面片的三個頂點;

Step3:把新產生的面片加入到新的面片序列中。

Step4:去除原始頂點的邊;

Step5:對原始的頂點進行修正;

Step6:一次細分結束。

4 算法實現

4.1 設計數據結構

人體網格曲面的表示主要包括兩個類:頂點類(CMyShape類)和三角形面類(CIndex類)。頂點類表示人體網格模型頂點數據的坐標值,人體網格模型中所有頂點都按順序保存在動態數組CtypeP-trArray<CobArray,CMyShape*>m_Vertex中,三角形面類保存的是三角形三個頂點在m_Vertex動態數組中的索引號和細分曲面過程產生的邊點索引。最后,所有三角形面都保存在動態數組CtypePtrArray<CobArray,Cindex*>m_Index中。

4.2 獲得新頂點

v1為vertNew->x+=vert->x/3.0f,

v2為vertNew->x+=vert->x/3.0f,

v3為vertNew->x+=vert->x/3.0f,

即可以求出新插入的中心點的位置。按式(2),對原始頂點的改變Vv:

m_Vertex[(*v_iter)->index]->x*(1-alpha)+sum_x*(alpha/(float)vertexCounter);

m_Vertex[(*v_iter)->index]->y*(1-alpha)+sum_y*(alpha/(float)vertexCounter);

m_Vertex[(*v_iter)->index]->z*(1-alpha)+sum_z*(alpha/(float)vertexCounter);

其中an按式(3)如下表示:

alpha=(4-2*cos(2*3.14159f/(float)vertexCounter))/9.0f

4.3 產生新三角形

按照細分規則,每次細分時,在每個三角形面插入一個新頂點,然后連接每個面片的中心點和原三角形的頂點,最后去掉原始網格的內部邊。如圖3所示,為人體網格模型局部細分過程圖示,首先計算出每個三角面片的中心點,如圖3(a)所示,設插入某一點P為某一個三角形的中心點,以點P所在三角形面片和該三角形相鄰三角形的中心點形成的局部拓撲結構為例,新頂點與原三角形的三個頂點和相鄰三角形面片的中心點相連得到圖3(b)網格結構,然后去掉原三角形的內部邊,經過一次細分得到圖3(c)所示拓撲網格結構。

圖3 新三角形產生過程

4.4 改變原頂點

如果三角形頂點的鄰點已知的話,按式(2)很容易就可以求出移動后的新控制頂點,所以關鍵就在找到其鄰點。搜索鄰點時,遍歷m_Index數組中所有CIndex對象,若三個頂點索引中有一個與該頂點索引相同,則另二個頂點索引所代表的頂點即為該頂點鄰點。將新生成的點與相鄰面生成的點連接,為所有新生成的點計算屬性,最后去除重復頂點即可得到所有鄰點。

5 結語

本文提出了一種針對參數化數字人體模型的基于Sqrt3細分的網格光滑方法,根據人體表面特征建立初始網格重建三維人體模型。通過Sqrt3細分規則對三維人體模型進行光滑處理。算法實現效果如圖4所示。

為研究不同曲面細分算法對參數化三維人體建模人體模型光滑處理的性能,本文實現并驗證了

參考文獻[3]中王暉等用Loop細分法對人體模型進行光滑處理的算法,如圖5所示,分別用一般三角形細分法、Loop細分法、Sqrt3細分法對人體模型光滑處理后得到一次細分和二次細分的效果圖示。從人體模型表面光滑效果來看,一般三角形細分法增加了人體網格模型三角形面片的個數,但沒有使人體模型達到光滑,僅僅是將人體網格模型的三角面片進行了細化,并增加了三角形和頂點的數量。Loop細分法和Sqrt3細分法對人體模型進行光滑處理已經有了明顯的改善,人體模型在整體上實現了很好的光滑效果。其中,Loop曲面細分是一種基于三角網格的細分[13~15],主要思想是在三角形點的每條邊上插入新頂點,并將其兩兩相連,每次細分三角形個數將增加4倍。Loop曲面細分法可以達到C2連續,產生的曲面質量較高,但Loop細分對原有特征尤其尖銳特征的保持能力弱,產生的曲面具有較大的收縮性。Sqrt3細分算法可以達到C1連續,而且算法實現簡單,速度快,提高了運行效率和分辨率。通過對比可以得出Loop細分法和Sqrt3細分法都會使人體網格模型會產生較大的收縮,特別是人體模型的四肢末端比較明顯,這將是今后努力改進的方向。

圖4 細分曲面效果

圖5 細分算法曲面效果

猜你喜歡
人體模型面片曲面
參數方程曲面積分的計算
參數方程曲面積分的計算
第二型曲面積分的中值定理
關于第二類曲面積分的幾個闡述
豐田汽車碰撞測試新增兒童模型
河沿面片
河沿面片
甜面片里的人生
Family makes 45—foot icicle in front yard
體驗創新:3D人體掃描儀測三圍
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合