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