骨骼动画资料中出现Initial,很容易被顺口理解成“每次都从初始姿态算起”。Blender 4.5的iTaSC说明却给了更精确的条件:这里的首次帧,是缓存中没有上一帧的帧。把这个条件省掉,就难以解释Simulation为什么还要保存状态,以及后续帧与首次帧为何不同。
手册先区分Animation和Simulation。Animation模式是无状态的,以F-Curves插值得到的姿态作为逆运动学收敛之前的起始姿态,并忽略目标速度。它关注从给定起点求得姿态。不能只因为两种模式都能形成骨骼姿态,就把它们的起点与时间关系写成同一种。
Simulation则被明确称为有状态模式。它估计目标速度,在真实时间语境中工作并自动建立状态缓存;除通过关节旋转约束之外,忽略关键帧的旋转。于是,前后帧之间存在被保存并延续的状态,不是每一帧只读取同一份静态输入就结束。
Reiteration下的Never,从静止姿态开始,连第一帧也不进行反复迭代收敛。原文说明,这意味着动画开始后可能要经过若干帧才能到达目标。这里的Never描述的是重新迭代这一行为,而不是说求解器没有产生运动,或之后的每帧都没有状态变化。
Initial也从静止姿态开始,但会在首次帧迭代到给定精度。之后各帧则通过对关节速度在该帧代表的时间间隔内进行积分来跟踪目标。它因此把起步时的收敛与后续的状态推进分开。所谓首次帧没有上一帧缓存,是原文定义的重要组成部分,不能只理解为时间轴上永远固定的某个编号。
Always的区别更直接:每一帧都反复迭代到给定精度。但原文同时提醒,这会略去iTaSC的大部分动态行为;作为末端位置精度的交换,最大关节速度和帧间连续性不再得到保证。因而Always并不是脱离条件的“各方面都更好”,它改变了保留哪些动态关系。
三种名称可以沿着同一个问题比较:是否在当前帧重复求解到给定精度。Never连起步帧也不这样做,Initial只在没有前帧缓存的起步帧这样做,Always逐帧这样做。随后还需另看它与状态缓存、速度和连续性的关系,不能仅按迭代次数排出一个普遍优劣顺序。
本文只解释4.5手册中iTaSC的模式语义,未把它扩展为所有IK求解器的共同规则,也未给出参数、绑定步骤或机器人操作建议。这里没有实际动画测试。名称帮助定位选项,缓存条件和动态说明才使它们成为能够相互区分的完整概念。
信息来源
本文基于上述公开资料整理,未使用来源页面的图片、视频或嵌入媒体。