肖炳輝,史文彥,董 冰
(同濟大學土木工程學院,上海 200092)
基于XNA的建筑虛擬仿真平臺的研究與開發(fā)
肖炳輝,史文彥,董 冰
(同濟大學土木工程學院,上海 200092)
在虛擬仿真平臺中,運用虛擬現(xiàn)實技術,參考實際建筑情況,建造形象逼真的虛擬場景,可以使工程師的思維更加形象化,概念更加容易理解.用C#和XNA研究開發(fā)一個能滿足動態(tài)交互控制以及各種3D模擬演示的建筑虛擬仿真平臺,并通過實例初步驗證了該平臺的實用效果.
虛擬現(xiàn)實;XNA;建筑仿真
在建筑和土木工程領域,用虛擬現(xiàn)實技術實現(xiàn)空間數(shù)據(jù)可視化已在大型工程設計、建筑設計、城市規(guī)劃、防災減災預測等領域獲得廣泛應用.
運用虛擬現(xiàn)實技術,按照建筑尺寸,建造虛擬場景,可以包括天空、白云、房屋、山丘、樹林、動物等.在虛擬場景中,可以任意調(diào)整角度、距離和精細程度,從任何點去觀察,可以自由控制瀏覽的路線,用動態(tài)交互的方式對建筑進行身臨其境的全方位的審視.利用虛擬現(xiàn)實技術的交互性能,實時調(diào)整各種建筑、環(huán)境參數(shù),以便對各種方案及環(huán)境效果進行比較,使工程師的思維更加形象化,概念更易于理解.
本文探討開發(fā)基于XNA Game Studio(簡稱XNA)的建筑虛擬仿真平臺,通過對建筑物和自然場景進行材質、紋理、光照等真實感處理,初步實現(xiàn)了三維虛擬交互和圖形渲染的實時性
XNA是2006年新推出有著強大功能和簡潔界面的通用游戲開發(fā)平臺,它利用C#編程語言開發(fā)游戲框架,是Managed DirectX的修正及擴充版本,支持可編程渲染語言,在游戲開發(fā)效率、內(nèi)容與代碼維護管理、平臺支持等方面表現(xiàn)得更為突出,方便用戶開發(fā)基于W indow s、Xbox360和Zune環(huán)境下的游戲[1].
建筑虛擬仿真平臺是進行建筑虛擬展示以及各種科學演示和仿真研究的平臺,整個平臺由C#和XNA編程語言開發(fā).平臺的具體架構與模塊分布如圖1所示,主要包括兩部分:虛擬仿真引擎和場景布置器.虛擬仿真引擎是整個平臺的核心,在場景布置器中,只需調(diào)用仿真引擎提供的各種函數(shù)接口和實例化方法,創(chuàng)建具體的對象,就能布置出栩栩如生的建筑場景,滿足虛擬演示需要.

