游戏设计师,车迷,电影饭,设计控,技术宅
(本文无本地图片,随时可能失效,请保持理解……反正也没有说明性的图片,都是为了好看的插图而已)
上周我们最后的时候说到这周要写到悬架的另外一个问题,而这个问题就是我们这次的标题了。可能很多读到这里的朋友都会很莫名其妙——这究竟是个什么情况?所以打算先花点时间小小的解说一下。

最近看到同行朋友天之虹正在翻译的书:《游戏感》。在第16章中有一个小小的段落说的是关于汽车物理的,文中提到可能对于一般玩家而言,PGR(ProjectGothamRacing series),GT(GranTurismo series),RR(RidgeRacer series) 这类的游戏看起来是没什么太大区别的。但是对于驾驶游戏的狂热爱好者来说,它们在风格、材质、和感受上都有着细微差别。在这个世界上的确有着很多把驾驶机制的好坏和红酒品质看得一样重要的人。
那么在 CodeFXCarl 又是什么情况呢?好吧,这里是个不但会区别不同系列之间的差别,甚至到同一个系列中的不同作品、同一款作品在不同平台上的表现都会拿出来讲的地方。在这里,GT,PGR,RR 之间怎么能叫细微差别呢?这叫天差地别……好吧,我们不做炫耀党。为了让一般玩家也能大致知道这里在做什么。请允许 FXCarl 做几句说明:目前您看的文章是专注于讨论竞速游戏的游戏感的。对于一款写实题材的竞速游戏,最终的目标是让在游戏中驾驶赛车的玩家们可以与现实中驾驶赛车的车手们以相同的方式思考和行动。因为这样不仅很酷,而且有着几乎无限的深度和重复游戏乐趣,甚至可以把你在游戏中练就的技巧还原到现实。
![]()
回到本文的主题中来,我们讨论上周预留的问题。
悬架行程这个东西吧,是一个现实中看起来特别合情合理的东西。就像键盘上的按键,敲下去和弹起来总有个行程限制。一根阻尼筒、一套悬架机械结构也是一样,总有可以压缩到多短,可以拉开到多长这样的限制的。这样的限制会有几个显著的特征。
1. 行程的最短距离使得车的底盘不会无限制的降低,无论把悬架的弹簧和阻尼硬度设置到怎样的软弱,最差的结论也就是车辆直接撑在没有支撑力的悬架机械结构上,与地面硬接触。
2. 行程的最长距离使得车轮与车身的距离不会无限制的延展,这意味着托住车身,车轮下降的距离是相当有限的。不管悬架的弹簧和阻尼怎么设定,也都远近差距不多。

对应游戏中的表现,则更是特别的重要和有趣:
1. 行程的最短限制可以保证车辆在受到巨大的垂向冲击时,不会掉落到地下去,或者被空气动力学零件的巨大下压力而摁到地平面下面去。空气动力学的东西我们以后再说,所以这次从简略过。
2. 如果你还记得我们上篇文章的话,我们在上篇文章中说到由于没有悬架预载的设计,所以在《飚车世界》中需要预先计算出预载长度,然后让悬架自然压缩弹簧行程。这导致了《飚车世界》中的悬架默认位置通常会被设定在车身下方0.3米左右。这意味着如果抬起车身,车轮会下降0.3米……
话说《飚车世界》有个很奇怪的小特性,就是相比与其他的不管更拟真还是更娱乐的赛车游戏,车子都比较容易翻车。于是在程序中,我们将车辆的最大倾角锁定在了30度来尝试解决这个问题。而实际上这个问题也和悬架行程有关:

当车辆开始侧倾的时候,车身一侧被抬高。悬架的支撑力逐渐减弱,到悬架最大行程时支撑力不再存在。随后重量开始发挥更大的作用,使得车身重新恢复水平。一般来说,现实中的车型悬架的下行行程不超过0.1米。车宽大约是1.7-1.8米左右的话……
Atan(0.1/1.8)=3.179830119864234 即当一侧车身被抬高至悬架力消失时,车身的侧倾不到3度。此时重力接管,会让被抬高侧的车身下落。
而在《飚车世界》中,长达0.3米的下行行程可以做到的就夸张的多了……
Atan(0.3/1.8)=9.462322208025618 不管你信不信,《飚车世界》的无行程限制悬架可以持续提供车身的支撑力到侧倾达9度以上!车身的重心可以抬高达15公分,大致可达原先重心高度与横向力作用平面高度的40%,重心高了1/3上去,你不翻谁翻啊。
于是综上所述,我们在提供了悬架预载力之后,便要开始进行悬架行程的控制。让我们的赛车更加不容易翻车。也不容易陷入到地里去。不过为了达成这样的目的,我们的另一个挑战来到了面前。那就是物理算法的局限问题了。
![]()
计算机中的物理分成两个部分。一个是碰撞检测,实质上是一套复杂的几何问题,一个是碰撞反应,这是物理问题。而《飚车世界》在这两个方面上由于没有引入这两年的先进物理引擎机制,所以都非常的瀛弱。碰撞检测和反馈的不精确,用来驱动车身和墙壁的碰撞这种简单的方面还是没有问题的,但是一旦到了车轮与车身互动这种精密领域,就蔫了。
如果模拟车辆和墙壁碰撞时的做法直接位移车身位置,很容易让车身产生不必要的跳跃感,且能量不守恒,会被玩家轻易感知。而使用强力的悬架设定,譬如说在悬架达到最大行程后给予10倍的弹性系数和阻尼的话,则会导致在做数值积分时浮点溢出……
接触力的计算本身的确是一个非常复杂的问题。譬如说我们并不知道当车辆悬架被压扁后,其他悬架的情况,也不知道车辆是否同时有撞墙的情况发生。有无数的论文在讨论这个方面。而暂时 FXCarl 还没有找到一个廉价且稳定的方案。希望可以在以后几周的工作中有所突破吧。

这次的关于悬架行程的问题就到此停笔,下次说点啥呢?说点关于空气动力学的东西吧。

评论
这次算看懂了些........................
另期待此游戏被fxcarl改善完成