道具动画独立时间轴与缩放通道修复
2026-09-20。修复上一批的 14 个稀疏关键帧与 2 个缩放轨道导出缺口,重新生成 73 个相关道具的 glTF / bin,并重新导入 Godot。现有 73 个骨骼候选均可建立输入绑定;这不等于完整原版骨骼姿态已逐帧一致。
全武器构造覆盖仍为 1099 / 1419,273 阻塞、47 缺基础定义 / 创建等级。整个目标仍未完成。
根因与规则核对
原 prop 导出复用了角色路径:先合并全部骨骼的关键帧时间,再对每根骨骼选最近关键帧。各骨骼时间不同的情况下,会插入提前 / 延后的姿态;同时没有输出 scale 通道。
本批查阅 Ogre v1-7-0 官方源码,并与本地发行文件的导出符号 / 调用入口交叉检查。关键区别是:平移和缩放的插值、旋转插值模式以及 Skeleton 合并时的绑定姿态调整属于不同步骤,不能用最近邻抽帧代替。Ogre AnimationTrack、Ogre Skeleton。
上游默认旋转模式为 RIM_LINEAR,使用 nlerp;glTF / Godot 的旋转插值不能因此直接称作完全等价。此次继续保留 native_pose_parity=false,未把已有近似包装成原版逐位一致。Ogre Animation。
实现
新增 tools/prop_animation_tracks.py,为道具单独提供 TRS 读取与导出,不改用角色 / 衣装路径:
- 读取骨骼初始位置、旋转、缩放,以及每条轨道自己的时间与 T/R/S。
- 检查骨骼名称对应和父子兼容性;非法时间、重复时间或奇异绑定缩放明确拒绝。
- 每根骨骼独立写时间访问器,不再做“全骨骼时间并集 + 最近邻取样”。
- 保留源动画长度与边界,补写 translation / rotation / scale 三类通道。
- 处理源 / 目标骨骼绑定姿态差异及 identity 容差;未带动画的目标骨骼保留本地绑定姿态并继承父运动。
- 将初始 scale 同时写到节点和 inverse bind 计算中。
两处源缩放差异约为 1e-6,属于必须保存的数据,不是巨大视觉缩放。测试改为核验非单位 float32 值确实保留,不以“画面变化必须很明显”作为判断标准。
导出器写入版本 2 标记及 mesh / rig / clip / 导出代码哈希。动画输入构建器要求标记与当前来源一致,因此不是删除旧拒绝条件后直接放行旧资源。
角色路径 pose_to_gltf.py / pose_npc.py 没有在本批作功能修改;保留工作区原有相关改动。
重新生成与恢复
tools/rebuild_native_prop_exports.py:
- 只写经过目录范围校验的 torchlight-2-poc/meshes 内现有生成文件;
- 保留原导出 clip 拼写,避免场景 metadata 因大小写变化失配;
- 原 MEDIA 只读;
- 重建前的 glTF / bin 按内容哈希备份到 build/native_prop_export_backup;
- 重建记录在 build/native_prop_export_rebuild.json。
本批共重新生成 73 个道具导出,Godot 已重新 import。编辑器初始化阶段出现三条无路径的 Unicode 警告;后续三个实际资源探针没有 Godot 错误或泄漏。未把初始化警告宣称为已定位 / 修复的导入缺陷。
验证
- 1799 条核心断言通过。
- 399 项相关 Python 回归通过,新增检查独立时间流、线性 T/S 边界采样、绑定姿态差异、缩放保留、生成指纹和备份完整性。
- 芦苇、原先被拒绝的 CHERRYTREE_01、CITY_PLAZA_CRYSTALS_01,各通过 17 项实际 GPU / 骨骼 / 播放状态检查。
- 既有静态视觉资源 44 项 GPU 生命周期检查重新通过。
- Godot C# 构建零 warning / error,coresimlint 通过。
复测中修正一个探针问题:定义有多个视觉变体时,探针查找当前已导出的变体,不再为比较资源路径而强制加载其他尚未导出的变体。实际测试目标和资源来源没有被替换。
查看本轮樱桃树两帧与水晶预览(短边 512 / quality 80):纹理与几何保持,无明显骨架拉裂或实心背景块。樱桃树运动幅度较小,缩放差异本身也很小,不能仅凭截图证明所有源值正确;对应结论由骨骼状态和导出数据检查支持。
局部评分:COMP-BALANCE=2、COMP-SAFE-EDGE=2、COMP-VALUE-GROUP=2、LIGHT-KEY-FILL=1、LIGHT-BLOOM-ABUSE=2、MOT-VOL=2;11/12,91.7%,A,无零分 / 硬门触发。仅针对受控资源预览;未修改正式地图照明。
剩余
这批关闭的是时间流与缺失 scale 通道问题。仍待确认原版插值精度 / 旋转模式、完整动画合并与事件、正式地图时钟 / 保存,以及完整场景注册。7 个 v1.41 网格仍是独立未验证项,TYPE201 / 204 和其他未完成武器没有提前放行。
日志:build/native_prop_export_core.log、native_prop_export_regression.log、native_prop_export_build.log、native_prop_export_lint.log、native_prop_export_audit.log。GPU 报告位于 build/native_animated_visual/result.json、cherry/result.json、crystals/result.json 和 build/native_visual_backend/result.json。
按 godot-master 做资源隔离和实际 GPU 复测。main 原地工作、未提交,默认 warp_autosave.json SHA256 仍为 9840fe858b6e311c73f8c2d4ed49912d59d71365f6278392811730e012d32a7f。