文/祝廣強 魏晟 闞旋 閆豐亭
(上海工程技術大學電子電氣工程學院 上海市 201620)
如今,經濟和社會發展進入高水平時期,各項科技也在突飛猛進,人民生活得以大幅度改善,休閑娛樂方面潛力巨大,我國人口眾多,旅游業的規模位列世界首位,其中虛擬旅游業還處在起步階段,蘊藏了無限的商機,產業活力更是旺盛。每逢節假日,我國旅游規模都會給各大景區帶來巨大承載壓力,從某種意義上來說,我國旅游業已陷入了旅游規模大于景區承載壓力的困境,當前旅游行業急需某種方式緩解該困境。再者,我國是人口大國,個人享有的旅游資源不等,且差距較大,經濟富裕的人們可以享有各種優質旅游資源,生活拮據的人們則旅游資源非常有限,若想縮小這種差距,數字經濟產生的低成本虛擬旅游產業可以擔當重任。本世紀初,關于數字城市的構想就已產生,基于虛擬現實技術的數字城市構建技術早已開展研究,且近年來已實現了較多的應用案例。另外,移動通信網絡的發展是制約虛擬現實技術發展的最大因素,而第五代移動通信技術即將大規模建設和普及,這勢必將會給虛擬現實的更多商業應用帶來巨大活力。
圖圖1所示,我國旅游業已經從中間環節多,經營方式單一,效率低下等現狀發展到高效率的“一站式”電子旅游系統?!耙徽臼健彪娮勇糜慰梢杂米鹘灰灼脚_,向用戶提供基于計算機化終端的預訂購買系統。用戶可從“一站式”電子旅游系統預訂景區門票、機票、吃住行服務、各項娛樂訂票。如今,這個“一站式”電子旅游系統可以說是使用前景非常的廣闊,幾乎所有關于旅游的信息都可從該系統查詢,幾乎所有關于旅游的票務都可從該系統預定購買。
由于計算機以及信息技術的突破性進展,高度信息化的社會不再是一句空談,人類正朝著那個方向前行,如今許多研究結論以及發展狀況顯示,虛擬現實與互聯網這兩種高端科技的充分融合將會給將來的信息社會帶來翻天覆地的變化,從根本上對人類的生活以及生產方式進行改變。用于實現對真實場景進行虛擬化,形成虛擬環境,就是所說的虛擬現實技術。虛擬環境屬于可交互式的,它的特點就是是完全沉浸式,在計算機生創在的世界內,用戶感覺如同身臨其境一般,不管是五官的感受還是心靈上的體驗與真實世界都是如出一轍,另外,如果用戶想給計算機傳達某些指令,采用的方式不用太過機械化,自然進行就可以。

圖1:當前“一站式”旅游系統

圖2:基于VisibilitySensor的快速瀏覽算法

