animation - THREE.AnimationClip 在 play() 期间始终包含默认姿势关键帧
问题描述
骨骼动画问题(始终使用 AnimationAction.play() 在(循环)动画中播放默认 T 姿势(关键帧 0))。使用 FBXLoader 从带有骨架和动画的 .FBX 文件导入动画。
我已经修剪了 AnimationClip.tracks array() 以删除第一个关键帧,但它在动画期间一直包含基本关键帧 0 T-pose。
我尝试清空 AnimationClip.tracks 数组。如果我随后 play() 关联的 AnimationAction,它仍然会设置一些姿势,这表明问题可能根本不在于 AnimationClip,而在于父 Action/Mixer。
我还尝试使用“startAt(0.0333..)”来抵消 AnimationAction。但它仍然在 play() 期间添加了基本姿势。
//setup mixer for object
scene.mixer = new THREE.AnimationMixer( scene.obj );
// actions array (quick reference)
scene.actions = [];
for (i in scene.obj.animations) {
scene.actions.push(scene.mixer.clipAction(scene.obj.animations[ i ] ));
// offset keyframe 0 (doesnt work since it still uses the keyframe 0 "T-pose" when the animation has finished playing and optionally loops)
scene.actions[i].startAt(0.0334);
// tried trimming with subClip fn, but again it'll throw in the T-pose.
subClip(scene.actions[3].getClip(), 0.03333333432674409 /* 30 fps: skip first frame @ 0.03333333432674408 */, 2);
// emptying the tracks array also doesnt work, since its still setting bones when I play/stop the AnimationAction.
scene.actions[3].getClip().tracks = [];
scene.actions[3].getClip().resetDuration();
}
function subClip(clip, start, end) {
for (i in clip.tracks) {
var track = clip.tracks[i];
// (we depend on internal behaviour of trim() which uses Array.slice,
// and doesn't modify the original array).
clip.tracks[i].trim(start, end);
// Once trim has been called, our track now has its own copies of
// times/values, and no shared data. It's now safe to modify in-place,
// which shift() does.
clip.tracks[i].shift(-start);
}
// after modifying (key)frames, reset duration to new length
clip.resetDuration();
}
我希望在动画期间不使用任何关键帧 0 数据。特别是在循环中:他们很明显的口吃。(因为位置跳跃+下一个姿势的奇怪插值)。
解决方案
通过将所有动画导出到一个大型模型文件而不是每个动画的单独文件来解决这个问题。之后,您可以手动将它们剪切成单独的剪辑,它会工作得很好。
推荐阅读
- c# - C# [i, j] 将矩阵的最小“j”值添加到新数组中?
- javascript - 我如何检查是否
在一个里面
包含数据 - node.js - NodeJs Azure 函数中的临时文件夹位置问题
- sqoop - 使用 Sqoop 从 Sybase IQ 导入数据:第 1 行“已提交”附近的语法错误
- apache - 使用新域 apache 启用 https (certbot)
- c# - Gettting error Timeout perform ZADD (10000ms), next: HSCAN in .net core 3.0 application with redis version 4
- c# - 使用函数定义可选参数
- node.js - socket.io 服务器中继/代理一些事件
- sql - 我需要在 postgres 中查询返回数组的长度但不考虑空值
- keras - 验证损失仅对某些任务更高