張 俊,徐小雙,吳 雷,董雙峰
(1.黃岡師范學院 圖書館,湖北 黃州 438000;2.黃岡師范學院 教育科學與技術學院,湖北 黃州 438000;3.黃岡市教育局 設備裝備處,湖北 黃州 438000)
虛擬圖書館交互漫游的設計與實現
張 俊1,徐小雙2,吳 雷2,董雙峰3
(1.黃岡師范學院 圖書館,湖北 黃州 438000;2.黃岡師范學院 教育科學與技術學院,湖北 黃州 438000;3.黃岡市教育局 設備裝備處,湖北 黃州 438000)
本文以黃岡師范學院圖書館為例,對虛擬圖書館進行系統的設計與制作,包括對圖書館場景的信息采集,圖書館場景三維模型的創建,材質的采集、制作、烘焙,圖書館內部場景的觀摩的實現,進行空間移動,攝像機視角變換,最后實現了系統,對網上圖書館建設具有一定的啟示。
虛擬現實;Virtools;圖書館;漫游系統
圖書館是學生學習的優秀資源和社會各界人士尋找有價值資料的最權威場所。大學圖書館是大學的重要組成部分,是大學的文獻信息中心,是為教學和科研服務的學術性機構,是人類知識的寶庫,是尋求知識,追求理想的良師益友,是大學生的第二課堂[1]。虛擬現實技術提供了一個可以直觀和清晰的表現信息的途徑,越來越顯示出廣闊的應用前景[2]。將校園圖書館以虛擬現實的形式展現出來,不僅可以使學生足不出戶就能了解校園圖書館的內部結構,還可以使剛剛進入大學的新生迅速了解圖書館結構,也便于校園與校園之間的互相了解和提高[3]。
虛擬圖書館漫游系統是實現圖書館內部全景漫游的系統。現代大學圖書館風格各異,功能朝著多層次、靈活性、綜合型、高效性發展。藏書室、借書室、閱覽室數量眾多,分布在各個樓層。系統實現虛擬圖書館建筑結構,完成功能區直觀展示,通過交互以第一人稱方式在圖書館內走動,方便用戶觀看圖書館功能區域設定,達到對真實圖書館的預先了解。
圖書館內部具有桌椅、門窗、書柜、儲物柜、地圖、電腦等,瀏覽者可以使用鍵盤上相應的鍵進行位置和視角的控制,自主觀察內部各種模型,水平方向自由行走、360度角環視、上下樓層自由走動等。因此建立虛擬圖書館,一方面需要在現場信息采集基礎上創建圖書館場景三維模型,制作和烘焙相關材質,以企達到圖書館內部場景的觀摩的實現[4]。另一方面,虛擬圖書館的內部環境具有交互性、真實性,需要采用第一人稱視角,在虛擬圖書館任意位置進行前后左右的空間移動,碰撞檢測,渲染光效以及沿樓梯的上下移動,使瀏覽者可以感覺到真實步入圖書館的感覺,從而實現虛擬圖書館漫游的目標[5]。
虛擬圖書館漫游系統開發關鍵需要有一套功能完備的軟件開發平臺。而在軟件開發平臺中最主要的是虛擬現實軟件,它承擔三維圖形場景驅動,提供虛擬現實應用開發的接口,連接虛擬外部設備和應用數據庫等重要工作[6]。Virtools 是一款整合軟件,由法國達索系統集團提供,互動性強大,是功能強大的元老級虛擬現實制作平臺。尤其是Virtools5.0的開放結構支持多種2D、3D文件格式,便于導入或導出文件,與其它資源編輯軟件協同工作,使3D技術的應用變得輕松。Unity3D是由Unity Technologies開發的多平臺的綜合型游戲開發工具,可以創建三維視頻游戲、建筑可視化、實時三維動畫等虛擬產品。另外還有Quest3d,Cult3d,Torque,開源ORGE都是國際公認的游戲開發平臺。國內也有類似的開發平臺推出,虛擬現實仿真平臺(VRP,Virtual Reality Platform)是中國第一款完全獨立自主知識產權的虛擬現實軟件,在國內市場占有率最高的虛擬現實軟件。在虛擬現實制作過程中,常常需要用到如PhotoShop、AutoCAD、3Dmax、Maya、Promiere、AfterEffects等軟件。
相關功能類似軟件的優缺點是相對的。我們從自身的角度和用戶非專業游戲玩家的特點來選擇Virtools作為虛擬現實制作平臺。并采用Maya完成三維建模。
3.1 主要模型的分類
虛擬圖書館場景內包含門窗、電腦桌、長桌、教師桌、椅子、書架、電腦、樓梯、稱重柱子、內墻和外墻等模型。為了保證場景的簡潔性和統一性,使制作過程簡化,將差異不大的模型制作為同一種模型,比如對于有扶手和沒扶手椅子,在建立模型時只制作沒扶手的椅子,有扶手的椅子均被之代替。不僅場景得到簡化,而且將模型刻畫得更為細致。在制作模型之前,不僅需要采集相關圖片信息,還要對需要制作的模型進行測量,繪制出圖書館的內部場景俯視圖,以便能夠更加準確的制作模型的相關比例和模型的具體擺放位置。
3.2 虛擬圖書館主體建模
為了實現整個虛擬圖書館系統,采用Maya軟件來完成建模任務,圖書館主體建筑是其中重要的部分。由于黃岡師范學院圖書館以承載重量的柱子為基礎,圖書館中的幾乎所有格局都是由這些柱子所劃分的,所以首要任務就是將載重柱子創建出來。首先建立一個平面,并將其放大,附著的材質是自己制作的所有承重柱子的位置信息的圖片,這樣有利于定位。然后創建一個多邊形長方體,按照比例調節成為柱子的形狀,長寬高比別為1∶1∶112,并通過復制功能和移動功能將其擺放到合適的位置。
在此基礎上,對外墻和內部較大的墻面進行制作。首先為模型添加一個地板,新建一個多邊形長方體拉伸至合適的比例,然后調整位置即可。接下來制作外墻,新建一個多邊形長方體,將其上面和下面刪除,只留下一個“筒子”,使用Insert Edge Loop Tool添加必要的線條,拖動中間的面即可制作成為圖書館外墻的凹面。最后新建三個長方體,調節形狀,構成電梯和內部的主要墻體,保存文件。最后結果如圖1所示。

