王彩玲 劉瑞香 宋 釗
(西安石油大學計算機學院,陜西 西安 710065)
目前,虛擬現實技術已經成為計算機技術中研究,開發和應用的熱點,廣泛的應用于教育[1-2]、醫療[3]、建筑、工業設計[4-5]、產品展示等各個領域。虛擬校園社區實現了對校園三維景觀和教學環境的數字化和虛擬化。將學校風光用虛擬仿真實現,既可以為學校樹立良好的形象,讓來訪者足不出戶就可以身歷其境的感受到真實的校園實景和有關介紹信息;還可以作為校園規劃的輔助工具,提高校園管理的現代化水平[6-7]。
虛擬校園社區可以提供三維虛擬環境,用于支持對現實大學的資源管理、環境規劃、學校發展和遠程訪問等。是校園景觀和教學環境在計算機中的虛擬再現。它利用地理信息技術、虛擬現實技術、計算機網絡技術等高新技術,實現對真實校園環境中的三維景觀和教學環境的數字化和虛擬化。到那時,世界各地的人們不必親臨現場,只需在網上就能暢游其間,方便人們隨時隨地了解校園的情況。
虛擬校園為師生們提供了非常便利和快捷的交流,同時完善的虛擬校園系統集學習、工作、娛樂、生活為一體,增加了師生之間交流的趣味性,有利于師生之間的良好溝通。虛擬校園社區以網絡為基礎,利用先進的信息化手段和先進的計算機技術、網絡技術、虛擬現實技術,實現學校與教學、科研、管理和生活服務有關的所有信息資源進行全面的數字化。把學校建設成面向校內外,也面向社會的一個超越時間、超越空間的虛擬校園社區,提高傳統校園的效率,擴展傳統校園的功能。最終實現教育過程的全面信息化,從而達到提高教育管理水平的目的。虛擬校園技術必將成為今后校園信息化發展方向的主流,而基于網絡的大規模虛擬校園漫游將成為研究的新熱點.本系統以unity3d作為開發平臺,結合AUTOCAD規劃總平面圖[8];利用AutoCAD、3DMAX、Photoshop、Unity3D等軟件實現了某高校虛擬校園設計,該虛擬校園場景具有良好的沉浸感,通過網上發布,測試了其流暢性,可以作為該學校的數字解說平臺使用。
虛擬校園的設計總體框架如圖1所示。
如圖1所示,首先,基于通過測量、觀察、相機記錄等方式獲取校園地理信息數據。包括校園建筑平面圖AutoCAD和校園建筑鳥瞰圖[9-10],以及花草、樹木、道路的具體數據及信息。
然后,使用3d建模軟件例如maya 3dmax等專業建模軟件,制作三維數字模型。本系統使用的是最為流行的3dmax對校園建筑模型進行加工和渲染。從而得到更加真實的三維立體模型。
第三步,在Unity3D中添加地面。將上述步驟建好的三維建筑模型根據地理坐標依次添加到Unity3D中,進行場景融合。以及紋理添加、燈光渲染等工作[11-13]。
第四步,通過unity3D的跨平臺性,生成可以通過網頁瀏覽的Web格式的虛擬社區[14]。
Unity3d中的地形建立:
在Unity3D軟件中通過Terrain菜單建立及修改地形。Terrain地形編輯工具可以根據具體的實地場景進行隨意設置及修改。采用標準統一的地形,可以完成山地、城市和鄉村場景的設計,具有友好的界面。同時,可以在整個地形上鋪設地形紋理來裝飾地圖風景,還可以混合或合并地形紋理來平滑地過渡一個地圖到另一個地圖,或使地圖的環境多樣化。這極大方便了虛擬場景的制作。
Unity3D軟件只支持fbx格式的三維模型,因此,在設計時,采用3DMax建模,將模型存儲為fbx類型。在Unity3D中的asset文件夾中添加Object文件夾,此時,Unity3D將自動識別該模型,并將其Material和 Textures分離出來導入到Object的文件夾下面。此時,當模型導入時,我們可以在菜單欄Assetsimport new asset,選擇我們要導入的 *.fbx[15]。
在Unity3d環境中設計紋理及貼圖之前應先確定各模型的材質、貼圖和物理屬性。在獲取相關屬性后,將模型導入Unity3d中進行Shader腳本設置和紋理貼圖。Unity3D中的shader腳本,采用shaderlab腳本語言編寫,shader的框架如下:
shader"shader name"
{ properties
{ _Color("Diffuse Color",Color)=(1,.5,.5,1)_Texture("Main Texture",2D)=""{}
}
SubShader
{
Tags{"Queue"="Transparent"}
pass
{
Tags{}
Material{}
}
}
Fallback""
}
其中,properties中定義的變量,是可以采用編輯器編輯的。在Unity3D編輯器中選中一個材質,材質中的shader里面定義在properties中的變量就會出現該材質的屬性面板中,可以手動設置對應的屬性。其中,紋理屬性后面,還有一些可選的屬性可以設置,用于設置紋理的坐標,和其他一些屬性。
在進行模型設計后,需要將多個模型及場景依據平面圖進行場景整合,還需要背景配樂等多媒體文件支持。在設計時,通過建立Directional Light和sky box,可以使場景更加明亮和逼真。
在虛擬漫游中,我們希望通過控制鼠標或者鍵盤實現視角和場景的轉換。在具體實現中,首先,在3DMax建模軟件中分別制作人物的行走動畫、站立動畫、跳躍動畫和跑步動畫,制作完畢后,將動畫模型保存為.fbx文件格式。將動作模型導入到Unity3D項目的Object文件夾中。然后,在欄中選中導入動畫模型,在屬性面板中設置模型不同動作的開始和結束幀,所拖拽動畫模型到舞臺中去。
通過Character Moto命令給動畫模型添加人物控制器,在屬性面板中調節Radius和Height來調節人物控制器的輪廓、高度。在軟件中添加Javescript控制代碼實現運動控制。具體的,設計鼠標控制需要對人物添加Mouse Look旋轉控制器,設計鍵盤控制需要對人物添加FPS Input Controller移動控制器。對相應控制器設計即可實現視角隨著鼠標方向的旋轉和鍵盤控制人物實現前后左右的移動[16-17]。
在具體設計時,需要考慮當角色移動時,需要配合相應的動作來完成角色移動的效果,比如:跑動作、跳動作等,為了給用戶帶來視覺的更加逼真的效果,在設計時,在animatioController.js添加動作代碼,其中核心代碼如下:
if(Input.GetAxis("Vertical")> .1)//如果是豎直方向的向前運動
{
if(Input.GetButton("Run"))//按下 run 按鈕
{
animation.CrossFade("run");//播放 run 動畫
walkSpeed=4;//同時設置速度為4
}
else
{
animation["walk"].speed=1;//其他時候則為走路
animation.CrossFade("walk");//播放走路動畫
walkSpeed=1;//同時設置速度為1
}
if(Input.GetAxis("Vertical")< -.1)////如果是豎直方向的向后運動
{
animation["walk"].speed=-1;//速度設置為負值
animation.CrossFade("walk");//播放走畫面
walkSpeed=1;
}
else
{
animation.CrossFade("idle");//其他時候為站立動畫
}
if(Input.GetI}eyDown ("space"))//當空格鍵被按下就執行跳躍動畫。
animation.CrossFade(”jump");
}
水平方向的控制和垂直方向運動相同代碼在此省略。
碰撞檢測[19]是模擬現實環境中的人物及物體在遇到障礙物時發生的本能反應,例如,當角色遇到墻壁,如果沒有設計碰撞檢測,則角色會出現穿墻而過的失真現象,在現實中,應該是當發現墻壁與角色存在一定距離時,則需要停止前進。在這種情況下,設計人員需要添加碰撞檢測函數。在Unity3d軟件中提供了Mesh Collider撞檢測組件,該組件可以有效計算模型表面的網格自動生成碰撞面,但是如果模型表面的網格較多會影響執行效率,通過給網格較多的模型添加一個基本體作為該模型的父模型,設置成不可渲染則可以有效解決該問題。
當用戶漫游在數字校園中,如果只包含靜態的建筑,而缺乏了動態的人物交互,這樣的設計缺乏真實的體驗,在本系統中,采用C/S客戶端服務器模型,實現場景中的人物互動。其中,服務器相對獨立,可支持多個客戶端的訪問。兩者之間交互的原理為:客戶端向服務器發送請求,服務器給予反饋。當訪問者按下移動按鍵時,客戶端將事件發送至服務器,服務器端判斷角色該如何移動才能將事件返回給客戶端,當客戶端接受到服務器返回的數據后,開始移動角色,同時服務器端還會將其他訪問者的移動事件發送給客戶端。這樣客戶端就可以顯示其他訪問者的模型位置了。
具體設計時,服務器默認開啟,服務器端核心代碼:
Void OnGUI(){
Switch(Network.PeerType){
Case NetworkPeerType.Disconnected:
StartServer();
Case NetworkPeerType.Server:
Break;
Case NetworkPeerType.Client:
Break;
Case NetworkPeerType.Connecting
Break;
}
}
Void StartServer()
{
if(GUILayout.Button("創建服務器”))
{
//服務端創建服務器
NetworkConnectionError error=Network.Connect(IP,Port,false);
//如果連接失敗,將錯誤信息打印出來
Debug.Log("連接狀態:"+error);
}
客戶端核心代碼為:
Void OnGUI(){
Switch(Network.PeerType){
Case NetworkPeerType.Disconnected:
StartConnect();
Case NetworkPeerType.Server:
Break;
Case NetworkPeerType.Client:
Break;
Case NetworkPeerType.Connecting
Break;
}
}
Void StartConnect()
{
if(GUILayout.Button("連接服務器”))
{
//客戶端連接服務器
NetworkConnectionError error=Network.Connect(IP,Port);
//如果連接失敗,將錯誤信息打印出來
Debug.Log("連接狀態:"+error);
}
服務器創建完成后,客戶端需要向服務服務器發送消息請求,并且確保服務器能夠將來自某一客戶端的請求消息返回給連接到服務器的所有客戶端。需要首先創建一個網絡視圖組件,然后就可以使用RPC向服務器發送消息了。使用RPC發送消息的方法如下:
networkView.RPC("RequestMessage",RPCMode.All,inputMessage);
在服務器端或客戶端中接收消息請求的方法如下:
void RequestMessage(string message,NetworkMessageInfo info)
{
//message:消息內容
//info:消息附帶信息
}
模擬效果如下:
任何系統都需要進行黑盒子測試以發現系統存在的問題和漏洞。本系統也進行了相應的測試。在測試中發現,基于網絡環境下,系統存在占用網絡流量大,運行緩慢的現象。分析原因是因為測試電腦配置較低及網絡帶寬限制。這就要求我們從用戶角度出發,在保證真實度的情況下盡量減少模型的數量,大部分建筑需要通過平面建模來優化模型的復雜度,在建模過程中盡量減少模型頂點和分段數,在unity3d處理過程中,盡量使用靜態燈光,動態實時燈光相比靜態燈光,非常耗費資源。所以除了能動的角色和物體靜態的地形和建筑。盡量減少視角范圍和距離,減少不必要的運行消耗。
本系統通過Unity3D平臺建立了一個虛擬系統,并通過C/S模式構建人物交互,采用HTML格式發布,幾乎適應所有平臺瀏覽。實現效果逼真仿真度高,系統運行穩定可靠性好,系統與用戶交互性好,能夠非常直觀地帶給用戶身臨其境的場景漫游效果,漫游過程場景切換順暢,而且可以為場景提供豐富的多媒體影音交互。
Unity3D提供可視化的界面操作,地形制作和文理添加,以及擁有“對象碰撞檢測”、“角色漫游”功能,方便了系統的開發。基于Unity3D的虛擬漫游技術原理與渲染效果非常適合虛擬校園漫游的設計,隨著以后越來越多的漫游系統的需求,Unity3D引擎技術將會被更為廣泛的應用。
[1]范立冬,李曙光,張治剛.虛擬現實技術在醫學訓練中的應用[J].創傷外科雜志,2008,12(9).
[2]吳燕玲.基于Wed的玩味動畫技術及其在教學中的應用[J].中山大學學報:自然科學版.2002,12(6):53-56.
[3]詹勝利.Web3D技術在網絡教學中的應用[J].網絡技術與網絡教學,2006.1:15-17.
[4]來翔.面向電子商務的虛擬商品模型研究[J].浙江大學,2003.
[5]沈璞.虛擬現實技術在現代工業設計中的應用[J].制造業自動化,2004.11(6):76-78.
[6]張典華,陳一民.基于Unity3D的多平臺虛擬校園設計與實現[J].計算機技術與發展,2013,24(2):127,135.
[7]馬瑞.基于Unity3D的多平臺三維虛擬數字校園的設計與實現[J].蚌埠學院學報,2014,3(2):13-16.
[8]Okabe M,Igarashi T.3D modeling of trees from freehand sketches[C]//International Conference on Computer Graphics and Interactive Techniques.ACM SIGGRAPH 2003 Sketches&Applications.New York,USA:ACM,2003:1-1.
[9]Okabe M,Owada S,Igarashi T.Interactive design of botanical trees using freehand sketches and example-based editing [J].Computer Graphics Forum,Eurographics(S0167-7055),2005,24(3):487-496.
[10]Livny Y,Yan F L,Olson M,et al.Automatic Reconstruction of Tree Skeletal Structures from Point Clouds [J].ACM Transactions on Graphics (S0730-0301),2010,29(6):151-1:151-8.
[11]周希望,劉正東.虛擬校園的建模優化及Web3D交互技術[J].軟件導刊,2010,9(1).
[12]付林.永豐大廈虛擬漫游數字平臺的設計與實現[D].北京交通大學,2010(1).
[13]倪樂波,戚鵬.Unity 3D產品虛擬展示技術的研究與應用[J].數字技術與應用,2010(9).
[14]郭海新.Unity 3D與HTML交互機理的研究[J].煤炭技術,2012(9).
[15]毛天露,王兆其.個性化三維人體模型快速建模方法[J].計算機輔助設計與圖形學學報,2005,17(10):2191-2195.
[16]干建松.基于Unity 3d的室內漫游的關鍵技術研究[J].鹽城工學院學報:自然科學版,2011(20).
[17]何志毅,田金萍,李天松,等.虛擬人行走的動作融合[J].計算機工程,2009,35(22):267-271.
[18]甘建紅,彭強,戴培東,等.基于 OBB層次結構碰撞檢測的改進算法[J].系統仿真學報,2011,23(1):2619-2173.
[19]Gayle R,Manocha D.Navigating virtual agents in online virtual worlds[C]//Proceedings of the Web3D 2008.New York,NY,USA:ACM,2008:53-56.