圖3:基于TimeSensor的快速瀏覽算法
目前,人民的生活水平又向上步入一個臺階,但是人民物質生活增長同時精神生活還處在不匹配階段,人們對于精神生活的追求日益強烈,社會矛盾也已經轉化。最近一段時期,國內的旅游業發展呈現出朝氣蓬勃之勢,為了滿足游客的對于旅游這一休閑要求,旅游網站呈現爆發式的增長,良莠不齊,很大比例的網站功能比較單一,類似于旅游攻略就是其全部功能了,旅游須知等的相關信息,而且這些網站上的網頁信息更新較慢,很多信息無法滿足市場需求。
另一方面,雖然如今的祖國大地已經建起了一處處各種文化娛樂場所,但大都集中于一二線城市,相對于偏遠地區及交通不便利地區如新疆西藏等地區的人們無法同一二線城市的人們享受同等的文娛設施。
如今的互聯網行業發展較為迅速,計算機技術更加的成熟,三維模擬目的地現狀已經變成了現實,只要操作者使用具有非常先進的方法和工具就能坐在家里體驗到旅游景點的樂趣,從此宅在家里也能暢游世界各地。
隨著“互聯網+”時代的到來,“互聯網+3D”也被提出,即WebVR技術。有別于傳統的3D技術,WebVR更加依賴于瀏覽器。且須構建三維場景,人以第一視角在其中穿行。場景和控制者之間能產生交互,加之高質量的生成畫面使人產生身臨其境的感覺。動感的頁面較之靜態頁面更能吸引更多的瀏覽者。
WebVR的概念提出已久,用高性能的服務器運行,再把畫面傳輸至瀏覽器上,用戶通過普通的瀏覽器便能夠欣賞到3D畫面。就應用前景而言,WebVR的應用內容非常廣泛,并且在任何平臺上都是非常具有粘性的。這就是“+3D”將有潛力成為行業中最強大的分支之一的原因。
看似簡單的構想要實現卻并不容易,通常情況下,大規模場景內模型繁多,模型貼圖清晰度高,還要實現動態效果。因GPU渲染能力有限,再加上網絡帶寬的限制導致優質的畫面不能夠良好呈現。在下文中介紹了關于優化大場景內容的有效方法。
如果所構建的數字城市算法是基于VRML,觀看或者使用它的用戶沉浸感會非常高,用戶隨時隨地可以來瀏覽和漫游數字城市,不用受到空間和時間的限制。VRML在城市環境規劃(如公司要選擇創辦在哪個位置等),旅游宣傳、網上商城、產品外在宣傳等領域有著非常廣闊的應用前景。雖然目前的電腦互聯網速度以及圖形硬件技術突飛猛進,可是,由于虛擬城市場景不斷在擴張,場景模型也變得愈發的精細化和復雜化,從而仍舊會大幅度的降低客戶對于虛擬場景的觀看速度以及互聯網下載速度,隨時隨地的無阻礙的瀏覽以及交互功能將會無法成為現實,這使得用戶很難接受。所以,迫切的需要進行龐大的VRML場景的實時瀏覽探索勢在必行,建立新穎科學的線下載算法非常關鍵。文獻[1]總結了基于VRML的快速瀏覽算法。因為VRML對于外部程序接口是兼容的,能夠結合JAVA完成它的調度算法,利用EAI以及SAI的方式實時快速的調入調出模型。
第一種算法的提出是基于VRML和VisibilitySensor,也就是“如果可見那么添加,不可見那么刪除”。第一步是定義視域,簡化其為扇形,如圖2。在扇形區域內部,可見的為淺色范圍內的淺灰色物體,要應用到VRML場景里,別的深灰色物體全部不添加或刪除。隨著視點的轉動或者移動,一旦建筑物出現在視域內部,就把它加入到里面;一旦建筑物脫離視域,那么把它進行刪除。從而保證瀏覽器內部的建筑數量一直處在數量小的規模,所以場景就得以增強,瀏覽速度大幅度增加。
第二種算法是根據VRML的TimeSensor得到的,就是“在一定的范圍內的建筑物調入,別的不執行這個命令,更新是有規律的”。第一步定義視域,視域是一個圓形,圖3所示,用戶視點處在圓心位置,只要涵蓋在圓內的淺灰色物體,調入場景里,在外部的深灰色物體就不調入或刪除。一旦視點移動,利用TimeSensor,對建筑物所在區域是否被圓覆蓋進行定期判定,有規律的對圓域內部的物體模型進行更新。
算法1 基于VisibilitySensor的快速瀏覽算法

算法2 基于TimeSensor的快速瀏覽算法

在算法上,場景中物體調入調出部分大致都是一樣的,有所區別的是它們基于的節點是不一樣的,分別為VisibilitySensor 與TimeSensor,從而達成結果。
由于CPU和GPU是并行工作的原理,CPU和GPU之間有一個命令緩沖區(Command Buffer),該區包含一個命令隊列,CPU通過向命令緩沖區添加命令,而GPU主要提取Draw Call命令,當GPU執行完上一次的渲染便可從命令緩沖區提取命令并執行該命令。由于GPU的渲染速度往往快于CPU提交Draw Call命令的速度,如果Draw Call命令數量過多,就會導致CPU的過載。這時就需要提交較少的Draw Call命令,釋放CPU的處理速度,同時增加GPU的渲染速度。使很多個較小的Draw Call命令合并成一個大的Draw Call命令,批處理的思想應運而生。

圖4:基本操作流程

圖5:碰撞器和觸發器屬性、編輯碰撞范圍

圖6:動物園出口