圖1 圖書館的整體結構
圖書館外墻上鑲嵌大量的窗戶,所以需要對窗戶建模。創建一個長寬高為0.075、10、7的一個多邊形長方體,然后貼上自己制作的窗子材質,材質使用Photoshop制作,模仿真實的窗子框架的劃分,使用白色代表窗子框架,無色代表玻璃,導出PNG格式圖片。貼圖時注意使用布林材質,即可產生金屬和玻璃的高亮效果,如圖2所示。

圖2 窗戶
圖書館中的門主要有兩種,玻璃門和不透明的門,不透明的門主要以貼圖的形式來完成,在這里只制作玻璃門,其中包括打開的門和關閉著的門。門的制作和窗子一樣也主要由貼圖完成,不同的是關閉著的門比窗子多了兩對把手,把手的創建也較為簡單,創建三個圓柱體,調整大小和角度拼湊在一起,放置在門中間的位置,然后經過復制完成四個把手的創建,最后將所有的部件選中,使用Mesh菜單中的Combine命令進行組合,進行保存,如圖3所示。接下來在此基礎上使用Insert Edge Loop Tool,將其劃分成四段,改成面模式之后,選取右邊的兩部分,使用Mesh菜單中的Extract命令將原來的模型破成兩部分,然后對其調整成為門打開的形狀,將結果進行另存為,避免覆蓋之前的模型,如圖4所示。

