Three.js родительская сетка до костей

Моя цель - прикрепить отдельные объекты (например, носимые предметы) к анимированной модели, чтобы связанные объекты управлялись анимацией моделей.

Я нашел это, но все кажется устаревшим.

Я экспериментировал с персонажем, импортированным из blender, который был очищен от кожи, сфальсифицирован и анимирован.

Моя проблема: когда я добавляю новую сетку к определенной кости модели (закомментированная часть в коде), текущий анимационный клип переключается на первый (t-pose), и скиннинг нарушается (модель становится белым). Однако объект соединяется с костью и движется вместе с ней.

const {scene, animations} = await Utils.loadModel('model/someName.gltf');
const model = scene.children[0];

const material = new THREE.MeshBasicMaterial();
material.alphaTest = 0.5;
material.skinning = true;

model.traverse((child) => {     
    if (child.material) {
        material.map = child.material.map;
        child.material = material;
        child.material.needsUpdate = true;
    }
    if (child.isBone && child.name === 'RightHand') {
        // child.add(createMesh());
    }
});

gScene.add(model);

Он не работает правильно, даже если добавлен простой куб, но было бы неплохо, если бы я мог добавить сапоги к персонажу, который двигается как его нога.

1 ответ

Решение

Похоже, я нашел решение.

Я обновил демо (это только PoC) https://github.com/tomo0613/3d-animated-char-test

первый (в блендере):

  • добавьте кости к обуви, которые должны двигаться вместе с персонажем. (я думаю, что они должны иметь одинаковые кости [позиции, повороты, размеры]; в демо есть различия)

тогда код JS:

  • добавьте обувь (всю сетку) в качестве детской сетки к кости ноги.
  • перед каждым рендерингом копируйте свойства кости персонажей в свойства обуви (позиция и кватернион)

Мне все еще любопытно, есть ли какой-либо намеренный / или лучший способ сделать это?

Другие вопросы по тегам