- 足迹预测
- 每段移动动画=左右脚各两个脚印(抬脚→落地)
- 移动动画是一个循环(cycle)
下个足迹的时间 = 当前时间 + 动画时长 * (1 - 当前动画已经进行的时间百分比)
下个足迹的角色位置 = 当前角色位置 + 角色当前速度与方向 * (下个足迹的时间 - 当前时间)
下个足迹的角色旋转 = 当前角色旋转向量 * (下个足迹的时间 - 当前时间) * 当前角色旋转
下个足迹的位置 = 下个足迹的角色位置 + 下个足迹的角色旋转 * 动画站姿时对应的腿在对象空间的相对坐标
下个足迹的旋转 = 下个足迹角色旋转 * 动画站姿时对应的腿在对象空间的相对旋转
- 运动插值
- 使用 梯度带(Gradient Bands)插值 方案
- 每个采样点向外辐射一个Band,这个Band的weight会根据距离进行调整
- 权重=min(1 - 相对坐标向量投影/Band在此距离下的weight, 0)
- 采样点P(i)在当前位置P的权重H公式(公式中j等于除了i以外的其他采样点)
Vector3 pointI, pointP;
Vector3 ItoCurrent = pointI - pointP;
float H = Mathf.Infinity;
for(k = 0; k < 采样点数量; k++)
{
if(k == i) continue;
Vector3 pointJ = point[k];
Vector3 IToJ = pointJ - pointI;
// 1 - (I朝向当前点的向量 在 I朝向J的向量的投影 相对 I朝向J长度 的百分比值)
H = Min(H, 1 - Vector3.dot(ItoCurrent, ItoJ) / ItoJ.magnitude / ItoJ.magnitude);
}
采样点I在当前点P的权重 等于 对于任何其他采样点J中,上图演示中橙色线段相对于黄色线段的百分比 中的最小值