圖1 建筑虛擬仿真平臺的總體架構Fig.1 Frame of building virtua l simu lation platform
引擎主控制是用戶使用引擎的入口,同時又是將所有模塊都聯(lián)系起來的平臺.引擎主控制器的主要功能是獲取屏幕管理、渲染管理、材質管理和圖形設置管理的接口.圖形渲染模塊是仿真平臺的核心模塊,它負責場景中的所有2D和3D對象的實時渲染.用戶管理模塊提供豐富的用戶界面控件,包括標簽、按鈕、滾動條、面板、單選框等,在用戶管理模塊中,封裝了控件的共同屬性,如控件顯示的位置、文字和紋理、是否可見、與輸入設備的交互響應等基本屬性.輸入管理模塊是進行用戶與平臺交互操作的中介,主要是對鼠標、鍵盤進行管理,同時實時處理輸入設備產(chǎn)生的消息和事件,以實現(xiàn)用戶與虛擬仿真平臺之間的交互.音效管理模塊中主要設計了兩種不同的音效類別,一類用來播放由XNA自帶的XACT創(chuàng)建的音效文件,它與自然環(huán)境中的場景元素類配合,在出現(xiàn)場景特效時開始播放;另一類則用來加載和播放背景音樂,背景音樂在場景中一直循環(huán)播放,不需要切換.場景布置模塊是創(chuàng)建建筑虛擬場景實例的地方,該模塊負責創(chuàng)建、管理各種場景元素,包含了建筑類、環(huán)境類、相機類、各種貼圖類等.
由于仿真平臺提供的虛擬場景是“動態(tài)”的,如下雨了湖水會上漲、鳥兒會自由飛翔、云會飄動、水會流動、植物會搖動等,計算處理的數(shù)據(jù)量極大,故平臺的開銷較大.為了滿足虛擬場景的實時性和交互性,在平臺中采用了GPU編程、頂點緩沖和索引緩沖、視錐體裁剪3種方法來提高場景渲染效率.
GPU具有高并行結構,采用流式并行計算模式,可對每個數(shù)據(jù)進行獨立的并行計算,所以GPU在處理圖形數(shù)據(jù)和復雜算法方面擁有比CPU更高的效率.場景元素中的所有特效都用 HLSL(High Level Shading Language,高級著色語言)寫成fx格式文件,利用GPU的并行計算方法,在GPU中渲染實現(xiàn),提高了平臺繪制的效率.
頂點緩存區(qū)是用于存儲頂點的內(nèi)存緩沖區(qū),使用頂點緩沖區(qū)可以重復使用幾何變換過的頂點,當創(chuàng)建好一塊頂點緩沖區(qū)并對其中的頂點進行變換、光照、裁剪后,就可以渲染它很多次,而不需要重新傳輸頂點數(shù)據(jù).索引緩存區(qū)是用于存儲頂點索引數(shù)據(jù)的連續(xù)內(nèi)存緩區(qū).當需要存儲的三角形數(shù)量很多時,使用索引數(shù)組將更有優(yōu)勢,節(jié)省更多的內(nèi)存空間,并且在XNA渲染流水線中避免了相同頂點的重復計算,提高了渲染效率.
從三維到二維的投影過程中需要一個投影體,只有當物體處于這個投影體中的時候,才能在場景中看到這個物體,這個投影體通常被稱為視錐體.在圖形渲染過程中,將每個物體的包圍體與視錐體進行比較,如果包圍體位于視錐體之外,那么不需要繪制包圍體中的幾何體;若包圍體在視錐內(nèi)或者與視錐相交,那么包圍體中的內(nèi)容就是可見的,需要繪制包圍體中的幾何體.在程序中,通過相機類中的視錐體變量對天氣等運算量大的場景元素進行視錐體裁減,只繪制在視錐體中的場景,可以提高渲染效率.
自然場景的特效都用H LSL在GPU中編程實現(xiàn),所有的自然場景元素都是“動態(tài)”的,這種“動”的特性增強了虛擬場景中的沉浸性,提高了真實感,也使得整個場景更加生動有趣.其中對于風的模擬主要通過其他場景元素的運動形態(tài)來表現(xiàn),例如,風速變大、風向改變時,不僅湖面水流動的速度會變快,而且水流動的方向也會隨之變化.
地形是基于高度圖生成的,在本平臺設計過程中,引入以下幾個高度圖變換參數(shù):最小高度、最大高度、每單位素差的距離,通過調(diào)整變換使得高度圖更接近于真實地形.由高度圖生成的地形網(wǎng)格比較單調(diào),為了真實地反映現(xiàn)實世界的地貌特征,在地形網(wǎng)格中還需加入紋理貼圖.平臺中設置了兩種地形:單紋理地形和多紋理地形.單紋理地形只支持一張紋理貼圖,用來模擬地貌形態(tài)比較單一的地形.多紋理地形最多支持4張紋理貼圖,除了考慮地表紋理外還考慮細節(jié)紋理,即相機遠離地形時,使用大紋理;相機靠近地形時,使用更小的、具有更多細節(jié)的紋理;大紋理與小紋理之間的區(qū)域則用混合紋理.整個操作都是在H LSL的像素著色器進行的,通過計算Z緩沖深度來判斷距離相機位置的遠近.
常見的天空體渲染技術有3種,分別為天空盒、天空圓柱和天空穹頂[2].在平臺中,需考慮天空的動態(tài)效應,模擬云層隨風飄動的景象,因而平臺主要采用天空穹頂,天空穹頂?shù)木W(wǎng)格劃分如圖2所示.其本質上也是一張網(wǎng)格頂點圖,根據(jù)頂點的不同高度生成半球狀.

圖2 天空穹頂與天空穹頂網(wǎng)格Fig.2 Skyome and kyomegrid
在天空體的渲染過程中,最關鍵的是保持相機始終處于立方體中心位置,只有這樣才能讓用戶在移動相機時,保持相機和立方體之間的距離不變,使場景給人一種在無窮遠處的印象.同時,在繪制過程中讓Z緩沖不可寫,這樣就無需縮放天空體以適應場景.
真實的水面要考慮多種因素,如水面波動、折射與反射、菲涅爾方程以及各種飛濺、刻蝕及開爾文水楔等現(xiàn)象.在平臺中主要設置了兩種水面效果:湖水和海水.湖水較淺且有一定地域范圍,通常可以看到湖底的景象,如魚在水下游、湖底沙石的顏色等,故需考慮折射現(xiàn)象;而海水很深,不需要考慮折射效果,只需考慮反射效果即可.另外,湖水在風力作用下的波高變化較小,而海水的波高幅度變化較大,因此,對于海面,要求的頂點數(shù)目較多,需實時調(diào)整頂點的高度,產(chǎn)生“波濤”的效果;而湖水只需用凹凸貼圖稍稍平移紋理映射時的坐標就可以實現(xiàn).
在本平臺中主要采用廣告牌技術來近似模擬三維的植物[3].運用廣告牌技術在空間指定位置定義兩個三角形,將植物紋理映射在這兩個三角形組成的矩形上,在繪制時實時獲得視線向量,旋轉矩形,使相機的視線始終與矩形的法向垂直,使觀察者誤認為這張二維圖像就是三維實體.平臺中設置了靜態(tài)和動態(tài)兩種類型的植物.靜態(tài)植物在實例化后,不受環(huán)境影響;而動態(tài)植物在風作用下可以隨風搖動,即沿著風向微微平移廣告牌頂點的位置,增加整個平臺的真實感.
本平臺中主要設置了兩種動物的群聚行為,即鳥群和魚群,它們的實現(xiàn)原理都采用了簡單的人工智能技術.人工智能技術能增加場景的真實性和趣味性,動物群聚行為的實現(xiàn)參考了文獻[4]中的算法.植物和動物的動態(tài)效果如圖3所示.

