李朝新,張俊平,吳利青
(山西省地圖院,山西 太原 030002)
虛擬現實技術支持下的GIS立體顯示系統的設計與實現
李朝新,張俊平,吳利青
(山西省地圖院,山西 太原 030002)
虛擬現實技術是由計算機產生,通過視、聽、觸覺等作用,使用戶產生身臨其境感覺的交互式視景仿真技術,具有多感知性、存在感、交互性和自主性等特征。本文主要闡述了將虛擬現實技術與地理信息技術相結合,建設GIS立體顯示系統的總體設計和關鍵技術等內容。
虛擬現實技術;GIS三維模型;3D立體顯示;人機交互
虛擬現實技術是根據現實或想象利用計算機構造一個多維空間的虛擬場景,提供用戶關于視覺、聽覺、觸覺等的感官模擬,讓用戶身臨其境[1],并以用戶的視點變化與虛擬場景時時進行交互,實現了對真實世界的模擬[2]。基于虛擬現實技術立體成像算法,優化GIS三維模型立體成像,建成可動態交互的實時3D生成系統,系統不但具備自主漫游、定位等虛擬現實基本功能,還可以實時生成3D效果,更具交互性和實用性。系統可以使用3D電視、投影機等多種顯示終端進行展示,實現大場景三維數據的高效可視化;可以采用遙控器、健身自行車等多種控制方式進行控制交互,為用戶提供現實性更強的立體感受和視覺上的沖擊。
與GIS二維顯示相比,本系統能顯示深度信息,因而能更全面地認識事物的形狀和運動情形,使用戶獲得身臨其境的感受;與GIS三維顯示相比,增強了虛擬現實的沉浸感,具有現實性更強的交互方式和交互體驗。本文以長治市城南生態苑為建設對象,對引用虛擬現實技術建設GIS立體顯示系統作了初步探討。
引用虛擬現實技術建設GIS立體顯示系統,完成以下建設目標:①采用地形、水系和道路等地理信息數據,與虛擬現實技術結合構建場景模型,實現三維模型與地理信息數據的一體化管理;②基于Unity3D引擎,優化了立體顯示算法,實時生成互動立體圖像對,實現三維場景同步立體顯示;③采用健身自行車運動傳感器,通過控制視點位置和視線方向,實現立體場景漫游的實時交互;④采用場景優化和腳本優化兩種方式進行系統優化,使系統運行流暢、反應靈敏。
系統總體架構分為3部分:數據層、邏輯層和應用層,如圖1所示。

圖1 系統總體架構
1) 數據層。包含三維模型與專題數據數據庫、DOM影像數據和DEM高程數據。
2) 邏輯層。系統的業務邏輯是通過在Unity3D引擎中編寫腳本代碼控制實現的。腳本功能分為以下幾類:行為控制腳本,用于控制攝像機在三維場景中的運動;UI控制腳本,用于繪制各種UI界面;立體顯示算法腳本,用于生成具有視差的左右立體圖像對;終端控制模塊,能夠驅動健身自行車等終端設備。
3) 應用層。為系統實現的功能,包含三維仿真、立體顯示及人機交互。
2. 系統功能
GIS立體顯示系統建設模塊主要包括漫游瀏覽、特色視點、精品路線、3D立體顯示、健身車互動等幾個模塊,如圖2所示。

