王 雪,王出航,劉曉理
(長春師范大學(xué)計算機(jī)科學(xué)與技術(shù)學(xué)院,吉林 長春 130032)
隨著互聯(lián)網(wǎng)的普及,更多的學(xué)習(xí)者開始關(guān)注計算機(jī)配件,配件價格上調(diào)以及品種繁多加大了學(xué)生學(xué)習(xí)計算機(jī)配件知識的難度。三維模型的發(fā)展已處于成熟階段,三維模型被廣泛應(yīng)用于教育、游戲和影視特技等行業(yè),三維模型與VR技術(shù)的結(jié)合可以為學(xué)習(xí)者創(chuàng)建逼真的虛擬學(xué)習(xí)場景。近些年,我國逐漸加大對VR行業(yè)的支持力度,為VR技術(shù)的發(fā)展提供了良好契機(jī)。將VR技術(shù)應(yīng)用于對計算機(jī)配件的研究與學(xué)習(xí)中,能夠有效幫助學(xué)習(xí)者解決現(xiàn)實(shí)學(xué)習(xí)環(huán)境中的諸多問題,及時了解硬件市場的最新動向。VR技術(shù)突破傳統(tǒng)學(xué)習(xí)手段的局限,全面實(shí)現(xiàn)學(xué)習(xí)場景立體化、真實(shí)化,使枯燥的學(xué)習(xí)過程變得活靈活現(xiàn),減輕學(xué)習(xí)者的厭學(xué)心理,使學(xué)習(xí)者可以在一個生動活潑的虛擬環(huán)境內(nèi)學(xué)習(xí)。為學(xué)習(xí)者創(chuàng)設(shè)多種問題情景,這不僅使學(xué)習(xí)者熟練掌握計算機(jī)配件的基礎(chǔ)知識,還增加了學(xué)習(xí)者動手操作練習(xí)的機(jī)會。
虛擬現(xiàn)實(shí)(Virtual Reality)技術(shù),簡稱VR技術(shù),是運(yùn)用計算機(jī)將計算機(jī)圖形技術(shù)、多媒體技術(shù)、傳感技術(shù)、人機(jī)交互技術(shù)、網(wǎng)絡(luò)技術(shù)、心理學(xué)等學(xué)科技術(shù)發(fā)展形成的綜合技術(shù)[1]。通過計算機(jī)生成真實(shí)世界的模擬[2],建立虛擬的仿真環(huán)境,為體驗者帶來截然不同的身心體驗。虛擬現(xiàn)實(shí)具有以下三個基本特征。
(1)沉浸感,又稱為臨場感,主要是指學(xué)習(xí)者在創(chuàng)建的三維環(huán)境中有身臨其境的真實(shí)感覺,對虛擬環(huán)境內(nèi)的事務(wù)有所感觸。其最主要的特征就是讓學(xué)習(xí)者自認(rèn)為是虛擬環(huán)境中的一部分,隨著虛擬環(huán)境的變換,身心也受到感染。體驗者通過鼠標(biāo)和屏幕等設(shè)備切實(shí)感受虛擬環(huán)境。
(2)想象性,使學(xué)習(xí)者跳脫出現(xiàn)實(shí)世界,無限發(fā)揮想象力,創(chuàng)造出有無限可能的虛擬世界。虛擬世界的所有內(nèi)容都是學(xué)習(xí)者想象出來的,彰顯學(xué)習(xí)者原有的設(shè)計思路。
(3)交互性,是指學(xué)習(xí)者對虛擬環(huán)境內(nèi)存在物體的可操作程度,從虛擬環(huán)境中得到反饋的自然程度[3]。交互性主要借助計算機(jī)的窗口、鼠標(biāo)、鍵盤來代替,幫助學(xué)習(xí)者產(chǎn)生與在現(xiàn)實(shí)世界相似的感受。交互性能保證虛擬環(huán)境具備更大的創(chuàng)造性,給學(xué)習(xí)者帶來更逼真的體驗與更好的感受。
計算機(jī)配件模型設(shè)計全過程主要包括由Maya創(chuàng)建逼真的三維立體靜態(tài)模型,再導(dǎo)入Unity3D以實(shí)現(xiàn)動態(tài)交互功能。下面以三維鼠標(biāo)模型的設(shè)計制作為例進(jìn)行詳細(xì)說明。
Maya是一款三維建模軟件,通過對立方體、球體等基礎(chǔ)幾何元素進(jìn)行拉伸、結(jié)合[4],構(gòu)建較復(fù)雜的幾何場景。三維鼠標(biāo)模型的創(chuàng)建選用的是Maya2018軟件,創(chuàng)建鼠標(biāo)模型的詳細(xì)步驟如下:
第一步,導(dǎo)入模型樣本。打開Maya軟件,“空格+鼠標(biāo)左鍵”,先將窗口切換到四視圖狀態(tài),導(dǎo)入鼠標(biāo)的正上方圖片:在Top-Y視圖窗口內(nèi)依次點(diǎn)擊“視圖”“圖像平面”“導(dǎo)入圖片”,打開對話框,在打開的對話框里找到要導(dǎo)入的圖片,雙擊圖片完成導(dǎo)入。圖片導(dǎo)入后,點(diǎn)開右側(cè)的伸縮欄,在通道盒里可以對圖片透明度、大小等屬性進(jìn)行調(diào)整,這里圖片的透明度為60%。然后分別點(diǎn)擊“Side-X”和“Front-Z”視圖,進(jìn)行同樣的操作,導(dǎo)入鼠標(biāo)側(cè)方圖片和正前方圖片,調(diào)整三張圖片的比例和相對位置與真實(shí)鼠標(biāo)一致。
第二步,創(chuàng)建鼠標(biāo)按鈕曲面。首先繪制鼠標(biāo)右側(cè)外表輪廓曲線,在菜單欄依次單擊“創(chuàng)建按鈕”“曲線工具”“CV曲線工具”,沿著鼠標(biāo)圖片上右鍵的邊緣依次在三個視圖中創(chuàng)建錨點(diǎn),多個錨點(diǎn)相連成為一條曲線,勾勒鼠標(biāo)右側(cè)外形的輪廓。然后由線成面,將勾勒出的四條鼠標(biāo)右側(cè)外形輪廓線條變成一面。在菜單欄依次單擊“曲面”“雙軌成型”“雙軌成形2工具”,再選擇側(cè)邊的兩條曲線單擊“Enter”鍵確定,接著選擇另外兩條曲線重復(fù)操作,鼠標(biāo)右側(cè)曲面就創(chuàng)建完成。最后,選中之前創(chuàng)建的右側(cè)鼠標(biāo)曲面,在菜單欄依次單擊“編輯”“特殊復(fù)制命令”,在彈出特殊復(fù)制選項設(shè)置窗口內(nèi)設(shè)置大小選項的值為(1,1,-1),然后單擊“特殊復(fù)制”按鈕,鼠標(biāo)左側(cè)曲面完成。
第三步,合并鼠標(biāo)左右側(cè)曲面。選擇制作完成的曲面,在菜單欄依次單擊“曲面”“編輯曲面”“合并曲面”,在彈出的對話框內(nèi)選中“混合”附加方法,在多結(jié)點(diǎn)選中“保持”,調(diào)整混合偏移值為0.500 0,取消選中“插入結(jié)”和“保持原始”,單擊“應(yīng)用”按鈕,完成合并。
第四步,制作鼠標(biāo)中鍵。首先繪制鼠標(biāo)中鍵外部輪廓曲面,先繪制上半部分中鍵輪廓曲線,將其復(fù)制并縮小曲線的范圍,作為下半部分中鍵輪廓曲線。選擇繪制好的兩條中鍵輪廓曲線,在菜單欄依次單擊“編輯”“特殊復(fù)制命令”,接著在彈出的特殊復(fù)制選項設(shè)置窗口內(nèi)設(shè)置大小為(1,1,-1),合并曲線并執(zhí)行Loft(放樣)命令。然后選擇設(shè)計好的中鍵外部輪廓曲面,再復(fù)選鼠標(biāo)的左右側(cè)曲面,在菜單欄依次單擊“曲面”“曲面圓角”“圓形圓角”,在設(shè)置窗口設(shè)置Radius值為-0.03。然后選擇鼠標(biāo)左右側(cè)曲面,在菜單欄依次單擊“曲面”“修剪工具”,剪切出一個可以放置鼠標(biāo)中鍵的缺口。最后制作鼠標(biāo)中鍵滾輪,創(chuàng)建一個NURBS球體,對曲面球體進(jìn)行變形調(diào)整,直到效果如圖1所示。
圖1 鼠標(biāo)中鍵
第五步,鼠標(biāo)外表曲面模型制作。首先制作鼠標(biāo)側(cè)面輪廓模型,創(chuàng)建四條輪廓曲線并選中,在菜單欄依次單擊“曲面”“雙軌成型”“雙軌成形2工具”,選擇側(cè)邊的兩條曲線按“Enter”鍵確定,接著選擇另外兩條曲線,側(cè)面輪廓模型創(chuàng)建完成。然后制作鼠標(biāo)底部模型,選擇側(cè)邊的曲面單擊鼠標(biāo)右鍵,在下拉菜單中選中“等位線”,顯示曲面等參線,接著在菜單欄上依次單擊“曲線”“復(fù)制曲面曲線”,選擇復(fù)制好的曲線,單擊鼠標(biāo)右鍵選擇“曲線點(diǎn)”,在曲線上選兩個點(diǎn),在菜單欄依次單擊“曲面”“曲面編輯”“斷開切線”,將曲線斷成3段。最后使用EP曲線工具,按C鍵鎖定到曲線,在曲線的兩個斷點(diǎn)處繪制一條直線,接著選擇新生成的4條曲線,使其邊界成面,效果如圖2所示。
圖2 鼠標(biāo)底面
第六步,整合模型?;氐巾斠晥D中,在鼠標(biāo)表面的鼠標(biāo)按鈕與后面銜接之處繪制一條曲線,選擇生成的4條曲線,在菜單欄依次單擊“曲面”“邊界成面”,由線成面,鼠標(biāo)模型制作完成。將制作好的鼠標(biāo)模型保存為FBX格式,方便后續(xù)將模型導(dǎo)入到Unity3D軟件內(nèi)。
Unity3D可創(chuàng)建三維動畫、游戲等,支持Maya、3ds Max等軟件的導(dǎo)入模型,是一個比較全面的綜合性引擎[5]。在Unity2017.2.0f3軟件內(nèi),采用C#語言編輯腳本,實(shí)現(xiàn)鼠標(biāo)模型的功能設(shè)計,完成后導(dǎo)出為PC端格式,學(xué)習(xí)者可以通過打開導(dǎo)出的執(zhí)行文件開始學(xué)習(xí)。具體實(shí)現(xiàn)步驟如下:
第一步,模型導(dǎo)入。只有將制作完成的鼠標(biāo)模型導(dǎo)入到Unity3D軟件內(nèi),運(yùn)用C#語言編輯腳本才能賦予鼠標(biāo)模型可操作的功能。首先需要創(chuàng)建放置模型的文件夾,選中Unity3D內(nèi)資源文件夾“Assets”,單擊鼠標(biāo)右鍵,選中“Create”選項,在彈出的下拉菜單中單擊“Folder”按鈕,并為新生成的文件夾命名為“MayaModels”。然后在Unity3D主界面菜單欄上單擊“Assets”按鈕,在彈出的下拉菜單中單擊“Import Package”按鈕,接著在出現(xiàn)的下拉菜單中單擊“Custom Package”按鈕,在彈框中選中需要導(dǎo)入的文件夾,最后單擊“保存”按鈕即可,將導(dǎo)入的模型放到主視圖下,開始模型的運(yùn)用。
第二步,編輯腳本,為鼠標(biāo)模型添加交互功能,腳本編寫程序選用的是C#語言。在資源文件夾“Assets”下的“Scripts”文件下單擊鼠標(biāo)右鍵,選擇“Create”下拉菜單下的“C# Script”,創(chuàng)建后綴名為.cs的腳本,默認(rèn)狀態(tài)下可以對文件重新命名。打開Unity3D內(nèi)的腳本可以發(fā)現(xiàn),在此項目中創(chuàng)建的腳本都默認(rèn)繼承MonoBehaviour類,含有常用的基礎(chǔ)函數(shù)、事件響應(yīng)函數(shù)、默認(rèn)組件、組件獲取函數(shù)等,使腳本文件以“組件”形式作用于鼠標(biāo)模型。在虛擬場景內(nèi)最基本的交互功能有場景漫游、鼠標(biāo)發(fā)射射線、碰撞體碰撞等功能。
第三步,場景漫游。攝像機(jī)實(shí)現(xiàn)場景漫游是通過移動攝像機(jī)的位置和方向觀察虛擬場景內(nèi)的各個角落,腳本實(shí)現(xiàn)函數(shù)是Input.GetAxis()。學(xué)習(xí)者通過鍵盤的上下左右鍵來調(diào)整攝像機(jī)的位移,鼠標(biāo)的滾輪可以調(diào)整攝像機(jī)視角的遠(yuǎn)近程度,方便學(xué)習(xí)者觀察鼠標(biāo)模型的輪廓和細(xì)節(jié)。
第四步,碰撞檢測。碰撞體是Unity3D內(nèi)實(shí)現(xiàn)物理屬性交互最重要的組件之一,場景內(nèi)任何物體想要發(fā)生碰撞必須添加物理組件下的碰撞體組件,它與剛體組件一起作用才能觸發(fā)碰撞效果。每個GameObject在被創(chuàng)建時系統(tǒng)會根據(jù)其外觀形狀自動分配一個合適的碰撞體,根據(jù)物體形狀不同設(shè)有多種類型碰撞體,由于鼠標(biāo)模型外形是不規(guī)則的,所以在創(chuàng)建碰撞體時應(yīng)選擇最貼合鼠標(biāo)外形的碰撞體,本文選擇的是盒子碰撞體。給鼠標(biāo)模型添加盒子碰撞體的具體操作為:選中鼠標(biāo)模型,在右側(cè)“Inspector”面板中點(diǎn)擊“Add Component”按鈕,在輸入框內(nèi)輸入“Box Collider”,盒子碰撞體添加成功后,可以對碰撞體的大小做出適當(dāng)?shù)恼{(diào)整,盡可能地模擬現(xiàn)實(shí)中的碰撞效果。添加剛體的方法也是如此,剛體組件為鼠標(biāo)模型提供物理屬性,讓鼠標(biāo)模型在虛擬場景中可以受到物理引擎的作用。鼠標(biāo)模型添加盒子碰撞體和剛體組件后才能觸發(fā)碰撞事件,并自動生成OnColliderEnter、OnColliderStay、OnColliderExit三個碰撞信息發(fā)送給腳本參數(shù),在這三個函數(shù)下編寫執(zhí)行腳本。
第五步,射線檢測。在虛擬場景中想要360°無死角地查看鼠標(biāo)模型,就涉及Unity3D的射線檢測模塊,常見的射線投射方式包括Linecast和Raycast。Linecast需要定義射線發(fā)射的起止位置[6];Raycast需要通過設(shè)置射線碰撞變量和更改三維場景中物體的標(biāo)簽[7],由于終止位置是不固定的,所以選擇用Raycast投射方式。這里以移動鼠標(biāo)模型為例,具體實(shí)現(xiàn)代碼如下:
//創(chuàng)建一條從攝像機(jī)到屏幕的射線,并穿過屏幕position(x,y)像素坐標(biāo)(position.z被忽略)
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
//是一個結(jié)構(gòu)體,用來存儲射線返回的信息
RaycastHit hit;
//從攝像機(jī)發(fā)射一條射線,射線范圍是100米,如果射線碰到鼠標(biāo)模型,返回true
if (Physics.Raycast(ray,out hit,100f))
{
//設(shè)置鼠標(biāo)模型要移動的距離
Vector3 offset = new Vector3(18,0,0);
//改變鼠標(biāo)模型位置
hit.transform.position = hit.transform.position + offset;
}
第六步,保存場景。當(dāng)創(chuàng)建完一個場景后,需要對場景進(jìn)行保存,保持場景文件的方法如下:單擊界面左上角的“文件”按鈕,然后在彈出的下拉菜單中單擊“保存場景”按鈕,接著在彈出的對話框中為場景文件命名為“MouseScene”,最后單擊“保存”按鈕,場景保存成功。
第七步,導(dǎo)出場景。本文導(dǎo)出的場景需要在電腦上進(jìn)行觀看,所以導(dǎo)出的格式選擇PC端。導(dǎo)出場景文件的方法如下:單擊界面左上角的“文件”按鈕,然后在彈出的下拉菜單中單擊“Build設(shè)置”按鈕,接著在彈框內(nèi)首先看到的是加載的場景界面,單擊右下方的“Add Open Scenes”按鈕導(dǎo)入“MouseScene”場景,選中此場景。然后,在下半部分的“Platform”界面選中“PC、Mac & Linux Standalone”,其他設(shè)置可以保持默認(rèn)值,單擊“Build”按鈕,選擇放置可執(zhí)行文件的文件夾后點(diǎn)擊“保存”即可。打包好的內(nèi)容是一個可執(zhí)行的exe文件和包含其所需資源的同名文件夾[8],單擊exe文件后便會出現(xiàn)可以運(yùn)行的對話框,選擇分辨率,單擊“Play”運(yùn)行,進(jìn)入場景開始對鼠標(biāo)內(nèi)容的學(xué)習(xí),運(yùn)行效果如圖3所示。
圖3 鼠標(biāo)模型運(yùn)行效果圖
針對現(xiàn)有計算機(jī)學(xué)習(xí)者面臨的配件種類多、更新速度快等問題,本文運(yùn)用VR技術(shù),創(chuàng)建三維鼠標(biāo)模型,并詳細(xì)介紹了三維模型創(chuàng)建的過程以及所用到的交互功能的實(shí)現(xiàn)過程。在虛擬學(xué)習(xí)場景內(nèi)設(shè)計三維模型的功能,能夠為學(xué)習(xí)者日后學(xué)習(xí)其它計算機(jī)配件奠定基礎(chǔ),使學(xué)習(xí)者在掌握計算機(jī)基礎(chǔ)知識的同時提高自身技能。