李紅波,劉昱晟,吳 渝,羅 璇
(重慶郵電大學 網(wǎng)絡智能研究所,重慶400065)
在計算機圖形學中,三維模型通常使用三維網(wǎng)格表現(xiàn)。由于較大的網(wǎng)格模型受到存儲成本和計算效率的限制,很難將其直接應用到實際工作當中。解決該問題的一個有效方式就是對原有網(wǎng)格進行簡化,在盡可能保持網(wǎng)格模型外觀特征的前提下,減少原模型的三角面片數(shù)量。但是對于尺寸超出內(nèi)存容量的大型網(wǎng)格模型,無法將其一次讀入內(nèi)存進行簡化。此外,受限于CPU處理速度,大型網(wǎng)格的簡化一般耗時很長。因此,面向大型網(wǎng)格模型的簡化成為近幾年來計算機圖形學領域的研究熱點之一[1]。
對于常規(guī)網(wǎng)格模型,Garland提出一種邊折疊算法,即二次誤差度量算法 (quadric error metric,QEM)。顧耀林等[2]、孫永鋒等[3]、唐慧等[4]、張果等[5]、Tang等[6]與黨建武等[7]對其進行了進一步的研究。在常規(guī)算法的基礎上,Cignoni提出了基于八叉樹的外存網(wǎng)格模型數(shù)據(jù)結(jié)構(gòu),以邊折疊的方式對網(wǎng)格進行了有效簡化,但其數(shù)據(jù)結(jié)構(gòu)設計與實現(xiàn)較為復雜。Hoppe對網(wǎng)格模型分割為多塊可以一次讀入內(nèi)存的子模型塊,并分別對每個子塊依次進行簡化,對分割邊界處的三角形進行保留,在所有子模型塊簡化結(jié)束后將其重組,并再進行一次簡化以消除拼接處的冗余三角形。該算法在每次子模型合并時都需要額外進行簡化,增加了開銷。馮潔等[8]在網(wǎng)格分割的基礎上,改進了邊權(quán)的計算方法,減小了模型簡化產(chǎn)生的誤差。
本文在上述研究的基礎上,提出一種改進的大型網(wǎng)格簡化算法。算法在QEM算法的基礎上進行了改進,在權(quán)值的計算中加入了頂點法向量夾角與邊長因子,更準確地反映出了模型的細節(jié)特征,并利用邊折疊的優(yōu)勢,引入基于八叉樹的模型劃分策略,在實現(xiàn)了子模型的簡化的前提下,有效避免了子模型重組過程中的額外簡化步驟。
QEM算法是一種邊折疊算法,該算法將邊折疊后生成的頂點到該邊折疊前兩端點相關(guān)平面距離的平方和作為誤差測度,算法計算量小,簡化速度快,簡化質(zhì)量較高,因此本文選擇以該算法為基礎。
一個頂點對(vi,vj)若滿足下列條件之一,則被稱為有效頂點對:
(1)(vi,vj)是一條邊;
(2)vi-vj<t,其中t為閾值。
其中,條件 (2)表明,當兩不相連頂點距離小于閾值t時,這兩個頂點就有可能進行折疊。這樣會改變原有模型的拓撲結(jié)構(gòu),導致模型中兩個不相連的部分連接在一起,或者模型中的孔洞消失。若不希望產(chǎn)生這樣的結(jié)果,可將閾值t設置為0,此時算法即簡化為普通的邊折疊算法。
有效頂點對為邊時的折疊如圖1所示。
為了衡量刪除每條邊的代價,需要定義每個頂點的誤差。對每個頂點v建立一個4×4的誤差矩陣Q,將頂點v=[vx,vy,vz,1]Τ的誤差定義為二次型Δv=vΤQv(誤差矩陣Q的建立方法見下節(jié))。
將刪除有效頂點對(vi,vj),生成新頂點珔v的過程記為(vi,vj)→珔v。則需要為新生成頂點珔v建立一個頂點誤差矩陣珚Q,在這里簡單的令珚Q=Qi+Qj,其中Qi、Qj分別為頂點vi、vj的頂點誤差矩陣。
令p= [a b c d]Τ表示平面
則可將頂點誤差定義為頂點到其關(guān)聯(lián)平面距離的平方和
式 (1)給出的誤差矩陣可以被重寫為
式中:Kp——矩陣
基礎二次誤差Kp用來確定空間中任意點到平面p的平方距離。將所有與頂點v相連的平面計算出Kp,取其和即可得到誤差矩陣Q。
QEM算法在模型的簡化效果上較為理想,簡化速度也很快,但仍存在不足:經(jīng)典QEM算法以網(wǎng)格模型間的幾何誤差作為權(quán)值,并未考慮模型的外觀誤差,因而產(chǎn)生的網(wǎng)格非常均勻,在簡化過程中,原模型的某些細節(jié)特征將會丟失。因此,在經(jīng)典的QEM算法基礎上,引入頂點法向量來減小模型簡化過程中帶來的外觀誤差。
不同于常見頂點法向量的定義[9],在網(wǎng)格模型中,將一個頂點v的頂點法向量定義為
式中:Np——與頂點v相鄰三角面的面法向量,Sp——該三角面的面積,Ap——該三角面在頂點v處夾角的弧度。
引入三角面面積的目的是正確反映出三角面片面積與頂點法向量的關(guān)系:頂點法向量應傾向于面積更大的三角面片;引入三角面片在頂點處夾角的目的是避免在簡化過程中生成過于細長的三角面。通過以上兩處的改進,使得頂點法向量能夠更真實地反映出頂點的彎曲程度。
在確定頂點法向量的計算方式后,就可以確定有效頂點對(vi,vj)中兩點頂點法向量夾角,令
將新生成頂點的誤差定義為
式中:li,j——有效頂點對 (vi,vj)的空間 距離。ci,j取值 范圍為 [-1,1],Nvi和Nvj夾角越大,則ci,j越小,1-ci,j越大,說明有效頂點對(vi,vj)鄰域內(nèi)的幾何變化較大,該頂點對的權(quán)值應較高,應將其刪除優(yōu)先級向后推。
一種常用的網(wǎng)格劃分策略[10]是將原網(wǎng)格模型用一組平面均勻分割為若干子模型,若分割邊界上三角面片的3個頂點不在同一個子網(wǎng)格中,則需要對此三角面片重新進行三角剖分,以使每個子網(wǎng)格中的三角面片都是完整的。由此可見這種策略在簡化過程中增加了面片三角剖分和簡化的步驟,因此需要更多的處理時間。
經(jīng)典網(wǎng)格劃分策略如圖3所示。
本文在以上網(wǎng)格劃分策略的基礎上進行了改進,步驟如下:
(1)找出網(wǎng)格模型中的最大點與最小點,計算出網(wǎng)格中點;
(2)以x軸、y軸和z軸為分割邊界,從中點將網(wǎng)格劃分為8個象限,將每個象限內(nèi)的數(shù)據(jù)存儲為獨立的網(wǎng)格模型,并建立從子網(wǎng)格模型中頂點索引到父網(wǎng)格模型中頂點索引的映射;
(3)依次判斷每個子網(wǎng)格的數(shù)據(jù)量,若大于內(nèi)存容量則轉(zhuǎn)向步驟 (2)繼續(xù)迭代劃分;
(4)處于劃分邊界上的邊和頂點都分別加入相鄰的多個子網(wǎng)格。但對每個子網(wǎng)格,不處理劃分邊界上的邊及子網(wǎng)格外的頂點,邊界上的邊收縮依靠子模型的邊折疊算法完成,處理方法如圖5所示。在每個子網(wǎng)格中的邊折疊后,處在劃分邊界上的邊自然的進行了伸展。
圖5 邊界處理
依靠子模型邊折疊處理劃分邊界上的邊會產(chǎn)生極小的誤差,但是對于較大的網(wǎng)格模型,劃分邊界上的邊所占比例很小,幾乎不會影響最終的簡化效果。
改進算法的流程如下:
(1)按2.2節(jié)網(wǎng)格劃分算法對模型進行迭代劃分,記錄劃分信息;
(2)對每個子網(wǎng)格模型中的每個原始頂點計算頂點誤差矩陣Q;
(3)選出所有的有效頂點對;
(4)對每個有效頂點對(vi,vj)計算出最優(yōu)生成點珔v的坐標,并計算出誤差Δ珔v;
(5)將所有有效頂點對按誤差大小存入小根堆中;
(6)從小根堆堆頂取出誤差最小的有效頂點對,將頂點vi、vj合并為珔v;
(7)根據(jù)與vi、vj相連邊和三角面片信息生成與珔v相連的邊與三角面片,并將與vi、vj相連的邊和三角面片標記為無效。
(8)重新計算與vi、vj相關(guān)的有效頂點對誤差;
(9)重復步驟 (6)至步驟 (8),直到被簡化網(wǎng)格模型滿足精度條件;
(10)根據(jù)原劃分信息將子網(wǎng)格模型進行拼接。
Garland指出,經(jīng)典QEM算法的初始化時間復雜度及簡化時間復雜度均為O(nlogn)。本文算法在初始化及簡化過程中增加了頂點法向量夾角與邊長的計算,這個過程的時間復雜度為O(n),模型劃分與拼接也會消耗一部分時間,這個過程的時間復雜度同樣是O(n),因此本文算法的時間復雜度沒有改變,仍為O(nlogn)。
為驗證本文算法的正確性和有效性,在Intel Core i5-2320 3.00GHz的CPU,4GB內(nèi)存,Windows 7操作系統(tǒng),Visual Studio 2010+OpenGL的計算機上進行實驗。對Horse、Bunny、Dragon和Lucy等4個經(jīng)典模型,分別使用經(jīng)典QEM算法結(jié)合八叉樹分割算法的網(wǎng)格簡化算法,與本文提出的改進QEM算法結(jié)合八叉樹分割算法的網(wǎng)格簡化算法進行對比。部分簡化效果如圖6和圖7所示。
圖6 Bunny模型簡化效果對比
對比發(fā)現(xiàn),對Bunny模型,使用經(jīng)典QEM算法的網(wǎng)格簡化算法在簡化到99%時,兔子左耳部分已經(jīng)缺失,但表面變化比較小的軀干部分卻使用了較多的三角面片,而使用改進QEM算法的網(wǎng)格簡化算法的耳朵部分仍十分完整,軀干部分僅用較少的三角面片就表現(xiàn)的比較準確。對Lucy模型,使用經(jīng)典QEM算法的網(wǎng)格簡化算法在簡化到99%時,模型手部已經(jīng)退化,無法分辨出手指,而使用改進QEM算法的網(wǎng)格簡化算法的手指輪廓十分清晰;當簡化到99.9%時,使用經(jīng)典QEM算法簡化出的模型已經(jīng)出現(xiàn)多處退化,而本文算法仍能保持一個較好外觀。通過觀察,簡化模型在子模型合并邊界上的三角面片分布十分均勻,沒有拼接痕跡。
圖7 Lucy模型簡化效果對比
表1為各經(jīng)典模型使用不同算法簡化后的數(shù)據(jù)??梢钥闯?,本文算法由于具備保留模型細節(jié)特征的優(yōu)點,簡化后模型的Hausdorff距離較使用經(jīng)典QEM算法的簡化算法更小。上文中已提到,本文算法時間復雜度的數(shù)量級與經(jīng)典QEM算法的相同,從表中也可看到,使用本文算法增加的簡化時間是可以接受的。
表1 簡化效果實驗數(shù)據(jù)
本文對國內(nèi)外經(jīng)典網(wǎng)格算法進行研究與分析,在經(jīng)典QEM算法的基礎上,結(jié)合基于八叉樹的網(wǎng)格劃分策略進行了改進,使之能夠適用于大型網(wǎng)格模型。實驗結(jié)果表明,該算法在未改變算法時間復雜度的前提下,能夠更好地保持模型細節(jié)特征,對于大型網(wǎng)格模型簡化的后續(xù)研究與應用具有一定的參考價值。下一步工作是對簡化算法及網(wǎng)格劃分策略進行更深入的研究,并引入分布式計算相關(guān)技術(shù),提高子網(wǎng)格模型的簡化效率。
[1]ZHANG Yaping,XIONG hua,JIANG Xiaohong,et al.A survey of simplification and multiresolution techniques for massive meshes[J].Journal of Computer-Aided Design and Computer Graphics,2010,22 (4):559-568 (in Chinese).[張亞萍,熊華,姜曉紅,等.大型網(wǎng)格模型簡化和多分辨率技術(shù)綜述 [J].計算機輔助設計與圖形學學報,2010,22 (4):559-568.]
[2]GU Yaolin,ZHAO Zhengming,WEI Jiangtao.Multiresolution mesh simplification algorithm with distance-weighted quadric error metric [J].Computer Engineering and Design,2007,28 (8):1966-1968 (in Chinese). [顧耀林,趙爭鳴,魏江濤.距離加權(quán)的二次誤差測度多分辨率網(wǎng)格簡化 [J].計算機工程與設計,2007,28 (8):1966-1968.]
[3]SUN Yongfeng,LIU Xumin.Research on properties in process of triangle mesh simplification [J].Computer Engineering and Design,2008,29 (21):5586-5587 (in Chinese). [孫永鋒,劉旭敏.三角網(wǎng)格簡化過程中屬性問題的研究 [J].計算機工程與設計,2008,29 (21):5586-5587.]
[4]TANG Hui,LUO Limin,ZHOU Zhengdong.A mesh simplification method based on curvature of curves [J].Journal of Image and Graphics,2008,13 (11):2224-2230 (in Chinese).[唐慧,羅立民,周正東.基于曲線曲率的網(wǎng)格簡化方法 [J].中國圖像圖形學學報,2008,13 (11):2224-2230.]
[5]ZHANG Guo,LIU Xumin,GUAN Yong.Edge collapse simplification based on similar curvature [J].Journal of Computer Applications,2009,29 (3):29-731 (in Chinese). [張果,劉旭敏,關(guān)永.一種基于近似曲率的邊折疊簡化算法 [J].計算機應用,2009,29 (3):729-731.]
[6]Tang Zhanhong,Yan Shutian.A New method of mesh simplification algorithm based on QEM [J].Information Technology Journal,2010,9 (2):391-394.
[7]DANG Jianwu,LIU Yunwu, WANG Yangping,et al.Quadadric error metric mesh simplification algorithm based on discrete curvature [J].Journal of Computer Applications,2011,31 (4):1010-1012 (in Chinese). [黨建武,劉云伍,王陽萍,等.基于離散曲率的二次誤差度量網(wǎng)格簡化算法[J].計算機應用,2011,31 (4):1010-1012.]
[8]FENG Jie,ZHA Hongbin.Simplification and view-dependent LOD control for large 3Dmesh models [J].Journal of Computer-Aided Design and Computer Graphics,2006,18 (2):186-193 (in Chinese).[馮潔,查紅彬.大型三維網(wǎng)格模型的簡化及基于視點的LOD控制 [J].計算機輔助設計與圖形學學報,2006,18 (2):186-193.]
[9]WANG Fang,CONG Wenjing,ZHU Haitao.Research of simplification algorithm for modeling based on normal important degree of triangular facets [J].Computer and Digital Engineering,2011,39 (7):6-8 (in Chinese). [王芳,叢文靜,祝海濤.基于頂點法向量重要度的模型簡化算法研究 [J].計算機與數(shù)字工程,2011,39 (7):6-8.]
[10]Shamir A.Segmentation and shape extraction of 3Dboundary meshes [C]//Vienna:Proceedings of Eurographics,2006:137-149.