马上注册,加入CGJOY,让你轻松玩转CGJOY。
您需要 登录 才可以下载或查看,没有帐号?立即注册
×
1.24版本对动画层相关问题做了修复,原版有塌陷层后还会出现隐藏层的问题
1.24并没有进行大规模的测试,只作为开发版本发布,稳定性不做保证,只是作为备选版本使用
# SpringMagic v1.24 更新日志
- 维护基线:`SpringMagic_v1.23.ms`
- 当前源码:`SpringMagic_v1.24.ms`
- 源码 SHA-256:`FF65E0191F6CF9F2257B213C9697FD9AAEF07EAB90A85A6EBD5BAED92924A41E`
- 维护记录日期:2026-07-24
## 版本定位
v1.24 继承 v1.23 的数值安全求解,重构 SpringMagic 动画层的创建、识别、Bake 预检、激活、删除、合并和清理流程。核心目标是让插件只管理自己创建或能被严格识别的旧版层,避免误改 Position、Scale、用户动画层及目标集合之外的节点。
## 新增
### v1.24 动画层所有权协议
- 新增 `SpringMagicLayerOwner_v124` 节点自定义属性,记录协议版本、实际层名和原始线框颜色。
- 新层使用 `SMAnimLayer_v124` 前缀;发生同名冲突时自动生成带数字后缀的唯一名称。
- 通过持久层名同时解析全局 Animation Layer ID 和节点本地 Rotation 子控制器,不再假定目标层固定为索引 2。
- 能区分正常 v1.24 层、所有权残留、歧义 v1.24 层、可安全识别的 v1.23 旧层以及歧义旧层。
### Rotation-only 创建流程
- 新建 SpringMagic 层仅启用 Rotation,不再为 Position 和 Scale 创建插件层。
- 仅支持普通 PRS 节点;Biped、CAT、已有用户层、隐藏本地层控制器或残留所有权数据会在写入前拒绝。
- 选中节点按父级优先顺序逐个加入同一层,降低 3ds Max 在父子层级中注入重复或本地隐藏控制器的风险。
- 创建前后检查未选中后代,保证显式选择集合是操作边界。
- 仅在解析出的 Rotation 层上创建动画范围首尾关键帧。
### 安全清理与合并
- 删除、逐帧合并、按关键帧合并和“清理全部”只处理 SpringMagic 拥有的层;用户层不再被全局删除。
- 同一操作中的节点按子级优先顺序处理,避免先改祖先导致后代 Layer Controller 结构展开或残留。
- 操作前验证层成员关系、锁定、静音和输出静音状态;状态不安全时在写入前拒绝。
- 清理后移除插件所有权元数据、恢复原始线框颜色,并处理只剩 Base Layer 的包装控制器。
- 对目标集合之外的相关节点保存结构签名,操作完成后验证没有越界修改。
- 合并操作会保存并恢复 Animation Layer 的 Per Frame、Active Range、Controller Type、动画范围和当前时间设置。
### Bake 整链预检
- Bake 前先解析完整骨链,再执行所有只读检查。
- 拒绝以下状态:
- 只有部分链节点具有 SpringMagic 层;
- 所有权残留或歧义;
- 未归属或隐藏的动画层状态;
- 无法解析的 Rotation 层;
- 锁定、静音或输出静音的插件层。
- 通过预检后,仅把对应层设置为对应节点的活动层;不修改层权重、锁定、静音或输出静音属性。
### Rotation 关键帧工具隔离
- Rotation 切线、Euler/TCB 控制器切换、删键、父级/目标补键和 Set Base Pose 会解析到插件拥有的 Rotation 子控制器。
- 拥有 SpringMagic 层时,Position/Scale 删键请求会被明确拒绝,不再落到错误的子控制器。
- 普通未分层 PRS 节点继续使用原基础控制器行为;用户层、隐藏层、残留层或歧义层状态一律关闭写入路径。
- Set Base Pose 对插件层只重置 Rotation,不再写 Position 和 Scale。
## 修复
- 修复旧版“清理全部动画层”可能删除用户层的问题。
- 修复通过固定本地索引访问层控制器时可能命中错误层的问题。
- 修复选择动画层时修改全局 SpringMagic 层权重、并把活动层应用到非目标节点的问题。
- 修复父子节点混合、跨层组删除或合并时可能留下包装控制器、Base-only 状态或所有权残留的问题。
- 添加层操作改为单次 Undo 事务,并在写入前完成所有权与边界验证,以降低失败后遗留节点颜色、所有权数据或部分层状态的风险。
- 修复 Bake 预检中 `SMNODEHASTRANSFORMLAYERSTATE` 在定义前被调用,首次执行得到 `undefined` 并抛出“调用需要函数或类”的异常。该 helper 现位于全部调用者之前。
## 与 v1.23 场景的兼容
- v1.24 不会自动把 v1.23 的 Position/Rotation/Scale 全变换层迁移为 Rotation-only。
- 仅当旧层同时满足唯一 `SMAnimLayer`、完整 Base/旧层结构、唯一旧元数据且不存在额外依赖时,才按 `legacy` 路径允许删除、合并或清理。
- 旧层结构、元数据或成员关系存在歧义时会拒绝操作,避免误删用户数据。
- v1.24 引入的 `v124` 所有权标识属于场景数据协议;后续 v1.25 继续沿用该协议,不因插件版本号变化而自动改名或升级。
## 升级与使用提示
- 替换脚本后应重新加载脚本或重启 3ds Max,确保内存中的 rollout 定义已刷新。
- 升级前备份 `.max` 场景,特别是包含旧 `SMAnimLayer`、用户动画层或复杂父子层级的文件。
- 如果收到 stale、ambiguous、unowned 或 hidden layer 提示,不应通过跳过预检或吞掉异常强行继续;应先在副本中确认层结构和归属。
|