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:
- добавьте обувь (всю сетку) в качестве детской сетки к кости ноги.
- перед каждым рендерингом копируйте свойства кости персонажей в свойства обуви (позиция и кватернион)
Мне все еще любопытно, есть ли какой-либо намеренный / или лучший способ сделать это?