張青,曲洲青
(中國傳媒大學計算機學院,北京 100024)
眾所周知,力學是物理學中基于實驗的一門重要分支學科。力學實驗可以讓學生透徹地理解機械設備的原理,因此展現出巨大的教育價值。然而實驗用的儀器貴重并且容易損壞。與此同時,一套實驗設備可能會占用大量的空間但只能同時允許少量學生進行實驗。
隨著計算機科學的不斷發展,人們發現結合計算機仿真技術與虛擬現實技術能夠為真實力學實驗提供合適的替代方法。建立虛擬力學實驗的傳統方法包括以下幾步:
首先,開發者利用某款3D建模軟件(如3DMAX、AutoCAD、Pro/E等)為一次實驗中的所有設備創建3D模型。其次,將這些3D模型導入到某個可以對力學實驗進行可視化仿真的實時圖形渲染平臺(如VRML、Cult3D等)。下一步,用幾乎所有的3D圖形實時渲染平臺都會為開發者提供的接口,編寫定義虛擬場景中的虛擬物體行為的腳本。
然而,傳統方法存在一些缺點:
·開發難度高??刂七@些虛擬物體并讓它們像真實世界中的物體那樣遵循牛頓力學規律運動是一件困難的工作。仿真腳本必須在任何時刻計算出力學設備的瞬時狀態,包括幾何位置、方向和形狀。這導致了仿真的難度很高。
·交互性差。傳統的仿真不能很好地支持系統與使用者的交互。在運行時,使用者只能被動地接收系統可視化仿真的結果,而不能與物體進行交互。
·可復用性低。運行結果完全由代碼控制。所以在不同的要求下,開發者必須編寫不同的代碼,而這些代碼是不可復用的。
因此,我們需要使用另一種新的方法進行力學仿真。在這篇論文中,我們將會介紹一種新的技術—基于3D游戲引擎的力學仿真。
新方法的關鍵在于對物理引擎的利用。游戲引擎中的物理引擎提供了大量的底層接口。開發者只需要用適當的方式繼承這些接口,引擎中的物體就會在物理規律的控制下運動?;蛘哒f,物理引擎可以幫助開發者完成傳統技術中原本需要他們自己完成的底層工作。通過實驗已經證明,新的方法可以提升開發效率并提高仿真的交互性、靈活性與可復用性。
通過以上的分析,我們發現許多缺點會使力學仿真系統的開發困難重重。所以我們需要引進新的工具來進行輔助仿真工作。因此3D游戲引擎成為了一款有力的開發力學仿真虛擬系統的研究工具。
游戲引擎對游戲的作用相當于汽車引擎對汽車的作用。它直接管理游戲中所有的內容,如情節、場景、音樂等。游戲引擎將游戲中所有元素結合在一起,并指揮它們在后臺協調地工作。如今,游戲引擎已經發展成一個復雜的系統,它包含了游戲開發中的所有重要部分,如:建模、動畫制作、物理系統、碰撞檢測、粒子系統和文件管理系統。
我們有如下理由選擇用游戲引擎來實現力學仿真。
·復雜度低。游戲引擎給開發者提供了游戲的整體框架。開發者只需要在框架上添加相關模組,就能夠通過框架控制不同數據實現各種功能。換言之,程序員將復雜的任務交給了物理引擎去做,而不是自己動手。這樣的方式大大簡化了力學仿真系統的開發。
·精確度高。游戲引擎中的物理引擎提供了對力學仿真的強力支持。傳統的虛擬現實技術只關注提高靜態3D模型的精確度,卻忽略了模型的行為屬性。并且,傳統方法中模型的運動是由代碼控制的,這決定了仿真系統的靈活性與適應性較差。物理引擎的引入改變了這樣的狀況,因為它能夠模擬相互作用的物體之間的力。或者說,物體的運動是由物理規律而不是代碼控制的。這意味著在物理引擎的幫助下運動仿真的真實性大大提升了。
·協調性好。在游戲引擎的幫助下,設計者可以輕松地創建機械的每一部件,然后為機械的每一個部件設計好接口。之后在物理引擎的影響下這些部件就可以通過設計好的接口與其他部件互動。結果機械設備正如我們所期望的那樣運動?;蛘哒f,這樣的運動是各個部件之間交互的結果,而不是用代碼直接控制的。通過這樣的方式將機械理論展示給學生,可以使學生們更容易地理解原理。
·復用性高。開發者可以重復使用游戲引擎提供的組件去創建機械模型。他們也不需要為設備的每一塊編寫代碼來控制運動狀態。只需要給設備添加物理組件,設備就會在物理引擎的控制下工作。
·人機交互能力強。通過在設計期設置結點結構或者編寫腳本運行的傳統技術只有十分有限的交互能力。而有別于傳統技術,基于游戲引擎的仿真技術可以在運行時提供更好的交互,包括控制開關、調整旋轉速度、拖拽機械的某一部分等。
在這篇論文中,我們在眾多的游戲引擎中選擇了Unity3D作為力學仿真的開發工具。
Unity3D是一款擁有強大功能的3D游戲引擎。它的引擎系統由許多子系統組成,包括圖形渲染子系統、物理子系統、聲音和視頻子系統、網絡子系統、編輯器子系統、界面子系統、渲染器子系統等。這些子系統在不同的領域扮演著各自的角色。引擎中有一個核心控制組件使它們協調工作以完成某項功能。同時Unity3D提供了對主流圖形技術如Open-GL和DirectX的良好支持,并且擁有更好的開發環境,方便的開發流程與易用的編輯器。除此之外,它還支持主流的建模軟件(如3DMax和Maya)并擁有跨平臺性質(Untiy3D適用于幾乎所有的平臺如Windows,Mac,iPhone,Wii等),這使得開發者能夠更方便地開發項目。以上這些優點使Unity3D成為了最受歡迎的3D游戲引擎之一,并被廣泛應用于不同的領域,如3D游戲、虛擬現實和網絡3D。
物理引擎是力學仿真的關鍵,因此花一些時間來探討Unity3D中的物理引擎細節是值得的。
在Unity3D中,場景中的每個物體都被稱為GameObject(游戲物體)。沒有添加任何組件的游戲物體將不會有任何行為屬性。一個游戲物體可以被看作一個可以放置不同組件的容器。當我們將一些組件添加到游戲物體中時,它將會擁有自己的特色功能。物理組件就是這些組件中的一種。這表示只要游戲物體中存在這個物理組件,就會一直受到物理引擎的影響。在Unity3D中,物理組件的結構描述如圖1,在圖1中我們介紹了一些會在仿真中經常用到的核心組件。
Rigid Body(剛體):這個組件是其他組件的基礎。它使得游戲物體處于物理引擎控制下。它可以通過接收力和力矩來使物體以真實的方式運動。
Collider(碰撞器):剛體組件允許通過物理引擎來控制物體,而碰撞器可以允許物體與另一個物體發生碰撞,并在碰撞的過程中對另一個物體施加力。碰撞器組件允許物體接收碰撞信號。碰撞器被分為許多不同的類型。有盒子碰撞器、膠囊碰撞器、球體碰撞器、輪子碰撞器和網格碰撞器。