圖3 植物和動物的動態(tài)效果Fig.3 Dynam ic effectof plants and animals
在天氣類中,本平臺主要設置了3種天氣類型,分別為陽光、雨和雪.當一種天氣效果可見時,另兩種則不可見.
陽光的模擬通過眩光現(xiàn)象來體現(xiàn).其實現(xiàn)原理主要是二維圖像的處理,即在太陽投影位置和屏幕中心連線,隨機在這條線上繪制多個不同大小、不同顏色以及不同強度的眩光,模擬陽光照射的景象.陽光效果如圖4所示.

圖4 陽光效果Fig.4 Sunshineeffect
雨和雪的模擬運用粒子系統(tǒng),粒子的繪制采用廣告牌技術.為了提高渲染的效率和減少系統(tǒng)開銷,以相機位置為中心劃分為上下左右4個區(qū)域,這4個區(qū)域已包絡了相機的可見范圍.在每一幀的更新過程中,用相機的視錐體和每個區(qū)域中心做碰撞檢測,求得4個區(qū)域中的可見區(qū)域,在繪制過程中,只繪制可見區(qū)域內(nèi)的粒子.
本文通過創(chuàng)建一個廟宇場景的實例,如圖5和6所示,以驗證建筑虛擬仿真平臺的真實感、渲染材質、動態(tài)交互控制以及各種3D模擬演示效果.實例效果表明,場景渲染效率快,具有良好真實感,整個場景也生動有趣,動態(tài)交互控制與3D模擬演示已經(jīng)初步實現(xiàn).

本文將虛擬現(xiàn)實學科與建筑工程學科相結合,開發(fā)一個為建筑提供科學演示和仿真研究的平臺,并通過實例初步驗證了該平臺的真實感、渲染材質、動態(tài)交互控制以及各種3D模擬演示效果.該平臺突出了“動態(tài)”效應,運用GPU編程、頂點緩沖和索引緩沖、視錐體裁剪等措施來提高渲染效率,保證三維虛擬交互和圖形渲染的實時性;運用紋理映射技術、廣告牌技術、粒子系統(tǒng)、人工智能、音效等提高了場景的沉浸感,使得整個場景更加生動有趣.
[1]GROOTJANSR.XNA 3.0 gam e programm ing recipes:A problem-solution app roach[M].New Yo rk:Apress,2009:3-16.
[2]LUISR.Sky Demo[CP/OL].(2010-10-25)[2011-01-12].http://www.spheregam es.com.
[3]FERNANDO R.GPU gem s:Programm ing techniques,tipsand tricks for real-time g raphics [R].Addison W esley/Pearson,2006.
[4]REYNOLDS C.Flock,herds,and schools:A distributed behavioralmodel[J].Compu ter G raphics,1987,21(4):25-34.
Research and Developmentof XNA-based Building VirtualSimulation Platform
XIAO Bing-hui,SH IWen-yan,DONGBing
(Co llege of Civil Engineering,Tong ji University,Shanghai200092,China)
When the building m odels are loaded and the scene is arranged in a building virtual sim ulation system,users could do simulation study in the virtual wor ld,and thus the design m ode could be understood easily.A building virtual simulation p latform is studied and developed using C#and XNA,which could present real time dynam ic interactive visual sim ulation.And the experiment has obtained a good practicaleffect.
virtual reality;XNA;building sim ulation
TP 391
A
2011-03-22
國家科技支撐計劃“優(yōu)秀歷史建筑可持續(xù)利用與綜合改造技術研究”資助項目(2006BAJ03A 07)
肖炳輝(1986—),男,廣西桂平人,碩士研究生,研究方向為土木工程計算機仿真.E-m ail:xiaobh0276@163.com
董 冰(聯(lián)系人),男,副教授,E-mail:xy62@sohu.com
1671-0444(2011)04-0449-03