圖3 關閉的門

圖4 打開的門
在門窗制作完畢之后,就可以與之前的框架進行結合,制作出一個完整的圖書館模型。首先,要把樓層制作出來,新建一個多邊形長方體,設置比例為139∶2∶134,用來分隔樓層,首先將其放置在樓頂的位置,因為本圖書館只有樓頂是一個完整的長方體,而從2樓至6樓的地板都是不規則的,其中4、5、6三層樓的一致,所以只要做三種地板即可。復制剛剛所制作出的長方體,調節模型的細分寬度為8,這樣模型就被劃分為8份,然后使用頂點模式,調整其形狀和圖書館外墻的俯視圖一致,將其復制成5份,其中三份就是4、5、6三層的地板。接下來修改另外兩份,繼續使用點模式,調節成“工”字形,中間稍窄的作為3樓地板,中間較寬的作為2樓地板。將這5個地板模型插入在圖書館中等分之前的模型。在安裝門窗之前,需要把門窗的相關位置的墻刪除掉。將外墻和內墻按照圖書館的本來面目使用Insert Edge Loop Tool將其需要刪除的地方劃分出來,轉化為面模式,刪除門窗應該占據的位置。使用File菜單中的Import命令導入之前保存的門窗文件,通過復制、調整角度和位置,將門窗安放在之前刪除墻壁的地方,如圖5所示。
瀏覽者可以在圖書館內部進行自由移動,擁有非常大的自由度,而不是按照計算機已經設定好行進路線進行瀏覽。在此基礎上,爭取使模型面片數盡可能少,以避免不必要的運算,使瀏覽者能夠方便快捷的進行瀏覽欣賞。
虛擬圖書館內部包含儲物柜、書架、電腦桌、椅子、樓梯等等,對其建模就不一一論述。
3.3 虛擬圖書館場景組合
當模型建立完成后,需要將其放入同一個文件中。打開大場景,對場景中還沒有材質的地方添加已經準備好的材質,當模型比較大而圖片比較小,貼圖的時候需要仔細調節位置。組合的模型一共分為兩部分,一部分是需要參與碰撞檢測的,而另一部分則不需要,要將兩部分分別進行組合。選擇想要制作碰撞檢測的部分,包括場景模型內部有關于墻壁、物體、柱子等模型,通過Mesh菜單下的Combine命令,可以將這些模型組合為一個模型。將其他的物體選中,使用同樣的方法將其組合,方便碰撞檢測。
4.1 模型文件的導入
使用Virtools來完成交互的實現。首先在Maya軟件安裝nmo格式的導出插件,確保Window菜單下的Settings/Preferences中的Plug-in Manager選項所彈出的窗口中設置插件可使用,然后使用File菜單下的Export All選項即可將文件導出成nmo格式的文件。運行Virtools將該導入,圖6是導入后的效果圖。
4.2 “人物”腳本的制作
將所需要實現碰撞檢測的物體全部放置在一個新建的組內,命名為Slider Group。新建一個攝像機,命名為Main Camera。新建一個立方體并命名為Person,并設置其初始位置為二樓大廳處。調節其透明度為全透明。為Person設置腳本。在Virtools中的腳本是以Building Block為基礎,使用箭頭連接數個Building Blocks并賦予相關的參數來實現程序的流程。Switch On Key模組可以實現通過按下鍵盤上的相應的鍵,來完成相應的功能。Switch On Key模組初始創建的時候只有兩個輸入參數和輸出節點,其模組的左下角有一個“v”符號,代表該模組的參數數量或者參數類型是可變的,這樣在制作過程中如果需要使用多于兩個相應的參數只是就不許要創建多個Switch On Key,只要右擊該模組然后選擇增加參數即可。這次使用的Switch On Key輸入參數一共有四個,分別是W、A、S、D,是因為想要通過按下這四個鍵即可完成視角的前后左右移動。

