羅開云 房 鵬 何永清 蔣先藝 吳 恒
(①東方地球物理公司采集技術(shù)中心,河北涿州 072751; ②成都理工大學(xué)信息科學(xué)與技術(shù)學(xué)院,四川成都 610059)
地震數(shù)值正演模擬廣泛應(yīng)用于基于模型的射線追蹤、覆蓋次數(shù)統(tǒng)計(jì)和觀測(cè)系統(tǒng)照明等方面[1]。然而三維復(fù)雜地質(zhì)模型的建立是正演的關(guān)鍵步驟,復(fù)雜模型的塊體構(gòu)建難度大、耗時(shí)長(zhǎng),特別是在采集設(shè)計(jì)領(lǐng)域,由于工期短、時(shí)間緊,設(shè)計(jì)人員迫切希望在短時(shí)間內(nèi)構(gòu)建符合設(shè)計(jì)區(qū)域?qū)嶋H地質(zhì)情況的三維模型。
目前采集設(shè)計(jì)領(lǐng)域中正演模擬經(jīng)常使用的射線和射線束方法[2],需要設(shè)計(jì)三維塊狀模型,三維塊狀模型的構(gòu)建是以具有近似地質(zhì)屬性的層塊作為塊體構(gòu)建的基本單元。首先利用曲面構(gòu)建方法建立地質(zhì)層位和斷層曲面,再利用塊體追蹤技術(shù)提取由層位和斷層曲面片所形成的封閉地質(zhì)塊體[3]。塊體構(gòu)建所得到的塊狀地質(zhì)模型通常可以用于射線、射線束類正演模擬[4],也可以通過離散化算法轉(zhuǎn)換為規(guī)則或者非規(guī)則網(wǎng)格模型,支持有限差分或有限元類方法[5]。
三維塊體構(gòu)建算法的歷史可以追溯到20世紀(jì)80年代,Warburton[6]提出一種基于無限大非連續(xù)面識(shí)別塊體的算法; Lin等[7]提出將拓?fù)涓拍钜雺K體構(gòu)建中; Lu[8]將方向邊和方向環(huán)的概念引入塊體構(gòu)建過程; 蔣先藝等[9]提出一種封閉模型描述方法,將具有相同屬性的地質(zhì)層面聯(lián)系在一起,并且給出了一種基于三角形的塊體追蹤算法,從而得出以地質(zhì)屬性為基礎(chǔ)的塊體; 侯衛(wèi)生等[10]通過對(duì)Lu等[7-8]提出的方法進(jìn)行改進(jìn),可以在曲面上進(jìn)行搜索得出塊體模型; 楊洋等[11]簡(jiǎn)化并改進(jìn)了傳統(tǒng)的線框架模型,提出了線框架拓?fù)淠P停铀俨⒑?jiǎn)化了拓?fù)渌阉鬟^程。
目前三維地質(zhì)塊體構(gòu)建算法已經(jīng)相當(dāng)成熟,在塊體追蹤方面從簡(jiǎn)單的逐三角形追蹤發(fā)展為基于線框拓?fù)涞淖粉櫍瑘?zhí)行效率和容錯(cuò)性都有很大提高[12]。但本質(zhì)上,這些方法都是基于模型交線拓?fù)浣Y(jié)構(gòu)進(jìn)行塊體追蹤,對(duì)準(zhǔn)確的地質(zhì)數(shù)據(jù)拓?fù)浣Y(jié)構(gòu)依賴性較強(qiáng)[13]。因而,在進(jìn)行塊體構(gòu)建之前需進(jìn)行多次曲面求交或裁剪等操作,以保證地質(zhì)模型拓?fù)潢P(guān)系的正確性。較復(fù)雜地質(zhì)模型存在三角網(wǎng)的尺寸差異過大、密度不均勻、浮點(diǎn)誤差等現(xiàn)象,會(huì)導(dǎo)致曲面間的拓?fù)潢P(guān)系存在少量錯(cuò)誤,使傳統(tǒng)的拓?fù)湟恢滦詨K體構(gòu)建方法失效。然而少量的拓?fù)溴e(cuò)誤并不會(huì)影響模型整體的正確性,如果能構(gòu)建出結(jié)構(gòu)正確的塊體模型,則少量的拓?fù)溴e(cuò)誤和塊體局部漏縫并不會(huì)對(duì)射線或模型離散化造成明顯的影響,可以繼續(xù)用于正演數(shù)值模擬[14]。
本文提出一種非拓?fù)湟恢碌娜S地質(zhì)塊體構(gòu)建技術(shù)。該方法模擬人眼視覺觀察,完全不依賴交線拓?fù)湫畔ⅲ瑑H依靠曲面自身形態(tài)提取塊體三角網(wǎng),在不對(duì)原曲面進(jìn)行求交或裁剪等操作的情況下構(gòu)建三維地質(zhì)塊體。
以交線拓?fù)浣Y(jié)構(gòu)為基礎(chǔ)的傳統(tǒng)塊體構(gòu)建算法根據(jù)三角網(wǎng)鄰接關(guān)系建立模型的拓?fù)潢P(guān)系圖,并在此基礎(chǔ)上進(jìn)行廣度或深度遍歷算法進(jìn)行塊體外邊界三角網(wǎng)的追蹤[15]。因此拓?fù)潢P(guān)系的正確性決定著此方法的成功率。然而在面對(duì)有少量拓?fù)鋯栴}的模型時(shí),通常會(huì)從整體把握理解模型結(jié)構(gòu),忽略局部拓?fù)溴e(cuò)誤。基于此思路,本文提出非拓?fù)湟恢滦詨K體構(gòu)建算法,模擬人類觀察和處理模型的方式,即首先從整體上確定塊體的大致范圍,再利用局部觀察的方式確定塊體的邊界三角網(wǎng)(圖1)。
算法首先讀取模型的曲面三角網(wǎng),確定模型空間范圍。如圖2a所示,假如模型尺寸為7500m(x)×6400m(y)×7400m(z), 包含3條斷層、 15個(gè)層位曲面。

