HTML5本身不提供骨骼动画建模能力,真正实现需WebGL引擎(如Three.js)加载预绑定的glTF模型;建模绑定必须在Blender等DCC工具中完成,代码仅负责加载与播放动画。
HTML5 本身不提供骨骼动画建模能力,无法直接创建或绑定骨骼——它只是运行容器。真正实现角色骨骼绑定与动画的,是 WebGL 渲染引擎(如 Three.js、Babylon.js)或专用游戏框架(如 PixiJS + spine-runtime),且模型必须预先在专业 DCC 工具中完成绑定。
这是目前最主流、兼容性最好、且符合 HTML5 实际部署场景的做法。Three.js 原生支持 glTF 2.0,而该格式完整封装了骨骼、蒙皮权重、动画片段等信息。
.glb(推荐)或 .gltf
import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';
import { AnimationMixer } from 'three';
const loader = new GLTFLoader();
loader.load('character.glb', (gltf) => {
const model = gltf.scene;
const animations = gltf.animations; // 数组,含所有动画剪辑
const mixer = new AnimationMixer(model);
animations.forEach(clip => {
const action = mixer.clipAction(clip);
action.play();
});
// 每帧更新
function animate() {
requestAnimationFrame(animate);
mixer.update(0.016); // delta time ~60fps
renderer.render(scene, camera);
}
});Object3D 可嵌套模拟骨骼,但缺失蒙皮计算(SkinnedMesh + BufferGeometry.skinIndices 等底层数据),无法驱动顶点形变当 Blender 导出的 glTF 在 Three.js 中出现权重异常或动画错位时,可换用 Babylon.js 测试——它对非标准绑定(如部分顶点未分配骨骼、权重和≠1)处理更宽松。
键配置项:scene.skipFrustumCheck = true(避免因骨骼超出视锥被裁剪)、mesh.convertToFlatShadedMesh()(有时可缓解蒙皮光照异常)scene.onReady = () => {
const skeleton = scene.getSkeletonByName('Armature');
if (skeleton) {
skeleton.enableBlending(0.1); // 混合过渡时间
}
};.babylon 格式已逐步弃用,优先仍选 glTF;其导出插件(Babylon.js Exporter for Blender)需单独安装并启用有人试图用 transform: rotate() 层叠 div 模拟关节,或用 Canvas 逐段绘制肢体——这属于“假骨骼”,本质是关键帧补间,不具备以下任一特性:
真正要上线的 HTML5 角色动画,99% 的路径是:Blender 做绑定 → 导出 glTF → Three.js 加载 + mixer 控制。中间任何环节跳过建模软件(比如想用 JS 生成骨骼结构),结果都是不可控的渲染错误或运动失真。