圖1 物理組件的結構
Constant Force(恒定力):這個組件可以對物體施加恒定的力。當一個物體受到外力影響,那就必須要添加這樣一個組件來仿真這種情況。
Joint(連接):這是一個用來仿真模型各個相鄰部位之間的連接關系的組件。根據連接方式的不同,連接可以被分為剛性連接、鉸式連接、彈簧連接、可配置連接和特征連接等類型。在這篇研究中,我們將介紹其中的兩種。
Fixed Joint(剛性連接):剛性連接可以仿真物體之間的剛性結合。剛性結合表示相互連接的兩個物體是平等的一對,它們之間的相對位置是固定不變的。當開發者使用這個組件的時候,需要將剛性連接組件添加到其中一個物體上,并將組件的連接體參數設置為另一個物體。設置好之后兩個物體之間就會產生如我們所期望的剛性結合關系。
Hinge Joint(鉸式連接):鉸式連接可以用來仿真依賴連接關系。當兩個物體之間有依賴連接關系時,表示一個物體附加在另一個物體上,當父物體移動,子物體也跟著移動,并且子物體的移動在一定程度上受到父物體控制。這種情況就像有一個鉸鏈連接著兩個物體。開發者使用時應將這個組件添加到子物體,并將連接物體這個參數設為父物體,并調整錨點參數和坐標參數來確定使物體轉過的點和轉動方向。
我們可以通過使用上面提到的物理組件來仿真不同類型的力學儀器。接下來我們將會舉例說明在Unity3D中如何仿真一個力學設備。
我們將通過對瓦特蒸汽引擎驅動設備的仿真實例來闡述在游戲中進行力學仿真的流程。
蒸汽引擎是通過使用蒸汽的流動產生機械功的熱能引擎。它的原理如下:
蒸汽是水加熱后產生的氣體,將水蒸氣放進封閉的空間內能夠產生真空壓。根據水蒸氣的量不同,這種真空壓會形成對物體的推拉而產生力學能量。
根據這樣的原理,蒸汽引擎可以被用來驅動機械運作。這就是我們在本次試驗中想要仿真的內容。圖2是實驗的仿真原理圖。

