鄧燦燦,盛步云,付高財
(1.武漢理工大學(xué)機電工程學(xué)院,武漢 430070;2.數(shù)字制造湖北省重點實驗室,武漢 430070)
隨著信息化技術(shù)和計算機圖形學(xué)的發(fā)展,三維設(shè)計模式逐漸取代部分二維圖形的應(yīng)用場景,相對于二維圖形,三維圖形具有更強的直觀性和鑒賞性,更符合大眾的認知能力。但是,類似于裝配體這種大體量三維模型,在網(wǎng)頁上進行實時渲染會出現(xiàn)模型數(shù)據(jù)量過大,加載速度慢,模型特征丟失等問題,必須采取一系列措施對該裝配體模型進行輕量化,盡可能多地剔除在實時渲染過程中不重要的零件和特征,減少渲染系統(tǒng)中需要處理的圖元數(shù)量,在保障模型精度的前提下提高渲染幀率,達到對模型實時渲染的目的。因此,模型簡化的同時如何更好地保留模型的外觀特征是本文研究的重點。
近年來,國內(nèi)外提出了許多對模型進行輕量化的方法,根據(jù)模型類別的不同,可分為實體模型的簡化和網(wǎng)格模型的簡化兩大類。由于實體模型在簡化后很難較好保持原模型的幾何結(jié)構(gòu)和拓撲結(jié)構(gòu),為此本文主要針對的是網(wǎng)格模型的簡化。李建軍等提出了一種基于特征的半邊折疊層次細節(jié)模型簡化算法,解決了LOD 算法對模型特征處理不足的問題。柳偉等提出了一套面向裝配的復(fù)雜模型輕量化算法,以零部件抑制、基于特征縫合的模型表面處理和模型整體抽殼等技術(shù)為手段,實現(xiàn)了復(fù)雜裝配模型幾何與結(jié)構(gòu)的簡化,但簡化后模型的外觀不能很好地保持。葛超群利用Pro/E 提供的二次開發(fā)接口,采用零部件特征刪除以及零部件融合技術(shù)來減少裝配體的數(shù)據(jù)量,但得到的模型僅有特征標識,無法進行特征操作。董健等提出基于復(fù)雜裝配體特征抑制的輕量化方法,抑制干擾裝配的無關(guān)零部件,并通過特征標識號識別微小特征。殷明強等提出了保持外觀的CAD 模型輕量化技術(shù),在保持模型外觀不變的前提下剔除了裝配體中隱藏的零件和特征,但用戶無法獲取到裝配模型完整的裝配關(guān)系和模型內(nèi)部信息。以上研究都沒有給出一個有效的算法在減少模型數(shù)據(jù)的同時,有效保留模型的外觀特征。
基于上述研究成果存在的問題,本文根據(jù)裝配體的特點對其輕量化技術(shù)進行了深入研究,并在此基礎(chǔ)上提出了一種保持模型外觀的輕量化方法,通過該方法來對大裝配體中隱藏的零件和不重要特征進行識別和簡化,從而避免不可見零件和特征進入渲染管線,減少渲染的工作量。首先設(shè)計算法識別和剔除隱藏的零件和特征,然后通過特征之間的裝配關(guān)系來對裝配體外部的細小零件和特征進行抑制,從而完成整個裝配模型輕量化流程,保持裝配模型外觀輕量化的總體框架如圖1所示。
圖1 基于外觀特征保留的裝配模型輕量化總體框架
大規(guī)模裝配模型是由很多個小裝配體和零部件組成,每個零件又包含無數(shù)個特征,其中具有相互配合的幾何元素及元素之間裝配關(guān)系被稱為裝配特征,是用來描述子裝配體、零件和裝配相關(guān)的體、面的幾何關(guān)系及裝配工藝的信息集合。如果直接將其在Web 端進行渲染優(yōu)化,由于數(shù)據(jù)量過于龐大,遠遠超出了普通PC 能夠處理的數(shù)據(jù)量,根本達不到實時渲染的要求,所以必須采取一定措施對大裝配體模型內(nèi)部隱藏零件進行簡化。
裝配體所包含的零件,有些是被隱藏的,有些是可見的。而每個零件又含有多個特征,在簡化之前需要把這些隱藏零件和特征識別出來。首先遍歷裝配體的所有零件,利用光線追蹤算法選取多個視點從不同方向?qū)δP瓦M行光線投射來與面片進行求交,每次投射都沿著一根光線,然后記錄最近的交點,并通過返回的結(jié)果來判定光線是否與面片相交,從而判別出面片的可見性。由于面片的數(shù)量過于龐大,如果每相交一次都記錄一次交點的信息,那么計算量將非常大,所以在光線與面片求交時必須進行優(yōu)化。為了加速光線追蹤的渲染性能,本文首先給裝配體封裝一個大包圍盒,遍歷大裝配體模型的所有零件,然后給每個零件再封裝一個包圍球,視點選擇在包圍盒的八個頂點上,最后以包圍盒的八個頂點作為視點向包圍盒中心發(fā)射射線。先判定射線與包圍球是否相交,如果不相交說明一定不會和包圍球里面的物體相交,則不進行后續(xù)判斷;如果相交,再繼續(xù)判斷是否和它的子節(jié)點相交,一直遞歸下去直到光線打到葉子節(jié)點,如果和葉子節(jié)點有交點,那么和葉子節(jié)點的所有物體都相交,圖2為3種不同的空間劃分。通過該方法確實可以加快射線與物體求交的速度,但同時存在缺陷,因為同一個物體可能與多個節(jié)點相交,即存在于不同的節(jié)點上。因此本文利用BVH 技術(shù)來進行物體劃分,來避免一個物體出現(xiàn)在多個葉子節(jié)點里,并通過配合光線追蹤技術(shù),從多個視點對裝配體進行投射來對面片進行求交,從而完成面片的識別。
圖2 空間數(shù)據(jù)結(jié)構(gòu)圖
通過判斷出模型中面片的可見性來對隱藏的零件和特征進行簡化,對于隱藏零件的狀態(tài)可以分為以下兩種情況:①零件部分被隱藏;②零件完全被隱藏。對于零件部分被隱藏的情況,由于特征之間存在依賴關(guān)系,在某些隱藏零件特征之外還可能存在可見特征,針對這類零件,如果我們把其中的一個隱藏特征剔除掉會影響到模型的可見子特征。對于零件完全被隱藏的情況,因為該零件的所有特征信息全部被隱藏了,不存在可見特征,故可以利用NX 系統(tǒng)的二次開發(fā)接口來對完全隱藏的零件進行剔除。
如圖3 所示,是該裝配模型的依賴特征,也就是其他大部分零件的特征都需要與該特征建立依賴關(guān)系,類似于網(wǎng)格圖形3(a)中的公共頂點一樣,通過它作為橋梁來與其他三角網(wǎng)格之間建立依賴關(guān)系。每一個三角形代表一個零件,其中為可見特征,其余、、、、均為隱藏特征,與相連的三角形有△和△,該零件特征之間存在依賴關(guān)系,而其余零件特征都為隱藏特征且不存在依賴關(guān)系,故可直接剔除。
圖3 裝配模型特征依賴圖
這些隱藏的零件和特征被刪除后,就可以得到簡化后的三維裝配模型。本文中特征的刪除可以通過調(diào)用CAD 系統(tǒng)提供的二次開發(fā)接口NX OPEN 中UF_OBJ_delete_object()函數(shù)來進行刪除。利用本文的隱藏零件簡化算法得到的結(jié)果如圖4(b)所示,從減速器剖切圖可以看出模型內(nèi)部的一些隱藏零件和特征得到了簡化,但同時也可以看出模型外部也有一些不重要的零件和特征被保留了下來,本文隱藏零件簡化算法流程如圖5所示。
圖4 二級減速器剖切圖
圖5 裝配模型隱藏零件的簡化流程圖
模型表面一些不影響模型外觀的不重要零件和特征,在輕量化的過程中可以將其識別出來,在保證模型主外觀不變的前提下,通過設(shè)計算法流程并結(jié)合CAD 系統(tǒng)提供的接口將其剔除,從而減少模型的數(shù)據(jù)量。
圖6 裝配特征關(guān)系圖
圖7 不重要零件抑制效果圖
對不重要零件進行抑制后,模型的外部還有許多不重要的隱藏特征,雖然這些特征所在零件含有裝配接口,但該零件有部分特征與其他零件的特征之間不存在依賴關(guān)系,可以直接剔除掉。
利用LOD 技術(shù)將裝配體模型分成不同的細節(jié)層次,從高到低依次遍歷并對模型進行等級劃分,等級越高,特征信息就越多,將裝配模型放入根節(jié)點包圍盒中,然后從根節(jié)點開始進行BVH 物體劃分,如果是小裝配體則繼續(xù)進行BVH 劃分,直到零部件被劃分到每個葉子節(jié)點上,給裝配體結(jié)構(gòu)樹遍歷后的每個節(jié)點都封裝一個包圍盒。依據(jù)裝配樹形圖的層次結(jié)構(gòu)特征來設(shè)計非依賴特征抑制的簡化過程如下:
(1)從頂層元件節(jié)點依次往下遞歸遍歷,直到遍歷到葉子節(jié)點,獲取葉子節(jié)點的所有零件特征;
(2)獲取到每級遍歷后葉子節(jié)點內(nèi)物體的特征,給每個零件的特征進行編號并分配一種顏色,通過顏色來區(qū)分不同零件所具有的特征;
(3)選擇包圍盒的八個頂點作為視點,視點方向指向包圍盒的中心,分別從所選擇的視點位置對每個節(jié)點所在包圍盒依次進行光線投射,返回投射的結(jié)果并讀取幀緩沖區(qū)中每個特征的像素值;
(4)觀察該特征所在的零件是否含有除了本身所具有的顏色像素外其他顏色的像素,如果有,則說明該特征與其他零件特征具有依賴關(guān)系,從圖8 可以看出C、D 零件共用了特征、,而該零件的其他特征如、、、等與其他零件特征不具有依賴關(guān)系,可以直接被剔除;如果沒有,則轉(zhuǎn)向(3),改變視點的位置對模型節(jié)點繼續(xù)重復(fù)以下步驟;
圖8 裝配體結(jié)構(gòu)關(guān)系樹形圖
通過以上特征簡化流程實現(xiàn)了非依賴特征的抑制。保持外觀特征的模型輕量化流程如圖9所示。
圖9 保持外觀特征的模型輕量化流程圖
按照本文提出的保持裝配模型外觀的輕量化方法,以機械中的裝配模型為簡化對象,來對本文中的簡化結(jié)果進行分析。圖10(a)是KR301焊接機器人網(wǎng)格模型,圖10(b)是采用本文算法得到的效果圖,對比可知,在使用本文算法后該模型的零件數(shù)由128 降到52,面片數(shù)由4880479 減少為4012411,剔除掉裝配模型隱藏的大量零件的同時,模型重要特征也得到了較好的保留,外觀幾乎沒變。
圖10 本文算法簡化效果圖
本文算法除了應(yīng)用于工業(yè)中的KR301 焊接機器人模型,M442Z 小塑料導(dǎo)柱注塑模外,也應(yīng)用到了其他大型裝配模型,例如六軸工業(yè)機器人模型、五軸CNC 轉(zhuǎn)臺、減速器等。在不改變模型外觀的條件下,對這些工業(yè)模型進行簡化,如表1 所示。本文定義的物體簡化率=(1-/)×100%,其中表示簡化后模型面片數(shù),表示簡化前模型面片數(shù)。
表1 裝配體模型簡化結(jié)果比較
由表1 可知,經(jīng)過隱藏零件的識別和簡化,裝配模型的零部件數(shù)量和三角面片的數(shù)量都得到了大幅度減少,不同裝配體模型簡化后的效果也有差別,這主要與裝配體的形狀、復(fù)雜度以及細微零件數(shù)量有關(guān)。在本文實驗中被剔除的零件大多為模型外部體積較小的零件(螺栓螺母)或者是裝配體內(nèi)部完全隱藏的零件,因此剔除掉這些零件并不會影響模型的外觀。從圖10(a)和圖10(b)以及10(c)和10(d)的對比可以看出,裝配體外部一些可見細小零件被剔除,是因為這些零件對裝配模型的外觀并不會產(chǎn)生影響,故可以將其剔除。
本文提出了一種保持裝配模型外觀的輕量化方法,通過識別出面片的可見性,來對裝配模型的隱藏零件和可見零件進行簡化。實驗證明,該算法在對復(fù)雜裝配模型進行簡化時,可以很好地保留模型的外觀特征,簡化效果也很明顯。
本文主要針對單個裝配體模型來進行簡化,因此所選擇的視點都處于模型外部,而對于復(fù)雜的裝配場景來說,由于它是由多個裝配模型組裝而成,因此內(nèi)部也包含了許多子裝配體,在渲染過程中也需要展示出來,故可以在場景內(nèi)部設(shè)置多個視點并結(jié)合空間數(shù)據(jù)結(jié)構(gòu)來加快計算,該問題值得后續(xù)進一步研究。