Меш, имеющий скелет с костями, которые могут использоваться для анимации вертексов геометрии.
SkinnedMesh требует поддержки функций WebGL 2.0. В случае с WebGL 1.0 требуется поддержка расширения OES_texture_float и вертексных текстур.
const geometry = new v3d.CylinderGeometry(5, 5, 5, 5, 15, 5, 30);
// создаём индексы и веса для скина вручную
// (обычно этим занимается загрузчик 3Д-модели)
const position = geometry.attributes.position;
const vertex = new v3d.Vector3();
const skinIndices = [];
const skinWeights = [];
for (let i = 0; i < position.count; i++) {
vertex.fromBufferAttribute(position, i);
// вычисляем skinIndex и skinWeight на основе заранее определённой конфигурации
const y = (vertex.y + sizing.halfHeight);
const skinIndex = Math.floor(y / sizing.segmentHeight);
const skinWeight = (y % sizing.segmentHeight) / sizing.segmentHeight;
skinIndices.push(skinIndex, skinIndex + 1, 0, 0);
skinWeights.push(1 - skinWeight, skinWeight, 0, 0);
}
geometry.setAttribute('skinIndex', new v3d.Uint16BufferAttribute(skinIndices, 4));
geometry.setAttribute('skinWeight', new v3d.Float32BufferAttribute(skinWeights, 4));
// создаём скин-меш и скелет
const mesh = new v3d.SkinnedMesh(geometry, material);
const skeleton = new v3d.Skeleton(bones);
// см. пример из v3d.Skeleton
const rootBone = skeleton.bones[0];
mesh.add(rootBone);
// привязываем скелет к мешу
mesh.bind(skeleton);
// двигаем кости чтобы переместить модель
skeleton.bones[0].rotation.x = -0.1;
skeleton.bones[1].rotation.x = 0.2;
Общие свойства см. в базовом классе Mesh.
Либо "attached", либо "detached". "attached" использует свойство SkinnedMesh.matrixWorld для базовой матрицы трансформации костей. "detached" использует свойство SkinnedMesh.bindMatrix. По умолчанию "attached".
Базовая матрица, которая используется для преобразования привязанных костей.
Базовая матрица, которая используется для сброса преобразований привязанных костей.
Является ли объект экземпляром класса SkinnedMesh. Только для чтения.
Skeleton представляет иерархию костей меша со скиннингом.
Общие методы см. в базовом классе Mesh.
Привязывает скелет к мешу со скинами. Матрица привязки сохраняется в свойстве .bindMatrix. Также вычисляется матрица .bindMatrixInverse.
Возвращает клон данного объекта SkinnedMesh
Нормализует веса скина.
Этот метод устанавливает меш со скиннингом в исходную позу (сбрасывает позу).
Рассчитывает позицию вертекса с указанным индексом с учётом перемещения костей. Вектор назначения должен быть инициализирован координатами вертекса перед преобразованием:
const target = new v3d.Vector3();
target.fromBufferAttribute(mesh.geometry.attributes.position, index);
mesh.boneTransform(index, target);
О том как получить исходный код этого модуля читайте тут.