百科问答小站 logo
百科问答小站 font logo



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

  

user avatar   levelpp_edu 网友的相关建议: 
      

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

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

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、总结

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

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

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


user avatar   ming-yun-sniper 网友的相关建议: 
      

很难,因为真实世界是连续的(近乎连续),而物理引擎是离散的(不近乎连续)

(以下是一个通俗的解释,并代表目前物理引擎的真实解决方案)

先说时间层面的离散和连续

物理引擎是根据每个物体的状态一帧一帧更新每个物体的位置,当发生碰撞(碰撞盒重叠)时根据2个物体的速度大小、速度方向、材质、碰撞深度(2个碰撞盒重叠了多少)来计算这次碰撞的结果,同时更新2个物体的状态(位置、速度)或者触发某些特殊效果(破碎、变形)

但实际上我们都知道真实世界里2个物体是不会“重叠”的,真正的碰撞发生在2个物体接触的瞬间或者从接触到形变到碰撞结束的整个过程中(回忆一下高中学的冲量和动量的相关知识),是一个连续的过程,而不是一下一下断断续续进行的。

但物理引擎由于是一帧一帧更新位置、计算碰撞结果,无法保证碰撞的时间点正好在某一帧上,也无法真正完全动态模拟2个物体从接触到离开过程中的每一个细微变化,2帧中间的碰撞信息其实是丢失了的

例如小球和墙壁相距10个单位,小球按照3单位/帧的速度垂直撞向墙壁,理论上小球会在3.3333帧后撞上墙壁,但是实际上物理引擎处理的效果是:

第0帧:相距10单位

第1帧:相距7单位

第2帧:相距4单位

第3帧:相距1单位

第4帧:相距-2单位,发生碰撞,更新位置到相距2单位,速度方向反向

由于引擎中不存在3.33333帧这个状态,而第四帧的适合2个物体已经重叠了,因此根据这个状态判断小球和墙壁已经撞上了,应该反弹。

而从重叠状态去模拟计算出真实的碰撞效果是必定有误差的,尤其是在物体本身较小、碰撞位置较薄的地方,例如一些手机游戏里建模比较小,很容易出现“反常规”的碰撞结果

微信里的疯狂弹球中我瞄准了红线路径上标号为4的三角的左边尖角位置,按常理球撞到尖角上会向左弹,但实际是向右弹的


再说在空间层面的离散和连续

在物理引擎中会吧一个球、一个方块、一支笔等物体当做一个完整的“刚体”去模拟:光滑、规则、整体结构一致(真空中的球形鸡/滑稽)。但实际中即使是一个完整的物体也并不是真正的一个整体,往大了说一支笔也分成好及个部分,彼此只是黏在一起的,往小了说将物体放大表面也是坑坑洼洼的,再狠一点在原子、分子层面看更是离散得不能再离散了(很多物体的物理性质是和其原子、分子结构相关的,例如石墨和金刚石)。

当把这种离散的物体当做一个整体去模拟时必定会出现不真实,例如碰撞中物体由于受力形变部分动能变为了内能消耗掉了,这个过程其实是由物体前后2个部分的速度差形成的挤压导致的,想要模拟就需要将物体在建模是拆分成很多个“小块”,整个物体发生碰撞时这些小块之间发生彼此的相互作用。

显然这个过程十分复杂,于是引擎只有加入“碰撞系数”这个参数来近似实现碰撞中的能量损耗。但显然即使材质相同,形状不同的物体碰撞时消耗掉能量显然是不同的,不应该一概而论,这就形成了误差,更不提例如物体摔碎、摔断这种现象不将整个物体拆分成很多块是根本模拟不了的,只能靠预先设计好的“碎裂套路”。

另外物体外形对于碰撞效果也有极大的影响,摩擦就是一种典型的表现形式,本质上摩擦就是由于物体表面的不光滑导致的,但是要实现这种不光滑就需要模型构建得非常细致,那碰撞的计算量就巨大。试想1个方块在地面上滑动,方块表面有成千上万个小沟壑和地面上成千上万个小沟壑互相碰撞,这个计算量难以估量。


物理引擎可不可以做到很真实?

肯定是可以的,把帧率越高模拟的效果就越好(上限普朗克时间?),物体网格细分得越细模拟效果就越好(这个上限不好说,小到量子领域就没法模拟了),毕竟通常情景下的物理碰撞不涉及到量子层面,模拟算法越真、材质仿真越真,都可以不断提升真实性,唯一理论层面的难题还是在这种细分、真实到一定细节之后,量子层面的问题始终会出现,但就人的感官“分辨率”而言不用细分到那个程度就足以欺骗人眼了。

(评论区朋友指出,目前物理引擎对于多物体同时互相影响的计算是两两互相求解,这并不真实,这个问题会导致复杂的多物体碰撞从原理上怎么也无法接近真实状态。)

但帧率越高也就意味着计算力要求越高,现在的个人电脑连60帧/秒都难以稳定(包括物理引擎和显卡计算2个方面),因此以目前的硬件技术水平追求拟真程度代价似乎过高,意味着需要更贵的CPU、更低的画面表现力等等,综合看来在游戏领域并不值得。

反过来诸如大气模拟、航空航天模拟在这方面对拟真程度的需求就极高,各种超级计算机也就应运而生了。

如果等到以后个人计算机的计算能力也达到目前超级计算机的水平,那时候游戏中的物理引擎就能真不少了。




  

相关话题

  冒险等级35,我的卡池还有救吗? 
  请问FXAA、FSAA与MSAA有什么区别?效果和性能上哪个好? 
  如何看待腾讯代理的新游戏枪火游侠? 
  有哪些游戏的续集内容已经完全和标题没有关系了? 
  如何看待 Xbox 负责人菲尔·史宾塞批评「其他公司」将游戏登陆 PC 收两次钱? 
  如何评价只狼十月底的DLC更新? 
  当算力发展到一定程度,游戏是否可以突破“多边形”的框架,进而模拟粒子,从而达到复刻现实的程度? 
  你愿意进入需要获取steam库全成就才能离开的时间静止密室吗? 
  如何评价大部分玩家认为年度游戏会是《超级马力欧 奥德赛》或《塞尔达传说 荒野之息》的态度? 
  你在游戏中做过最难为情的事是什么? 

前一个讨论
如何评价《幽游白书》?
下一个讨论
张无忌为人讨厌在哪里?





© 2024-12-22 - tinynew.org. All Rights Reserved.
© 2024-12-22 - tinynew.org. 保留所有权利