呂珊珊 張 偉 梁富娥 劉東華 顧 旋
(甘肅中醫(yī)藥大學(xué)信息工程學(xué)院,甘肅 蘭州 730100)
針灸作為傳統(tǒng)中醫(yī)診療手段的重要組成部分,在形成、應(yīng)用與發(fā)展過(guò)程中表現(xiàn)出鮮明的民族文化特征。但是,針灸診療手段會(huì)在治療過(guò)程中對(duì)患者產(chǎn)生疼痛等危害?;颊咴谶M(jìn)行針灸治療時(shí),對(duì)于新手醫(yī)生會(huì)有很大的排斥感,這就導(dǎo)致很多新人中醫(yī)長(zhǎng)時(shí)間得不到實(shí)際的針刺練習(xí),無(wú)法積累針灸治療經(jīng)驗(yàn),不利于培養(yǎng)中醫(yī)的針灸治療水平。虛擬針灸系統(tǒng)可以有效解決這一難題。在虛擬針灸系統(tǒng)建設(shè)過(guò)程中,碰撞檢測(cè)技術(shù)的應(yīng)用能夠有效保證虛擬場(chǎng)景真實(shí)性,因此,應(yīng)當(dāng)加強(qiáng)對(duì)虛擬檢測(cè)技術(shù)的應(yīng)用研究,保證虛擬畫(huà)面流暢性,提高虛擬場(chǎng)景真實(shí)性,才能促進(jìn)虛擬針灸系統(tǒng)為中醫(yī)針灸診療方法教育過(guò)程提供更好的服務(wù)。
針灸學(xué)是在中醫(yī)理論指導(dǎo)下,研究經(jīng)絡(luò)、腧穴、刺法灸法,探討運(yùn)用針灸防治疾病規(guī)律的一門(mén)學(xué)科,相較于中醫(yī)基礎(chǔ)理論課程而言,針灸學(xué)是一門(mén)實(shí)踐性較強(qiáng)的課程[1]。針灸針?lè)ㄖ傅氖歉鶕?jù)中醫(yī)經(jīng)絡(luò)理論,將針具按照一定的角度刺入患者體內(nèi),通過(guò)捻轉(zhuǎn)與提拉等手法刺激特定穴位,從而達(dá)到治療疾病的目的。但是,傳統(tǒng)的練習(xí)方法有兩種,一種是在人體身上進(jìn)行扎針練習(xí),若是誤取穴位或是針灸手法不準(zhǔn)確,就會(huì)導(dǎo)致人體出現(xiàn)疼痛、內(nèi)出血等不良反應(yīng),具備一定的危險(xiǎn)性;另一種則是制作紙墊、棉團(tuán),在上面反復(fù)練習(xí),但紙墊、棉團(tuán)與人體的物理特性不同,完全無(wú)法體現(xiàn)出毫針刺入皮膚、肌肉和觸及骨骼的不同力感[2]。無(wú)論哪種方法都會(huì)增加針灸練習(xí)的困難程度。
虛擬現(xiàn)實(shí)技術(shù)(Virtual Reality,VR)利用計(jì)算機(jī)生成一種可對(duì)參與者直接施加視覺(jué)、聽(tīng)覺(jué)和觸覺(jué)感受,并允許其交互地觀察和操作虛擬世界的技術(shù)[3]。虛擬針灸系統(tǒng)就是將虛擬現(xiàn)實(shí)技術(shù)利用在針灸刺針練習(xí)過(guò)程中,將針刺訓(xùn)練進(jìn)行仿真,中醫(yī)在練習(xí)針灸治療手法時(shí),可以在虛擬世界中完成刺針練習(xí),既能夠有效避免針灸練習(xí)過(guò)程中對(duì)人體產(chǎn)生的傷害情況,又可以觀察不同針刺手法下針具刺入皮膚的角度與深度,還可以通過(guò)力反饋技術(shù)感受針灸治療過(guò)程中皮膚彈性對(duì)針具產(chǎn)生的阻力大小,有利于中醫(yī)掌握針刺力度。
Unity 3D作為實(shí)時(shí)3D內(nèi)容創(chuàng)造和運(yùn)營(yíng)平臺(tái),支持通過(guò)編寫(xiě)腳本代碼控制物體模型等完成游戲、設(shè)計(jì)等動(dòng)畫(huà)開(kāi)發(fā)過(guò)程。Unity 3D對(duì)于編程語(yǔ)言的包容性極強(qiáng),包括C#、C++、JavaScript等多種編程語(yǔ)言,由于C#語(yǔ)言更能體現(xiàn)Unity 3D軟件的編程思想,所以本文中使用C#語(yǔ)言來(lái)編寫(xiě)腳本代碼。
碰撞檢測(cè)技術(shù)作為虛擬針灸系統(tǒng)的關(guān)鍵技術(shù),會(huì)直接影響虛擬針刺過(guò)程的真實(shí)程度。Unity 3D碰撞檢測(cè)的算法主要有以下兩種包圍盒算法[4],即AABB包圍盒以及OBB包圍盒。兩種包圍盒算法的原理、特征、缺陷、應(yīng)用等對(duì)比見(jiàn)表1。
表1 AABB包圍盒與OBB包圍盒對(duì)比
OBB包圍盒算法具備方向任意性的特征,更適合針灸不同刺針角度的模擬,所以本文選擇OBB包圍盒算法。OBB包圍盒算法在Unity3D中應(yīng)用在較多的碰撞器中,包括Box Collider,Sphere Collider,Capsule Collider,Mesh Collider,Wheel Collider等。
本次實(shí)驗(yàn)中,選擇較為流行的開(kāi)發(fā)模式,涉及針具(毫針為例)以及人體模型的建立過(guò)程。首先,在Maya建模軟件中,建立完整的毫針模型以及人體模型。
現(xiàn)階段,較為流行的手工建模方法主要包括NURBS和Polygon建模兩種,由于Polygon建模方法可以使用任意的多邊形面,適用于較為復(fù)雜的表面細(xì)節(jié)處加線,因此本次實(shí)驗(yàn)?zāi)P瓦x擇Polygon建模方法。其次,將完整的人體模型以及毫針模型保存為.Fbx格式,即可直接導(dǎo)入至Unity3D軟件中。通過(guò)編寫(xiě)腳本程序即可控制針灸模型與人體模型的運(yùn)動(dòng)過(guò)程。
將毫針與人體.Fbx模型放入U(xiǎn)nity3D項(xiàng)目文件下的assets文件夾下或者直接將模型拖入assets文件下,就可以在Unity3D-assets文件夾直接看到模型數(shù)據(jù),將模型拖入場(chǎng)景中,根據(jù)人體與針灸的大小比例,在transform窗口下調(diào)整模型position、rotation和scale數(shù)據(jù),就可以對(duì)模型的位置、角度以及大小比例進(jìn)行調(diào)整,另外加上Unity3D中自帶的plane模型,即可簡(jiǎn)單完成虛擬針灸場(chǎng)景構(gòu)建。為緩解碰撞檢測(cè)過(guò)程PC運(yùn)行壓力,本次實(shí)驗(yàn)中直接選擇Unity3D自帶材質(zhì)球完成場(chǎng)景渲染工作。虛擬場(chǎng)景設(shè)計(jì)時(shí),場(chǎng)景自帶Main Camera組件以及Directional Light組件,為虛擬場(chǎng)景提供攝像機(jī)視野范圍以及燈光照明功能。
應(yīng)用Unity3D開(kāi)發(fā)平臺(tái)進(jìn)行碰撞檢測(cè)實(shí)驗(yàn)時(shí),為防止毫針模型與人體模型在運(yùn)行過(guò)程中出現(xiàn)下沉的現(xiàn)象,應(yīng)當(dāng)為模型添加剛體組件(rigidbody)。確定毫針模型為運(yùn)動(dòng)模型,將test1腳本程序掛在毫針模型上運(yùn)行,test1腳本程序可以控制毫針的運(yùn)動(dòng)速度以及使用方向鍵控制運(yùn)動(dòng)方向,與穴位點(diǎn)觸發(fā)碰撞檢測(cè)之后,使穴位點(diǎn)顯示紅色。在實(shí)驗(yàn)設(shè)計(jì)中,為虛擬的三維針灸模型、人體模型以及暫時(shí)充當(dāng)穴位點(diǎn)的球體模型添加相應(yīng)的碰撞體組件,劃分碰撞區(qū)域。對(duì)于復(fù)雜的模型,可以選擇添加多個(gè)碰撞體組件的方式提高碰撞檢測(cè)精確度。由于本次實(shí)驗(yàn)的針灸模型主要涉及毫針針尖與穴位的碰撞檢測(cè)過(guò)程,所以在添加碰撞組件時(shí)僅選擇單一的碰撞組件,不會(huì)對(duì)模型進(jìn)行物理分解,但需要對(duì)碰撞組件包圍盒的位置及大小進(jìn)行適當(dāng)?shù)恼{(diào)整,從而達(dá)到提高控制精度的目的。為針灸模型添加膠囊碰撞體后,根據(jù)針灸模型在空間坐標(biāo)軸的位置以及比例設(shè)置包圍盒的中心位置及大小參數(shù),針灸 模 型 空 間 坐標(biāo)位置position:X=3.98,Y=1.32,Z=2.16,scale:X=7.6,Y=10.4,Z=7.6。為使包圍盒更加貼近針灸模型外輪廓形狀,提高證碰撞檢測(cè)過(guò)程的精確度,包圍盒中心點(diǎn)位置參數(shù)需根據(jù)針灸模型的相對(duì)位置確定。當(dāng)包圍盒高度、方向參數(shù)設(shè)置為height=1,direction=Y-Axis時(shí),包圍盒位置參數(shù)應(yīng)設(shè)置為position:X=0,Y=0,Z=0.5,此時(shí)包圍盒位置形狀更加貼合針灸模型外部輪廓形狀,如圖1所示。
圖1 針灸模型添加膠囊碰撞體組件
碰撞檢測(cè)腳本代碼為:
為模型添加碰撞組件之后即可進(jìn)行碰撞檢測(cè)實(shí)驗(yàn)。在針灸test1腳本中,首先為針灸添加移動(dòng)速度,在方向鍵控制毫針模型移動(dòng)過(guò)程中,若毫針與標(biāo)記穴位的球體模型產(chǎn)生碰撞時(shí),根據(jù)腳本程序設(shè)定,應(yīng)當(dāng)在檢測(cè)到碰撞時(shí),穴位球體模型變?yōu)榧t色。
基于Unity3D的虛擬針灸碰撞檢測(cè)仿真實(shí)驗(yàn)運(yùn)行中,使用者可以通過(guò)操縱方向鍵實(shí)現(xiàn)毫針模型的控制過(guò)程,當(dāng)檢測(cè)到毫針模型與穴位模型發(fā)生碰撞時(shí),穴位模型可根據(jù)腳本設(shè)置變?yōu)榧t色,如圖2所示。一般情況下,幀率維持在30FPS左右標(biāo)志畫(huà)面能夠流暢運(yùn)行,且數(shù)值越大標(biāo)識(shí)畫(huà)面越流暢。虛擬針灸碰撞檢測(cè)仿真實(shí)驗(yàn)的運(yùn)行時(shí),運(yùn)行幀率數(shù)據(jù)維持在73FPS左右,如圖3所示,這就表示虛擬針灸碰撞檢測(cè)仿真實(shí)驗(yàn)運(yùn)行畫(huà)面較為流暢。
圖2 檢測(cè)碰撞后穴位模型變紅色
圖3 虛擬針灸碰撞檢測(cè)仿真運(yùn)行數(shù)據(jù)
為有效解決針灸練習(xí)過(guò)程中使用銅人等真實(shí)模型無(wú)法觀察針刺角度與深度以及真人練習(xí)時(shí)產(chǎn)生一定傷害的問(wèn)題,應(yīng)當(dāng)將虛擬現(xiàn)實(shí)技術(shù)應(yīng)用在針灸練習(xí)過(guò)程中。Unity 3D對(duì)于模型以及編程語(yǔ)言具備強(qiáng)大的包容性,基于Unity 3D引擎進(jìn)行虛擬針灸碰撞檢測(cè)仿真,能夠較為便利地使用各類(lèi)碰撞檢測(cè)組件,檢驗(yàn)?zāi)P偷呐鲎矙z測(cè)效果。經(jīng)過(guò)多次調(diào)試,碰撞檢測(cè)仿真過(guò)程運(yùn)行效果良好,使用者可通過(guò)控制針灸模型運(yùn)動(dòng)方向,檢驗(yàn)自身對(duì)穴位點(diǎn)正確位置的掌握程度,運(yùn)行時(shí)畫(huà)面流暢度也能夠滿足畫(huà)面真實(shí)性的基本要求,能夠?yàn)獒樉木毩?xí)人員提供良好的練習(xí)環(huán)境。