回复主题: 玩赛车是看赛车,记刹车点还是风景 应该去问KIMI
作者:FXCarl

刚刚看了 GTTV 的那个视频,只有前一半,没有接触到开发人员关心的核心问题——运用算法在游戏中的问题以及对应测率。但是算法已经出来了。的确和我前面说的一样。是 Pacejka 模型的,这个模型我本地也有一些资料,给出一张图方便说明
http://p15.freep.cn/p.aspx?u=v20_p15_p_0710232215418709_0.gif

这个就是一个标准的 pacejka 的查找表。叫查找表的原因是,这个东西东西不是可以算出来的,而是轮胎厂商出具的轮胎性能说明。
查表的方式是,输入现在轮胎的加速度,和轮胎的负载,返回一个当前的摩擦力(2维表)。这个查找表分成纵向和切向的,不同轮胎都是不同的。
这个查找表在很大程度上可以解决在平面上轮胎模拟问题(越野这套显然不够)。

这个模型想要应用到游戏中,有以下一些问题。首先是一些除零的算法问题,可以避免的。然后有个问题就是对于频率的问题。游戏是按照帧走的,即取得的数值是离散的。用离散的值来直接带入公式,会立即造成令人惊讶的结果……(用过物理引擎就知道,瞬间冲量正无穷,然后物体就被弹射到外太空去了)所以,一来要增加采样频率,以来要处理连续的问题。Forza2有资料说是3被渲染帧速率的物理模拟,没有办法考证。其他问题还有很多,但是都可以解决,前途一片光明。

但是吧……

Pacejka 模型有个局限。前文说过,Pacejka 是一个平面上的求解方案。可是没有一条赛道是物理平的……Pacejka模型只能在 30Hz 以下保持其结果在可接受的误差范围内。表面上看,问题不大:时速200公里时秒间移动 55米,即可以两米一个坑~但是你要是压了路肩或者路面持续颠簸~那就是另外一回事了。轮胎在不断震荡中的状态不是 Pacejka 的擅长。这个问题很多地方都没有提及,但是正是为了解决这个问题,后来才有了例如 SWIFT 之类一大堆的轮胎模型改进方案。只是因为都比 Pacjka 要复杂,且通常都是为了某些问题而建立,所以都不如 pacejka 来的普遍适应。

此外……

pacejka 只给出了轮胎在不同负载和加速度下的摩擦公式,却没有给出任何关于轮胎从受到压力到减小压力过程中所需要数据的信息。譬如说我们刹车,刹车力作用域轮轴,轮胎用摩擦力完成减速。这个时候,车身的重量向前转移。重量压在悬架上,悬架压到轮胎上。这个时候,轮胎会怎么样?会因为重量压在上面而开始改变其摩擦力。但是,轮胎怎么通过自身的压力变化把这个重量给承担下来的?接下来有多少力反馈回了悬架?这些问题都没有得到解决。轮胎是一个柔体,不是给出力就可以得到反作用力的。由于时间一致性的问题。这个问题会因为加速减速的变化而把误差积累起来,越加越大。反过来说,因为轮胎是一个柔体,很多细微的操作也会被轮胎所过滤掉,因此车辆不会变得非常神经质(所谓神经质就是突然失控)。而所谓的保持在极限就是充分利用轮胎的特性来做一些驾驶的行为。

说了不少轮胎,总结一下吧。我觉得Forza2的轮胎模型用的没错,但是很多细节的问题解决的还不是如GT那般完善。所以,也没有完全避免神经质的问题。至于GT方面,很多数值大家觉得都是人为操作的。
GT中人为操作的地方很多,譬如说永远不翻车的问题。其实GT只要物理模拟正确,车子就是应该能翻掉的……GT在计算的时候把一些转动惯量给抽掉了。

至于Forza2的横向力的问题。我也有感觉。其原因可能和弹簧阻尼系统采用的算法有关系。
一般物理引擎里面提供的弹簧总是和阻尼在一起的。不是分开计算的。这个不是什么大关系,而问题其实在于另外的。就是弹簧阻尼系统在工作的瞬间。其作用应该是0,然后以很高的上扬角达到预订数值。但是很多物理引擎提供的弹簧阻尼系统是有初始值的……即一个横向力来的时候,本来车身的转动惯量应该会拉动车身侧倾,可是一拉车身,被悬挂的弹簧阻尼系统拽住了,拉不动……

还没有细想,帖子写了蛮久,下帖再展开吧

[ 本帖最后由 FXCarl 于 2007-10-23 22:54 编辑 ]



[登录后才可回复]