Game

软体物理

简介


本页面从理论层面介绍BeamNG.drive的物理模型基础。虽然你现在还不能亲手制造一辆车,但你可以理解其核心原理。

节点-梁结构


与大多数采用“ 刚体”物理模拟的游戏不同,BeamNG 是一个“ 软体”物理模拟器。这意味着物体(如汽车)是可变形的。

这种变形效果是通过“节点(Node)与梁(Beam)”结构实现的。你可以把它类比为骨架,或者像是2000年代初流行的磁力积木玩具。

以上图为例,结构包括:

  • 节点(银色球体)
    节点可以看作具有质量的粒子,能在空间自由移动。

  • (蓝色棍子)
    梁用于将节点连接成结构。梁本身无质量,但连接两个节点,作用类似弹簧(后文将详细解释)。BeamNG没有角度摩擦(angular friction,也就是转向部位的摩擦),因此梁在连接处可以旋转。

在BeamNG中,梁的唯一作用是固定两个节点之间的距离。它们不会传递其他力(如扭转),也不允许弯曲。

没有交叉支撑的框容易倒,梁将以节点为轴心转动。而加上对角支撑后变成固定的方框。 没有交叉支撑的框容易倒,梁将以节点为轴心转动。而加上对角支撑后变成固定的方框。


通过这种节点和梁的结构,可以模拟出复杂的物体,比如汽车。 通过这种节点和梁的结构,可以模拟出复杂的物体,比如汽车。

梁的弹性和阻尼参数(Beam Spring and Damp Values)


在BeamNG中,所有梁都有弹性(sping)和阻尼(damp)两个值。

梁的弹性(BeamSpring)

梁的弹性(BeamSpring)决定了梁的刚度。即弹簧的硬度。
假设创造一个完全没有阻尼的弹簧,那这就会是一个没有摩擦损耗的弹簧。处于无摩擦的真空中时,当你拉伸弹簧,再放手,弹簧会无限振动下去。在这种情况下,弹簧的硬度将由最初压缩弹簧时的难度成正比。

以现实举例,仅凭手的力量难以压缩汽车用的螺旋弹簧,而笔芯弹簧相比之下则非常容易压缩,因为两者的硬度差异巨大。

左:软弹簧| 右:硬弹簧(一辆Pigeon分别落在软硬不同的弹簧上的对比) 左:软弹簧| 右:硬弹簧
(一辆Pigeon分别落在软硬不同的弹簧上的对比)

梁的阻尼(BeamDamp)

梁的阻尼(BeamDamp)决定了物体对运动的抵抗力。

因此,一个阻尼值大于 0 的弹簧,即使处于无摩擦的真空中,也会始终趋向于回到静止位置。这样弹簧的运动就可以通过阻尼进行控制。

左:无阻尼 | 右:些许阻尼(一辆Pigeon分别落在有阻尼和无阻尼、且刚度相同的弹簧上的对比) 左:无阻尼 | 右:些许阻尼
(一辆Pigeon分别落在有阻尼和无阻尼、且刚度相同的弹簧上的对比)

常见数值示例

  
{"beamSpring":40000,"beamDamp":0}, //悬架弹簧(硬度:40000,阻尼:0)
{"beamSpring":0,"beamDamp":4500}, //减震器(硬度:0,阻尼:4500)
{"beamSpring":8000000,"beamDamp":125}, //结构部件,例如悬挂臂(硬度:8000000,阻尼:125)
{"beamSpring":14001000,"beamDamp":250}, //转向机构,需要足够刚性以固定车轮方向(硬度:14001000,阻尼:250)

形变和强度参数(Beam Deform & Strength values)


梁的形变(Beam Deform)

梁的形变(Beam Deform)参数决定了梁在发生永久形变前所需的力。

一旦梁发生形变,就无法恢复到原来的形状。这对于实现车辆的真实形变至关重要。

左:低形变值(5000) | 右:近似无限的形变值(一辆Vanster分别落在高形变值和低形变值,且其他参数相同的弹簧上的对比) 左:低形变值(5000) | 右:近似无限的形变值
(一辆Vanster分别落在高形变值和低形变值,且其他参数相同的弹簧上的对比)

梁的强度(Beam Strength)

梁的强度(Beam Strength)参数决定了使梁断裂所需的力度(strength)。一旦梁断裂,它就像被掰成两半一样,不再连接两个节点。 这对于让车辆组件脱落非常有用。例如,通过设置连接保险杠与底盘的梁容易断裂,就可以让保险杠从车辆上掉落。

如下面的示意图所示,梁断裂还会导致可见的模型网格(mesh)随之破坏!

左:低力度 | 右:高力度(一辆Sunburst分别落在低力度和高力度,且其他参数相同的弹簧上的对比) 左:低力度 | 右:高力度
(一辆Sunburst分别落在低力度和高力度,且其他参数相同的弹簧上的对比)

节点重量(Node Weight)


节点重量(Node Weight)可以用于调整车辆每个单独节点的质量。

然而,如果所有连接的梁的总体刚度过高,车辆就会开始振动,甚至可能发生爆炸。为了防止这种振动,你需要么增大节点重量,要么降低梁的刚度。情况更复杂的是:如果你的梁阻尼(BeamDamp)设置过高,梁本身也可能产生振动并发生爆炸。

左:低节点重量(6kg) | 右:正确节点重量(7公斤) 左:低节点重量(6kg) | 右:正确节点重量(7公斤)

这张图展示了节点重量对车辆的影响,其中连接红色梁的四个节点的重量数值被进行了调整。

可以看出,右侧的车辆由于节点重量设置正确而完全稳定,而左侧的车辆则振动严重。

若想进一步学习BeamNG车辆结构的更多内容,请访问我们的 完整文档