【问题标题】:Three.js adding a rigged, animated Asset to an existing SceneThree.js 向现有场景添加绑定的动画资源
【发布时间】:2019-02-14 03:25:19
【问题描述】:

我目前正在three.js 中开发一个类似Tamagotchi 的浏览器应用程序。但目前我坚持实现一只手,点击时会抚摸头像。

Hand 是一个装配好的 Blender 模型,有 2 个动画,空闲和戳动画。在 gltf 查看器中,模型可以很好地处理两种动画。 但是在 js 中添加时,手要么完全扭曲,要么渲染正确但位置无法识别(与光标一起移动)。

我查看的大多数示例仅添加了一个一般场景,而不仅仅是一个动画模型。在这些动画的两个版本中,我都会收到动画错误。

扭曲版本的代码:

loader.load('resources/models/gltf/Hand.gltf', function(gltf) {
  gltf.scene.traverse(function(node) {
    if (node.isMesh) hand = node;
  });
  //hand.material.morphTargets = true;

  scene.add(hand);
  mixer = new THREE.AnimationMixer(hand);
  clips = hand.animations;
  hand = gltf;
  scene.add(hand.scene);
});

第二个版本,Hand 被正确渲染,但无法识别事件处理的位置。

loader.load('resources/models/gltf/Hand.gltf', function(gltf) {
  var hand = gltf.scene;
  var animations = gltf.animations;
  mixer = new THREE.AnimationMixer(hand);
  for (var i = 0; i < animations.length; i++) {
    mixer.clipAction(animations[i]).play();
  }
  scene.add(hand);
});

空闲动画功能:

function idleAnim() {
  var idleClip = THREE.AnimationClip.findByName(clips, "Idle");
  var action = mixer.clipAction(idleClip);
  action.play();
  console.log("idling");
}

链接:https://github.com/JoeJoe49/AnimTest

提前致谢和问候。

【问题讨论】:

    标签: javascript three.js blender gltf


    【解决方案1】:

    在您的第一个示例中,您将“手”对象从导入场景中拉出,将其添加到渲染场景中,然后将导入场景的其余部分添加到渲染场景中。 我的猜测是,您需要从层次结构的更高层次中拉出“手”。它可能有一些父对象需要一起来为动画保留正确的层次结构。

    值得做一个 scene.traverse((o)=>{console.log(o)} 来清楚地了解你的场景是如何导出的。例如,我发现了 blender gltf exporter,那里通常是 2 个独立的父节点,一个用于定位,一个用于缩放+旋转,所以.. 值得一看,因为它可能不是您所期望的。

    fwiw 我抓住了你的 repo 并在我的模型预览器中打开了 gltfs,但我似乎没有看到任何动画。我的预览器设置为按顺序播放它找到的所有动画......所以不确定那里发生了什么。我猜这些是蒙皮网格而不是变形目标?

    【讨论】:

    • 嗨,感谢您的回答。好的,我会尝试将 depper 挖掘到我的模型结构中。不幸的是,这是我使用 three.js 的第一个项目,所以我每天都在体验新的东西:D 对于 repo,大多数 gltf 文件都是通过形状键进行动画处理的。手模型是唯一的装配/蒙皮网格。不知道为什么您的预览器不显示动画。 gltf-viewer.donmccurdy.com
    • 如果你在gltf-viewer.donmccurdy.com 上打开 JS 控制台,你也会看到一个场景树打印输出——特别是,骨骼(通常)不是 glTF 中网格的子节点,所以如果你只是提取并将网格附加到您的场景中,骨骼不在场景中。更容易将整个 gltf.scene 对象附加到场景中,然后(如果可行)修剪掉。
    • fwiw 我修复了资产预览器中的一些错误,现在我可以正常显示所有动画类型。手部网格正在制作动画......我从三个仓库中提取的一些变形目标动画也在制作动画。
    • 前几天我试图深入挖掘模型结构并设法正确加载模型。 @manthrax 你对我发布的第二次尝试是正确的。手模型仍然固定在关节上,所以如果我只加载网格,它就会变形。这只手现在可以对事件侦听器做出反应。动画仍然无法按预期工作,只是出现缺少几何数据的错误。
    • 不确定您是否在寻求更多建议.. 但是.. 我认为您不了解动画的本质->网格->几何关系。网格层次结构、动画和几何图形都必须完全匹配才能正常工作。如果没有对系统的深入了解,您就不能只添加/删除/移动任何这些部分而不破坏所有内容。对于动画对象,您需要处理树中对象的最高根,而不是弄乱内部节点,直到您知道发生了什么。
    猜你喜欢
    • 1970-01-01
    • 2021-08-16
    • 1970-01-01
    • 2014-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多