圖2 仿真原理圖
左邊的氣缸代表可以給右邊的輪子提供動力的蒸汽引擎。實驗的最終目標是仿真蒸汽引擎帶動輪子轉動。
在游戲引擎中進行力學仿真需要遵循以下步驟:
第一步:創建模型
模型是力學仿真的基礎。所以創建模型是實驗的第一項工作??捎玫慕\浖性S多種,如3DMAX、AutoCAD、Pro/E等。在本次試驗中我們選擇了3Dmax。在3Dmax中我們需要根據原理圖中的尺度比例精確地為設備的每一部件建模。整套儀器在力學仿真試驗中可以被分為如下部分:一個氣缸、一個活塞、一個基座、一個主輪軸、一個平衡梁、一個輪子、一個連接盤、一些螺絲和螺母以及一些連接桿。
第二步:將模型導入Untiy3D并為虛擬設備的部件添加物理組件
現在我們將做好的模型導入到Unity3D中。如果我們不給導入的模型添加任何組件,它將只是靜態的。為了使模型擁有行為屬性,我們需要給模型的每個部件添加物理組件。
首先,剛體組件需要被添加到每個可能會影響其他物體或者被其他物體影響的部分上。剛體組件是其他組件的基礎。擁有剛體組件的部件能夠被物理引擎影響。在我們的仿真實驗中,除了基座之外幾乎每一個部分都擁有剛體組件。
其次,某些部件需要添加碰撞器組件。擁有這個組件的部件可以觸發碰撞。碰撞器可以接收來自其他碰撞器的消息并根據收到的消息做出相應的反應。例如,在我們的仿真中,需要將一個膠囊碰撞組件添加到每一個螺絲上,才能將螺絲與螺母組合起來。
最后,給一些部件添加連接組件使這些部位連接在一起。本次實驗中需要剛性連接與鉸式連接兩種連接。將剛性連接組件添加到平衡盤上以組裝它和主輪軸。將鉸式連接組件添加到每一根連接桿上使它們與相鄰的桿連接。另外,坐標和錨點參數需要被調整到合適的值使得桿子能夠轉動。
第三步:編寫腳本來驅動設備
設備還需要添加外力才能運行。我們需要通過編寫腳本來仿真這些外力。因為動力的來源是活塞,所以腳本組件應該被添加在活塞上。腳本的原理如下:當程序啟動時,添加力的函數將被調用,給活塞添加一個向下的力。當活塞運動到一個合適的位置,力的方向將會被改變為向上的。一次次重復這個過程,活塞就會在氣缸內上下來回運動,最終為整個設備提供動力。
第四步:給模型添加交互模塊
經過以上三步后,虛擬設備可以按我們所期望的方式運動了。但是我們現在還不能在運行時與它交互。所以給模型添加一些互動功能是必要的。這里我們為設備設計了一個開關。使用者可以通過控制開關的開合在程序運行過程中開啟或者關閉機器。
最后,我們得到了仿真的結果。圖3是最終仿真效果圖。當開關打開時,輪子就會轉動。當開關關閉時,輪子就停止旋轉。

圖3 仿真最終效果圖
因為基于虛擬現實技術的傳統力學仿真存在許多缺陷,所以有必要尋找一種新的力學設備仿真方法。這篇論文為力學仿真引入了一種新工具:3D游戲引擎。在這篇文章中,我們討論了基于物理引擎的力學仿真的基本原理,并通過實例來展示如何在3D游戲引擎中實現力學設備的仿真。研究達到了預期的效果。它證明了基于3D引擎的力學仿真不僅可行,而且比傳統技術開發難度更低,互動性更強,可復用性更高。
[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.