圖1 非拓?fù)湟恢聣K體構(gòu)建算法流程
然后對(duì)當(dāng)前的地質(zhì)模型進(jìn)行網(wǎng)格劃分。如圖2b所示,以任一不包含三角形的網(wǎng)格單元作為起始種子(圖2b中紅點(diǎn)所標(biāo)明的網(wǎng)格單元),使用漫水填充法[16]對(duì)網(wǎng)格單元模型進(jìn)行邊界網(wǎng)格單元追蹤,得到近似表示當(dāng)前地質(zhì)塊體的網(wǎng)格塊體——包含塊體界面三角形的網(wǎng)格單元集合(圖2c)。
最后以基于視覺觀察方式的三角形選取算法逐個(gè)對(duì)求得的網(wǎng)格塊體選取對(duì)應(yīng)外表面的三角形,如圖2d所示。
非拓?fù)湟恢滦詨K體構(gòu)建算法首先要確定塊體的基本形態(tài)。為此本文利用漫水填充法追蹤塊體所包含的網(wǎng)格單元集合。漫水法是圖形學(xué)中常用的一種區(qū)域填充法,實(shí)質(zhì)上是一種廣度優(yōu)先遍歷的種子填充法,適用于對(duì)內(nèi)定義區(qū)域的填充。圖形學(xué)中的內(nèi)定義區(qū)域,是指區(qū)域內(nèi)部的像素具有類似或相同的屬性,而區(qū)域外的所有像素具有不同或差別較大的屬性。該算法從內(nèi)區(qū)域中的某個(gè)像素出發(fā)(通常稱起始像素為種子),利用廣度優(yōu)先搜索完成內(nèi)區(qū)域填充。本文對(duì)該方法進(jìn)行改造,用于三維空間中地質(zhì)塊體網(wǎng)格單元集合的追蹤,具體步驟如下:
(1)從內(nèi)存中取得起始種子網(wǎng)格單元,加入到遍歷隊(duì)列;
(2)若遍歷隊(duì)列為空,則返回步驟(1),否則從遍歷隊(duì)列中取出一個(gè)網(wǎng)格單元進(jìn)行步驟(3);
(3)若步驟(2)得到的網(wǎng)格單元已被訪問過,則重新進(jìn)行步驟(2),否則進(jìn)行步驟(4);
(4)找到所述網(wǎng)格單元周圍的六個(gè)鄰接網(wǎng)格單元,對(duì)每一個(gè)鄰接網(wǎng)格單元,更新所述鄰接網(wǎng)格體的投影方向;
(5)對(duì)所述鄰接網(wǎng)格單元,若其中不含三角形,則將其加入到遍歷列表中,并將其標(biāo)記為“已訪問”,并返回步驟(2); 否則,將其加入到當(dāng)前塊體的邊界區(qū)域網(wǎng)格塊體隊(duì)列中,并進(jìn)行步驟(2),直至遍歷所有網(wǎng)格單元。
通過漫水追蹤算法獲取了地質(zhì)塊體的網(wǎng)格單元集合,為精確提取地質(zhì)塊體外表面三角形做好了準(zhǔn)備。非拓?fù)湟恢碌膲K體構(gòu)建算法的最終目標(biāo)是提取地質(zhì)塊體的外邊界三角形,構(gòu)造地質(zhì)塊體表面三角網(wǎng)。為此需要遍歷塊體的網(wǎng)格單元,從含有三角形的邊界網(wǎng)格單元中找出屬于地質(zhì)塊體的三角形,并將它們組合起來,構(gòu)造塊體外表面三角網(wǎng)。在具體實(shí)現(xiàn)上,為達(dá)到“篩選出被觀察到的三角形”這一目的,算法使用了圖形庫OpenGL對(duì)各個(gè)網(wǎng)格體進(jìn)行渲染繪制,選取三角形單元,并采用平行投影的方式繪制渲染網(wǎng)格體相關(guān)三角形[17]。將渲染繪制的結(jié)果輸出到OpenGL的幀緩存對(duì)象(FBO)中。FBO是OpenGL內(nèi)置的對(duì)象之一,利用該機(jī)制,編碼人員可以直接將繪制結(jié)果輸出到內(nèi)存中而不是屏幕上[18]。在本文算法中,這一機(jī)制恰好符合從繪制結(jié)果直接篩選三角形的需求。