圖6 導入Virtools的圖書館模型
Translate模組可以實現在Virtools中任何3D實體的平移,最初創建這個模組的時候只擁有三個可輸入參數,分別是“平移坐標”“平移的3D實體”“是否可以移動子實體的BOOL值”,但是根據需要還可以添加一個目標3D實體,將其改成四個可輸入的參數,但是這次的設計中,物體的平移是根據鍵盤輸入來完成的,所以不需要這個額外的參數。創建四個Translate模組,分別代表了前后左右四個方向的移動,所以平移坐標分別設置為(0,0.04,0)、(0,-0.04,0)、(-0.04,0,0)和(0.04,0,0),即向自身坐標的Y軸前進和后退0.04個單位和沿著自身X軸左移和右移0.04個單位。數值0.04是經過多次實驗而得到的一個比較理想的速度參數。
為了實現沿著樓梯進行移動,需要實現一個關于縱向移動的功能,上樓梯可以直接利用Virtools自身碰撞檢測模塊提供的沿物體表面進行滑動的功能,但是下樓梯卻不能實現。為了解決這一難題,直接在所有水平移動的后面銜接一個垂直向下的移動。添加一個Translate模組讓其產生一個向下0.04單位的位移,這個功能就能夠很好的實現。Op模組的功能非常強大,它所接收的參數可以是Virtools中支持的全部類型,而且可以將兩個參數進行智能運算得到所需要的結果,正因為這個模組如此之靈活,在它的左下方標記著一個“s”符號,該符號表明其模組可以進行更高層次的設定。這里通過添加一個Op直接獲得Person的坐標,通過添加第二個Op將獲得豎坐標提高4個單位,這個新的坐標就是攝像機視角的位置。模組的特殊標記除了“s”和“v”以外還有“c”,其含義為本模組擁有自己特色的編輯界面。
Set Position模組可以設置3D實體的位置。它的參數類似于Translate,初始參數也是三個,可以添加一個目標,而正好需要這個目標。添加目標參數后將目標設置為Main Camera,將上一步所得到的坐標賦予第二個參數。這樣Person每次移動之后都會設置一次攝像機Main Camera的位置,即可做到“眼隨人動”。
Object Slider模組可以制作有關于碰撞檢測的相關內容。在一些引擎中中實現碰撞檢測需要使用非常復雜的代碼,卻也不能避免錯誤的發生,而Virtools對于碰撞檢測方面的處理非常人性化,只需要將參與到碰撞檢測的物體與人物之間添加一個Object Slider模組并設定參數即可完成。具體方法就是創建一個Object Slider模組,為這個模組設置參數:半徑設置為2,這樣可以避免自身離墻壁太近,也可以避免自己走到很窄的縫隙中去,出現卡住位置的情況;第二個參數設置為之前創建的組Slider Group中,將開始節點連接至Person根節點上面。完成后Person能夠移動和碰撞檢測,并且根據自身的位置設定Main Camera的位置。具體腳本如圖7所示。

