陸春雨 丁穗娟
(1.廣西醫(yī)科大學信息與管理學院 廣西壯族自治區(qū)南寧市 530021 2.廣西醫(yī)科大學教務處 廣西壯族自治區(qū)南寧市 530021)
虛擬現實(Virtual Reality,VR)是以計算機技術為核心,生成與一定范圍真實環(huán)境在視、聽、觸感等方面近似的數字化環(huán)境。用戶借助必要的裝備與其進行交互,可獲得如臨其境的感受和體驗。[1]近年來,虛擬現實技術在各行各業(yè)中的應用越來越廣泛,在教育教學中更是能發(fā)揮出獨特的魅力。
傳統(tǒng)的中醫(yī)學十二經脈教學多以掛圖、塑料或硅膠模型為教具進行講解。二維圖片缺乏空間立體感,塑料或硅膠模型只把經絡繪制于人體表面,并未表現其與內臟、骨骼的關系,學生學習起來更多地需要發(fā)揮想象力。而傳統(tǒng)醫(yī)學加上先進的虛擬現實技術,正可以突破性地解決這些問題:學生戴上VR 頭盔,可以沉浸式全方位觀察人體十二經脈的循行,以及它們與人體肌肉、骨骼、內臟的空間關系。通過VR 手柄可進行抓取、旋轉、點擊等操作,穴位的相關知識會有語音播放,一切都身臨其境,形象生動,給予學生完全不同的學習體驗。
Unreal Engine 4(UE4、虛幻4)是由Epic Games 開發(fā)的,具有成熟的虛擬現實模擬技術的引擎,是目前大多數的VR 項目開發(fā)的首選引擎。UE4 具有的強大的物理模擬能力和畫面渲染能力,可以與在3ds Max、Maya 中構建的模型完美結合,給人以真實感,從而增強學生的學習興趣。[2]
技術路線如圖1 所示。
首先在DAZStudio 中找到合適的人體、骨骼、內臟等模型,然后需要解決3 個問題:
(1)人體模型默認是T-Pose(兩臂水平放置),按照“觀察”經絡的習慣,要調整成類似A-Pose(肩膀松弛,兩臂下垂,前臂稍微向外側旋轉)的姿勢。骨骼也做同樣的調整。
(2)模型面數太多,比如人體的模型面數將近13 萬個三角面。過多的面數會降低VR 引擎的運行效率,很有可能造成卡頓、實時渲染出錯等問題,所以需要用DAZStudio 里的減面插件Decimator進行減面處理。減面太少,達不到效果;減面太多,又會造成模型嚴重失真。這里經過測試,設置為原來的20%,也就是減到2 萬多個三角面。但有些面還是會出現錯誤,所以先以FBX 格式導出,然后導入到3dsMax 中進一步加工。在3dsMax 里,刪除掉一些錯誤的面(比如指甲、口腔內部)。眼睛的瞳孔部分可以在3dsMax里重新制作,然后替換,注意調整好UV(貼圖坐標)。骨骼還會帶有一些輔助物體,因為用不上,可以直接刪除。
(3)整理材質。默認的材質非常繁復,需要在3dsMax 中精簡優(yōu)化(主要是合并材質ID),否則導入UE4 以后再處理會非常麻煩。
在3dsMax 中先用曲線“繪制”出經脈,然后用Loft(放樣)生成3D 對象,用放樣中的ScaleDeformation 制作出經脈的粗細變化(越往指端/趾端越細)。經脈還要拆分好UV(貼圖坐標),以便后面在UE4 里制作材質動畫。穴位就用分段數為8 的球體來表示。注意各個模型的命名。最后所有模型分別從3dsMax 中以FBX 格式導出,然后就可以導入到UE4 中了。
先創(chuàng)建一個空白場景,然后用資源庫里的墻壁、地板、天花板等組件創(chuàng)建一個簡易的房間,設置好燈光,墻壁上放置十二經脈的掛圖作為裝飾(在網上找到十二經脈的圖片,然后導入到UE4,作為貼圖創(chuàng)建掛圖的材質,最后分別賦予十二個平面)。
在UE4 中用VR 模板創(chuàng)建一個新的工程,把上面創(chuàng)建好的房間遷移(Migrate)到這個新工程中。先修改按鍵綁定,包括左、右手的傳送、抓取、顯示菜單、點擊菜單選項等,再把人體模型、骨骼、內臟、經脈分別導入到UE4 中,然后設置各個模型的屬性。把骨骼、內臟、經脈都作為人體模型的子物體。人體模型的Mobility 設置為Movable,啟用Collision 中的Simulation Generates Hit Events和Generate Overlap Events, 在其藍圖的ClassSettings里添加PickupActorInterface,并添加藍圖Event Pickup 和Event Drop。這樣VR 手柄控制的“手”碰到人體模型并按下“抓取”按鈕時,就能通過藍圖接口PickupActor 發(fā)送消息Pickup,人體模型接收到該消息就會執(zhí)行Pickup 事件,人體模型會附加到VR 手柄控制的“手”上,也就是用“手”抓起人體模型;當松開“抓取”按鈕時,就會發(fā)送消息Drop,人體模型接收到該消息就會執(zhí)行Drop 事件,人體模型即與“手”分離,完成釋放的動作。
人體模型需要創(chuàng)建新的半透明材質,再創(chuàng)建多個材質實例(Material Instance),根據材質ID 設置其中的Texture,再賦予身體的不同部分。經脈的材質需要加上TexCoord 和Panner 來制作流動的效果,穴位的材質主要是利用EmissiveColor 來制作發(fā)光的效果。
圖1:技術路線
圖2:菜單
圖3:自定義函數UpdateTextFacing
圖4:與穴位交互的藍圖
圖5:最終運行的效果
用Widget 創(chuàng)建菜單,通過用VR 手柄點擊相應的CheckBox 或Button 來實現肌肉、骨骼、內臟、經脈的顯示和隱藏。點擊經脈按鈕時,會用ExecuteConsoleCommand 執(zhí)行在LevelBlueprint 中的兩個事件:先隱藏所有經脈,再顯示該按鈕對應的經脈,然后用SetAudioSound 播放該經脈的說明音頻。菜單如圖2 所示。
某條經脈顯示出來后,其上的穴位和穴位的名稱文字(也是用Widget 制作)也同時顯現。在旋轉模型時,這些文字也要一邊保持面對著鏡頭(即操作者的視角)一邊跟著旋轉。這里使用EventTick(每幀都執(zhí)行),先判斷穴位的顯隱狀態(tài),如果顯示,就執(zhí)行一個自定義函數UpdateTextFacing:根據Tag 得到穴位文字的數組,再通過ForEachLoop 和FindLookatRotation 得到每一個穴位文字與操作者視角在Yaw 上的偏轉值,然后以此設置它在世界坐標系中的旋轉值。如圖3 所示。
當用“手”觸碰某個穴位時(Overlap),先判斷其是否具有“xuewei”標簽,如果有就執(zhí)行DoOnce(可以避免短時間重復觸發(fā)),然后把根據GetDisplayName 得到的名字用Split 截取右側字符,在SoundName 數組中查找(FIND),得到相應的Index,用GET 從Sound 數組中得到相同Index 的音頻,再用SetAudioSound播放該音頻。接著是設置穴位的材質,由金色變成紫色,然后用PlayHapticEffect 讓手柄震動,給操作者視覺和觸覺上都有反饋,增強操作體驗。最后是延遲(Delay)3 秒,再去重置DoOnce。如圖4 所示。
打包前要先安裝Microsoft Visual Studio Community 和.net Framework 4.6.2 Developer Pack,打包完成后會生成.exe 可執(zhí)行程序。
操作者戴上VR 頭盔,手上拿著VR 手柄,置身于一個虛擬的場景中。眼前是一個人體模型,可以用“手”抓起它,隨意觀察。通過手柄上的按鍵可以打開菜單,點擊上面的按鈕顯示出相應的經脈和穴位,用手觸碰穴位會播放說明音頻。
經過部分師生試用反饋,都對該系統(tǒng)表示基本滿意,也提出了不少建議,比如添加評估、測驗功能等。同時還一致認為VR 頭盔設備不夠輕便,長時間佩戴感覺不適;“紗窗”效應還是明顯,分辨率還需進一步提高;VR 頭盔需要通過線纜跟電腦相連,如果能徹底擺脫線纜的束縛可以獲得更理想的操作體驗。最終運行的效果如圖5 所示。
把虛擬現實技術應用到傳統(tǒng)醫(yī)學教學中的優(yōu)勢顯而易見。能夠身臨其境的學習專業(yè)知識可以有效減少學習過程中的枯燥乏味,讓學生接受教學信息的形式更多元化,改善了教學效果,使教學內容更加具備趣味性,更吸引學生[3]。沉浸式的體驗對操作者的感官刺激更加強烈,印象也更加深刻,因此也更有利于提高學生的自主學習能力。