以下是对项目技术积累的两点总结:

  1. 项目技术选型要准确,避免踩坑。评估阶段最好出一份评估报告,用数据说话,不要仅凭经验拍板。
  2. 给策划用的 editor,功能必须准确、操作要易用,否则极易返工,白白消耗时间。

评估报告

基本公式:s = vt,v = at,s = a² × t

采样点密度分析

如果加速度为 2,则每米将插入 2000 个点;4 公里赛道共 800 万个点,内存占用约 340 MB。

如果加速度为 5,则每米插入约 780 个点;4 km 赛道约 300 万个点,内存占用约 155 MB。

优化方案

当起点速度为 36 km/h 时,最小单位为每米 7 个点,内存消耗约 1.35 MB,共约 2.8 万个点。

问题 1:采样点不足导致速度变化不准确

若插入点数过少,速度变化引起的位置偏移就无法被精确表达——速度变化曲线不再平滑,而是退化为阶梯状的二次方程,严重时会出现明显抖动。

量化分析:最小速度变化单位为 1 km/h,对应一次速度变化量为 0.2777 m/s。每帧位移为 0.0044 米,原速度下每帧位移为 0.16 米,0.16 ÷ 0.0044 ≈ 36 倍。因此插入点数至少需要增加 36 倍,即 252 × 4000,约 100 万个点,内存消耗从 1.35 MB 上升至约 46 MB。

结论:优化方案为在起步阶段将速度提升至 36 km/h 后再启用 Bezier 插值,速度变化以 1 km/h 为最小单位。4 km 赛道每条赛道内存消耗约 46 MB。该方案未将计算耗时纳入考量,因为插值点可在场景加载时提前初始化。

此外,百万级插值点在 float 精度下的累积误差可能较大,需要关注。

问题 1 的优化方案 2:线性插值替代曲线插值

不对采样点做曲线插值计算,而是在每两个采样点之间使用 vector 线性插值。这样做会损失曲线采样点的精度,但可以大幅减少内存消耗。具体来说,针对上述速度变化量问题,将采样点之间的曲线插值替换为线性插值,以精度换性能。

相关参考文章: