转自:科普中国
今年,国产游戏《黑神话·悟空》在国际上获得了多项大奖。最近,游戏再次更新,吸引了不少玩家重新下载体验这款充满挑战的游戏。
许多玩家在畅游过程中不禁好奇,游戏中逼真的物理效果,比如水中的涟漪、雪地上的脚印等是如何实现的?这些现象背后的原理是什么?它们又给物理学带来了哪些启示?让我们一起探索游戏中的物理世界。
碰撞检测:构建虚拟世界的“硬物体”
在经典物理中,碰撞是最常见的事件之一。为了使游戏更加真实,开发者必须首先解决碰撞问题。
我们来看看现实世界中的碰撞是如何发生的。

F 表示物体所受的净力,m 为物体的质量,a 为加速度。通过计算每一时刻物体所受合力和合力矩,我们可以了解现实生活中物体的物理状态。同样地,在游戏中,物理引擎使用这种方法来更新物体的速度和位置。

计算机通常采用数值积分方法实现这一过程,如欧拉法、龙格-库塔法或更稳定的半隐式积分器。游戏中优先考虑计算效率与稳定性,以确保每帧刷新时都能快速得到近似准确的物体位置和状态。
现实中,物理现象是连续的,但游戏需要根据每个物体的状态逐帧更新位置。因此,物理模拟的帧率越高,结果越精确。
例如,两个小球对撞时,根据其速度大小、方向、材质和碰撞深度计算结果并更新状态。然而,在现实世界中,刚性物体不会发生重叠,真正的碰撞发生在接触瞬间或从接触到形变结束的过程中。

由于物理引擎逐帧更新位置,无法保证碰撞时间点正好在一帧上,也无法完全动态模拟两球接触至分离的每一个细微变化,导致一些复杂的碰撞看起来反直觉。
现代游戏引擎通过将游戏帧率与物理计算帧率分开来避免这个问题。此外,影响碰撞的因素还包括帧率以外的其他因素。
实际游戏中,模型为了美观往往非常复杂,包含数千个三角面。如果直接用这些模型进行碰撞计算,计算量会大幅增加,甚至可能产生不准确的结果。因此,需要简化物体的物理外形,这就是所谓的碰撞体积。
除此之外,材质、摩擦力、空气阻力、挤压现象等也是碰撞中需要考虑的问题。
约束:受限的自由度
除了刚体碰撞外,游戏中还涉及许多部件的连接与转动,这依赖于约束这一物理概念。例如,游戏角色抓取物体时,手与物体之间就产生了约束。
在物理引擎中,约束用于限制物体的运动范围和相对位置。它们广泛应用于角色骨骼动画、机械臂、车轮等场景。若处理不当,可能会导致奇怪的游戏画面。
在经典力学中,约束是描述系统中物体或物体之间相互关系的条件。约束力学研究如何在一个多物体系统中考虑运动的限制条件。根据自由度的不同,物体之间的相对运动受到不同类型的限制。
在物理引擎中,约束通常通过数学方程描述,并基于经典力学中的拉格朗日力学和牛顿力学求解。
约束力决定了物体之间的相对运动,通过改变物体的加速度来限制其自由度,从而确保运动符合约束条件。例如,关节是一种允许旋转同时限制其他自由度的约束形式,其原理涉及转动惯量和角动量守恒。
在游戏中,约束也存在计算量限制的问题,通常使用预设好的通用约束,如以下几种:

布料与流体模拟:物体的变形与流动
在游戏中,柔体、布料和流体的模拟用于呈现物体的形变和流动行为。这些模拟不仅遵循经典物理定律,还依赖于数值计算方法,以展示细腻真实的物理效果,如人物在水中跑动激起的涟漪、挥动武器时带动附近草木的摆动。
柔体是指在外力作用下会发生形变的物体,相比于刚体,它们不是完全不可变形的。柔体模拟的目标是准确描述物体在受力时的变形行为。
柔体的形变与应力和应变密切相关。应力描述了外力作用下物体内部力的分布,通常用应力张量表示;应变则描述了物体因外力而发生的形状或体积变化。
最常用的模型是胡克定律,它描述了材料在小变形下的线性弹性行为:


质点模型是计算简单的柔体模拟方法之一。在这个模型中,物体被离散化为若干个质点,每个质点通过弹簧相互连接,模拟材料的弹性行为。每个质点的运动方程由牛顿第二定律给出。

对于更复杂的物体形变,可以使用有限元法。该方法通过将物体划分为许多小单元(如三角形或四面体),并通过求解每个单元的应力和应变来模拟物体的整体行为。
流体模拟是物理引擎中最具挑战性的任务之一,尤其是在真实感方面。流体行为受到连续介质力学的影响,特别是流体动力学和热力学。
流体的运动遵循纳维-斯托克斯方程,这是描述粘性流体流动的基础方程:

方程左边为惯性项,描述流体的动量变化;右边第一项是压力项,描述由于压力梯度产生的力;第二项是黏性项,描述流体内部的摩擦力;第三项是体积黏性项;最后一项是外力。
对于不可压缩流体有:

进而可以忽略体积黏性项,在游戏中甚至可以忽略黏性项,并只考虑二维情况,以简化计算:

但这会导致游戏中水面难以显示较远范围的涟漪,相当于忽略了长波长部分的流体波动。

游戏中和科研中模拟的区别
无论是游戏开发还是科研领域,都需要模拟物体的运动和相互作用。然而,两者在目标、精度、计算方法、约束和求解策略等方面有着明显的不同。
游戏中的模拟侧重于实时交互性和视觉真实感。虽然物体按照牛顿力学运动,但模拟的精度和细节往往会有所简化,以提高用户体验和计算速度。模拟结果主要用于增强沉浸感,而非精确预测。
科研中的模拟目标通常是精确建模和性能评估,用于分析物体的力学行为、设计优化或实验验证。科研模拟提供可靠的结果,用于实际应用、理论研究或验证物理现象。
尽管游戏和科研都基于相同的物理原理,但游戏中的模拟通常会做很大程度的简化,以确保每一帧能够高效计算物体的运动。

希望大家现在对游戏中的物理有了更深的理解。最后给大家一个黑神话中的游戏画面,大家可以思考其中蕴含的物理模拟过程。