物理引擎

                     

贡献者: 待更新

   (本文根据 CC-BY-SA 协议转载自原搜狗科学百科对英文维基百科的翻译)

   物理引擎是为譬如刚体动力学(包括碰撞检测)、软体动力学和流体动力学等物理系统提供近似模拟的计算机软件,它们在计算机图形学、视频游戏和电影领域中有广泛应用。它们主要被用于电子游戏中的实时模拟(通常作为中间件)。该术语有时更常用于描述任何模拟物理现象的软件系统,如高性能科学模拟。

1. 描述

   通常有两类物理引擎:实时引擎和高精度引擎。高精度物理引擎需要更多的处理能力来计算非常精确的物理,通常被科学家和计算机动画电影使用。实时物理引擎——如在视频游戏和其他形式的交互式计算中所使用的——使用简化的计算和降低的准确性来及时计算,以便游戏以适当的速率进行响应。

1.1 科学引擎

   首批通用计算机之一 ENIAC 被用作一种非常简单的物理引擎。它被用来设计弹道表,以帮助美国军方估计不同质量的炮弹在不同角度发射和火药装药时会落在哪里,同时也考虑到风造成的漂移。结果只计算了一次,并制成表格发给炮兵指挥官。

   自 20 世纪 80 年代以来,物理引擎就被广泛应用于超级计算机上,用于执行计算流体动力学建模,其中粒子被分配了力矢量,这些力矢量被组合起来以显示循环。由于对速度和高精度的要求,开发了称为矢量处理器的特殊计算机处理器来加速计算。这些技术可用于模拟天气预报中的天气模式,用于设计包括赛车在内的航空和船只或机动车辆的风洞数据,以及用于改善散热器的计算机处理器的热冷却。如同计算中的许多计算负载过程一样,模拟的精度与模拟的分辨率和计算的精度有关;模拟中未建模的小波动会极大地改变预测结果。

   轮胎制造商使用物理模拟来检验新型轮胎胎面在潮湿和干燥条件下的性能,使用不同柔韧性和不同重量负荷水平的新型轮胎材料。

1.2 游戏引擎

   在大多数电脑游戏中,处理器的速度和游戏性比模拟的准确性更重要。这导致了物理引擎的设计,这些引擎产生实时的结果,但是只在简单的情况下复制真实世界的物理,并且通常具有某种近似性。通常情况下,模拟的目的是提供一个 “感知正确” 的近似,而不是真实的模拟。然而,有些游戏引擎,如源代码,在谜题或战斗场景中使用物理。这需要更精确的物理学,例如,物体的动量可以撞上障碍物或举起下沉的物体。

   基于物理的角色动画在过去只使用刚体动力学,因为它们更快更容易计算,但是现代游戏和电影开始使用柔体物理。软体物理学也用于粒子效应、液体和布料。有时提供某种形式的有限流体动力学模拟来模拟水和其他液体以及火焰和爆炸在空气中的流动。

   冲突检出

   游戏中的对象与玩家、环境以及彼此互动。通常,游戏中的大多数 3D 对象由两个独立的网格或形状表示。其中一个网格是游戏中玩家可以看到的高度复杂和详细的形状,比如一个花瓶,有优雅的弯曲和环形把手。出于速度的目的,使用第二个简化的不可见网格向物理引擎表示对象,以便物理引擎将示例花瓶视为简单的圆柱体。因此,不可能通过花瓶上的把手孔插入一根杆或发射一枚射弹,因为物理引擎模型是基于圆柱体,而不知道把手。用于物理处理的简化网格通常被称为碰撞几何。这可以是边界框、球体或凸包。使用边界框或边界球作为碰撞检测最终形状的引擎被认为极其简单。通常,边界框用于宽相位碰撞检测,以在碰撞检测的窄相位中完成昂贵的网格碰撞检测之前,缩小可能碰撞的数量。

   离散碰撞检测精度的另一个方面涉及帧速率,即计算物理时每秒的时间矩数。每个帧都被视为与所有其他帧分开,并且不会计算帧之间的空间。低帧速率和快速移动的小物体会导致物体不能在空间中平滑移动,而是在计算每帧时似乎从空间中的一点传送到下一点。如果目标足够小,以足够高的速度移动的射弹将错过目标,以适应快速移动射弹的计算框架之间的间隙。各种技术被用来克服这一缺陷,例如第二生命将射弹表示为箭头,其不可见的尾部长于帧中的间隙,以与任何可能适合计算帧之间的物体碰撞。相比之下,连续碰撞检测,如子弹或 Havok,不会遇到这个问题。

   软体动力学

   使用基于边界框的刚体物理系统的替代方法是使用基于有限元的系统。在这样的系统中,三维物体的三维立体镶嵌被创建。镶嵌产生了许多有限元,这些有限元代表了物体的物理特性,如韧性、塑性和体积保持。一旦构造完成,求解器就使用有限元来模拟 3D 对象内的应力。应力可用于驱动断裂、变形和其他物理效应,具有高度的真实性和独特性。随着建模元素数量的增加,引擎对物理行为建模的能力也随之增加。通过使用运行在中央处理器或图形处理器上的变形着色器,三维对象的视觉表示被有限元系统改变。

   由于计算性能开销太大以及缺乏创建三维对象有限元表示的工具,在游戏中使用基于有限元的系统是不切实际的。随着更高性能的处理器和工具来快速创建体积镶嵌,实时有限元系统开始在游戏中使用,从《星球大战:释放的力量》开始,该书使用詹姆斯·奥布赖恩博士开发的算法,将数字分子物质用于木材、钢铁、肉和植物的变形和破坏效果,作为其博士论文的一部分。[1]

   布朗运动

   在现实世界中,物理总是活跃的。当力相互推来推去时,宇宙中的所有粒子都有一个恒定的布朗运动抖动。对于游戏物理引擎来说,这种恒定的活动精度不必要地浪费了有限的 CPU 功率,这可能会导致诸如帧率降低之类的问题。因此,游戏可以通过禁止对在一定时间内没有移动特定距离的物体进行物理计算来使物体 “睡眠”。例如,在 3D 虚拟世界第二人生(Second Life)中,如果一个物体躺在地板上,并且该物体在大约两秒钟内没有移动超过最小距离,则该物体的物理计算被禁用,并且该物体被冻结在适当的位置。该对象保持冻结状态,直到与其他活动物理对象发生碰撞后,该对象的物理处理重新激活。[2]

   范例

   电子游戏的物理引擎通常有两个核心组件,碰撞检测/碰撞响应系统,以及负责解决影响模拟对象的力的动力学模拟组件。现代物理引擎也可能包含流体模拟、动画控制系统和资源整合工具。对于固体的物理模拟有三种主要范例:[3]

   最后,混合方法有可能结合上述范例的各个方面。