圖7:執行該場景時出現畫面

圖8:小地圖
3.2.1 靜態批處理
靜態批處理適用于任何大小的模型且只能是不能移動的模型,在運行之初,將這些需要靜態批處理的模型合并到一個大的網格結構內,消耗一定的存儲空間。在靜態批處理前,如果一些模型共享了這個大網格結構中的部分網格,那么其中的模型都對應有部分網格的復制品,原來的部分網格會變成相同的多個部分網格發送給GPU。在Unity3D中操作簡單,只需選中需要靜態批處理的物體,在其inspector面板里勾選Static,Unity3D便會根據物體的狀態處理靜態批處理。
3.2.2 動態批處理
對有相同材質的動態物體進行一次性批處理,但要注意動態批處理相對于靜態有很多約束條件,物體網格的頂點屬性規模要小于某值,該值不同版本會有所不同;并且不能把兩個不同縮放尺度的物體一起處理,但在Unity3D5之后的版本就取消了這一限制;模型的Pass通道不宜過多。使用動態批處理,不需要用戶進行額外操作,在內部實現上,Unity3D會根據模型和材質是否滿足條件進而判決是否進行批處理。
使用建模軟件Maya,游戲引擎Unity3D,圖形編輯軟件Photoshop等對動物園形象逼真的渲染,以使得用戶身臨其境般漫游場景。用戶能以自由視角不受屏幕限制在普通瀏覽器中觀察每一處細節。
在軟件Maya制作模型,在軟件Photoshop制作貼圖,之后將模型和貼圖放到Unity3D進行組合,由小組件組裝成大組件,如果各小組件能夠較好的匹配到一個大模型,則不要修改,否則需要在Maya進行修改以能夠契合場景布局,貼圖匹配過程同理。最后結合在Unity3D中使用的物理引擎、UI(用戶交互界面)、動態腳本組合成最終的可視化場景。制作流程如圖4。
Unity3D提供了豐富的功能供開發者使用,本文主要介紹在開發虛擬動物園中運用的三種常用功能。在該虛擬動物園內運用了碰撞檢測物理引擎、人機交互界面、以及腳本實現動態效果。
4.2.1 碰撞檢測物理引擎
碰撞檢測物理引擎可以為物體賦予碰撞器屬性(Collider)和觸發器屬性(Trigger),如圖5。碰撞器是觸發器的前提,當對某物體只設置碰撞器而不設置觸發器時,該物體就具有了剛體屬性,能夠表現出重力、彈力等現實受力效果,則具有碰撞器屬性的物體在運動時不能穿過該物體,且能引發事件,如小球被彈開等;而碰撞器屬性和觸發器屬性都設置時,通過編輯編輯碰撞區域,運動物體進入該區域后發生觸發響應,且用戶能夠及時處理該響應,達到交互效果,可應用于接近某物體時觸發事件,如靠近門時自動打開。
在本場景中,為每個模型都設置了碰撞體屬性,使得在第一人稱視角運動時不發生穿模現象。在結束游覽時,第一人稱視角靠近出口位置時,出現簡易UI界面詢問用戶是繼續游覽或退出游覽界面,如圖6為出口位置。

圖9:場景內摩天輪

圖10:動物園入口處

圖11:大草坪

圖12:兩棲動物館

圖13:科學教育館

圖14:金魚廊

圖15:長頸鹿紀念館

圖16:火烈鳥

圖17:摩天輪
4.2.2 人機交互界面
通過合理的設計,人機交互界面使得用戶能夠與計算機交流,在用戶通過鼠標點擊或鍵盤輸入等多種信息輸入的方式作為與計算機交流的媒介,進而使計算機發生一定的響應,呈現與之前不同的內容。在本場景中實現的人機交互界面如下。
交互1:進入場景。創建UI的button組件,button組件自帶on click事件,為點擊此按鈕后會觸發某個事件,要進行一個場景跳轉的指令,創建c#腳本,在腳本里加入名為gameplay的方法,實現程序如下:

