- 相關(guān)推薦
基于Web3D的異構(gòu)數(shù)據(jù)存儲及通信研究
【摘 要】針對目前虛擬現(xiàn)實中三維模型和二維屬性關(guān)聯(lián)程度低、加載速度慢的情況,本文以湖南省地質(zhì)博物館為例,采用Unity3D作為開發(fā)平臺,研究了異構(gòu)數(shù)據(jù)存儲的存儲方式及通信途徑,制定了數(shù)據(jù)庫存儲和文件存儲相結(jié)合的數(shù)據(jù)存儲方案,并對Unity3D在Web環(huán)境下的數(shù)據(jù)通信過程進行了研究。采用異步、分層次加載的方式對異構(gòu)數(shù)據(jù)進行加載,滿足了參觀者的參觀心理,在保證數(shù)據(jù)一致性的前提下,提高了數(shù)據(jù)的加載速度。
【關(guān)鍵詞】異構(gòu)數(shù)據(jù);存儲;通信;Web3D;虛擬博物館
引言
Web3D,即網(wǎng)絡(luò)三維技術(shù),指在虛擬現(xiàn)實的基礎(chǔ)上,將現(xiàn)實世界中的物體通過互聯(lián)網(wǎng)進行虛擬的三維立體展示并提供交互操作的一種虛擬現(xiàn)實技術(shù)[1]。目前,Web3D技術(shù)得到互聯(lián)網(wǎng)領(lǐng)域的廣泛關(guān)注,并已在博物館的虛擬展示方面得到應(yīng)用,Google與世界多家博物館合作的Google“藝術(shù)計劃”、南京市博物館、上海市博物館、敦煌洞窟壁畫博物館等使用Web3D,均已實現(xiàn)博物館的遠程三維瀏覽及互動,但是目前虛擬博物館基本上采用圖片或全景圖進行展示。采用圖片進行展示,實現(xiàn)方式簡單,但三維展示功能普遍較弱,全景圖雖然在該方面有所提高,能很好的現(xiàn)實虛擬效果,但是仍存在三維模型與二維屬性信息關(guān)聯(lián)程度低的缺陷,參觀者不能獲得場景及展品的信息,不能對展、藏品進行全方位展示,更談不上對展、藏品的信息化管理。
對展館和展品進行虛擬展示,不僅要在網(wǎng)絡(luò)中傳輸結(jié)構(gòu)化的屬性數(shù)據(jù),還需要傳輸大量的沉重的圖片、模型、音視頻等非結(jié)構(gòu)化數(shù)據(jù),這些數(shù)據(jù),特別是非結(jié)構(gòu)化數(shù)據(jù)的傳輸速度受互聯(lián)網(wǎng)網(wǎng)絡(luò)帶寬和傳輸速度的限制,加載速度慢。為了滿足網(wǎng)絡(luò)環(huán)境下參觀者對于加載流暢度的要求,提高三維模型和二維屬性的關(guān)聯(lián)程度,實現(xiàn)異構(gòu)數(shù)據(jù)的一致性存儲,對虛擬博物館進行數(shù)據(jù)存儲和通信方式的研究變得尤為重要。
Unity3D是一個成熟的跨平臺、層次級的虛擬現(xiàn)實開發(fā)引擎,支持JavaScript、C#、Python等多種腳本語言,兼容各種操作系統(tǒng),可發(fā)布成網(wǎng)頁的方式,用戶不用下載客戶端即可體驗。本文以湖南省地質(zhì)博物館為例,采用Unity3D作為開發(fā)平臺,根據(jù)地質(zhì)博物館展/藏品的特點及之間的相互關(guān)系,設(shè)計了虛擬博物館的數(shù)據(jù)存儲方式,并對網(wǎng)絡(luò)環(huán)境中虛擬博物館的數(shù)據(jù)通信過程進行研究。
圖1 系統(tǒng)架構(gòu)示意圖
1 系統(tǒng)架構(gòu)
在網(wǎng)絡(luò)環(huán)境下,為了保證系統(tǒng)的響應(yīng)速度和數(shù)據(jù)安全,系統(tǒng)采用B/S三層架構(gòu),圖1展示了系統(tǒng)的主要構(gòu)成,分為表示層、業(yè)務(wù)層及數(shù)據(jù)層[2]。
1.1 表示層
表示層采用Unity3D的NGUI插件進行開發(fā),是虛擬博物館與參觀者進行交互的界面。表示層通過http協(xié)議將交互產(chǎn)生的數(shù)據(jù)發(fā)送到業(yè)務(wù)層,并對業(yè)務(wù)層反饋的數(shù)據(jù)進行可視化顯示。
在表示層中,虛擬瀏覽導(dǎo)航模塊可根據(jù)用戶選擇的瀏覽方式為用戶提供不同的參觀線路,實現(xiàn)用戶在虛擬展館中的參觀移動。展品展示模塊實現(xiàn)展品在虛擬博物館中的加載及圖片、音頻、視頻、三維模型等全方位展示。查詢功能模塊實現(xiàn)用戶對展館及展、藏品的分類查詢查詢和在虛擬博物館中的定位。
1.2 業(yè)務(wù)層
業(yè)務(wù)層采用Unity3D編寫腳本,根據(jù)表示層用戶的交互請求,向數(shù)據(jù)層請求數(shù)據(jù)。
導(dǎo)航輔助模塊提供虛擬展館中參觀的節(jié)點信息,并根據(jù)用戶的位置提供參觀線路。資源管理模塊對客戶端的請求對數(shù)據(jù)控制模塊反饋的數(shù)據(jù)進行管理。數(shù)據(jù)控制模塊按照導(dǎo)航輔助模塊和資源管理模塊的需求向數(shù)據(jù)層請求數(shù)據(jù)。
1.3 數(shù)據(jù)層
數(shù)據(jù)層存儲虛擬博物館的展館及展、藏品的所有信息,包括屬性信息、位置信息、模型、音頻、視頻、圖片等。
2 數(shù)據(jù)存儲
為了對系統(tǒng)中存儲的異構(gòu)數(shù)據(jù)進行統(tǒng)一管理,保持數(shù)據(jù)一致性,同時,保證數(shù)據(jù)的加載速度,系統(tǒng)采用數(shù)據(jù)庫存儲和文件存儲相結(jié)合的方式存儲異構(gòu)數(shù)據(jù),即在文件系統(tǒng)中存儲文件,同時在數(shù)據(jù)庫中存儲文件的路徑和文件相應(yīng)的BLOB字段。系統(tǒng)在進行讀取操作時,可直接讀取文件系統(tǒng)中的文件,在更新數(shù)據(jù)時,則將數(shù)據(jù)庫和文件系統(tǒng)的數(shù)據(jù)同時進行更新。
2.1 基于心理設(shè)計存儲層次
2.1.1 數(shù)據(jù)庫存儲
由于參觀者參觀博物館時首先進入博物館主場館,然后按照展館逐個參觀,并重點觀看自己感興趣的展品,考慮到參觀者的參觀心理及參觀習(xí)慣,系統(tǒng)按照湖南省地質(zhì)博物館中展館及展品等實體的陳列關(guān)系,將博物館按層次分為展館主體、展廳、展柜、展品四部分,采用分步加載的方式對各層次數(shù)據(jù)進行加載,不僅能夠滿足參觀者的視覺需求,而且減少了單次加載的數(shù)據(jù)量,從而減少參觀者等待數(shù)據(jù)加載的時間。
根據(jù)博物館中實體的層次劃分,系統(tǒng)共設(shè)計19張表,存儲各層次主體的基本信息、音頻、視頻、三維模型的信息,各表之間以外鍵關(guān)聯(lián),既能保持各表的關(guān)聯(lián),同時保持了各自的獨立性,便于日后按照需求進行擴充。
以展品為例,根據(jù)系統(tǒng)需求,共包含展品基本信息表(EXITEM_BASEINFO)、展品圖片信息表(EXITEM_PICINFO)、展品模型信息表(EXITEM_MODELINFO)、展品視頻信息表(EXITEM_VIDEOINFO)、展品音頻信息表(EXITEM_AUDIOINFO)、展品類型信息表(EXITEM_TYPEINFO),在此,主要對展品基本信息表和展品模型信息表進行說明。
表1 展品基本信息表
展品基本信息表中ITEM_ID為主鍵,EXHALL_ID等為外鍵,將展品基本信息表和展廳基本信息表進行關(guān)聯(lián),系統(tǒng)能夠根據(jù)展品ID查詢到其所在展廳、展柜及收藏者信息等,可以從多角度、全方位地對展品進行展示,同時,將這些信息分表存儲,減小了單表的數(shù)據(jù)量,可提高查詢速度,避免數(shù)據(jù)庫更新異常等問題。
表2 模型基本信息表
模型基本信息表中主鍵為MODEL_ID,外鍵為EXITEM_ID,將模型基本信息表和展品基本信息表關(guān)聯(lián),系統(tǒng)可根據(jù)EXITEM_ID獲取到展品的三維模型。展品模型按照二進制流[7](EXITEM_MODEL字段)和文件路徑(FILEPATH字段)兩種方式進行存儲,既方便和文件系統(tǒng)的數(shù)據(jù)進行關(guān)聯(lián),實現(xiàn)數(shù)據(jù)的統(tǒng)一管理,而且二進制流在文件系統(tǒng)異常時可根據(jù)路徑用于文件的恢復(fù),在有數(shù)據(jù)冗余的情況下,可提高系統(tǒng)中數(shù)據(jù)的安全性能。
2.1.2 文件存儲
由于直接加載文件比從數(shù)據(jù)庫中讀取數(shù)據(jù)加載速度快,系統(tǒng)除在數(shù)據(jù)庫中存儲模型的二進制流數(shù)據(jù),還在文件系統(tǒng)中存儲模型文件。文件在系統(tǒng)中的存儲層次與數(shù)據(jù)庫中各主體的層次劃分一致,系統(tǒng)依照數(shù)據(jù)庫中存儲的文件的網(wǎng)絡(luò)路徑對文件進行讀寫。
2.2 一致性保持
由于系統(tǒng)中的異構(gòu)數(shù)據(jù)在數(shù)據(jù)庫系統(tǒng)和文件系統(tǒng)中分別進行存儲,需要對其進行一致性維護。
數(shù)據(jù)一致性指關(guān)聯(lián)數(shù)據(jù)之間的關(guān)系是否完整和正確,一方面指物理上的一致,即同一個事實的數(shù)據(jù)應(yīng)該相同,如數(shù)據(jù)庫中存儲的幾個表都涉及到同一個數(shù)據(jù)項,這些數(shù)據(jù)應(yīng)該保持相同的值,另一方面,數(shù)據(jù)一致性指邏輯上的一致,即不同數(shù)據(jù)之間業(yè)務(wù)邏輯的一致。本系統(tǒng)主要對數(shù)據(jù)的物理一致性保持進行維護。
由于數(shù)據(jù)庫中存儲異構(gòu)數(shù)據(jù)主要的作用是數(shù)據(jù)備份,主要數(shù)據(jù)源是文件系統(tǒng)中的數(shù)據(jù),兩者之間有較為明顯的主從關(guān)系,系統(tǒng)采用基于主從的事務(wù)控制方法來維護數(shù)據(jù)的一致性。
系統(tǒng)中異構(gòu)數(shù)據(jù)的更新操作以事務(wù)的方式提交給系統(tǒng),事務(wù)先對文件系統(tǒng)的文件進行更新操作,若操作成功則對其在數(shù)據(jù)庫中進行備份,若備份失敗則進行事務(wù)的回滾。以數(shù)據(jù)更新為例,其流程如圖2:
圖2 數(shù)據(jù)更新流程圖
有些異常情況,如突然斷電、數(shù)據(jù)庫發(fā)生遷移、誤刪文件等會造成數(shù)據(jù)的不一致,這種情況依靠事務(wù)控制機制無法處理的。因此,系統(tǒng)針對這些異常情況產(chǎn)生的數(shù)據(jù)不一致進行了分類并對其進行一致性維護。
(1)誤刪文件或數(shù)據(jù)庫遷移造成文件系統(tǒng)中文件缺失。若系統(tǒng)依照路徑查找文件失敗,則按照數(shù)據(jù)庫中存儲的文件路徑和BLOB數(shù)據(jù)對文件系統(tǒng)的數(shù)據(jù)進行恢復(fù)。
(2)突然斷電導(dǎo)致數(shù)據(jù)庫中文件路徑或BLOB數(shù)據(jù)未更新。若文件路徑更新完畢,則依照存儲的文件路徑查找該文件,并以BLOB的格式存儲在數(shù)據(jù)庫中。若文件路徑也未更新,則根據(jù)文件所對應(yīng)實體(如展品或展館)以及文件類型(音頻或視頻),根據(jù)文件系統(tǒng)存儲的層級結(jié)構(gòu)查找該文件并進行備份。
3 數(shù)據(jù)通信
由于該系統(tǒng)基于Unity進行開發(fā),參觀者要想使用瀏覽器對虛擬博物館進行參觀,首先需要安裝Unity WebPlayer插件。但是由于安全沙盒的限制,Unity WebPalyer不能直接與數(shù)據(jù)庫連接并且從數(shù)據(jù)庫中讀取數(shù)據(jù)。因此,本系統(tǒng)采用圖3的方式實現(xiàn)客戶端與數(shù)據(jù)庫的通信。首先,客戶端獲取參觀者在頁面的請求,并將請求和數(shù)據(jù)通過http協(xié)議發(fā)送給服務(wù)端,服務(wù)端的php通過url獲取用戶的請求和數(shù)據(jù),執(zhí)行腳本進行數(shù)據(jù)庫操作,最后,將結(jié)果數(shù)據(jù)組織為Json格式反饋給客戶端,Unity WebPlayer讀取并解析網(wǎng)頁中的JSON數(shù)據(jù),將其進行可視化并在客戶端進行展示。
圖3 客戶端與數(shù)據(jù)庫通信方式
本文以展品信息查詢?yōu)槔,展示W(wǎng)eb環(huán)境下Unity的通信過程。從系統(tǒng)的整體結(jié)構(gòu)(圖1)可知,要執(zhí)行展品信息的查詢,首先觸發(fā)客戶端的查詢功能模塊,然后查詢功能模塊對查詢請求進行分類處理,并提交給資源管理模塊,資源管理模塊對現(xiàn)有資源進行查詢,如果沒有則進一步向數(shù)據(jù)控制模塊請求數(shù)據(jù),下文將主要講述數(shù)據(jù)控制模塊從數(shù)據(jù)庫中獲取數(shù)據(jù)后將數(shù)據(jù)反饋給表示層進行顯示的過程。
3.1 數(shù)據(jù)控制模塊
數(shù)據(jù)控制模塊主要根據(jù)不同的查詢需求請求數(shù)據(jù)。要實現(xiàn)對展品信息的查詢,數(shù)據(jù)控制模塊根據(jù)表示層的請求,不僅需要從數(shù)據(jù)層獲取展品的名稱、編號、位置、鑒定特性等基本的屬性信息,為了對展品進行多方面的展示,還需獲取圖片、音頻、視頻、模型等文件。 對于數(shù)據(jù)庫中存儲的文本信息,系統(tǒng)采用php腳本連接數(shù)據(jù)庫并讀取數(shù)據(jù)。由于JSON具有數(shù)據(jù)量小、易解析的特點,系統(tǒng)選用其作為數(shù)據(jù)控制模塊和數(shù)據(jù)層的交換格式。系統(tǒng)將php腳本讀取的屬性數(shù)據(jù)按照JSON的格式要求進行組織并反饋給資源管理模塊(如圖4)。
圖4 展品屬性數(shù)據(jù)(JSON格式)
對于圖片、模型等文件的獲取,系統(tǒng)將其路徑作為屬性數(shù)據(jù)的一部分反饋給資源管理模塊,客戶端可直接從服務(wù)器端對發(fā)布的文件進行讀取,而不受Unity WebPlayer對數(shù)據(jù)庫的通信限制。
3.2 資源管理模塊
資源管理模塊接收表示層的查詢請求,并對數(shù)據(jù)控制模塊的數(shù)據(jù)進行管理。根據(jù)表示層的查詢請求,資源管理模塊首先判定請求的數(shù)據(jù)是否包含在場景的預(yù)置文件或者緩存中,有則直接反饋到表示層進行顯示,如果沒有,則向數(shù)據(jù)控制模塊發(fā)送數(shù)據(jù)請求,并接收數(shù)據(jù)控制模塊反饋的數(shù)據(jù),當(dāng)數(shù)據(jù)接收完畢,則反饋給表示層,對其進行進一步解析和顯示。主要代碼如下:
if(!Resourses.Load(model)){
WWW www = WWW.LoadFromCacheOrDownload(address,version);
}
3.3 展品展示模塊
由于展品的屬性數(shù)據(jù)量小,而圖片的數(shù)據(jù)量大,因此,資源管理模塊接收到數(shù)據(jù)控制模塊反饋的JSON數(shù)據(jù)之后,則通知展品展示模塊首先對屬性數(shù)據(jù)進行顯示。由于JSON格式的數(shù)據(jù)在客戶端容易解析,系統(tǒng)使用LitJSON先將JSON數(shù)據(jù)轉(zhuǎn)換成對象,通過訪問對象的屬性值直接獲取屬性數(shù)據(jù)并在NGUI界面上顯示(如圖5)。
對于圖片、模型等信息,系統(tǒng)則根據(jù)經(jīng)過JSON處理后得到的路徑直接向服務(wù)端請求文件。采用屬性信息和圖片信息分開分布加載,不僅能夠滿足Web環(huán)境下的通信要求,而且屬性數(shù)據(jù)的優(yōu)先加載使用戶體驗得到提升。盡管采用了屬性信息和圖片信息分布加載的方式,但是由于圖片、三維模型等文件和屬性數(shù)據(jù)存在數(shù)量級的差異,系統(tǒng)采用異步加載的方式對模型進行加載。系統(tǒng)進行異步加載的主要代碼如下:
yield return bundle;
yield return Instantiate(bundle.assetBundle.mainAsset);
bundle.assetBundle.Unload(false);
圖5 展品查詢結(jié)果
4 結(jié)語
依照參觀者的參觀習(xí)慣對博物館的實體進行層次存儲,不僅保證了數(shù)據(jù)的一致性,而且可有效減少單次加載數(shù)據(jù)量和加載時間。在Web環(huán)境下采用JSON格式進行數(shù)據(jù)交互,減少了傳輸?shù)臄?shù)據(jù)量,同時,采用分層次、異步加載的方式進行加載,使模型的加載能夠在后臺進行,減少了用戶等待時間,極大地提升了用戶的參觀體驗。由于地質(zhì)博物館的模型更為復(fù)雜和精細,數(shù)據(jù)量大,需要消耗更大的網(wǎng)絡(luò)帶寬和加載時間,因此,下一步的主要工作是對三維模型的數(shù)據(jù)量進行精簡。
【參考文獻】
[1]黃健.面向通用性的Web3D虛擬展覽館的設(shè)計與實現(xiàn)[D].成都:電子科技大學(xué),2012:34-47.
[2]任國棟,陳林華,陶學(xué)鋒,方先行.基于Unity3D的虛擬博物館信息可視化系統(tǒng)[J].計算機系統(tǒng)應(yīng)用,2013,22(9):86-90.
[3]韓桂明.基于Unity3d房間仿真的關(guān)鍵技術(shù)研究[J].理論與算法,2014(8):41-43.
[4]張延,余紅英,戚藝雪,萬吉.基于Unity3D_3DMAX的導(dǎo)彈視景仿真系統(tǒng)[J].科技視界,2014(9):151-152.
[5]張典華,陳一民,李磊.基于Unity3D的多平臺三維空戰(zhàn)游戲的開發(fā)[J].計算機技術(shù)與發(fā)展,2014,24(1):192-195.
[6]張利利,李仁義,李曉京,馬進,惠鐸鐸.Unity3D與數(shù)據(jù)庫通信方法的研究[J].計算機技術(shù)與發(fā)展,2014,24(3):229-232.
[7]胡逢愷,趙剛,程旭.基于SQL Server數(shù)據(jù)庫的三維模型存取研究與實現(xiàn)[J].四川理工學(xué)院學(xué)報,2010,23(2):212-215.
[8]朱惠娟.基于Unity3D的虛擬漫游系統(tǒng)[J].計算機系統(tǒng)應(yīng)用,2012,20(10):36-39.
【基于Web3D的異構(gòu)數(shù)據(jù)存儲及通信研究】相關(guān)文章:
基于SDO的異構(gòu)服務(wù)數(shù)據(jù)模型研究03-28
基于GPS的船舶數(shù)據(jù)模擬系統(tǒng)的研究03-07
基于OFDM的UWB無線通信系統(tǒng)的研究03-07
基于愛好的電子商務(wù)數(shù)據(jù)挖掘技術(shù)的研究12-08
基于盲源分離的無線視頻通信研究與仿真03-07