于 倩,顧宏斌,湯 勇
(南京航空航天大學(xué)民航學(xué)院,江蘇 南京 210016)
機械產(chǎn)品開發(fā)過程一般是先在CAD系統(tǒng)中完成零件的設(shè)計建模,然后在虛擬現(xiàn)實(VR)環(huán)境中進行產(chǎn)品的各種分析,如虛擬裝配、運行過程仿真和人機工程等。這類VR系統(tǒng)的模型信息主要來源于CAD系統(tǒng)輸出的多邊形面片模型。CAD模型采用精確的數(shù)學(xué)形式表達模型的幾何信息,因此該模型轉(zhuǎn)換為多邊形面片模型格式后,幾何外形精確但面片數(shù)量龐大,一般無法直接滿足VR系統(tǒng)實時渲染要求,必須通過一定的簡化算法精簡模型。雖然目前存在很多網(wǎng)格簡化算法[1-2],并已經(jīng)運用到了實際系統(tǒng)中,實現(xiàn)了CAD模型到VR面片模型的轉(zhuǎn)換和應(yīng)用,但復(fù)雜的CAD模型難以滿足實時要求仍是該類系統(tǒng)有待解決的一個難題。由于這些系統(tǒng)中采用的簡化算法主要針對的是通用模型(無規(guī)則外形),如通過掃描設(shè)備得到的點云模型,因此并不能有效地簡化CAD模型。應(yīng)用這些算法可能會破壞CAD模型上的邊界特征(即幾何設(shè)計特性),使得模型變得不可識別,易產(chǎn)生狹長的病態(tài)三角形(影響光照計算,降低視覺效果)。
針對CAD模型數(shù)據(jù)轉(zhuǎn)換存在的上述問題,提出并實現(xiàn)了一種新的基于分類的自適應(yīng)CAD模型簡化和轉(zhuǎn)換方法,試圖將各類復(fù)雜CAD模型根據(jù)需要轉(zhuǎn)換為多分辨率(LOD)的VR模型,并在保證模型幾何外形和視覺效果的前提下滿足VR系統(tǒng)中實時渲染的需求。
一般的CAD模型轉(zhuǎn)換為虛擬現(xiàn)實模型是通過內(nèi)嵌于CAD系統(tǒng)的數(shù)據(jù)導(dǎo)出接口將模型數(shù)據(jù)轉(zhuǎn)換為中性文件或其他幾何模型。分析發(fā)現(xiàn)CAD系統(tǒng)數(shù)據(jù)接口是按照一定規(guī)則導(dǎo)出幾何數(shù)據(jù)的。比如CATIA導(dǎo)出中性文件模型時,參數(shù)化的實體模型面片化后,三角面的排列順序有規(guī)律,即滿足同一參數(shù)方程的面片按線性順序排列,且其三角化的三角形分布和數(shù)量都一定。比如對一球面,其直徑和球心的變化不會影響三角形的分布和數(shù)量。根據(jù)這個特點,對網(wǎng)格數(shù)據(jù)進行分類,根據(jù)不同的類型對其采用不同的多分辨率簡化,簡化完成后將幾何數(shù)據(jù)寫成VR模型標準格式。CAD模型簡化與轉(zhuǎn)換原理圖如圖1所示。
圖1 CAD模型簡化與轉(zhuǎn)換原理圖
商用 CAD軟件,如 CATIA,Pro/ENGINEER等,都能通過內(nèi)置的數(shù)據(jù)導(dǎo)出接口將其導(dǎo)成stl,wrl等通用的中性文件。VRML是一個文本文件,是描述虛擬環(huán)境場景的一種標準。它的格式非常簡單易于解析,包含了所有完整的幾何運動信息及紋理映射等。一個典型的CAD模型是用點、線、面來描述的,其中每個面集由一組相鄰的三角面組成。按照文獻[3]中的方法解析wrl文件可得到網(wǎng)格數(shù)據(jù)。
為了精確地找到CAD系統(tǒng)導(dǎo)出的網(wǎng)格數(shù)據(jù)分類規(guī)則,首先針對CATIA軟件中的基本設(shè)計工具進行實驗和匯總分析,實驗結(jié)果如圖2所示。
圖2 常用的設(shè)計工具方法匯總表(其中邊界線由黑色注明)
通過實驗分析匯總,根據(jù)點和邊界線的關(guān)系,可將面分為兩大類:①面上的點都是邊界線上的點;②面上的點不全是邊界線上的點。
第1類的面,讀取到的點集恰好都落在其相對應(yīng)的邊界線上,三角面片的點取的都是邊界線上的點。這類型的面,比較簡單、平緩,在進行下一步簡化時,只需簡化邊界線上的點即可[4-5];
第2類的面,讀取到的點集并不全落在其相對應(yīng)的邊界線上,三角面片的點一部分取的是邊界線上的點,一部分卻是面內(nèi)部區(qū)域中的點。這類型的面比較復(fù)雜,三角面片的數(shù)量也比較多,相對應(yīng)的簡化算法比第1類的面要復(fù)雜[6-7]。
第1類的面又分為有孔面和無孔面,這是由于在設(shè)計CAD模型時,用凹槽、孔等設(shè)計工具所產(chǎn)生的,簡化時應(yīng)進行針對性的簡化。
第2類的面主要是一些復(fù)雜的曲面,如球面、樣條曲面和自由曲面等,根據(jù)設(shè)計工具以及網(wǎng)格數(shù)據(jù)的特點,又把第2類的面分為旋轉(zhuǎn)面和自由曲面,在CAD系統(tǒng)中有大量的旋轉(zhuǎn)設(shè)計工具,如旋轉(zhuǎn)體,旋轉(zhuǎn)槽等,同時樣條曲線也應(yīng)用較多。在此基礎(chǔ)上,根據(jù)各種面的特點,設(shè)計一定的算法準則進一步細分網(wǎng)格模型,在讀取到中性文件的幾何信息后,根據(jù)分類法則,對模型的各個面進行分類,如表1 所示[8]。
一個典型的CAD模型是由大量的參數(shù)曲面組成的,而這些參數(shù)曲面是由幾何設(shè)計特性決定的,當用戶看CAD模型時,一般感興趣的是其幾何設(shè)計特性。因此這些幾何設(shè)計特性應(yīng)該在可視化后被保存,目前存在的簡化算法在進行簡化時,并沒有考慮到CAD模型的幾何設(shè)計特性,因而當這些算法刪除幾何元素如邊、點、面時,很可能刪掉了一些對設(shè)計特性來說很重要的幾何元素。
2.3.1 第1類網(wǎng)格簡化
第1類的面比較平坦,如平面、柱面等。在原始模型中,其面上的點全部都是其對應(yīng)的邊界線上的點,因此只需要對邊界線上的點進行簡化即可。算法實現(xiàn)如下:
(1)首先初始化簡化因子N。為了避免生成過于狹長的三角形,影響光照效果,N滿足:N=i,min{};di為第i點與第一個點的距離,do為與其相對應(yīng)的邊界線l2的距離。i=1,2,…,n-2(n為邊界線點的個數(shù),點的索引從0開始);
(2)If i mod N=0,i=1,2,…,n-2,則 i作為合并點;
表1 網(wǎng)格分類表
(3)循環(huán),直到線上所有點遍歷結(jié)束。把起始點、合并點及結(jié)束點存入到新模型中;
(4)邊界線通過新模型的點相互連接。
有孔面和無孔面的區(qū)別在于邊界線連接方式,前者內(nèi)部邊界線與外部邊界線相連接;后者外部邊界線相互連接[9],如圖3所示。
圖3 兩種連接方式
2.3.2 第2類網(wǎng)格簡化
對于第2類的面,面中的三角形構(gòu)成較復(fù)雜,除了邊界線上的點外,面的內(nèi)部仍存在大量的點和三角形。因而僅簡化邊界線上的點,并不能達到好的簡化效果。
自由曲面的簡化算法。當用三角形網(wǎng)格描述物體的表面時,根據(jù)曲率可以較好地區(qū)分表面的一些特征,進行簡化時,在高曲率處應(yīng)保留盡量多的點。根據(jù)這個規(guī)律,從邊界線開始,對原始網(wǎng)格模型進行由右向左,自下至上的逐層簡化,并通過自適應(yīng)細分把細節(jié)信息增加到簡化模型中,從而得到較細的LOD表示。自由曲面的簡化算法流程圖如圖4所示。
圖4 自由曲面的簡化算法流程圖
具體的簡化步驟如下:
(1)設(shè)定簡化因子N,確定曲面的邊界線l2、l3和l4。
(2)在邊界線l2、l3上,分別取第一個點,最后一個點,及第[n/N]×i個點,i=1,2,…,N-1,把l2、l3分為N段。其中[n/N]為邊界線點的個數(shù)與簡化因子N商的整數(shù)。
(3)在每段分段區(qū)間內(nèi),依次取相鄰的3個點 Ni(xi,yi,zi)、Ni+1(xi+1,yi+1,zi+1)、Ni+2(xi+2,yi+2,zi+2),如果 θ=max{arc cos(NiNi+1·Ni+1Ni+2/|NiNi+1|·|Ni+1Ni+2|)},則把第 Ni+1點作為新的分段點。
(4)從線l2的點r2開始,找到距離r2最近的點 Nbegin,Nbegin∈Ni{Node},Ni{Node}為曲面內(nèi)部點的集合。
由于點都是線性存儲的,且縱橫線上的點都是按照一致的順序排列,因此從Nbegin開始,設(shè)定相鄰3個點的兩兩間距為d、d',如果 d'>>d,則認定第2個點為該線的最后一個點 Nend。在[Nbegin,Nend]中找到離b2最近的點 new。
(5)依次找到第 b3,b4,…,bn-1列對應(yīng)的點new及在邊界線上離Nend最近的l2上的點。
(6)循環(huán),直到線l2上所有的點遍歷結(jié)束。
(7)把點new及三角形存入到新模型中,結(jié)束。
旋轉(zhuǎn)曲面的簡化。旋轉(zhuǎn)體與軸線相垂直的平面相交,得到的橫截面是一個半徑隨軸線位置改變的圓,同時旋轉(zhuǎn)曲面的兩條邊界線是關(guān)于軸線對稱的,由邊界線上的兩個對稱點可以得到該橫截圓的半徑和圓心坐標,從而得到該橫截圓的表達式[10]。根據(jù)這個規(guī)律,旋轉(zhuǎn)曲面的簡化算法可以表述為:
(1)根據(jù)自由曲面簡化算法對兩條邊界線l1、l2進行分段。
(2)如果l1、l2的第一個分段點不相等,則從第一個分段點開始,否則從第2個分段點開始,得到每層橫截圓的表達式,在該層均勻取N個點。
(3)循環(huán),直到處理完最后一個分段點。
(4)把點new及三角形存入到新模型中,結(jié)束。
雖然已將網(wǎng)格數(shù)據(jù)進行了簡化,而要將這些數(shù)據(jù)運用到虛擬現(xiàn)實系統(tǒng)中,必須將其轉(zhuǎn)換成虛擬現(xiàn)實格式。筆者將其轉(zhuǎn)換成OpenFlight格式。OpenFlight格式是美國MultiGen Paradigm公司開發(fā)的一種場景描述數(shù)據(jù)庫規(guī)范,是邏輯化的有層次的視景描述數(shù)據(jù)庫,其開放的連接及簡易交互式的操作與細節(jié)等級等先進的實時功能極大地提高了實時系統(tǒng)的性能,已經(jīng)成為虛擬現(xiàn)實領(lǐng)域的工業(yè)標準格式。
一個基本的完整OpenFlight文件創(chuàng)建讀寫算法流程如圖5所示,主要包括程序初始化、創(chuàng)建數(shù)據(jù)庫頭節(jié)點、創(chuàng)建組節(jié)點和其他特殊節(jié)點、繪制幾何節(jié)點、建立節(jié)點間的層級關(guān)系、寫入并關(guān)閉數(shù)據(jù)庫和程序退出等步驟。
圖5 OpenFlight模型數(shù)據(jù)庫處理流程
在Pentium4、2.93 GHz、1 G內(nèi)存的PC機上,采用CAD軟件(CATIA)、Visual C++和.NET編寫了CAD模型的解析與簡化程序,圖6和圖7是一個簡單的自由曲面與綜合體的簡化實例。
圖6 簡化前后的自由曲面
圖7 簡化前后的綜合體
圖8(a)為一個含有11956個三角形的大齒輪模型,圖8(b)為基于二次誤差方法的簡化結(jié)果。圖8(c)為筆者算法的簡化結(jié)果。
圖8 三角形大齒輪原始和簡化后的模型
從上述CAD模型經(jīng)過筆者的算法簡化和轉(zhuǎn)換后的試驗結(jié)果可以看出:①模型幾何外形和視覺效果基本無變化,在保證外形輪廓基本無損失的條件下,復(fù)雜CAD模型面片數(shù)均可簡化90%左右,三角形的數(shù)量大大減少。②基于二次誤差的簡化方法雖然也較好地保持了幾何外形,但是簡化后的三角形仍然很密集,狹長;筆者的方法無病態(tài)、狹長三角形,分布基本是規(guī)則的三角形。③根據(jù)設(shè)定的簡化因子,可以進行不同簡化率下的模型簡化,且在曲率大的區(qū)域可以進行自適應(yīng)細分。④對于大型模型,簡化后的模型實時渲染幀率也能大幅提高。
針對虛擬現(xiàn)實系統(tǒng)中CAD模型需求,提出并實現(xiàn)了一種面向虛擬現(xiàn)實的CAD模型的分類簡化和轉(zhuǎn)換方法。實驗結(jié)果表明該方法切實可行,簡化后的模型在外形上較好地保持了原始模型的幾何特征,并生成了多層次細節(jié)模型,也同時滿足了視景系統(tǒng)的實時渲染要求,可運用于實際系統(tǒng)中。
[1]JEZEMIK A G H.A solution to integrate computeraided design(CAD)and virtual reality(VR)databases in design and manufacturing processes[J].International Journal of Advanced Manufacturing Technology,2003(22):768-774.
[2]萬畢樂,劉檢華,寧汝新,等.面向虛擬裝配的CAD模型轉(zhuǎn)換接口的研究與實現(xiàn)[J].系統(tǒng)仿真學(xué)報,2006,18(2):391-394.
[3]彭云云.利用CAD數(shù)據(jù)的視景仿真三維建模及其模型簡化技術(shù)研究[D].南京:南京航空航天大學(xué)圖書館,2009.
[4]GRAF H,BRUNETTI G,STORK A,et al.A methodology supporting the preparation of 3D-CAD data for design reviews in VR[C]//Design2002.Dubrovnik:[s.n.],2002:489-495.
[5]陶志良,潘志庚,石教英.基于能量評估的網(wǎng)格簡化算法及其應(yīng)用[J].軟件學(xué)報,1997,8(12):881-888.
[6]高鵬東,劉曉利,劉則毅.基于尖特征度的邊折疊簡化算法[J].軟件學(xué)報,2005,16(5):669-675.
[7]RICHARD S,WRITE J.OpenGL超級寶典[M].2版.張琪,付飛,譯.北京:人民郵電出版社,2001:54-88.
[8]GROSS H,GATTI R,STAADT O.Fast multire solution surface meshing[C]//Proceedings of the IEEE VIsualization'95.Atlanta GA:[s.n.],1995:135-142.
[9]王俊東,羅學(xué)科,劉玉明.虛擬現(xiàn)實技術(shù)在科技奧運中的應(yīng)用[J].北方工業(yè)大學(xué)學(xué)報,2005,17(3):15-18.
[10]DEROSE T,LOUNSBERY M,WARREN J.Multiresolution analysis for surfaces of arbitrary topological type[J].ACM Transactions on Graphics,1997,16(1):34-73.