Three.js 骨骼动画工程实战:AnimationMixer、剪辑与混合权重调参

文章目录

Three.js 骨骼动画工程实战:AnimationMixer、剪辑与混合权重调参

GLTF 角色落地后,真正决定「手感」的是 AnimationMixerAnimationAction 的组合使用:谁在更新时钟、谁在裁剪骨骼、混合权重如何衰减,都直接影响性能与表现。

一、最小可用管线

  1. mixer = new THREE.AnimationMixer(root)root 通常取 SkinnedMesh 或包含骨架的 Group。
  2. const clip = THREE.AnimationClip.findByName(animations, 'Run') 取剪辑;action = mixer.clipAction(clip)
  3. 每帧:mixer.update(delta),且 delta 必须用真实帧间隔clock.getDelta()),不要用固定 1/60 糊弄。
javascript 复制代码
const clock = new THREE.Clock();
function animate() {
  requestAnimationFrame(animate);
  const dt = clock.getDelta();
  mixer.update(dt);
  renderer.render(scene, camera);
}

二、多动作混合与优先级

  • fadeIn / fadeOut:切换站立↔跑步时用淡入淡出,避免瞬时跳变。
  • setEffectiveWeight:上层逻辑(如受伤、瞄准)叠加时,用权重而不是开多个 Mixer。
  • stop / reset :切场景前对 action.stop(),并从 Map 里移除引用,防止闭包持有旧 SkinnedMesh

三、工程坑点

现象 常见原因 处理
动画「抽搐」 同一骨骼被多个 Action 强混合 降低冲突轨权重或使用掩码
CPU 飙高 每帧全量 mixer.update 且剪辑极多 只更新可见角色;远处降采样
内存涨 Clip 未复用、重复 clipAction 缓存 Map<name, AnimationClip>

四、结语

骨骼动画的稳定性来自 单一 Mixer 时钟成对的 play/stop。把更新与资源释放写进路由/关卡生命周期,线上才不会「切场景后越跑越卡」。

相关推荐
索西引擎33 分钟前
【React】key 属性:协调算法中的元素标识机制与最佳实践
前端·javascript·react.js
名字还没想好☜1 小时前
Go slice 的 append 陷阱:共享底层数组导致的数据串改
开发语言·后端·golang·go·slice
bitbrowser1 小时前
Claude 账号频繁被封?转向国内可直接使用的 AI 工具
开发语言·php
An_s1 小时前
机器学习python之识别图中物品信息
java·linux·开发语言
小雪_Snow1 小时前
JavaScript 中的三种常用事件
开发语言·前端·javascript
肖爱Kun1 小时前
C++设计策略模式
开发语言·c++·策略模式
蓝胖子酱2 小时前
在 Electron 中用 electron-store 实现加密存储与自定义格式文件
前端·javascript·数据库
灯澜忆梦2 小时前
GO_面向对象_方法
开发语言·golang
布朗克1682 小时前
Go 入门到精通-16-字符串深入
开发语言·后端·golang·字符串
北冥you鱼2 小时前
Go flag 包详解:从命令行解析到实战应用
开发语言·后端·golang