为什么单机游戏中的碰撞很不真实?物理引擎真的很难做到和现实一样吗?


这个问题提的太好了,既是玩家们很容易察觉到的问题,而深究起来又有很深的技术原理。

这次咱们避免长篇大论,直接直观地看几种物理参数对“真实性”的影响。

1、物理帧率

现实世界是连续的(只要不要深入到量子物理的世界【滑稽】),现实世界也不是由 CPU、GPU 模拟的;而游戏物理,全靠模拟,模拟真实性的第一个影响因素就是——物理模拟的频率。

先举一个有趣的例子:N 年前跑跑卡丁车可以通过截图操作让电脑变卡、然后穿过障碍。这就是物理检测帧率变低导致出现碰撞错误的典型例子。

所以现在成熟的引擎中,通常物理计算频率和显示频率完全是无关的,就算游戏画面卡成了幻灯片,物理也尽可能保证正确性。而物理帧率越高、计算结果就越准确,下面以 Unity 里的一个简单场景为例,介绍“物理帧率和真实性”的关系。

1、物理 50 帧(Unity 默认的 FixedUpdate 帧率),小球弹了 7 下:

2、物理计算降低为 20 帧,小球弹了 9 下:

显然,之前 50 帧的效果比这个 20 帧的真实太多了。问题是,还能进一步真实吗?答案是可以的。

3、物理计算改为 100 帧,小球只弹了 6 下:

有趣的是,进一步降低物理帧率,比如 1 秒 10 帧,足球甚至会穿过底板……(穿墙的问题有其他解决办法,不在本回答考虑范围之内)。

好吧,大部分读者到这里应该已经恍然大悟了,由于现实世界的物理过程是连续的,那么只要让物理引擎不断提高计算频率,就可以无限接近真实的物理世界吗?

不是的,有两个问题:1、帧率越高 CPU、GPU 负担就越大,迟早要超负荷。2、就算帧率足够足够高了,还会有其他更多问题,下面说。

2、物体外形

以一个简单的模型为例。一般的模型都由美术设计师来制作,包含了许多许多的三角面,以下这把枪,从模型来说一般来说有几千个三角面(因为扳机、枪口等位置都由很多的弧面和凸起)。但是物理系统在处理很复杂的外形时,碰撞检测会成几何级数增加。所以必须采用简化的物理外形:

虽然枪的模型有几千个三角面,但是物理方面,我们把它简化为三个长方体、一个圆柱体。糊弄玩家足够了【滑稽(读者表示其实是 4 个长方体【滑稽】)】。

Unity 也支持直接用 3D 模型作为网格,但是做出了一个非常苛刻的限制:如果一个物体能够在物理世界中自由运动和反弹(被称作刚体),那么它必须具有简化的物理外形。这个问题这么理解:

  1. 皮球打在不同表面上,它的第一次反弹的方向很容易计算,和入射方向、反弹面的朝向有关。
  2. 如果是一把枪撞击到地面上,它会如何反弹呢?你会发现地面碰到枪的位置略有一点差异,那么反弹方向就会有巨大差异,撞在枪口略上一点、略下一点,最终结果会有天壤之别。

所以物体外形带来的复杂度也会对模拟结果带来巨大影响。

3、物体表面的材质

真实世界的碰撞发生时,两个物体之间一定会发生挤压,这个挤压时间很短、速度很快我们可以忽略它。但是在物理模拟时,我们只能采用近似的公式来估计反弹的速度,这就造成了和现实巨大的不同。

现代物理引擎也有“物理材质”的概念,但是它一般只包含“摩擦力”、“弹力”这两个主要方面,与现实世界细究起来差异太大了。

上图是 Unity 中的物理材质,参数为:动摩擦力、静摩擦力、弹性系数。下面两个是选择不同的物理算法。

4、其它问题

其它问题都和计算复杂度有关,一是物理公式的迭代次数,二是误差的累计。

很多方程求值时要采用迭代逼近的方法,循环次数越多结果越精确,但是我们只能强行限制到有限的次数,否则会导致运算量不必要的增大。

另外就是为避免无限迭代下去,当物体速度小于某个非常小的值时,我们就假设它“完全静止”了,这样可以省下进一步模拟的计算消耗。

5、总结

实时游戏的开发和设计,是一个“造假”的艺术,只要能让用户觉得“真实”,而且从性能上讲可实现,那么就达到目的了。

所以伟大的开发者们一方面不断让游戏更真实,一方面还要尽可能降低计算的开销。最终达到一个大部分人都可接受的结果。

虽然物理引擎的效果目前似乎还不尽人意,但是从技术手段上来说,已经有了长足的发展。总之,想对题主说:能玩不错了,凑合玩吧【滑稽】

宇宙为什么没有边界?(宇宙的边界是什么)
上一篇
当孩子问「为什么只有 2 号、5 号、7 号电池,没有 4 号、8 号、9 号、10 号电池呢?」时该怎么回答?
下一篇
本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。

相关推荐

  • 苹果手机各个功能介绍,iphone必须关闭的十个功能

    1、关闭蓝牙。现在已经很少有人用蓝牙传输文件了,而且iPhone与安卓的蓝牙并不兼容,所以,可以在设置中,关闭蓝牙功能。2、关闭通知功能。关于APP推送,无非也就是一些更新提醒,关了也不会有什么影响,还能多省点电。3、关闭自动调节亮度功能。一般来说,可以将屏幕亮度在15%-30%之间,在强光环境中,在进行手动调整就可以了。4、禁止后台刷新。在设置—通用中,关闭后台自动刷新功能,也可以对省电起到一点...

  • 高德打车怎么设置途经地,高德如何添加途经路线

    1、点击高德地图APP界面底部的“导航”按钮,进入导航模式。2、点击右下角的“路线”,进入路线设定页面,根据要求输入起点、终点进行路线规划。3、点击“添加途经点”,弹出添加途经点页面,点击右上角,可以添加或者删除途经点,乘客可以手动输入要添加的途经点。4、当添加完途经点时,点击“确定”按钮,即可添加途经路线。此时地图会显示出这条路线上所有的途经点,以及当前途经点的地点信息。怎么设计高德地图设置要经...

  • 高中必修二物理知识点总结,高一物理必修2重点知识点归纳

    您好,1.运动学-位移、速度、加速度的概念及计算方法-相关运动的分析方法,如相对运动和抛体运动-牛顿运动定律及其应用2.力学-力的概念及种类,如重力、弹力、摩擦力等-牛顿第一、二、三定律及其应用-力的合成与分解-能量、功、动能定理、功率的概念及计算方法-动量、冲量定理及其应用3.热学-温度、热量、热能的概念及计量单位-热传递的方式及其特点,如传导、对流、辐射-热力学第一、二定律及其应用,如热机效率...

  • 人类怎么从鱼进化而来的?

    哈哈哈,这个问题非常好,想要详细且完整地回答至少得写个几万字吧。同时还会被质疑鱼是从哪里来的。那么动物分类学者估计要从领鞭毛虫开始写起来,但他们目前仍尚未领会领鞭毛虫的来源。进化学者估计要从 Luca...

  • 瞎扯 · 如何正确地吐槽(正确的瞎扯吐槽方法)

    Q:历史上有哪些疑似穿越者?理由是什么?@孙政权 :何书桓:八年抗战要开始了......Q:你知道哪些「高冷」的知识?@Ts8zs :珠穆朗玛峰峰顶的最低温度一般是零下 34℃。Q:吃货们都幻想过什么...