• 足迹预测
    • 每段移动动画=左右脚各两个脚印(抬脚→落地)
    • 移动动画是一个循环(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); }
          notion image
      • 采样点I在当前点P的权重 等于 对于任何其他采样点J中,上图演示中橙色线段相对于黄色线段的百分比 中的最小值
 
Semi-Procedual Locomotion研读:总览「Hallo World」 UE4制作分享笔记