今年,我们的国产游戏《黑神话·悟空》斩获了多个国际游戏奖项。最近,游戏又出了更新,不少人也是兴冲冲重新下回黑神话准备再体验一把八十一难。
然而有些人玩着玩着不免好奇,游戏中物理过程做的那么真实,比如水中涟漪、雪中行进痕迹等,这些是如何做到的呢?为什么会出现这些有趣的现象?这些现象又对物理学本身有什么启发?下面我们一起来走进游戏中的物理世界吧。
碰撞检测,虚拟中“硬物体”
在经典的物理世界中发生最多的事件莫过于碰撞了,所以要想游戏中足够真实,那么碰撞是一定是最先需要考虑的过程。
先看看经典世界的碰撞是如何发生的。
F 为物体所受的净力,m 为物体的质量,a 为加速度。通过对每一时刻物体所受合力和合力矩进行计算,我们可以得到现实生活中物体的物理状态。同样的,回到我们游戏世界,物理引擎可以利用这个方法更新其速度与位置。
在计算机中,这通常通过数值积分方法实现,如欧拉法、龙格-库塔法,或更为稳定和高级的半隐式积分器等。在游戏中通常优先考虑计算效率与稳定性,以保证在每帧刷新中都能快速得到近似准确的物体位置和状态。
但是由于我们都知道,现实世界从经典上看是连续的,但是游戏世界的模拟需要根据每个物体的状态一帧一帧更新每个物体的位置。物理模拟所用的帧率越高,计算结果肯定就越精确。
例如我们计算两个小球对撞,当发生碰撞时根据 2 个小球的速度大小、速度方向、材质、碰撞深度来计算这次碰撞的结果,同时更新 2 个小球的状态。但是现实世界中两个刚性物体是不会发生“重叠”的,真正的碰撞发生在 2 个小球接触的瞬间或者从接触到形变到碰撞结束的整个过程中
但物理引擎由于是一帧一帧更新位置、计算碰撞结果,无法保证碰撞的时间点正好在某一帧上,也无法真正完全动态模拟 2 个小球从接触到离开过程中的每一个细微变化,2 帧中间的碰撞信息其实是丢失了的,这就会导致有很多更加复杂的碰撞在有些时候看起来是非常反直觉的。
现在的许多成熟的游戏引擎已避免了这个问题,将游戏的计算帧率与现实帧率分开。但是影响碰撞的还不仅仅是帧率这一个因素。
实际游戏过程中的建模为了美观是非常复杂的,从模型来说一般来说有几千个三角面。但是物理引擎在计算这些原始的模型碰撞时计算量会几何程度递增,或者由于某个比较奇怪的建模角度,碰撞计算会给出与现实出入较大的结果。所以我们需要简化物体的物理外形,这也就是我们游戏中常说的碰撞体积。
除此之外,还有材质、摩擦力、空气阻力、挤压现象等都是碰撞中需要考虑的问题。
约束:受限制的自由
除了刚体的碰撞外,游戏中自然少不了许多部件的连接与转动,这就是约束这一物理概念在背后起作用。例如,游戏中的小人要想抓取一个物体,就相当于手与物体的接触面产生了约束。
在物理引擎中,约束(Constraints)用于限制物体的运动范围和相对位置。它们在游戏和仿真中有着广泛的应用,如角色的骨骼动画、机械臂、车轮等。在模拟过程中,如果做不好约束很可能得到非常奇怪的游戏画面。
在经典力学中,约束是描述系统中物体或物体之间相互关系的条件。约束力学是研究如何在一个多物体系统中考虑运动的限制条件的分支。根据自由度的不同,物体之间的相对运动受到不同类型的限制。
在物理引擎中,约束通常通过数学方程来描述,并基于经典力学中的拉格朗日力学(Lagrangian Mechanics)和牛顿力学(Newtonian Mechanics)来求解。
物体之间的相对运动由施加在物体上的约束力(Constraint Forces)决定,这些约束力使得物体遵循约定的运动轨迹,防止它们发生不符合物理规律的运动。具体来说,约束力通过改变物体的加速度来限制其自由度,从而确保其运动不会违反约束条件。
人物的关节就是一种约束形式,称为铰链关节,它允许两个物体绕一个轴旋转,同时限制其他自由度。其物理学原理可以追溯到转动惯量(Moment of Inertia)和角动量守恒(Conservation of Angular Momentum)。
在实际的游戏中,约束同样存在计算量限制的问题,需要简化计算量,所以游戏中通常由预设好的通用约束,比如以下几种
布料与流体模拟:
物体的变形与流动
在游戏中,柔体、布料和流体的模拟用于呈现物体的形变和流动行为,这些行为不仅遵循经典物理定律,还依赖于数值计算方法来实现。通过这些模拟,游戏可以展示更加细腻、真实的物理效果,如人物在水中跑动激起的涟漪、挥动武器时带动附近草木的吹动等现象。
柔体是指在外力作用下会发生形变的物体,相比于刚体,它们不再是完全不可变形的。柔体模拟的核心目标是准确描述物体在受到力时的变形行为。
柔体的形变与物理学中的应力(Stress)和应变(Strain)密切相关。应力是描述外力作用下物体内部力的分布,通常用应力张量(Stress Tensor)表示。而应变是描述物体因外力而发生的形状或体积的变化。
质点模型示意图
Bullet 引擎展示的布料效果
进而可以忽略体积黏性项,在游戏中,我们甚至可以忽略黏性项,并只考虑二维的情况,就得到一组很简化的方程,大大减小计算量:
黑神话中打斗时的水面波纹
游戏中和科研中对模拟的区别
不知道大家有没有对游戏中的物理有了更深的理解呢,这里最后给大家一个黑神话中的游戏画面,大家可以想想这之中又蕴含多少物理模拟过程。
参考文献
策划制作
来源丨中科院物理所(ID:cas-iop)
责编丨钟艳平
审校丨徐来 林林
本文封面图片及文内图片来自版权图库
转载使用可能引发版权纠纷
原创图文转载请后台回复“转载”
点亮“在看”
一起涨知识!