2. 限制

   物理引擎真实性的一个主要限制是代表物体位置和作用在物体上的力的数字的精确度。当精度太低时,舍入误差会影响结果,并且模拟中未建模的小波动会显著改变预测结果;模拟对象可能会出现意外行为或到达错误的位置。当两个自由移动的物体以比物理引擎能够计算的精度更高的精度装配在一起时,误差会变得更大。由于舍入误差,这可能会导致物体中不自然的能量累积,从而开始剧烈摇晃,并最终将物体炸成碎片。

   任何类型的自由运动复合物理物体都可以证明这一问题,但是它特别容易在高张力下影响链节和具有主动物理支承面的轮式物体。

   更高的精度减少了位置/力误差,但代价是计算需要更大的中央处理器能力。

3. 物理处理单元

   物理处理单元(PPU)是一种专用的微处理器,设计用于处理物理计算,尤其是在电子游戏的物理引擎中。涉及 PPU 的计算示例可能包括刚体动力学、柔体动力学、碰撞检测、流体动力学、头发和衣服模拟、有限元分析和物体破裂。这个想法是专门的处理器从计算机的中央处理器上卸载耗时的任务,就像图形处理器在主中央处理器上执行图形操作一样。这个术语是由 Ageia 的营销部门创造的,用来向消费者描述他们的 PhysX 芯片。中央处理器-图形处理器系列中的其他几项技术也有一些共同的特点,尽管 Ageia 的解决方案是唯一一个设计、营销、支持并完全作为一个处理器放在系统中的完整技术。

4. 图形处理器上的通用处理

   物理处理的硬件加速现在通常由支持更通用计算的图形处理单元提供,这一概念被称为图形处理单元上的通用处理。AMD 和 NVIDIA 在其最新显卡上为刚体动力学计算提供支持。

   英伟达的 GeForce 8 系列支持基于 GPU 的牛顿物理加速技术,名为量子效应技术(Quantum Effects Technology)。[4] 英伟达为 CUDA(计算统一设备架构)技术提供了一个软件开发工具包,为 GPU 提供了一个低级和高级的应用编程接口。对于他们的图形处理器,AMD 提供了一个类似的软件开发工具包,叫做接近金属(CTM),它提供了一个薄的硬件接口。

   PhysX 是一个物理引擎的例子,当它可用时,可以使用基于图形处理器的硬件加速。

5. 引擎

5.1 实时物理引擎

   开放源码

   公共社区

5.2 高精度物理引擎

6. 参考文献

   [1] ^"Graphical Modeling and Animation of Brittle Fracture". Graphics.eecs.berkeley.edu. Retrieved 2012-09-01..

   [2] ^"Doc:Manual/Game Engine/Logic/Object type/Rigid body - BlenderWiki". Wiki.blender.org. 2009-11-20. Retrieved 2010-08-16..

   [3] ^Erleben, Kenny; Sporring, Jon; Henriksen, Knud; Dohlmann, Henrik (2005). Physics-Based Animation..

   [4] ^"NVIDIA 8800 features page - Quantum Effects Technology". Nvidia.com. Retrieved 2010-08-16..


致读者: 小时百科一直以来坚持所有内容免费无广告,这导致我们处于严重的亏损状态。 长此以往很可能会最终导致我们不得不选择大量广告以及内容付费等。 因此,我们请求广大读者热心打赏 ,使网站得以健康发展。 如果看到这条信息的每位读者能慷慨打赏 20 元,我们一周就能脱离亏损, 并在接下来的一年里向所有读者继续免费提供优质内容。 但遗憾的是只有不到 1% 的读者愿意捐款, 他们的付出帮助了 99% 的读者免费获取知识, 我们在此表示感谢。

                     

友情链接: 超理论坛 | ©小时科技 保留一切权利