圖2 非拓?fù)湟恢聣K體構(gòu)建示意圖(a)輸入曲面模型; (b)對(duì)模型空間進(jìn)行網(wǎng)格劃分; (c)漫水法追蹤塊體外邊界網(wǎng)格單元集合; (d)視覺觀察得到的三角網(wǎng)塊體模型
在上述非拓?fù)湟恢聣K體構(gòu)建算法中,網(wǎng)格劃分是重要步驟。基本的網(wǎng)格劃分方式是均勻型網(wǎng)格劃分,其劃分方式為無區(qū)別地將整個(gè)地質(zhì)模型均勻劃分為規(guī)模統(tǒng)一、精度一致的網(wǎng)格單元。這種劃分方式簡(jiǎn)單,便于實(shí)現(xiàn),且索引效率較高。其缺陷是既耗費(fèi)資源又耗費(fèi)時(shí)間。為此,本文提出一種高效方法,即非規(guī)則八叉樹網(wǎng)格劃分方式。該方法將地質(zhì)模型劃分為大小不一的網(wǎng)格單元,即對(duì)含有曲面三角網(wǎng)的區(qū)域劃分為規(guī)模更小、精度更高的網(wǎng)格單元,對(duì)不含有三角網(wǎng)的區(qū)域不再繼續(xù)劃分。由于使用了精度可變的網(wǎng)格體,所需求的內(nèi)存空間較靈活,可根據(jù)場(chǎng)景需求調(diào)整[19]。圖3對(duì)比了均勻網(wǎng)格體劃分與不規(guī)則八叉樹網(wǎng)格體劃分。