當點擊上方的按鈕時,便可開始游覽整個園區,點擊下方按鈕時則是退出當前場景,如圖7。
交互2:小地圖。創建raw image和camera,此camera跟隨人物移動,在項目中創建渲染紋理render texture并附在camera上(表明將camera所呈現的場景放在渲染紋理這個中間物上),后將render texture附在raw image上即可以呈現小地圖,如圖8。
交互3:一鍵欣賞整個場景。設置兩個鏡頭,一個為當前用戶鏡頭,一個用作全景瀏覽鏡頭,當游戲開始時使用用戶鏡頭作為主鏡頭,當用戶在鍵盤上輸入M時,即檢測到input.getkeydown(KeyCode.M)時,設置全景瀏覽鏡頭為主鏡頭,而后對場景瀏覽鏡頭做旋轉處理,使用lookat方法讓鏡頭始終朝向動物園中心,之后用rotate方法使鏡頭沿up方向移動。用戶按下鍵盤上M時呈現效果為用戶視角到達園區上方某個位置,整個園區圍繞中心點以一恒定速度旋轉。腳本如下。
設置旋轉屬性代碼


圖18:鴕鳥區

圖19:猴子區

圖20:大象區

圖21:二層觀景平臺

圖22:熱帶鳥館

圖23:熊貓館

設置兩個鏡頭代碼

4.2.3 腳本實現動態效果
為豐富場景內容,在Unity3D中,使用編程語言C#實現場景內的動態效果。在本場景中,使用C#腳本實現了摩天輪的旋轉,通過前期模型制作,將整個摩天輪分為轉輪和支柱兩大部分,支柱作為支撐部分,轉輪作為旋轉部分。
摩天輪旋轉代碼

太陽旋轉代碼


定義skywheel風車旋轉速度為5/deltatime,用transform類的rotatearound方法,輸入參數使摩天輪按中心轉動,代碼段如摩天輪旋轉代碼所示。定義太陽旋轉的速度speed為0.1float,并且設置隨機角度,在場景游覽開始的時候將隨機的角度值附給太陽光作為初始位置,之后在update方法中使用transform類的rotate方法,參數為繞x軸以速度為speed*time旋轉,不斷更新太陽光的位置,代碼段如太陽旋轉代碼所示。
本場景內容為考慮真實動物園的構成后規劃設計建造的。入口處采用拱形門,往里的方形們作為檢票口,進入后映入眼簾的是一塊大草坪,大草坪的右側是可供游客休息的長亭,大草坪的正前方是兩棲動物館的入口,走過兩棲動物館是科學教育館,科學教育館的兩側開有小河,河兩岸有楊柳依依,河的另一側是一張大大的全國動物分布圖,沿路徑向前,可以看到金魚廊,游客可在此欣賞各類金魚,再向前走,可以看到長頸鹿紀念館,繼續向前可以看到旋轉的摩天輪,摩天輪附近有火烈鳥區和鴕鳥區,繼續向前就到了大象區和猴子區,還可以登上二層觀景平臺俯瞰整個園區,走下二層觀景平臺可以走到熊貓館和熱帶鳥館,游覽完整個園區后便可選擇繼續游覽獲退出瀏覽,這時只需走到出口的位置便可退出整個園區的游覽。如圖10-24所示。

圖24:出口處
本虛擬動物園場景內容較為豐富,能夠達到真實動物園所具有的展物數量,能夠在一定程度上緩解景區壓力,不僅能夠給因各種原因不能實地參觀的人群提供一種全新的游覽方案,還為兒童對動物的早期認知教育提供了生動材料。因場景內容自主定制能力強,可以按需開發出各種場景,所以本場景的開發更為其后的其它大規模場景的開發提供了參考依據。
場景開發過程中,運用了模型制作,貼圖制作,場景布局搭建,并在此基礎上能夠實現碰撞檢測功能,人機交互功能,腳本驅動動態效果。下一步工作重點不僅要優化場景內容,還將圍繞虛擬動物園的上線工作展開,希望能夠盡快產生一定的社會效益。
在模型制作方面,將運用更多建模功能優化現有模型的細節;在貼圖制作方面,將結合現有實現技術制作清晰度更可觀的逼真貼圖;在場景搭建方面,將充分考量用戶對動物園的多樣化需求進一步調整場景內容;在多樣化功能、用戶交互及場景內動態效果方面,將繼續結合Unity3D的強大功能進一步提升用戶體驗。