基于游戏引擎的力学仿真新方法
2013-03-13张青曲洲青
张青,曲洲青
(中国传媒大学计算机学院,北京 100024)
1 引言
众所周知,力学是物理学中基于实验的一门重要分支学科。力学实验可以让学生透彻地理解机械设备的原理,因此展现出巨大的教育价值。然而实验用的仪器贵重并且容易损坏。与此同时,一套实验设备可能会占用大量的空间但只能同时允许少量学生进行实验。
随着计算机科学的不断发展,人们发现结合计算机仿真技术与虚拟现实技术能够为真实力学实验提供合适的替代方法。建立虚拟力学实验的传统方法包括以下几步:
首先,开发者利用某款3D建模软件(如3DMAX、AutoCAD、Pro/E等)为一次实验中的所有设备创建3D模型。其次,将这些3D模型导入到某个可以对力学实验进行可视化仿真的实时图形渲染平台(如VRML、Cult3D等)。下一步,用几乎所有的3D图形实时渲染平台都会为开发者提供的接口,编写定义虚拟场景中的虚拟物体行为的脚本。
然而,传统方法存在一些缺点:
·开发难度高。控制这些虚拟物体并让它们像真实世界中的物体那样遵循牛顿力学规律运动是一件困难的工作。仿真脚本必须在任何时刻计算出力学设备的瞬时状态,包括几何位置、方向和形状。这导致了仿真的难度很高。
·交互性差。传统的仿真不能很好地支持系统与使用者的交互。在运行时,使用者只能被动地接收系统可视化仿真的结果,而不能与物体进行交互。
·可复用性低。运行结果完全由代码控制。所以在不同的要求下,开发者必须编写不同的代码,而这些代码是不可复用的。
因此,我们需要使用另一种新的方法进行力学仿真。在这篇论文中,我们将会介绍一种新的技术—基于3D游戏引擎的力学仿真。
新方法的关键在于对物理引擎的利用。游戏引擎中的物理引擎提供了大量的底层接口。开发者只需要用适当的方式继承这些接口,引擎中的物体就会在物理规律的控制下运动。或者说,物理引擎可以帮助开发者完成传统技术中原本需要他们自己完成的底层工作。通过实验已经证明,新的方法可以提升开发效率并提高仿真的交互性、灵活性与可复用性。
2 3D游戏引擎简介
通过以上的分析,我们发现许多缺点会使力学仿真系统的开发困难重重。所以我们需要引进新的工具来进行辅助仿真工作。因此3D游戏引擎成为了一款有力的开发力学仿真虚拟系统的研究工具。
游戏引擎对游戏的作用相当于汽车引擎对汽车的作用。它直接管理游戏中所有的内容,如情节、场景、音乐等。游戏引擎将游戏中所有元素结合在一起,并指挥它们在后台协调地工作。如今,游戏引擎已经发展成一个复杂的系统,它包含了游戏开发中的所有重要部分,如:建模、动画制作、物理系统、碰撞检测、粒子系统和文件管理系统。
我们有如下理由选择用游戏引擎来实现力学仿真。
·复杂度低。游戏引擎给开发者提供了游戏的整体框架。开发者只需要在框架上添加相关模组,就能够通过框架控制不同数据实现各种功能。换言之,程序员将复杂的任务交给了物理引擎去做,而不是自己动手。这样的方式大大简化了力学仿真系统的开发。
·精确度高。游戏引擎中的物理引擎提供了对力学仿真的强力支持。传统的虚拟现实技术只关注提高静态3D模型的精确度,却忽略了模型的行为属性。并且,传统方法中模型的运动是由代码控制的,这决定了仿真系统的灵活性与适应性较差。物理引擎的引入改变了这样的状况,因为它能够模拟相互作用的物体之间的力。或者说,物体的运动是由物理规律而不是代码控制的。这意味着在物理引擎的帮助下运动仿真的真实性大大提升了。
·协调性好。在游戏引擎的帮助下,设计者可以轻松地创建机械的每一部件,然后为机械的每一个部件设计好接口。之后在物理引擎的影响下这些部件就可以通过设计好的接口与其他部件互动。结果机械设备正如我们所期望的那样运动。或者说,这样的运动是各个部件之间交互的结果,而不是用代码直接控制的。通过这样的方式将机械理论展示给学生,可以使学生们更容易地理解原理。
·复用性高。开发者可以重复使用游戏引擎提供的组件去创建机械模型。他们也不需要为设备的每一块编写代码来控制运动状态。只需要给设备添加物理组件,设备就会在物理引擎的控制下工作。
·人机交互能力强。通过在设计期设置结点结构或者编写脚本运行的传统技术只有十分有限的交互能力。而有别于传统技术,基于游戏引擎的仿真技术可以在运行时提供更好的交互,包括控制开关、调整旋转速度、拖拽机械的某一部分等。
在这篇论文中,我们在众多的游戏引擎中选择了Unity3D作为力学仿真的开发工具。
Unity3D是一款拥有强大功能的3D游戏引擎。它的引擎系统由许多子系统组成,包括图形渲染子系统、物理子系统、声音和视频子系统、网络子系统、编辑器子系统、界面子系统、渲染器子系统等。这些子系统在不同的领域扮演着各自的角色。引擎中有一个核心控制组件使它们协调工作以完成某项功能。同时Unity3D提供了对主流图形技术如Open-GL和DirectX的良好支持,并且拥有更好的开发环境,方便的开发流程与易用的编辑器。除此之外,它还支持主流的建模软件(如3DMax和Maya)并拥有跨平台性质(Untiy3D适用于几乎所有的平台如Windows,Mac,iPhone,Wii等),这使得开发者能够更方便地开发项目。以上这些优点使Unity3D成为了最受欢迎的3D游戏引擎之一,并被广泛应用于不同的领域,如3D游戏、虚拟现实和网络3D。
3 基于Unity3D的力学仿真技术基础
物理引擎是力学仿真的关键,因此花一些时间来探讨Unity3D中的物理引擎细节是值得的。
在Unity3D中,场景中的每个物体都被称为GameObject(游戏物体)。没有添加任何组件的游戏物体将不会有任何行为属性。一个游戏物体可以被看作一个可以放置不同组件的容器。当我们将一些组件添加到游戏物体中时,它将会拥有自己的特色功能。物理组件就是这些组件中的一种。这表示只要游戏物体中存在这个物理组件,就会一直受到物理引擎的影响。在Unity3D中,物理组件的结构描述如图1,在图1中我们介绍了一些会在仿真中经常用到的核心组件。
Rigid Body(刚体):这个组件是其他组件的基础。它使得游戏物体处于物理引擎控制下。它可以通过接收力和力矩来使物体以真实的方式运动。
Collider(碰撞器):刚体组件允许通过物理引擎来控制物体,而碰撞器可以允许物体与另一个物体发生碰撞,并在碰撞的过程中对另一个物体施加力。碰撞器组件允许物体接收碰撞信号。碰撞器被分为许多不同的类型。有盒子碰撞器、胶囊碰撞器、球体碰撞器、轮子碰撞器和网格碰撞器。
图1 物理组件的结构
Constant Force(恒定力):这个组件可以对物体施加恒定的力。当一个物体受到外力影响,那就必须要添加这样一个组件来仿真这种情况。
Joint(连接):这是一个用来仿真模型各个相邻部位之间的连接关系的组件。根据连接方式的不同,连接可以被分为刚性连接、铰式连接、弹簧连接、可配置连接和特征连接等类型。在这篇研究中,我们将介绍其中的两种。
Fixed Joint(刚性连接):刚性连接可以仿真物体之间的刚性结合。刚性结合表示相互连接的两个物体是平等的一对,它们之间的相对位置是固定不变的。当开发者使用这个组件的时候,需要将刚性连接组件添加到其中一个物体上,并将组件的连接体参数设置为另一个物体。设置好之后两个物体之间就会产生如我们所期望的刚性结合关系。
Hinge Joint(铰式连接):铰式连接可以用来仿真依赖连接关系。当两个物体之间有依赖连接关系时,表示一个物体附加在另一个物体上,当父物体移动,子物体也跟着移动,并且子物体的移动在一定程度上受到父物体控制。这种情况就像有一个铰链连接着两个物体。开发者使用时应将这个组件添加到子物体,并将连接物体这个参数设为父物体,并调整锚点参数和坐标参数来确定使物体转过的点和转动方向。
我们可以通过使用上面提到的物理组件来仿真不同类型的力学仪器。接下来我们将会举例说明在Unity3D中如何仿真一个力学设备。
4 在游戏引擎中进行力学仿真的流程
我们将通过对瓦特蒸汽引擎驱动设备的仿真实例来阐述在游戏中进行力学仿真的流程。
蒸汽引擎是通过使用蒸汽的流动产生机械功的热能引擎。它的原理如下:
蒸汽是水加热后产生的气体,将水蒸气放进封闭的空间内能够产生真空压。根据水蒸气的量不同,这种真空压会形成对物体的推拉而产生力学能量。
根据这样的原理,蒸汽引擎可以被用来驱动机械运作。这就是我们在本次试验中想要仿真的内容。图2是实验的仿真原理图。
图2 仿真原理图
左边的气缸代表可以给右边的轮子提供动力的蒸汽引擎。实验的最终目标是仿真蒸汽引擎带动轮子转动。
在游戏引擎中进行力学仿真需要遵循以下步骤:
第一步:创建模型
模型是力学仿真的基础。所以创建模型是实验的第一项工作。可用的建模软件有许多种,如3DMAX、AutoCAD、Pro/E等。在本次试验中我们选择了3Dmax。在3Dmax中我们需要根据原理图中的尺度比例精确地为设备的每一部件建模。整套仪器在力学仿真试验中可以被分为如下部分:一个气缸、一个活塞、一个基座、一个主轮轴、一个平衡梁、一个轮子、一个连接盘、一些螺丝和螺母以及一些连接杆。
第二步:将模型导入Untiy3D并为虚拟设备的部件添加物理组件
现在我们将做好的模型导入到Unity3D中。如果我们不给导入的模型添加任何组件,它将只是静态的。为了使模型拥有行为属性,我们需要给模型的每个部件添加物理组件。
首先,刚体组件需要被添加到每个可能会影响其他物体或者被其他物体影响的部分上。刚体组件是其他组件的基础。拥有刚体组件的部件能够被物理引擎影响。在我们的仿真实验中,除了基座之外几乎每一个部分都拥有刚体组件。
其次,某些部件需要添加碰撞器组件。拥有这个组件的部件可以触发碰撞。碰撞器可以接收来自其他碰撞器的消息并根据收到的消息做出相应的反应。例如,在我们的仿真中,需要将一个胶囊碰撞组件添加到每一个螺丝上,才能将螺丝与螺母组合起来。
最后,给一些部件添加连接组件使这些部位连接在一起。本次实验中需要刚性连接与铰式连接两种连接。将刚性连接组件添加到平衡盘上以组装它和主轮轴。将铰式连接组件添加到每一根连接杆上使它们与相邻的杆连接。另外,坐标和锚点参数需要被调整到合适的值使得杆子能够转动。
第三步:编写脚本来驱动设备
设备还需要添加外力才能运行。我们需要通过编写脚本来仿真这些外力。因为动力的来源是活塞,所以脚本组件应该被添加在活塞上。脚本的原理如下:当程序启动时,添加力的函数将被调用,给活塞添加一个向下的力。当活塞运动到一个合适的位置,力的方向将会被改变为向上的。一次次重复这个过程,活塞就会在气缸内上下来回运动,最终为整个设备提供动力。
第四步:给模型添加交互模块
经过以上三步后,虚拟设备可以按我们所期望的方式运动了。但是我们现在还不能在运行时与它交互。所以给模型添加一些互动功能是必要的。这里我们为设备设计了一个开关。使用者可以通过控制开关的开合在程序运行过程中开启或者关闭机器。
最后,我们得到了仿真的结果。图3是最终仿真效果图。当开关打开时,轮子就会转动。当开关关闭时,轮子就停止旋转。
图3 仿真最终效果图
5 总结
因为基于虚拟现实技术的传统力学仿真存在许多缺陷,所以有必要寻找一种新的力学设备仿真方法。这篇论文为力学仿真引入了一种新工具: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.