圖3 均勻網(wǎng)格體劃分(左)與不規(guī)則八叉樹網(wǎng)格體劃分(右)對(duì)比
八叉樹網(wǎng)格剖分將立體空間從三個(gè)維度上同時(shí)進(jìn)行二分,即將原空間劃分為8個(gè)幾何相似的子空間,之后再根據(jù)實(shí)際情況決定是否需要對(duì)某個(gè)或某幾個(gè)子空間進(jìn)一步劃分。同時(shí),任何一個(gè)被劃分出的子空間都將作為一個(gè)節(jié)點(diǎn)被保存到八叉樹數(shù)據(jù)結(jié)構(gòu)中,表示整個(gè)原始地質(zhì)空間的數(shù)據(jù)結(jié)構(gòu)對(duì)象將作為八叉樹的根節(jié)點(diǎn),而沒有被繼續(xù)劃分子空間的數(shù)據(jù)結(jié)構(gòu)對(duì)象將作為八叉樹的葉子節(jié)點(diǎn)。為了實(shí)現(xiàn)上下級(jí)節(jié)點(diǎn)的索引,表示節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu)應(yīng)該保留指向上下級(jí)數(shù)據(jù)結(jié)構(gòu)的指針以及相對(duì)的位置關(guān)系。圖4為八叉樹網(wǎng)格剖分算法流程圖。
通過遞歸方式建立不規(guī)則八叉樹結(jié)構(gòu),首先從輸入的根節(jié)點(diǎn)開始,檢查當(dāng)節(jié)點(diǎn)的劃分層數(shù)是否小于最大劃分層數(shù),并判斷節(jié)點(diǎn)包含的三角形數(shù)目是否大于1。如果滿足條件則從x、y、z三個(gè)維度上同時(shí)進(jìn)行二分,將節(jié)點(diǎn)劃分成8個(gè)子節(jié)點(diǎn),為每個(gè)子節(jié)點(diǎn)設(shè)定空間范圍,并根據(jù)空間范圍置入所包含的三角形。然后依次對(duì)8個(gè)子節(jié)點(diǎn)進(jìn)行前述的檢查和遞歸劃分。最終遞歸調(diào)用結(jié)束后,不規(guī)則八叉樹即建立完成。

圖4 八叉樹網(wǎng)格劃分算法流程
由于使用八叉樹網(wǎng)格剖分將地質(zhì)空間劃分為大小不同、精度不一的網(wǎng)格體,相比均勻型網(wǎng)格塊體,其搜索遍歷方法更復(fù)雜。因此本文使用一種基于局部坐標(biāo)系機(jī)制的溢出方向搜索算法[20]解決尋找指定方向上的鄰接網(wǎng)格體問題,完善了對(duì)鄰接網(wǎng)格體搜索算法。改進(jìn)后的算法分為三個(gè)階段。第一階段:搜索目標(biāo)網(wǎng)格體可能存在的上級(jí)網(wǎng)格體,記錄由上級(jí)網(wǎng)格體到目標(biāo)網(wǎng)格體的搜索路徑;第二階段:通過第一階段所給出的搜索路徑進(jìn)行目標(biāo)網(wǎng)格體的搜索;第三階段:對(duì)目標(biāo)網(wǎng)格體進(jìn)行嘗試性的細(xì)分,以保證作為算法結(jié)果的網(wǎng)格體一定是地質(zhì)空間網(wǎng)格體八叉樹的葉子節(jié)點(diǎn)。
為了對(duì)比八叉樹與非八叉樹方式的存儲(chǔ)效率,對(duì)圖2a所示的曲面模型進(jìn)行實(shí)驗(yàn),結(jié)果如表1所示。若模型包含薄層或透鏡體等地質(zhì)構(gòu)造,為了精細(xì)體現(xiàn)這些構(gòu)造的細(xì)節(jié)特征,不規(guī)則八叉樹應(yīng)具有較深的劃分層數(shù)。當(dāng)劃分層數(shù)不大于5時(shí),不規(guī)則八叉樹與規(guī)則網(wǎng)格劃分規(guī)模一致。由表1中網(wǎng)格規(guī)模和劃分時(shí)間可以看出,隨著劃分層數(shù)的增加,規(guī)則網(wǎng)格劃分方式的網(wǎng)格單元數(shù)目以8倍的速率增長(zhǎng),而八叉樹劃分方式的網(wǎng)格單元數(shù)目和劃分耗時(shí)增長(zhǎng)幅度遠(yuǎn)小于8,并且呈遞減趨勢(shì)趨于2。因此,使用不規(guī)則八叉樹方式對(duì)地質(zhì)空間進(jìn)行網(wǎng)格劃分極大地節(jié)省了存儲(chǔ)空間,提高了塊體追蹤效率。

