張青,曲洲青
(中國傳媒大學(xué)計算機學(xué)院,北京 100024)
眾所周知,力學(xué)是物理學(xué)中基于實驗的一門重要分支學(xué)科。力學(xué)實驗可以讓學(xué)生透徹地理解機械設(shè)備的原理,因此展現(xiàn)出巨大的教育價值。然而實驗用的儀器貴重并且容易損壞。與此同時,一套實驗設(shè)備可能會占用大量的空間但只能同時允許少量學(xué)生進行實驗。
隨著計算機科學(xué)的不斷發(fā)展,人們發(fā)現(xiàn)結(jié)合計算機仿真技術(shù)與虛擬現(xiàn)實技術(shù)能夠為真實力學(xué)實驗提供合適的替代方法。建立虛擬力學(xué)實驗的傳統(tǒng)方法包括以下幾步:
首先,開發(fā)者利用某款3D建模軟件(如3DMAX、AutoCAD、Pro/E等)為一次實驗中的所有設(shè)備創(chuàng)建3D模型。其次,將這些3D模型導(dǎo)入到某個可以對力學(xué)實驗進行可視化仿真的實時圖形渲染平臺(如VRML、Cult3D等)。下一步,用幾乎所有的3D圖形實時渲染平臺都會為開發(fā)者提供的接口,編寫定義虛擬場景中的虛擬物體行為的腳本。
然而,傳統(tǒng)方法存在一些缺點:
·開發(fā)難度高??刂七@些虛擬物體并讓它們像真實世界中的物體那樣遵循牛頓力學(xué)規(guī)律運動是一件困難的工作。仿真腳本必須在任何時刻計算出力學(xué)設(shè)備的瞬時狀態(tài),包括幾何位置、方向和形狀。這導(dǎo)致了仿真的難度很高。
·交互性差。傳統(tǒng)的仿真不能很好地支持系統(tǒng)與使用者的交互。在運行時,使用者只能被動地接收系統(tǒng)可視化仿真的結(jié)果,而不能與物體進行交互。
·可復(fù)用性低。運行結(jié)果完全由代碼控制。所以在不同的要求下,開發(fā)者必須編寫不同的代碼,而這些代碼是不可復(fù)用的。
因此,我們需要使用另一種新的方法進行力學(xué)仿真。在這篇論文中,我們將會介紹一種新的技術(shù)—基于3D游戲引擎的力學(xué)仿真。
新方法的關(guān)鍵在于對物理引擎的利用。游戲引擎中的物理引擎提供了大量的底層接口。開發(fā)者只需要用適當(dāng)?shù)姆绞嚼^承這些接口,引擎中的物體就會在物理規(guī)律的控制下運動?;蛘哒f,物理引擎可以幫助開發(fā)者完成傳統(tǒng)技術(shù)中原本需要他們自己完成的底層工作。通過實驗已經(jīng)證明,新的方法可以提升開發(fā)效率并提高仿真的交互性、靈活性與可復(fù)用性。
通過以上的分析,我們發(fā)現(xiàn)許多缺點會使力學(xué)仿真系統(tǒng)的開發(fā)困難重重。所以我們需要引進新的工具來進行輔助仿真工作。因此3D游戲引擎成為了一款有力的開發(fā)力學(xué)仿真虛擬系統(tǒng)的研究工具。
游戲引擎對游戲的作用相當(dāng)于汽車引擎對汽車的作用。它直接管理游戲中所有的內(nèi)容,如情節(jié)、場景、音樂等。游戲引擎將游戲中所有元素結(jié)合在一起,并指揮它們在后臺協(xié)調(diào)地工作。如今,游戲引擎已經(jīng)發(fā)展成一個復(fù)雜的系統(tǒng),它包含了游戲開發(fā)中的所有重要部分,如:建模、動畫制作、物理系統(tǒng)、碰撞檢測、粒子系統(tǒng)和文件管理系統(tǒng)。
我們有如下理由選擇用游戲引擎來實現(xiàn)力學(xué)仿真。
·復(fù)雜度低。游戲引擎給開發(fā)者提供了游戲的整體框架。開發(fā)者只需要在框架上添加相關(guān)模組,就能夠通過框架控制不同數(shù)據(jù)實現(xiàn)各種功能。換言之,程序員將復(fù)雜的任務(wù)交給了物理引擎去做,而不是自己動手。這樣的方式大大簡化了力學(xué)仿真系統(tǒng)的開發(fā)。
·精確度高。游戲引擎中的物理引擎提供了對力學(xué)仿真的強力支持。傳統(tǒng)的虛擬現(xiàn)實技術(shù)只關(guān)注提高靜態(tài)3D模型的精確度,卻忽略了模型的行為屬性。并且,傳統(tǒng)方法中模型的運動是由代碼控制的,這決定了仿真系統(tǒng)的靈活性與適應(yīng)性較差。物理引擎的引入改變了這樣的狀況,因為它能夠模擬相互作用的物體之間的力?;蛘哒f,物體的運動是由物理規(guī)律而不是代碼控制的。這意味著在物理引擎的幫助下運動仿真的真實性大大提升了。
·協(xié)調(diào)性好。在游戲引擎的幫助下,設(shè)計者可以輕松地創(chuàng)建機械的每一部件,然后為機械的每一個部件設(shè)計好接口。之后在物理引擎的影響下這些部件就可以通過設(shè)計好的接口與其他部件互動。結(jié)果機械設(shè)備正如我們所期望的那樣運動。或者說,這樣的運動是各個部件之間交互的結(jié)果,而不是用代碼直接控制的。通過這樣的方式將機械理論展示給學(xué)生,可以使學(xué)生們更容易地理解原理。
·復(fù)用性高。開發(fā)者可以重復(fù)使用游戲引擎提供的組件去創(chuàng)建機械模型。他們也不需要為設(shè)備的每一塊編寫代碼來控制運動狀態(tài)。只需要給設(shè)備添加物理組件,設(shè)備就會在物理引擎的控制下工作。
·人機交互能力強。通過在設(shè)計期設(shè)置結(jié)點結(jié)構(gòu)或者編寫腳本運行的傳統(tǒng)技術(shù)只有十分有限的交互能力。而有別于傳統(tǒng)技術(shù),基于游戲引擎的仿真技術(shù)可以在運行時提供更好的交互,包括控制開關(guān)、調(diào)整旋轉(zhuǎn)速度、拖拽機械的某一部分等。
在這篇論文中,我們在眾多的游戲引擎中選擇了Unity3D作為力學(xué)仿真的開發(fā)工具。
Unity3D是一款擁有強大功能的3D游戲引擎。它的引擎系統(tǒng)由許多子系統(tǒng)組成,包括圖形渲染子系統(tǒng)、物理子系統(tǒng)、聲音和視頻子系統(tǒng)、網(wǎng)絡(luò)子系統(tǒng)、編輯器子系統(tǒng)、界面子系統(tǒng)、渲染器子系統(tǒng)等。這些子系統(tǒng)在不同的領(lǐng)域扮演著各自的角色。引擎中有一個核心控制組件使它們協(xié)調(diào)工作以完成某項功能。同時Unity3D提供了對主流圖形技術(shù)如Open-GL和DirectX的良好支持,并且擁有更好的開發(fā)環(huán)境,方便的開發(fā)流程與易用的編輯器。除此之外,它還支持主流的建模軟件(如3DMax和Maya)并擁有跨平臺性質(zhì)(Untiy3D適用于幾乎所有的平臺如Windows,Mac,iPhone,Wii等),這使得開發(fā)者能夠更方便地開發(fā)項目。以上這些優(yōu)點使Unity3D成為了最受歡迎的3D游戲引擎之一,并被廣泛應(yīng)用于不同的領(lǐng)域,如3D游戲、虛擬現(xiàn)實和網(wǎng)絡(luò)3D。
物理引擎是力學(xué)仿真的關(guān)鍵,因此花一些時間來探討Unity3D中的物理引擎細節(jié)是值得的。
在Unity3D中,場景中的每個物體都被稱為GameObject(游戲物體)。沒有添加任何組件的游戲物體將不會有任何行為屬性。一個游戲物體可以被看作一個可以放置不同組件的容器。當(dāng)我們將一些組件添加到游戲物體中時,它將會擁有自己的特色功能。物理組件就是這些組件中的一種。這表示只要游戲物體中存在這個物理組件,就會一直受到物理引擎的影響。在Unity3D中,物理組件的結(jié)構(gòu)描述如圖1,在圖1中我們介紹了一些會在仿真中經(jīng)常用到的核心組件。
Rigid Body(剛體):這個組件是其他組件的基礎(chǔ)。它使得游戲物體處于物理引擎控制下。它可以通過接收力和力矩來使物體以真實的方式運動。
Collider(碰撞器):剛體組件允許通過物理引擎來控制物體,而碰撞器可以允許物體與另一個物體發(fā)生碰撞,并在碰撞的過程中對另一個物體施加力。碰撞器組件允許物體接收碰撞信號。碰撞器被分為許多不同的類型。有盒子碰撞器、膠囊碰撞器、球體碰撞器、輪子碰撞器和網(wǎng)格碰撞器。
圖1 物理組件的結(jié)構(gòu)
Constant Force(恒定力):這個組件可以對物體施加恒定的力。當(dāng)一個物體受到外力影響,那就必須要添加這樣一個組件來仿真這種情況。
Joint(連接):這是一個用來仿真模型各個相鄰部位之間的連接關(guān)系的組件。根據(jù)連接方式的不同,連接可以被分為剛性連接、鉸式連接、彈簧連接、可配置連接和特征連接等類型。在這篇研究中,我們將介紹其中的兩種。
Fixed Joint(剛性連接):剛性連接可以仿真物體之間的剛性結(jié)合。剛性結(jié)合表示相互連接的兩個物體是平等的一對,它們之間的相對位置是固定不變的。當(dāng)開發(fā)者使用這個組件的時候,需要將剛性連接組件添加到其中一個物體上,并將組件的連接體參數(shù)設(shè)置為另一個物體。設(shè)置好之后兩個物體之間就會產(chǎn)生如我們所期望的剛性結(jié)合關(guān)系。
Hinge Joint(鉸式連接):鉸式連接可以用來仿真依賴連接關(guān)系。當(dāng)兩個物體之間有依賴連接關(guān)系時,表示一個物體附加在另一個物體上,當(dāng)父物體移動,子物體也跟著移動,并且子物體的移動在一定程度上受到父物體控制。這種情況就像有一個鉸鏈連接著兩個物體。開發(fā)者使用時應(yīng)將這個組件添加到子物體,并將連接物體這個參數(shù)設(shè)為父物體,并調(diào)整錨點參數(shù)和坐標(biāo)參數(shù)來確定使物體轉(zhuǎn)過的點和轉(zhuǎn)動方向。
我們可以通過使用上面提到的物理組件來仿真不同類型的力學(xué)儀器。接下來我們將會舉例說明在Unity3D中如何仿真一個力學(xué)設(shè)備。
我們將通過對瓦特蒸汽引擎驅(qū)動設(shè)備的仿真實例來闡述在游戲中進行力學(xué)仿真的流程。
蒸汽引擎是通過使用蒸汽的流動產(chǎn)生機械功的熱能引擎。它的原理如下:
蒸汽是水加熱后產(chǎn)生的氣體,將水蒸氣放進封閉的空間內(nèi)能夠產(chǎn)生真空壓。根據(jù)水蒸氣的量不同,這種真空壓會形成對物體的推拉而產(chǎn)生力學(xué)能量。
根據(jù)這樣的原理,蒸汽引擎可以被用來驅(qū)動機械運作。這就是我們在本次試驗中想要仿真的內(nèi)容。圖2是實驗的仿真原理圖。
圖2 仿真原理圖
左邊的氣缸代表可以給右邊的輪子提供動力的蒸汽引擎。實驗的最終目標(biāo)是仿真蒸汽引擎帶動輪子轉(zhuǎn)動。
在游戲引擎中進行力學(xué)仿真需要遵循以下步驟:
第一步:創(chuàng)建模型
模型是力學(xué)仿真的基礎(chǔ)。所以創(chuàng)建模型是實驗的第一項工作??捎玫慕\浖性S多種,如3DMAX、AutoCAD、Pro/E等。在本次試驗中我們選擇了3Dmax。在3Dmax中我們需要根據(jù)原理圖中的尺度比例精確地為設(shè)備的每一部件建模。整套儀器在力學(xué)仿真試驗中可以被分為如下部分:一個氣缸、一個活塞、一個基座、一個主輪軸、一個平衡梁、一個輪子、一個連接盤、一些螺絲和螺母以及一些連接桿。
第二步:將模型導(dǎo)入Untiy3D并為虛擬設(shè)備的部件添加物理組件
現(xiàn)在我們將做好的模型導(dǎo)入到Unity3D中。如果我們不給導(dǎo)入的模型添加任何組件,它將只是靜態(tài)的。為了使模型擁有行為屬性,我們需要給模型的每個部件添加物理組件。
首先,剛體組件需要被添加到每個可能會影響其他物體或者被其他物體影響的部分上。剛體組件是其他組件的基礎(chǔ)。擁有剛體組件的部件能夠被物理引擎影響。在我們的仿真實驗中,除了基座之外幾乎每一個部分都擁有剛體組件。
其次,某些部件需要添加碰撞器組件。擁有這個組件的部件可以觸發(fā)碰撞。碰撞器可以接收來自其他碰撞器的消息并根據(jù)收到的消息做出相應(yīng)的反應(yīng)。例如,在我們的仿真中,需要將一個膠囊碰撞組件添加到每一個螺絲上,才能將螺絲與螺母組合起來。
最后,給一些部件添加連接組件使這些部位連接在一起。本次實驗中需要剛性連接與鉸式連接兩種連接。將剛性連接組件添加到平衡盤上以組裝它和主輪軸。將鉸式連接組件添加到每一根連接桿上使它們與相鄰的桿連接。另外,坐標(biāo)和錨點參數(shù)需要被調(diào)整到合適的值使得桿子能夠轉(zhuǎn)動。
第三步:編寫腳本來驅(qū)動設(shè)備
設(shè)備還需要添加外力才能運行。我們需要通過編寫腳本來仿真這些外力。因為動力的來源是活塞,所以腳本組件應(yīng)該被添加在活塞上。腳本的原理如下:當(dāng)程序啟動時,添加力的函數(shù)將被調(diào)用,給活塞添加一個向下的力。當(dāng)活塞運動到一個合適的位置,力的方向?qū)桓淖優(yōu)橄蛏系?。一次次重?fù)這個過程,活塞就會在氣缸內(nèi)上下來回運動,最終為整個設(shè)備提供動力。
第四步:給模型添加交互模塊
經(jīng)過以上三步后,虛擬設(shè)備可以按我們所期望的方式運動了。但是我們現(xiàn)在還不能在運行時與它交互。所以給模型添加一些互動功能是必要的。這里我們?yōu)樵O(shè)備設(shè)計了一個開關(guān)。使用者可以通過控制開關(guān)的開合在程序運行過程中開啟或者關(guān)閉機器。
最后,我們得到了仿真的結(jié)果。圖3是最終仿真效果圖。當(dāng)開關(guān)打開時,輪子就會轉(zhuǎn)動。當(dāng)開關(guān)關(guān)閉時,輪子就停止旋轉(zhuǎn)。
圖3 仿真最終效果圖
因為基于虛擬現(xiàn)實技術(shù)的傳統(tǒng)力學(xué)仿真存在許多缺陷,所以有必要尋找一種新的力學(xué)設(shè)備仿真方法。這篇論文為力學(xué)仿真引入了一種新工具:3D游戲引擎。在這篇文章中,我們討論了基于物理引擎的力學(xué)仿真的基本原理,并通過實例來展示如何在3D游戲引擎中實現(xiàn)力學(xué)設(shè)備的仿真。研究達到了預(yù)期的效果。它證明了基于3D引擎的力學(xué)仿真不僅可行,而且比傳統(tǒng)技術(shù)開發(fā)難度更低,互動性更強,可復(fù)用性更高。
[1]P Greenwood,J Sago,S Richmond,V Chau.Using game engine technology to create real-time interactive environments to assist in planning and visual assessment forinfrastructure[J].18th World IMACS/MODSIM Congress,Cairns,Australia,13-17,July,2009.
[2]V Tam,Z Liao,C H Leung,L Yeung,A C M Kwan.An Interactive Simulation Game to Enhance Learners’Experience on Ubiquitous Computing Devices[J].
[3]Du Hongyan,JIA Zheng,WANG Jia,TIAN Xingyan.A Control Mechanism of The Physical Simulation Experiment based on Game Engine[J].Computation Intelligence and Software Engineering,2009.
[4]K H Sharkawi,M U Ujang,A Abdul-Rahman.3D Navigation Systemfor Virtual Realitybasedon 3D Game Engine[J].Evacuation route calculation of inner buildings.Geoinformation for disaster management.Springer-Verlag, Heidelberg, 1143 -1161,2005.
[5]Bishop L,Eberly D,Whitted T.Designing a Pc GameEngine[J].Computer Graphics and Applications,IEEE,1998,18(1):46 -53.
[6]M Lent,J E Laird.Artificial Intelligence and Interactive Entertainment[J].Tech Report 55 - 01 -02,AAAI Press,Mar,2001.
[7]Preece J,Rogers Y,Sharp H.Interaction design:Beyond human-computer interaction[J].John-Wiley New York(2002).
[8]E H Adelson,J R Bergen.The Plenoptic Function and Elements of Early Vision[J].Computational Models of Visual Processing,3 -20,1991.
[9]Mirtich,Brian,Canny,John.Impulse-Based Simulation of Rigid Bodies[J].Pro Of 1995Symposium on Interactive 3D Graphics,181 - 188,April,1995.