与大多数采用“ 刚体(Rigid-body)”物理模拟的游戏不同,BeamNG 是一个“软体(Soft-body)”物理模拟器。这意味着物体(如汽车)是可变形的。
这种变形效果是通过“节点(Node)与梁(Beam)”结构实现的。你可以把它类比为骨架,或者像是2000年代初流行的磁力积木玩具。
以上面的图片为例,这些结构由以下部分组成:
节点可以被看作是粒子,每个节点都有质量,并且可以在空间中自由移动。
梁将节点固定在一个结构中。梁本身没有质量,并且每一端总是连接着一个节点。它们的行为类似于弹簧(后面会详细介绍)。
梁可以围绕节点自由旋转,只负责保持两个节点之间的固定距离。
其他力(比如扭转力)不会通过梁传递,并且梁本身也无法弯曲。
在构建“节点-梁”结构时,需要注意的是,如果一个盒子没有加上对角支撑(斜撑),它很容易倒塌,因为梁可以绕节点转动。为四边添加斜向支撑会让盒子成为一个刚性的结构。
只要有足够的节点和梁,就可以构建出像汽车这样复杂的结构;“节点-梁” 结构可以用来模拟底盘、悬架、轮子以及许多其他部件。
BeamSpring值定义了弹簧有多“硬”,表示把弹簧压缩一定距离所需的力的大小。
较高的值通常用来表示像底盘这样较为刚性的结构,而较低的值则用于像弹簧或橡胶这类不太刚性的结构或材料。
弹簧刚度/硬度不要与形变混淆。弹簧值较低的梁容易被压缩,但这属于弹性形变——意味着压缩后它会恢复到原始长度。而形变值较低的梁则会被压缩后无法恢复原状,即发生永久变形。
阻尼是对运动的阻力。
在没有摩擦的真空中,如果弹簧没有阻尼,它会无限地振荡下去。为了避免这种情况,我们需要加入一定的阻尼,这种阻尼会以与速度成反比的力来抵抗运动。
阻尼的主要作用是防止振荡,同时还可以吸收一部分由形变产生的能量,从而减弱反弹的力度。
在现实生活中,大多数物体(包括弹簧)都会至少有一些内在的阻尼。
{"beamSpring":40000,"beamDamp":0}, //Suspension springs
{"beamSpring":0,"beamDamp":4500}, //Suspension dampers
{"beamSpring":8000000,"beamDamp":125}, //Structural vehicle components, such as suspension arms
{"beamSpring":14001000,"beamDamp":250}, //Steering rack, it needs to be super stiff to keep wheels pointing in the right direction
Beam deform(梁的形变)决定了一根梁在永久变形前所需承受的力值。一旦发生形变,梁将无法恢复到原来的形状。这一点对于实现车辆的真实变形至关重要。
Beam strength(梁强度)表示一根梁被拉断所需的力。一旦梁断裂,它们会像被折断一样失去连接,这意味着它已不再连接两个节点。通过合理设置梁的强度,可以让部件脱落。例如,通过让连接保险杠与车身的梁容易断裂,就能让保险杠在碰撞时掉落。
如下图所示,梁断裂后,车辆的可见网格也会被破坏。
Node weight(节点质量)可以用来调整车辆每个节点的重量。
然而,如果与该节点相连的所有梁的刚性过高,节点就会开始振动,甚至发生爆裂。为防止这种振动,需要增加节点的重量,或降低梁的刚度。更复杂的是:如果 beamDamp(阻尼)设置过高,梁同样也会开始振动甚至爆裂。
左侧:低节点重量(6kg)| 右侧:合适节点重量(7kg)
下图展示了节点质量对车辆的影响,红色梁连接的4个节点的重量被改变。
可以看到,右侧车辆因拥有合适的节点质量而十分稳定,而左侧车辆则因节点质量不足而剧烈振动。
这篇文章对你有用吗?