我一直在努力寻找一种方法来向现有骨架添加/移除衣服(衣服网格和身体网格应该共享骨架),但我总是得到有趣/奇怪的结果。
我期待附加到共享骨架的所有衣服都已在 Blender 上以相同的骨架导出,它们都共享相同的骨骼名称和结构,我认为这会让它变得非常简单。
我在 Native iOS SceneKit 上使用过这些相同的 3D 文件,实际上我只是做了类似的事情clothing.skeleton = body.skeleton
但正如我所说,在 Three.JS 上似乎并不那么直截了当。
我试过像
clothingMesh.bind(bodySkeleton,clothingMesh.worldMatrix);
也试过:
clothingMesh.skeleton = bodySkeleton;
bodySkeleton.update();
但总是以奇怪的结果结束。我见过一些使用“ratargeting”函数的代码,但我相信这些仅在骨架骨骼名称不匹配时使用,这不是我的情况。
JSFiddle游乐场
我一直在通过 JSFiddle https://jsfiddle.net/cabada/sxv4kbnm/玩弄它,那里有一个完整的代码,我正在尝试构建这个概念。
我修复骨架绑定方式的另一个目标是能够从其他来源复制骨架动画,这样我就可以动态下载它们并将它们动态应用到我的角色中。但同样,得到奇怪的结果,动画骨骼也与目标骨骼共享相同的骨骼名称和结构以进行动画处理。
我在网上找到的与该主题相关的资源和示例
https://raw.githack.com/funwithtriangles/three.js/dev/examples/webgl_animation_sharedskeleton.html
https://rawcdn.githack.com/mrdoob/three.js/r105/examples/webgl_loader_sea3d_bvh_retarget.html
https://jsfiddle.net/satori99/pay0oqcd/
https://github.com/mrdoob/three.js/pull/16608
目标是能够向身体添加/移除服装,使每个角色的所有网格都使用一个骨架(以实现良好的性能),并且能够添加/移除来自其他来源的动画。