彭文高
(長(zhǎng)江大學(xué)計(jì)算機(jī)科學(xué)學(xué)院,湖北荊州 434000)
許多學(xué)者利用鉆井?dāng)?shù)據(jù)進(jìn)行三維管線建模的技術(shù),一般都是使用現(xiàn)在流行組件的開(kāi)發(fā),將建模需要的算法封裝到函數(shù)庫(kù)中,通過(guò)調(diào)用不同的接口,可以很方便地實(shí)現(xiàn)復(fù)雜的三維建模過(guò)程。采用組件開(kāi)發(fā)的有其不足的方面,即以插件的方式集成在瀏覽器中,對(duì)跨平臺(tái)應(yīng)用不是很友好。WebGL提供的3D場(chǎng)景渲染就很好地解決了這一問(wèn)題[1,2],使用Three.js框架就能脫離插件,通過(guò)網(wǎng)頁(yè)流暢地渲染出鉆井?dāng)?shù)據(jù)的三維可視化效果,通過(guò)這種技術(shù)工程師能對(duì)地下的油井有一個(gè)直觀的認(rèn)識(shí)[3]。重點(diǎn)研究解決鉆井過(guò)程中收集的位置信息和屬性信息基于三維可視化技術(shù)的井眼軌跡可視化系統(tǒng)的開(kāi)發(fā)[4],具體的過(guò)程是利用鉆井原始數(shù)據(jù)處理后進(jìn)行測(cè)斜計(jì)算,然后使用三維可視化技術(shù)將其直接顯示在瀏覽器上,對(duì)鉆井軌跡和測(cè)井曲線進(jìn)行三維建??梢暬hree.js直接使用GPU的并行計(jì)算資源,來(lái)創(chuàng)建三維可視化圖形,實(shí)現(xiàn)了在瀏覽器端根據(jù)三維樣條曲線構(gòu)建三維井眼模型,并且使用時(shí),數(shù)據(jù)加載和用戶(hù)使用鼠標(biāo)進(jìn)行交互時(shí)體驗(yàn)比較流暢。
將鉆井?dāng)?shù)據(jù)可視化系統(tǒng)的研究與實(shí)現(xiàn)分為三個(gè)主要的模塊,第一個(gè)模塊是數(shù)據(jù)處理模塊,第二個(gè)模塊是井眼三維可視化模塊,第三個(gè)模塊是用戶(hù)交互模塊。示意圖如圖1所示。
由于鉆井?dāng)?shù)據(jù)是根據(jù)不同的錄井方法獲取的。我們能將數(shù)據(jù)分為幾何數(shù)據(jù)和屬性數(shù)據(jù),列出鉆井?dāng)?shù)據(jù)的詳細(xì)列表。
這些文件中的數(shù)據(jù)通常具有一些異常值。這些異常值與地質(zhì)的變化無(wú)關(guān)。如果在可視化建模的數(shù)據(jù)中使用這些異常值,則會(huì)在三維可視化顯示時(shí)出現(xiàn)異常的情況。根據(jù)這樣的模型,工程技術(shù)人員難以準(zhǔn)確地對(duì)鉆井情況進(jìn)行評(píng)估,這可能會(huì)影響整個(gè)鉆井項(xiàng)目的正常開(kāi)發(fā),嚴(yán)重時(shí)會(huì)導(dǎo)致鉆井事故。因此,必須在使用這些數(shù)據(jù)之前,對(duì)數(shù)據(jù)先預(yù)處理和標(biāo)準(zhǔn)化,消除非影響因子的干擾。預(yù)處理主要是對(duì)不合理的數(shù)據(jù)和空數(shù)據(jù)進(jìn)行處理,以及利用文件里的井眼原始數(shù)據(jù),經(jīng)過(guò)平滑處理、測(cè)斜計(jì)算轉(zhuǎn)換成三維可視化繪制鉆井的坐標(biāo)數(shù)據(jù),具體使用的方法是前面提到的圓柱螺旋、Catmull-Rom插值算法。
基本步驟如下:
(1)讀取dev和las格式的文件數(shù)據(jù)。
(2)檢查線數(shù)據(jù)是否存在異常,如果發(fā)現(xiàn)有空值、超過(guò)范圍的值、名稱(chēng)不對(duì)應(yīng)的值的情況,則彈出對(duì)話(huà)框,提示用戶(hù)刷新界面并重新選擇文件。
(3)對(duì)測(cè)井曲線數(shù)據(jù)標(biāo)準(zhǔn)化,計(jì)算出鉆井坐標(biāo)數(shù)據(jù)。
表1 井斜數(shù)據(jù)文件數(shù)據(jù)結(jié)構(gòu)
?
表2 測(cè)井曲線文件數(shù)據(jù)結(jié)構(gòu)
接下來(lái)利用圓柱螺線模型內(nèi)插法[7],我們可以得到所有測(cè)點(diǎn)對(duì)應(yīng)的三維空間坐標(biāo)。假設(shè)測(cè)段的形狀為曲線,對(duì)測(cè)斜進(jìn)行計(jì)算[5]。在內(nèi)插時(shí)我們同樣假設(shè)在內(nèi)插的那一段為曲線形狀。不論我們用什么內(nèi)插方法,我們求內(nèi)插點(diǎn)的三維坐標(biāo),都是利用已知測(cè)段兩個(gè)端點(diǎn)的基本參數(shù)值計(jì)算的,包括井深、井斜角、井斜方位角,利用這些參數(shù)求出對(duì)應(yīng)測(cè)點(diǎn)的垂深、北向位移、東向位移[6]。這里使用的圓柱螺線法內(nèi)插法,其假定的條件與之前計(jì)算測(cè)斜時(shí),求的參數(shù)是一樣的。該方法有兩種情況,一種是測(cè)點(diǎn)的井深已知,為L(zhǎng)i,求插入點(diǎn)的參數(shù),另一種是測(cè)點(diǎn)的垂深Di已知,求插入點(diǎn)的參數(shù)。
(1)井深為L(zhǎng)i,求插入點(diǎn)的公式如下:
(2)垂深Di,求插入點(diǎn)的公式如下:
利用公式(7)和(8)計(jì)算出插入點(diǎn)i的井斜角和井深,然后利用公式(6)和(8)就可以計(jì)算出該內(nèi)插點(diǎn)的坐標(biāo)值。
由于鉆井?dāng)?shù)據(jù)表示的是一系列離散的、不連續(xù)的點(diǎn)。直接使用這些測(cè)點(diǎn)繪制三維管線,其平滑度無(wú)法得到保證,會(huì)影響井眼軌跡三維可視化的效果。三維管線中會(huì)存在曲度較大的情況,因此使得鉆井測(cè)點(diǎn)連線夾角會(huì)存在較大的情況。井眼軌跡不再是一條空間曲線,而是由很多空間曲線構(gòu)成的一條管狀曲線。為了能夠保證三維井眼軌跡的管狀曲線的平滑顯示,通常使用Catmull-Rom插值算法對(duì)測(cè)點(diǎn)數(shù)據(jù)進(jìn)行插值處理,得到一條三維空間樣條曲線。
井眼三維可視化模塊就是把上一步處理完的數(shù)據(jù),利用Three.js在瀏覽器中渲染成三維管線模型。這個(gè)模塊包括兩部分:第一部分是,將每個(gè)油井軌跡擬合成三維樣條曲線,然后展開(kāi)渲染成三維管線代表真實(shí)油井;另一部分是對(duì)各個(gè)油井每個(gè)測(cè)點(diǎn)的屬性數(shù)據(jù)渲染成不同顏色,使用的是three.js紋理和材質(zhì)渲染技術(shù),將光照、相機(jī)設(shè)置到三維場(chǎng)景中。利用three.js中不同的物體渲染在場(chǎng)景中的三維可視化方法,將鉆井軌跡近似于管狀物體,將屬性信息看出三維的線段,實(shí)現(xiàn)鉆井的幾何數(shù)據(jù)與屬性數(shù)據(jù)的三維可視化表達(dá),并且實(shí)現(xiàn)了一體化顯示。
僅利用測(cè)點(diǎn)的三維坐標(biāo)等基礎(chǔ)數(shù)據(jù),對(duì)井眼軌跡的模擬不夠完善,我們對(duì)參數(shù)進(jìn)行一些調(diào)整,將點(diǎn)到線,再通過(guò)線組成三維面,這些面一起組成一個(gè)三維立體的井筒。
模型示意圖如下:
圖2 井眼軌跡建模
第一步,將一個(gè)井的離散點(diǎn)的數(shù)據(jù)用一個(gè)多維數(shù)組表示,這些點(diǎn)的三維坐標(biāo)和對(duì)應(yīng)的井斜數(shù)據(jù),構(gòu)成建模需要的基本數(shù)據(jù)。因?yàn)檫@個(gè)軌跡模型相當(dāng)于一根多面的管狀線,所以在這一步,我們需要將這些點(diǎn)變成一個(gè)個(gè)三維面片,因?yàn)槟P椭械娜S面都是自由的曲面,所以用這三角形來(lái)表示三維面片,然后由一個(gè)個(gè)三角形,組合構(gòu)成三維的面片。這些三角網(wǎng)格要保證相互獨(dú)立、互不相交的原則。
第二步,沿曲線的垂直面指定半徑和分段數(shù),對(duì)井眼軌跡進(jìn)行三維建模,將曲線展開(kāi)成一個(gè)管狀的曲面。最后,對(duì)整個(gè)曲面集進(jìn)行渲染和照明,并使它雙面可見(jiàn)。根據(jù)測(cè)點(diǎn)的三維坐標(biāo)擬合出三維樣條曲線模型。然后建立三維鉆井模型,井的中軸線為之前建立的三維樣條曲線。鉆井的中心線上下點(diǎn)可以看作是上下底面圓圓心,上下底面半徑為管徑。
基于上面的模型原理,對(duì)油井軌跡進(jìn)行批量建模。包括建立的曲線模型、管道的分段數(shù)、管道的半徑、道橫截面的分段數(shù)目、管道的兩端是否閉合。生成由簡(jiǎn)單的圖元構(gòu)成的三維模型的之后,還需要為這個(gè)模型設(shè)置合適的材質(zhì),最后在網(wǎng)格模型中渲染出完整的井眼模型,網(wǎng)格模型如圖3所示。
進(jìn)行顏色和紋理渲染后效果如下圖所示,可以看出對(duì)管狀物體加入上面這些渲染設(shè)置后,渲染的立體感更強(qiáng),產(chǎn)生的明暗效果,使管線更加逼真,同時(shí),增加了場(chǎng)景的真實(shí)感,為了更直觀地展示測(cè)井?dāng)?shù)據(jù)的各種物理屬性信息,如不同深度的自然電位用不同得到顏色梯度表示,屬性數(shù)據(jù)可視化的方法有很多種,一種屬性數(shù)據(jù)可以有多種方式,這里我們直接將屬性數(shù)據(jù),以三維線條的形式繪制在管子上,如孔隙度在分析鉆井的過(guò)程中是一個(gè)很重要的參數(shù),因此我們將這個(gè)參數(shù)的直方圖直接顯示在井眼軌跡模型上,如圖4所示。
該模塊功能是用戶(hù)能對(duì)三維圖形對(duì)象進(jìn)行操作控制,包括對(duì)三維圖形對(duì)象的縮放、旋轉(zhuǎn)和平移操作,并通過(guò)設(shè)置關(guān)于圖形顯示的參數(shù)進(jìn)行控制,即完成了用戶(hù)與系統(tǒng)的交互。
提出的輕量級(jí)三維可視化服務(wù),開(kāi)發(fā)了前端鉆井?dāng)?shù)據(jù)三維可視化平臺(tái)[7]。界面如圖5所示,系統(tǒng)加載多組鉆井軌跡演示數(shù)據(jù),軟件能真實(shí)地顯示不同井眼軌跡之間的位置信息,為鉆井施工中提供良好的決策。該軟件基于B-S模式,瀏覽器打開(kāi)即可直接使用,系統(tǒng)交互性好,系統(tǒng)性能與可靠性,能完全滿(mǎn)足實(shí)際需求。
圖5 多井眼渲染平臺(tái)
建立關(guān)于井眼的三維可視化模型,并使用Three.js的3D引擎開(kāi)發(fā)了一個(gè)輕量級(jí)的鉆井?dāng)?shù)據(jù)的三維可視化平臺(tái),充分發(fā)揮了Node.js跨平臺(tái)、輕量級(jí)的優(yōu)勢(shì)。對(duì)井眼軌跡進(jìn)行三維樣條曲線的平滑處理和與模型進(jìn)行交互化操作,可以更加直觀形象地觀察不同井軌跡的變化情況,為優(yōu)化鉆井、加快勘探周期,提高勘探開(kāi)發(fā)的效益提供技術(shù)支持,以達(dá)到預(yù)期的效果。