glTF 动画快了一千倍,怎样核对秒、毫秒和关键帧时间

2026-10-24

glTF动画sampler的输入时间以秒计。把毫秒250直接当250秒送给以[0,0.5,1]为关键帧的动画,会跳出有效时间范围,不能靠调播放速度碰运气。先核对时间单位、关键帧递增与插值类型,再区分动画本地时间、引擎时钟和外部业务时间,避免重复除以1000。

环境和证据范围

附件限定LINEAR标量示例,用来说明时间与采样区间;不是完整glTF动画加载器。实际旋转通道需按四元数插值规则,CUBICSPLINE还包含切线与时间间隔因素,不能直接套此标量公式。未测试多机同步、硬件帧锁或真实播放器时钟。

核对顺序

  1. 从动画input accessor读取时间,确认是有限浮点秒、非负且严格递增。重复时间点不能简单用“取最后一条”掩盖,因为插值分母可能为0,也不符合输入约束。

  2. 在外部毫秒时间进入动画前只换算一次,并记录换算位置。视频时间、讲解时间和动画clip本地时间可能有起点偏移,单位正确也不代表起点对齐,需要同时保存offset。

  3. 定位当前秒值落在哪两个关键帧间,计算alpha=(t-t0)/(t1-t0),再按当前通道插值类型求值。超范围时由运行时或业务决定保持、循环或停止,附件选择明确报告超出范围,不冒充引擎默认行为。

  4. 增加250毫秒正确换成0.25秒、误当250秒与重复关键帧三种输入。检查日志同时写原始时间单位与clip时间,禁止只显示“当前位置250”这种无法解释的数字。

可复算的输入与预期

关键帧秒[0,0.5,1]对应标量[0,10,20],0.25秒得到5;250未经换算直接输入返回超出范围;时间数组[0,0.5,0.5]返回关键帧非递增。脚本实际查找区间和插值,输出这三条独立判据,不宣称已测任何场景动画的播放速度。

下载与现场记录

下载本题合成输入与预期JSON、离线只读核验脚本和现场空白记录CSV。放在同一目录,用 Python 3 运行 python verify.py,逐项计算或解析后与预期比较,失败会显示差异。

现场字段包括 animation_name、time_source、source_unit、unit_conversion、clip_offset_s、clip_time_s、interpolation、sample_value。合成样例保持原样,实测另存并填写型号、版本、证据路径,未采集处留空。本地核验不代表真实设备、代理、浏览器或长期稳定性已测。

失败分支与移交

把每帧deltaTime当绝对clip时间,会让动画反复回到开头;把绝对时间反复累加又会飞快前进。循环策略的取模也应在单位和偏移正确后执行,否则看似循环正常但节奏仍错。若动画负载含不同单位的业务字段,不应全局替换所有数字。

移交应注明时间源、单位、起点、循环方式、暂停恢复和插值类型,保留一组已知关键帧采样值。真实引擎中再做暂停、跳转与重启复测,本页的本地计算不构成软件同步或硬件帧锁能力证明,更不能替代现场多屏同步验收。

基础背景可看孪生展项的交互设计:触控、手势与讲解器怎么配。旋转通道不能直接套标量插值,先核对旋转输入约定,见glTF 四元数顺序写反后模型乱转,怎样核对 xyzw 与归一化。更多资料在数字孪生技术方案。

需要项目联调时,可按上述字段整理资料,联系企服君核对实际接入范围。

一级资料

核对日期:2026-10-24。规范定义与本文应用约定分开,示例门限及脚本不自动代表产品原生能力。

需要展厅软硬件方案或定制开发?

加微信,把这一页发到你手机上

扫码加站长企业微信,会自动把这一页的链接发给你。问软件授权、报价,或者现场遇到问题,也可以直接聊。

去留微信

留言讨论

评论发布后会被人工复核,违规内容将被删除。

    还没有人评论,来说说你的看法

    如果发表没有反应,可以前往联系我们告诉我们。

    这个页面有问题?

    提交时会附带当前页面地址和浏览器信息,帮助我们定位问题。不填联系方式即为匿名。