- 选题背景和意义:
随着当前社会压力的增大,人们往往需要各种方式缓解生活工作上的压力。其中电子游戏不失为一种有效的途径。我也和许多人一样许多人从小就玩过电子游戏,现在通过大学四年软件工程的学习,有了一点开发基础,于是打算选择游戏设计作为毕业设计。 目前游戏产业中,游戏软件的开发都是基于游戏引擎技术,游戏引擎在游戏中起着“发动机”的作用。游戏引擎把开发中可能遇到的大多数技术难点以非常规的编程技巧高效地实现,并封装成易用的通用运行框架以及相关的辅助工具集。经过多年的发展与完善, 游戏引擎已经发展和进化成为由许多个相互联系但又相对独立的子系统耦合而成的复杂系统,主要包括图形渲染系统、资源管理系统、音频与视频系统、物理引擎系统、网络通信系统、脚本系统、人工智能系统等。
这其中,物理引擎是游戏引擎技术的重要组成部分,它侧重实现游戏世界中的物理效果,如基本的运动建模、光影效果、碰撞检测,以及复杂的群组控制、流体模拟、粒子特效等,从而使得游戏虚拟世界中的表现效果具有真实感。随着游戏行业的迅猛发展,游戏玩家对游戏中表现效果的真实性与合理性提出了越来越高的要求。因此,在游戏体验中, 如何缩小游戏世界与真实世界的对比差距,游戏物理引擎将起到决定性的作用。
本次毕设并不打算开发一款完整的游戏,而是打算从底层出发开发物理碰撞(物理引擎)相关内容。
物理学一直是计算机游戏的热点,若缺乏物理引擎的支持,动作类游戏便会黯然失色同时,这一趋势也逐渐蔓延至其他风格的游戏中,包括战略游戏以及猜谜类游戏。针对这发展趋势,多家中间件公司均提供了高性能的物理模拟器。另外,多款大制作游戏均体作现了企业级物理引擎之特征。
除了游戏渲染以外,物理碰撞在游戏中也相当重要。这两部分在游戏中一般是很难同步的,因为碰撞的计算量非常大,并且会影响到之后的渲染。本次毕设将参考目前较为流行的bullet、ODE等物理引擎,学习一些物理碰撞相关知识,并做一个demo。
- 课题关键问题及难点:
游戏物理仅涉及物理学中的某些经典理论,即重力和其他作用力模式下的用于控制物体运动方式的物理定律。在学术领域内,部分定律已被最新理论所替代,例如相对论和量子论。在游戏中,此类定律常用于展示实体对象的真实运动行为,包括质量、惯性、反弹行为以及浮力。
游戏物理学基本上与首批游戏同时诞生,并用于模拟粒子的运动方式,包括火花、爆竹、弹道模拟、焰火以及爆炸效果;近30年来,物理模拟还用于飞行模拟器中;近期,物理模拟广泛出现于汽车工业中,进而提升轮胎、悬挂系统以及发动机模型的精度。
随着处理性能的不断提升,视觉效果体现了更为丰富的内容。例如,箱体可随意移动、堆放;墙体被摧毁时所展现的灰飞烟灭效果一此类视效均属于刚体物理学范畴,读者可稍加扩展,即可获得“软物体”的行为方式,例如布料、旗帜以及绳索。近期出现的布娃娃系统即模拟了人类骨骼系统的行为方式,包括绊倒、跌倒以及挣扎时的各种动作。
因此,在开发游戏物理碰撞时,需要掌握大量物理及数学知识,并体现在代码中,并且这种代码还有具有很强的复用性,在各种场合都能够适配。
正因为游戏物理引擎需要在各种情况下做适配,它并非完美无缺,游戏中依然存在某些场合不适合使用物理引擎。计算速度可视为一类较为常见的原因,通用物理引擎定位于处理器密集型组件,出于通用性考量,引擎往往不对对象类型作任何假设。当与简单的游戏场景协同工作时,通用性往往意味着处理能力的浪费。当然,这在游戏机或PC设备上并不是问题。另一个问题则来自数据需求。在开发一款游戏中,其物理内容仅涉及风中飘扬的旗帜对象。对此,可采用企业级物理引擎,并由开发人员计算各旗帜的属性,包括质量和弹性等数据。随后,此类数据须传递至物理引擎中,进而对旗帜对象进行模拟。最后一个问题则与适用范围有关。如果是一名狂热的游戏开发爱好者,与游戏的其他方面相比(例如图形效果和可玩性),物理方案将占用较多的开发时间即使如此, 高质量的物理引擎依然不可或缺,只有这样,其成果方可与企业级产品媲美并赢得更多的关注。
引擎之间的第1个差别体现于刚体模拟和质量集合体模拟(即质体模拟)。刚体引擎将对象视为一个整体,并计算其移动和旋转方式。例如,箱体可视为一个独立对象并可作为一个整体予以模拟;质量集合体引擎则将对象视为由多个微小质体构成。例如,盒体对象由8个质体构成,各质体分布于角点处并通过连杆连接。由于不涉及旋转行为,因而质量集合体引擎易于编程实现。其中,各质体位于独立点处,因而可根据线性运动准确地表达运动方程。同时,作为一种约束型线性运动(各分量), 对象整体可以一种较为自然的方式旋转。
引擎之间的第2个差别体现于接触对象之间的处理方式。稍后将会看到,刚体物理引擎的诸多难点均源自碰撞的模拟,其中包括对象接触或粘连位置。例如,对象可静止于地面上、彼此粘连或产生碰撞。
一种方法是逐个对碰撞行为予以处理,并分别获得正确的计算结果,即迭代方案。该方案的优点在于速度,各次碰撞行为均可得以快速处理。当然,该方案并非完美无缺,例如,碰撞之间可彼此影响。某些时候,此类交互行为表现得十分明显。
除此之外,一类更具物理真实感的方法则是计算不同碰撞之间的真实交互行为,以及全部效果集,并同步应用于全体对象上,即 Jacobian方案。由于数学计算量较大(求解方程组可能会执行数百万次计算),因而该方案颇为耗时。更为糟糕的是,某些时候,对应结果可能为无效解。因此,若方程无解,开发人员须编写特定的代码并对此予以反馈。
另外,还可根据对象间的碰撞状态和约束条件计算新的方程组。对此,可不采用牛顿运动定律,并针对当前处理的特定对象环境构造自身的规则集。对应方程在各帧内彼此不同,物理引擎的大部分工作均体现在方程的构造上(当然,其求解过程也并非易事),该方法称作约化坐标方案,某些物理引擎即采用了此方案。同时,该方案多用于工程软件中,进而生成准确的模拟结果。然而,该方案速度较慢且并不适用于游戏应用程序与计算准确性相比,速度和可行度往往更为重要。
