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