黃建新,曾向陽,劉剛,瞿友安,羅益民,蔣正鋒,錢鋒,余佩武
(1.工業(yè)和信息化部電子第五研究所,廣東 廣州 510610;2.第三軍醫(yī)大學(xué)西南醫(yī)院,重慶 400038)
3D引擎是虛擬現(xiàn)實系統(tǒng)的核心,常見的開源3D 引 擎 有:Unreal、Quake、Lithtech、OGRE 和Irrlicht等;商業(yè)3D引擎有北京中視典VRP-BUILDER物理引擎,北京動態(tài)時空DynaVR-Net引擎,北京涂鴉Origo Engine引擎,國外商業(yè)3D引擎如易用EON等。目前3D引擎大多針對游戲開發(fā),模擬的對象主要是剛體;醫(yī)學(xué)3D引擎主要處理人體組織等軟體,和一般的3D引擎相比,除了一般3D引擎需要的動畫、光影、粒子特效、物理系統(tǒng)、碰撞檢測、圖形圖像渲染、文件管理以及網(wǎng)絡(luò)特性等以外,還需要考慮軟體的碰撞檢測、形變等,同時需要模擬各種復(fù)雜的醫(yī)學(xué)動作和效果,如流血、煙霧、剪切、縫合和打結(jié)等。
OpenGL是開放式圖形語言 (GL:Graphic Language) 的縮寫。它是由 Silicon Graphics(SGI)公司開發(fā)的,有Windows NT和Windows 95版,其API在工作站上具有可移植性。它是圖形標準為圖形庫提供的一條簡捷的途徑。OpenGL應(yīng)用程序接口的版權(quán)屬于SGI公司,其標準由OpenGL結(jié)構(gòu)監(jiān)察組指定。該監(jiān)察組的成員有IBM、Intel、Microsoft、DEC、SGI、Intergraph和Evans&Sutherland。
OpenGL是對網(wǎng)絡(luò)透明的3D圖形處理接口,它通過一個簡單、易用的模塊化接口而生成高質(zhì)量的3D圖形圖像,在硬件、操作系統(tǒng)等方面是獨立的,支持C、C++、Pascal和Lisp等多種語言。OpenGL作為一個獨立平臺,具有立即和顯示表模式的鮮明特點。顯示表存放著特定的序列,可以被反復(fù)使用,在進行對象描述時,可以直接從表上獲取相關(guān)信息,從而產(chǎn)生很好的效果,如果對象需要進行頻繁處理,顯示表上的信息就不得不隨之更新,這將導(dǎo)致圖形顯示速度的優(yōu)勢喪失殆盡。OpenGL為圖形顯示提供了一個寬廣的范圍,從渲染一個簡單的幾何點、線、多邊形,到利用Phong光線、Gouraud陰影、紋理映射貼圖以及反鋸齒的點、線,面對一個3D人體組織器官進行最復(fù)雜的3D變換、剪貼、采集和描繪。由于采用了模塊和累加緩沖技術(shù),OpenGL可以高效地實現(xiàn)幾何實體、陰影、全景反鋸齒和動態(tài)模糊等效果。
OpenGL圖形接口標準采用Glut庫。
基于上述分析,作為一個3D引擎,應(yīng)具有建模、動畫、光影、粒子特效、物理系統(tǒng)、碰撞檢測、圖形圖像渲染、文件管理以及網(wǎng)絡(luò)特性等功能,其核心在圖形圖像繪制、渲染、顯示、碰撞檢測以及各種動作模擬等。
而OpenGL的圖形圖像繪制、渲染和顯示功能很強,我們在構(gòu)建3D引擎時可以充分發(fā)揮這些優(yōu)點,利用OpenGL來構(gòu)建3D引擎的底層圖形圖像繪制、渲染和顯示系統(tǒng)。
作為3D醫(yī)學(xué)引擎,它需要處理比較復(fù)雜的人體組織器官等軟體,相對于一般的3D引擎而言,需要更強的模型處理能力,需要模型軟體的彈性形變等。為了解決這個問題,我們將模型分為幾何模型和物理模型,幾何模型主要用來構(gòu)建人體組織器官的形狀,物理模型主要用來模擬人體組織的物理特性,如應(yīng)力、加速度和彈性模量等。基于此,對于幾何模型,我們可以通過點、線、面(三角面、四角面)來構(gòu)建,幾何模型是點、線、面集合,在所有的面中三角面是最簡單,也是最容易處理的。圖1是幾何模型三角網(wǎng)格圖。
圖1 幾何模型三角網(wǎng)格圖
對于物理模型,主要有Mass-Spring,即質(zhì)點彈簧算法,F(xiàn)EM(Finite Element Method),即有限元法等。FEM法使用非常普遍,它的思想來源于工程力學(xué),其優(yōu)點在于,它提供了一種高精度的軟組織建模的方案;其缺點在于,它在形變過程中需要進行大量的計算,因此很難達到形變的實時性要求。Mass-Spring則是最簡單,也是最容易處理的。
Mass-Spring,即質(zhì)點彈簧算法,它將軟組織建模為很多的、帶有彈簧的質(zhì)點網(wǎng)絡(luò)結(jié)構(gòu),壓縮或者拉伸時通過彈簧的彈性系數(shù)來實現(xiàn)形變。其模型如圖2所示:
圖2 質(zhì)點彈簧模型
質(zhì)點彈簧模型將變形人體組織器官簡化成由彈簧連接的彈性質(zhì)點系統(tǒng),利用質(zhì)點彈簧的運動規(guī)律來描述變形人體組織器官的彈性變形過程。在質(zhì)點彈簧模型中,質(zhì)點的運動規(guī)律由其連接的彈簧來約束,因質(zhì)點運動而產(chǎn)生的彈簧變形力通過虎克定理計算,可以對質(zhì)點彈簧模型進行簡化,這時只考慮因彈簧的拉壓變形而產(chǎn)生的彈性變形力,而不考慮變形系統(tǒng)的彎曲和剪切變形。對于質(zhì)點所受的力,可以采用公式(1)來計算:
式(1) 中:m——質(zhì)點i的質(zhì)量;
a(i)——質(zhì)點i的加速度;
Fext(i)——該質(zhì)點所收的外力;
Fint(i)——該質(zhì)點所收的內(nèi)力。
對于圖形圖像渲染,我們可以利用OpenGL的圖形圖像渲染機制,模型是是點、線、面的集合,簡單的繪制不能實現(xiàn)對象的真實感繪制的要求,在計算過程中,需要將組織形變后的模型變化到適合的圖形繪制的模型上來,這就是圖形圖像渲染?;贠PENGL渲染模式的基本流程為:1)使用幾何圖元建立模型,得到人體組織器官的數(shù)學(xué)描述;2)在三維空間排列人體組織器官,選擇觀察場景有利的位置;3)計算所有人體組織器官的顏色,顏色可是由應(yīng)用程序指定的、根據(jù)光照條件確定的、將問題粘貼到人體組織器官上得到的,也可綜合上述多種操作的結(jié)果;4)光柵化,將人體組織器官的數(shù)學(xué)描述和相關(guān)的顏色信息轉(zhuǎn)換為屏幕像素。圖形圖像渲染流程如圖3所示。
圖3 圖形圖像渲染流程圖
碰撞檢測算法目前主要有AABB包圍盒(Axis Aligned Bounding Box)、OBB包圍盒 (Oriented Bounding Box) 等算法。
AABB包圍盒就是采用一個描述用的立方體或者球形體包裹住3D人體組織器官對象的整體(或者是主要部分),然后根據(jù)包圍盒的距離、位置等信息來計算是否發(fā)生碰撞。坐標軸平行(“Axis-aligned”) 不僅指盒體與世界坐標軸平行,同時也指盒體的每個面都和一條坐標軸垂直,這樣能減少轉(zhuǎn)換盒體時的操作次數(shù)。如圖4所示。
圖4 AABB包圍盒
AABB包圍盒簡單性好,緊密性較差,當物體旋轉(zhuǎn)之后需對AABB進行同樣的旋轉(zhuǎn)并更新,當物體變形之后只需對變形了的基本幾何元素對應(yīng)的包圍盒重新計算,然后可以自下向上地由子結(jié)點的AABB合成父結(jié)點的AABB,最后進行包圍盒樹的更新,AABB包圍盒更適合人體軟組織。
OBB包圍盒比AABB包圍盒更精確、更健壯,創(chuàng)建OBB樹是算法里最難的一個部分,一個OBB樹的創(chuàng)建整個過程如圖5所示。
圖5 OBB樹創(chuàng)建過程
OBB碰撞檢測方法的緊密性較好,大大減少參與相交測試的包圍盒的數(shù)目,因此總體性能要優(yōu)于AABB,實時性程度較高。當物體發(fā)生旋轉(zhuǎn)運動后,只需對OBB進行同樣的旋轉(zhuǎn)即可。對象變形后OBB樹的更新需要重新計算,而重新計算每個結(jié)點的OBB的代價又太大,所以O(shè)BB不適用于包含人體軟組織對象在內(nèi)的復(fù)雜環(huán)境中,而適用于剛體。
3D醫(yī)學(xué)引擎相對一般3D引擎還有一個重要區(qū)別,即對于醫(yī)學(xué)手術(shù)過程的各種動作和效果,如切割、縫合、打結(jié)、抓取、煙霧和流血等。
切割通過刪除器械與幾何模型碰撞點附近的點、線、面來實現(xiàn),切割應(yīng)力計算包括各節(jié)點運行的位移、速度和加速度等,切割形變保持通過畸變因子和剛度矩陣來實現(xiàn)。
縫合通過歐拉算法來進行應(yīng)力和力矩計算,應(yīng)力計算包括重力、節(jié)點連接之間的stretch/compress力、節(jié)點連接之間的bend和twist力、dissipative friction力以及contact力。力矩計算主要為stretch和friction力,碰撞檢測采用AABB包圍盒(Axis Aligned Bounding Box) 和 包 圍 盒 (Oriented Bounding Box) 相結(jié)合的算法。
打結(jié)的繩子使用剛性針模型、FTL(Follow the Leader)變形、AABB碰撞檢測算法處理繩子的自碰撞和繩子與其它剛體的碰撞,通過設(shè)置臨時接觸約束來實現(xiàn)等效摩擦力,通過碰撞簇的識別來檢測結(jié)的形成并在FTL算法中將結(jié)作為一個整體處理,確保結(jié)形成后可以在空間自由運動,反饋力根據(jù)繩子的張力和約束條件計算。打結(jié)方式有單結(jié)(half hitch)、方結(jié)(square knot)、三重結(jié)或多重結(jié)(extra half hitch on reef knot)。
抓取是通過器械開口上的點綁定器官上的點、線、面來實現(xiàn)的。
煙霧是根據(jù)流體力學(xué)原理或粒子效果來實現(xiàn)的。根據(jù)流體力學(xué)原理,假設(shè)流體的黏度為零,此時流體即為非粘性流體,煙霧可視為非粘性流體。對于三維流體,根據(jù)質(zhì)量守恒定律,在任意封閉曲面(例如球體)中,由曲面進入封閉曲面內(nèi)的質(zhì)量速率,需和由曲面離開封閉曲面內(nèi)的質(zhì)量速率相等,主要通過建立歐拉方程來實現(xiàn);煙霧通過粒子來實現(xiàn),煙霧的稀薄主要通過控制粒子的數(shù)量來實現(xiàn),煙霧的形態(tài)通過粒子的物理屬性如重力等來控制。
流血通過模擬流體運動或粒子效果來實現(xiàn),對于三維流體,根據(jù)質(zhì)量守恒定律,在任意封閉曲面(例如球體)中,由曲面進入封閉曲面內(nèi)的質(zhì)量速率,需和由曲面離開封閉曲面內(nèi)的質(zhì)量速率相等,主要通過建立歐拉方程來實現(xiàn);流血通過粒子來實現(xiàn),流血的粘稠主要通過控制粒子的數(shù)量來實現(xiàn),流血的形態(tài)通過粒子的物理屬性如重力等來控制。
力反饋也是3D醫(yī)學(xué)引擎的一個重要特征。力反饋實現(xiàn)的基本過程是虛擬現(xiàn)實軟件系統(tǒng)輸出的力反饋指令經(jīng)接口電路輸出,經(jīng)過D/A轉(zhuǎn)換器將反饋力數(shù)字量轉(zhuǎn)換為模擬量,并控制受控恒流源驅(qū)動伺服電機執(zhí)行力反饋,伺服電機輸出反饋力經(jīng)鋼絲傳動,由操作桿向操作者輸出反饋力。在醫(yī)學(xué)虛擬現(xiàn)實的過程中,操作者需要實時感知虛擬器械擠壓軟組織模型的面彈力等反饋信息。實際上的力反饋是體現(xiàn)在操作者感知人體模型對于施加的作用力的反抗作用。力反饋采用的其中一種模型是基于質(zhì)點彈簧系統(tǒng)的力反饋模型。其計算公式如式(2)所示:
式(2)中:M——該面的質(zhì)量;
D——阻尼系數(shù);
K——彈簧的彈性系數(shù);
x——某時刻彈簧縮放的位移;
F(t)——某時刻的總反饋力。
根據(jù)上述分析,我們可以得出OpenGL的3D醫(yī)學(xué)引擎實現(xiàn)圖,如圖6所示。
圖6 基于OpenGL的3D醫(yī)學(xué)引擎實現(xiàn)圖
本文分析了主流3D引擎模擬的對象主要是剛體,但是醫(yī)學(xué)3D引擎主要處理人體組織等軟體,和一般的3D引擎相比,醫(yī)學(xué)3D引擎需要處理軟體的碰撞檢測、形變等,模擬各種復(fù)雜的醫(yī)學(xué)動作和效果,如流血、煙霧、剪切、縫合和打結(jié)等,本文對OpenGL進行了分析,提出了一種基于OpenGL的3D醫(yī)學(xué)引擎,并對該引擎的關(guān)鍵技術(shù)進行了分析,得出了基于OpenGL的3D醫(yī)學(xué)引擎實現(xiàn)原理圖。
[1] 劉剛,黃建新,曾向陽,等.腹腔鏡胃癌根治術(shù)三維虛擬訓(xùn)練系統(tǒng)關(guān)鍵技術(shù)研究[C]//現(xiàn)代臨床技能中心建設(shè)與發(fā)展國際論壇論文集.汕頭:汕頭大學(xué),2010.
[2] NCCN.胃癌臨床實踐指南(中國版) [M/OL].(第一版).2009.http://www.nccn.org.
[3][美]ZUCKER K A.腹腔鏡外科學(xué)[M](第二版) .胡三元,主譯.濟南:山東科學(xué)技術(shù)出版社,2004.
[4] 余佩武,王自強,錢鋒,等.腹腔鏡輔助下胃癌根治術(shù)71例臨床報告[J].中華胃腸外科雜志,2005;8(5):402-403.
[5] 余佩武.腹腔鏡胃癌根治術(shù)的現(xiàn)狀與前景[J].中國普外基礎(chǔ)與臨床,2007,5(14):506-509.