ControlRig 程序化动画¶
本页介绍 TongSIM 风格角色使用 Unreal ControlRig 实现的“程序化步态/行走”设计,主要用于:
- 人形/多足生物的自然行走节奏
- 结合 IK 的地形自适应(落脚点预测 + 脚底锁定)
- 与行为树或学习策略结合,实现可控的实时姿态
适用范围
TongSIM Lite 的 gRPC API 主要用于 Gameplay 层面的 actor 控制;本页聚焦 UE 内部的角色动画/ControlRig 结构,用于构建可用于仿真的角色表现。
设计目标¶
- 地形自适应:支撑期脚底稳定,结合 IK 贴合地面
- 步态可组合:通过相位偏移与分组配置不同步态风格
- 速度信号稳定:使用平滑后的速度驱动步态频率/步长
- 可控参数暴露:为 AI 提供速度、转向、相位等控制入口
速度估计(平滑)¶
一个可靠的步态控制需要稳定的速度信号。
推荐流程:
- 由连续两帧的平移差计算 原始速度(除以
DeltaTime)。 - 每帧用弹簧插值/临界阻尼等方式对速度进行平滑。
为什么要平滑
角色移动速度会受碰撞、坡度修正、插值等影响产生噪声;平滑后可避免步态频繁抖动和突变。
步态周期:摆动与支撑¶
每条腿使用归一化周期 progress ∈ [0, 1):
- Swing(摆动):
progress ∈ [0, swing_percent)— 脚从当前点移动到下一落点 - Stance/Lock(支撑/锁定):
progress ∈ [swing_percent, 1)— 脚在世界空间保持稳定
多足角色可为每条腿设置 相位偏移(phase offset) 来实现错峰节奏(例如六足的 6 个 offset)。
落脚预测¶
如果脚仅落在身体“当前正下方”,身体前进后脚会显得滞后。对落脚点做“向前预测”可以更接近真实生物的行走表现。
给定:
current_percent:当前周期位置swing_percent:摆动占比cycle_duration:周期时长(秒)velocity:平滑后的身体速度(world space)
predict_percent = clamp(swing_percent - current_percent, 0.0, 1.0) + (1 - swing_percent) / 2
predict_time = predict_percent * cycle_duration
predicted_offset = velocity * predict_time
直观理解
predict_percent 由“剩余摆动时间 + 支撑期前半段”组成,用于估计身体处于支撑中段时的位置。
摆动轨迹与脚底锁定¶
实践建议:
- 摆动轨迹:用曲线/样条控制高度(中段最高)并在起落点平滑过渡。
- 支撑阶段:将脚锁定在世界空间,同时每帧解 IK 以贴合地面。
- 地形采样:对预测目标点做向下射线检测得到地面点与法线。
平衡与身体控制¶
- 多足:保持重心位于支撑多边形内(由腿分组定义)。
- 人形:结合骨盆/脊柱控制器,必要时叠加 LookAt 约束来稳定上半身。
参数建议¶
| 参数 | 常见范围 | 说明 |
|---|---|---|
swing_percent |
0.4–0.7 | 越大越“轻快”,越小越“沉稳” |
cycle_duration |
0.3–1.2s | 随物种与速度调整 |
step_height |
2–12cm | 过高会显得飘 |
phase_offsets |
每条腿独立 | 用于制造错峰节奏 |
lock_blend |
0–1 | 脚底锁定的平滑权重 |
在本仓库中如何定位¶
- 角色相关资源(骨骼/动画/ControlRig):
unreal/Content/TongSim/Characters/ - 相关运行系统(Gameplay/角色控制):
unreal/Plugins/TongSimCore/Source/TongSimGameplay/
下一步: UE 打包与部署