圖2 GIS立體顯示系統建設模塊
(1) 漫游瀏覽模塊
實現自主式三維虛擬場景漫游瀏覽功能,如前進、后退、平移、旋轉等。系統采用鼠標和觸控一體化的設計方式,滿足用戶采取多種交互方式任意瀏覽目標區域三維場景的需要。
(2) 特色視點模塊
實現三維場景內主要景點的自動定位功能,選擇感興趣的視點,則系統自動定位到此景點。系統后臺連接屬性數據庫,并與三維模型掛接,若需進一步了解詳情,單擊即可彈出信息框,顯示其詳細信息。
(3) 精品路線模塊
根據實際需求設定了若干條不同觀看角度,不同偏重內容的瀏覽路徑,沿著事先規定的路徑,選擇任一線路,即可模擬沿所選線路進行漫游。
(4) 3D立體顯示模塊
切換至3D立體顯示模式下,系統采用場(幅)分隔法實現人工立體顯示。顯示終端分為主動快門式和被動偏振光式兩種。顯示終端為3D電視機時,帶上主動快門式眼鏡后,即可觀看3D立體效果;顯示終端為雙投影機時,帶上偏振光眼鏡后,即可觀看3D立體效果。
(5) 健身車互動模塊
在健身車互動模式下,用戶可在自行車上通過車頭控制方向,系統根據腳踏的速度快慢控制前進的速度;系統配置了碰撞檢測系統,遇到建筑物、樹木等會進行判斷,不會穿越地物[3],使得自行車能夠在正常路面上行進。
Unity3D是由Unity Technologies公司開發的三維游戲平臺,能夠處理大量的三維模型[4],并具有跨平臺多系統(iOS、MAC、Windows、Android、Web)支持功能[5],可方便人們通過網頁、手機APP、電腦客戶端等多種途徑瀏覽本系統,以上功能為系統構建提供技術支撐。在Unity3D中,當前主要使用JavaScript,C#及Boo Script類型的腳本進行二次開發。C#綜合了VB簡單的可視化操作和C++的高運行效率,以其強大的操作能力、優雅的語法風格、創新的語言特性和便捷的面向組件編程的支持成為.NET開發的首選語言[6]。因此本系統選用應用廣泛的C#進行系統的開發設計。
三維場景主要通過地形等大的地理要素和三維模型數據來表現[7]。地形采用數字高程模型(DEM)數據,并在其上疊加數字正射影像(DOM)數據。將構建的DEM和配準后的DOM通過Globemapper軟件和ArcGIS軟件處理為三維模型和紋理貼圖數據在Unity3D中使用,以此解決Unity3D對空間數據的不兼容問題。三維模型數據包含建筑、道路、路面、綠化、小品等。將三維模型數據庫中的3dsMax模型導出為FBX格式,再導入Unity3D工程文件的Assets目錄下使用[8-9]。然后設置環境部分,包括天空、燈光等。最終對場景整體進行陰影烘焙處理和水面效果的渲染處理。
利用3ds Max建模軟件按要素分類分別建立地物模型,創建幾何圖形文件,建立要素屬性值表文件,并對各屬性記錄賦對應模型索引值,在Unity3D工程文件下建立工程信息樹,通過模型索引,鏈接對應的屬性信息。顯示模型屬性的部分代碼如下:
public stringqueryName(string dest)
{ …
List
"SELECT " +"name1 " +"FROM " +"cnstyshuxingbiao " +"where name=′" + dest + "′ " +"ORDER BY " +"name1 ");
return querys[0].name1.ToString() ;
… }
系統根據人眼立體視覺原理,利用雙目視差實現立體成像。先采用立體顯示算法實時生成水平方向在不同視線參數時的左右立體圖像對,再利用硬件(立體顯示終端)實現左右眼分像,使左眼只觀看左圖像,右眼只觀看右圖像,從而使場景展現出立體感[10]。
(1) 立體顯示算法
要實現三維場景的立體顯示,首先必須得到符合三維特征的立體圖像對。方法是先在三維場景中設置左右相機,相當于一雙虛擬眼睛,通過這雙眼睛來觀察設計三維場景,再按照傳統的單目三維圖形生成方法分別生成左右圖像。即計算左右相機的視線向量,取得左右眼的圖像,由于左右圖像的相關性很強,物體在左右圖像上通常只有一個視差d,而其色彩與亮度值相差很小,可以利用這一點實現立體圖像對生成的快速算法,如圖3所示。

圖3

(x,y,z)=(x′,y′,f)L/d
式中,(x′,y′)是左像平面中Pl的平面坐標,因此視差d與z滿足
d=(L·f)/z
根據形成人工立體視覺所具備的條件,得到視差
d=x1-xr=(L·f)/z
(1)
即
(2)
式中,L為左右焦點之間的間距;f為焦距;d為兩眼的視差。
系統按照以上算法,根據左右相機不同的視線向量,計算生成右眼圖的同時,利用式(2)計算左眼圖,以生成具有視差的左右立體圖像對,如圖4所示。

