3DSMax2023 MAXScript:基于控制器线性ORT添加符合插值的关键帧
在3DS Max 2023中基于线性ORT插值添加关键帧的正确MAXScript方法
首先明确:可以通过MAXScript基于控制器的线性ORT插值添加关键帧。你之前用addNewKey没得到预期结果,问题出在没有针对Path控制器的Percent子控制器操作,且没计算线性延伸后的正确参数值。
问题分析
你的脚本里,Dummy的运动由Path控制器的Percent子控制器驱动,第二关键帧后的线性ORT虚线是这个子控制器的插值延伸。直接给Dummy对象加位置关键帧会打断Path控制器的逻辑,必须针对Percent子控制器来操作——先算出线性插值到动画末尾时的Percent值,再添加对应关键帧。
实现步骤及代码
在你现有设置Path控制器的代码之后,添加以下逻辑:
-- 获取Percent子控制器(这才是驱动运动的核心控制器) percentCtrl = PosCntrl.percent.controller -- 获取已有的两个关键帧(Path控制器默认会生成这两个关键帧) key1 = percentCtrl.keys[1] key2 = percentCtrl.keys[2] -- 目标时间:动画末尾 targetTime = animationRange.end -- 用线性插值公式计算延伸到目标时间的Percent值 deltaTime = key2.time - key1.time deltaValue = key2.value - key1.value extendValue = key2.value + ((targetTime - key2.time) / deltaTime) * deltaValue -- 在Percent控制器上添加新关键帧 newKey = addNewKey percentCtrl targetTime newKey.value = extendValue -- 设置关键帧切线为线性,保持ORT插值一致 newKey.inTangentType = #linear newKey.outTangentType = #linear -- 可选:如果需要更新动画范围以包含新关键帧 animationRange = interval animationRange.start targetTime
补充说明
- 这段代码直接针对驱动运动的
Percent子控制器操作,不会破坏Path控制器的原有逻辑 - 线性插值公式严格遵循ORT的线性延伸规则,确保新关键帧完全落在原插值虚线上
- 关键帧切线设置为线性,保证后续动画依然保持匀速线性运动特性
内容的提问来源于stack exchange,提问作者SamRose
相关产品推荐
相关产品推荐