表1 不規(guī)則八叉樹劃分與規(guī)則網(wǎng)格劃分的網(wǎng)格單元數(shù)量對(duì)比
為了驗(yàn)證非拓?fù)湟恢滦运惴ǖ挠行裕x擇了一個(gè)大小為32km(x)×18km(y)×15km(z)的較復(fù)雜地質(zhì)模型(圖5)進(jìn)行算法測(cè)試。模型含有44個(gè)層位/斷層曲面,存在斷裂、尖滅、透鏡體等多種地質(zhì)現(xiàn)象。為了驗(yàn)證算法處理非拓?fù)湟恢滦阅P偷哪芰Γ趫D中A、B兩處人為地制造了一些曲面漏縫(圖6左)和交越(圖6右),可以看到模型存在比較明顯的拓?fù)鋯栴}。
圖7是利用傳統(tǒng)曲面縫合性方法建立的塊狀模型。可以看出,當(dāng)模型存在拓?fù)鋯栴}時(shí),曲面縫合性方法得到的塊體模型結(jié)構(gòu)存在明顯問題,即局部存在拓?fù)溴e(cuò)誤的塊體粘連在一起,得到的塊體與原始模型追蹤得到塊體的結(jié)構(gòu)和數(shù)目存在差異。
圖8是用網(wǎng)格塊體構(gòu)建方法建立的塊狀模型,圖9是網(wǎng)格塊體構(gòu)建算法細(xì)節(jié)。可以看出,網(wǎng)格塊體構(gòu)建算法的整體構(gòu)建效果較好,但對(duì)存在拓?fù)鋯栴}的模型,塊體模型沒有保留這些細(xì)節(jié)。

圖5 非拓?fù)湟恢履P?/p>

圖6 圖5模型中細(xì)節(jié)A(左)和B(右)
圖10是利用本文非拓?fù)湟恢滦运惴ń⒌膲K狀模型。塊體構(gòu)建采用Intel i7 4790K、主頻為4.0GHz的電腦,耗時(shí)23s。

圖7 傳統(tǒng)曲面縫合性算法對(duì)圖5模型的追蹤結(jié)果

圖8 網(wǎng)格塊體構(gòu)建算法對(duì)圖5模型的追蹤結(jié)果

圖9 網(wǎng)格塊體構(gòu)建算法對(duì)圖5模型的追蹤結(jié)果細(xì)節(jié)

圖10 本文算法對(duì)圖5模型的追蹤結(jié)果(左)及細(xì)節(jié)(右)
對(duì)比圖10與圖8可以看出,當(dāng)模型存在一定拓?fù)鋯栴}時(shí),本文非拓?fù)湟恢聣K體構(gòu)建算法得到的塊狀模型整體結(jié)構(gòu)正確,塊體結(jié)構(gòu)和數(shù)目與圖8一致。圖10右給出了非拓?fù)湟恢滦运惴ㄔ趫D中A、B兩處得到的塊體模型細(xì)節(jié)。可見在原始模型在交線處的漏縫,在本文非拓?fù)湟恢滦运惴ń⒌膲K狀模型中也呈現(xiàn)出一定的缺漏現(xiàn)象。
實(shí)驗(yàn)結(jié)果說明非拓?fù)湟恢滦运惴ň哂泻芎玫娜蒎e(cuò)能力,可以較好地處理存在一定拓?fù)鋯栴}的模型。
為更好地測(cè)試基于視覺觀察的非拓?fù)湟恢聣K體構(gòu)建算法的適用性,利用不同形狀和復(fù)雜程度的曲面模型模擬真實(shí)的地層,如表2所示。與基于三角形追蹤的封閉模型描述方法,即曲面縫合型塊體構(gòu)建算法[6]與線框塊體構(gòu)建法[8]作對(duì)比。塊體構(gòu)建數(shù)據(jù)和效果對(duì)比情況見表3和表4。實(shí)驗(yàn)使用的計(jì)算機(jī)操作系統(tǒng)為Windows10專業(yè)版x64、處理器為Intel(R) Core(TM) i7-6800K@3.4GHz(C6T12)、內(nèi)存為DDR416GB3000MHz。