圖7 Person腳本
4.3 攝像機腳本的制作
在Virtools引擎之中允許存在數個攝像機,多個攝像機可以同時工作,實現像監控攝像一樣的效果,也可以單獨工作。Set As Active Camera模組可以將一個攝像機設置為當前的攝像機,這樣就可以單獨使用多個攝像機中的一個,也可以根據需要將其它攝像機設置為當前攝像機,即可實現視角的變換。Main Camera腳本的主要實現了攝像機的轉動和Person方向的設置。需要使用一個Switch On Key模組,是用來獲取控制旋轉功能的鍵信息。使用“↑”“↓”“←”“→”控制攝像機的仰視、俯視和環視,其余的設置于獲取平移信息的Switch On Key模組沒什么區別。
Rotate模組可以實現3D實體的旋轉,其初始參數一共有四個,分別是“用矢量來表現一個給定的指向”、“角度和旋轉次數”、“旋轉的3D實體”、“是否可以移動子實體的BOOL值”,與前面的幾個模組一樣,它也可以增添一個目標參數。這四個Rotate分別實現向上旋轉,向下旋轉,向左旋轉,和向右旋轉的四個功能,其中向上旋轉和向下旋轉有旋轉上限為90度。這里仍然使用兩個Op模組,第一個模組的參數是攝像機Main Camera,這里主要是想要獲得其所指向的X坐標和Z坐標,Y坐標沒有必要動,這一項設定由第二個Op進行設置。之前提到過,Op模組具有非常大的靈活性,其返回的結果也會隨著計算的不同而出現不同的類別,兩個Op模組所得到的結果均為向量,要對這兩個向量進行組合,就需要提取其中的X,Y,Z坐標,很容易想到的是使用另外三個Op模組接收一個向量,導出其中一個坐標的數值。但是Virtools提供了另外一個非常簡便的設定,當使用連線將Op模組的向量結果傳遞給另一個模組的數值參數時,會自動提示要求用戶獲得其中一個坐標。由于所獲得的坐標只是三個數字,所以使用Set Component模組將其合并為一個真正的向量坐標。最后通過Set Orientation設置方向,這里只需要第二個參數和通過添加目標實體所產生的一個額外參數。把通過Set Component合并的向量傳遞給該模組,然后添加目標實體,也就是需要設置方向的Person。如圖8所示。

圖8 Main Camera腳本
在測試期間,首先打開所制作的圖書館漫游系統,初始的視角為圖書館二樓的大廳位置,和真實進入黃岡師范學院圖書館的情況一致。使用鍵盤上的W、S、A、D鍵進行前后左右的行走,檢測平移是否會出現問題。使用鍵盤上的方向鍵進行視角的變換,檢測旋轉過程是否會出現問題。通過移動至圖書館內部物體的邊上,檢查碰撞檢測是否正常。圖9分別展示了漫游虛擬圖書館二樓大廳,上下樓層所示和漫游人文社科流動部的情景。

圖9 虛擬圖書館漫游場景
在測試期間,整體的場景互動比較流暢,系統并未出現跳幀和卡死的現象。圖書館是公共的服務性場所,模擬真實環境能讓讀者快速了解圖書館,更好利用圖書館的相關資源。相對以往單一的文本介紹圖書館,采用虛擬現實技術實現直觀的三維交互更能達到對圖書館的身臨其境的體驗。通過Photoshop,Maya和Virtools構建虛擬現實場景,從整體來說系統的實現已經達到了交互圖書館漫游的效果。
[1] 李巧蓉.淺論圖書館信息檢索可視化技術[J]. 蘭臺世界,2013,(02):81-82.
[2] 任金波.虛擬現實技術在圖書館的應用[J]. 科技創新與應用,2012,(34):53-54.
[3] 林于凱.虛擬現實技術在高校圖書館文獻檢索中的應用[J]. 價值工程,2012,(25):173-174.
[4] 林爭春,胡艷.數字圖書館的虛擬場景優化技術研究[J]. 情報探索,2012,(07):98-100.
[5] 朱成,朱開梅,胡偉群,等.三維圖書館可視化館藏文獻信息查詢系統的應用[J]. 實驗室研究與探索,2012,(07):79-83.
[6] 李建榮,孔素真.虛擬現實技術在教育中的應用研究[J].實驗室科學,2014,(3):98-103.
責任編輯 喻曉敏
G434
A
1003-8078(2016)06-0079-05
2016-09-20 doi 10.3969/j.issn.1003-8078.2016.06.21
張俊,女,湖北黃岡人,圖書館館員,主要研究方向為個人知識管理、虛擬漫游。
徐小雙,男,湖北天門人,教授,博士,主要研究方向為計算機支撐的協作學習。
教育部人文社會科學研究一般項目(11YJA880125);湖北省教育科學規劃課題(2010A051);黃岡師范學院科研項目(2013021803)。