mcpField
G
game-smooth-curves-and-motion

game-smooth-curves-and-motion

github.com/lvtd-llc开发158 次安装8 周前更新
代码仓库

关于 game-smooth-curves-and-motion

用于设计游戏平滑路径与运动的技能,侧重连续性、可控性和游戏手感。它帮助开发者按需求选择曲线类型、参数化方式和运行时采样策略。

主要功能

  1. 01根据控制需求选择曲线
  2. 02设定连续性目标
  3. 03选择参数化方法
  4. 04区分编辑控制项与运行时样本
  5. 05测试速度变化和边界情况
  6. 06用弧长查找实现近似匀速

适用场景

  1. 01设计平滑的角色或摄像机路径
  2. 02为路径点路线选择曲线
  3. 03改善路径上的速度一致性
  4. 04检查急转弯处的曲线表现

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/lvtd-llc/skills --skill game-smooth-curves-and-motion

安装后在 Claude Code 中输入/game-smooth-curves-and-motion确认已加载。

详细介绍

游戏中的平滑曲线与运动

使用此技能设计路径和曲线系统,在这些系统中,连续性、可控性和游戏手感比数学上的精确性更重要。

主要来源:Oleksandr Kaleniuk 著《Geometry for Programmers》 (https://www.manning.com/books/geometry-for-programmers),改编并转述自第 5–7 章。其他来源:Pomax 著《A Primer on Bezier Curves》(https://pomax.github.io/bezierinfo/)。

核心工作流

  1. 确定哪些方面必须平滑:位置、切线方向、速度、曲率、摄像机朝向、侧倾或动画值。
  2. 选择能以最少状态提供所需控制的曲线类型:线性线段、三次 Hermite、Catmull-Rom、Bezier、B 样条、NURBS 或自定义多项式片段。
  3. 定义连续性目标:
    • C0:各段在位置上相接。
    • C1:切线匹配,使方向看起来平滑。
    • C2:曲率平滑变化。
  4. 确定参数化方式:均匀 t、弦长、向心参数化、显式计时或弧长查找表。
  5. 将创作控制与运行时采样分开。设计师可以编辑点和控制柄;游戏可以使用烘焙后的查找表。
  6. 测试极端控制点、急转弯、闭合环路、重复点和速度变化。

曲线选择

  • 网格移动、调试路径和有意设计的尖锐路线,使用线性线段。
  • 已知端点位置和切线向量时,使用三次 Hermite 曲线。
  • 控制柄是自然创作界面时,使用 Bezier 曲线。
  • 路径需要经过路点且尽量减少控制柄编辑时,使用 Catmull-Rom 风格的样条。
  • 控制点较多、需要高连续性或精确圆锥曲线时,使用 B 样条或 NURBS。
  • 避免用一条高次全局多项式穿过许多点。应拆分为多个片段,以避免振荡和局部控制不佳。

运动规则

  • 位置平滑并不意味着速度平滑。检查路径上的导数长度。
  • 均匀增加 t 很少能产生恒定的世界空间速度。
  • 若要获得近似恒定的速度,预计算弧长表,并将行进距离映射回曲线参数。
  • 切线长度会同时影响 Hermite 类系统中的速度和曲线形状。
  • 只有在速度需要单独控制时,才归一化切线方向。
  • 如果曲线仅用于表现层,应将游戏碰撞与视觉平滑分开。

实现检查清单

  • 记录曲线类型和连续性目标。
  • 明确参数范围和单位。
  • 有意处理闭合路径首尾处的连续性。
  • 运行时求值有界,且热点路径中不进行内存分配。
  • 需要时,烘焙的采样点应包含位置、切线、可选的法线/副法线以及累计距离。
  • 调试视图显示控制点、控制柄、采样点、切线和速度热度。

常见错误

  • 使用经过每个点的插值,而不采用更平滑、更稳定的近似方法。
  • 误以为 Bezier 控制柄是曲线上的点。
  • 让重复点或近似重复点导致切线未定义。
  • 以恒定参数速度移动摄像机,却称之为恒定运动。
  • 曲线需要的是不同的参数化方式或连续性目标,却通过增加控制点来修复。

评论

支持 Markdown