表2 塊體構(gòu)建測(cè)試模型
若某次塊體構(gòu)建的結(jié)果中出現(xiàn)本應(yīng)被分離的兩個(gè)塊體黏合到一起,則本次塊體構(gòu)建結(jié)果是失敗的,此時(shí)不記錄時(shí)間和空間資源的消耗情況。
由表4可見,本文基于視覺觀察效果的塊體構(gòu)建算法雖然在時(shí)間資源和空間資源消耗上都數(shù)倍于曲面縫合型塊體構(gòu)建算法和線框塊體構(gòu)建算法,但就算法本身而言,對(duì)于表2中最復(fù)雜的地質(zhì)模型b62,塊體構(gòu)建的空間占用不超過2GB,算法執(zhí)行時(shí)間不超過25s,因此一般配置的計(jì)算機(jī)都可滿足其時(shí)間和空間需求。該實(shí)驗(yàn)證明,即使在地質(zhì)模型存在交線等拓?fù)浣Y(jié)構(gòu)的情況下,亦可得到較客觀的地質(zhì)情況。換言之,文中算法具有較強(qiáng)的魯棒性,且資源消耗在可接受范圍內(nèi),是一種實(shí)用且可靠的地質(zhì)塊體構(gòu)建算法。

表3 五個(gè)模型塊體構(gòu)建算法效果對(duì)比
注:算法1指曲面縫合型塊體構(gòu)建算法,算法2指線框塊體構(gòu)建算法,算法3指基于視覺觀察效果的非拓?fù)湟恢聣K體構(gòu)建算法,表4同。

表4 五個(gè)模型不同算法時(shí)間空間資源消耗對(duì)比
注:算法名后括號(hào)中的數(shù)字為指定的網(wǎng)格體劃分層數(shù),如“算法3(5)”即為使用算法3,并指定網(wǎng)格劃分層數(shù)為5的條件下進(jìn)行地質(zhì)塊體構(gòu)建。
三維塊體構(gòu)建技術(shù)是構(gòu)造塊狀地質(zhì)模型的核心技術(shù),在此過程中,要保證復(fù)雜模型的拓?fù)湟恢滦苑浅@щy。傳統(tǒng)的逐三角形追蹤和線框追蹤方法在模型存在極少量局部拓?fù)溴e(cuò)誤時(shí)能夠建立比較正確的塊狀模型,但對(duì)交線拓?fù)浣Y(jié)構(gòu)依賴性強(qiáng),容錯(cuò)性和塊體構(gòu)建成功率較低。本文提出的非拓?fù)湟恢滦詨K體構(gòu)建算法,完全不依賴模型交線拓?fù)浣Y(jié)構(gòu),根據(jù)曲面模型自身形態(tài)即可構(gòu)建,極大地提升了塊體構(gòu)建成功率。然而相比于傳統(tǒng)追蹤算法,該算法效率相對(duì)較低,為此應(yīng)用基于八叉樹結(jié)構(gòu)提高了算法效率。通過數(shù)個(gè)典型三維模型的塊體構(gòu)建實(shí)驗(yàn),可以得出以下結(jié)論:
(1)本文基于視覺觀察方式的三角形選取算法提出的非拓?fù)湟恢滦詨K體構(gòu)建算法,不依賴于交線拓?fù)浣Y(jié)構(gòu),算法容錯(cuò)性較高,能夠在很大程度上解決復(fù)雜模型拓?fù)洳灰恢碌膯栴}。
(2)非拓?fù)湟恢聣K體構(gòu)建算法以網(wǎng)格塊體追蹤為基礎(chǔ),追蹤效率較低,且消耗資源較大,使用八叉樹結(jié)構(gòu)對(duì)算法進(jìn)行優(yōu)化,可以極大地降低內(nèi)存消耗,一定程度上提高了追蹤效率。
(3)本文提出基于八叉樹優(yōu)化的非拓?fù)湟恢滦詨K體構(gòu)建算法,能夠有效解決拓?fù)洳灰恢履P偷膲K體構(gòu)建問題,具有較高的容錯(cuò)性和塊體構(gòu)建成功率,并且算法資源消耗在目前主流硬件平臺(tái)上即可實(shí)現(xiàn)。由于該算法降低了對(duì)曲面模型的要求,因而也降低了三維復(fù)雜地質(zhì)模型構(gòu)建的整體難度,提高了塊體構(gòu)建的效率,比傳統(tǒng)方法更具實(shí)用性。