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