圖4
(2) 立體顯示終端
立體顯示終端主要分主動快門式(3D電視機)和被動偏振光式(雙投影機)兩種方式。本系統采用3D電視機作為立體顯示終端,立體顯示方法為:3D電視機具有將左、右眼畫面快速交替顯示的功能。3D液晶眼鏡接收到發射器的同步信號,左、右液晶快門交替開關,開關的頻率與屏幕上圖像的替換頻率相同。在120 Hz的刷新頻率下,能夠得到較平穩的圖像。利用人眼的視覺延遲就可以獲得立體視覺。本系統中所開發的立體顯示功能的摘要代碼如下:
void Update ()
{ …
DoAutoEyeParameters();
if(stereoMode!=StereoModes.Disabled&&rightCamera)
{ …
if (!m_stereo.isStereoEnabled() ‖ m_stereo.convergency!=Stereoskopix.ConvergencyMode.Parallel)
{
m_stereo.DisableStereo();
m_stereo.convergency=
Stereoskopix.ConvergencyMode.Parallel;
m_stereo.EnableStereo(leftCamera, rightCamera, null, null);
}
m_stereo.stereoMode=
Stereoskopix.StereoMode.ActiveStereo;
m_stereo.parallaxDistance=parallaxDistance;
m_stereo.interaxial=eyeDistance;
}
… }
系統采用遙控器、健身自行車等設備作為人機交互控制方式,實時更改視點的位置和視線的方向,以實現對立體場景漫游的實時交互控制。
(1) 遙控器控制方式
系統邏輯層中的終端控制模塊中設置一系列針對鍵盤操作的指令,將遙控器的控制按鈕映射鍵盤指令,即可實現遙控器對系統的操作。
(2) 健身自行車控制方式
系統建設了專門針對健身自行車的邏輯層控制插件,在系統運行過程中,這一層的模塊會自動處理健身自行車發送過來的事件,把健身自行車的操作事件轉換成一些定義好的事件轉發給Unity3D,Unity3D腳本中定義響應函數中添加事件的處理代碼,從而實現健身自行車的接入。本系統中所開發的連接智能健身車功能的代碼如下:
void Update()
{ …
float translation=speed;
float rotation=Input.GetAxis("Horizontal2") * rotationSpeed;
if((Input.GetKeyDown(KeyCode.Alpha1)‖Input.GetKeyDown(KeyCode.Keypad1))) speed=5;
…
translation *=Time.deltaTime;
rotation *=Time.deltaTime;
transform.Rotate(0, rotation, 0);
… }
由于三維數據量巨大,為使系統具有良好的性能及運行速度,從兩方面進行優化:場景優化和腳本優化。場景優化主要包括:合理控制模型面數和塌陷模型、貼圖材質優化、燈光優化、視錐體剔除技術和遮擋剔除技術等。腳本優化主要包括精簡代碼、提升代碼的執行效率、減少不必要的循環、盡量使用靜態變量代替動態變量、負責交互的腳本僅在需要時執行等。
3D互動GIS立體顯示系統集成采用基礎地理數據與虛擬現實技術,不但具有空間定位、屬性查詢等GIS系統優勢,而且實現了動態3D場景展示和健身自行車互動,給用戶帶來身臨其境的真實感與現場感,可以應用于規劃、房地產、場館的展覽展示、數字健身、建筑設計、教育、廣告媒體等行業。提升了地理信息系統的應用服務水平。
[1] 章麗鴻,李琳.虛擬現實技術的發展和展望[J]. 中國科技期刊數據庫,2015(39):239.
[2] 李湘德,彭斌.虛擬現實技術發展綜述 [J].創新論壇,2004(6):10-14.
[3] 伊力哈木江·巴圖爾, 崔龍,張紅忠,等.基于Unity3D 的三維數字校園漫游系統 [J].現代計算機,2012(12):91-92.
[4] 路朝龍.Unity權威指南:Unity3D與Unity2D全實例講解[M].北京:中國青年出版社,2014:194-273.
[5] 成偉,薛林福,張偉.基于Unity3D的三維地質模型網絡共享實現[J].吉林大學學報,2014,32(6):632-636.
[6] 甘群文. C# 多線程同步與異步的實現[J].電腦開發與應用,2009(9):35-36.
[7] 王星捷,李春花.基于Unity3D平臺的三維虛擬城市研究與應用[J].計算機技術與發展,2014(4):247-250.
[8] 張暉,劉超,李妍,等.基于CityEngine的建筑物三維建模技術研究[J].測繪通報,2014(11):118-122.
[9] CHANG Y. Research on Application of High Precision Terrain Modeling Based on GIS in Virtual Reality[J]. ICECT,2009(2):425-429.
[10] 張劍清,潘勵,王樹根.攝影測量學[M].2版.武漢:武漢大學出版社,2009:46-50.
DesignandImplementationofGISStereoDisplaySystemBasedonVirtualRealityTechnology
LI Chaoxin,ZHANG Junping,WU Liqing
李朝新,張俊平,吳利青.虛擬現實技術支持下的GIS立體顯示系統的設計與實現[J].測繪通報,2016(9):119-122.
10.13474/j.cnki.11-2246.2016.0309.
P208
B
0494-0911(2016)09-0119-04
2016-07-03
李朝新(1971—),男,高級工程師,主要從事測繪工程與地理信息工作。E-mail:13934507348@163.com