如何从组件网格组装(蒙皮)模型?

时间:2016-01-24 01:58:46

标签: graphics 3d three.js

我需要为我的游戏启用3d角色的可见项目交换,但对于我的生活,我无法解决如何在Three.js中执行此操作。关于骨骼和皮肤如何在Three.js中工作的任何信息都将对您有所帮助。

除此之外,我想要做的是基本上让角色的每个片段都是来自另一个角色的片段。例如,小腿可能来自基础/裸体角色模型,短裤模型的上腿,衬衫模型的躯干和上臂等等。一旦每个骨头都被填满,然后将它们全部缝合在一起,动画为一个。

如何确定要复制或删除的区域,以及如何将面部拼接在一起?这样做会如何影响动画,以及我需要采取哪些步骤来确保一切都同步?

我认为,鉴于基础模型都共享相同的骨骼结构,我可以只查找每个骨骼的顶点(及其皮肤属性)并以这种方式删除或复制它们。但是,我似乎无法弄清楚骨头是怎样的。存储顶点关联。

1 个答案:

答案 0 :(得分:1)

转到skinnedMeshInstance.geometry,你会看到.skinIndices.skinWeights.这些是你的骨骼指数和骨骼重量。在skinnedMeshInstance.skeleton下,您有.bones个人骨骼数据。如果您使用的是导出器,那么https://github.com/mrdoob/three.js/wiki/JSON-Model-format-3也可以提供帮助。

不幸的是,我不知道如何做你在ThreeJS中提出的问题,但总的来说,它是如何将骨骼骨骼结构与各个网状物附件分离出来的;一个骨架可以有多个网格附件。在模型初始化时,将模型骨骼/皮肤权重和指数设置为它所属骨架的正确对应值,然后在绘制时,骨架计算骨骼矩阵并上传到GPU,您只需绘制所需的网格附件

我认为,你所追求的是如何使多个skinnedMesh共享相同的骨架。有skinnedMesh.bind"将骨架绑定到蒙皮网格。 bindMatrix被保存到.bindMatrix属性,并且.bindMatrixInverse被计算出来。" (http://threejs.org/docs/#Reference/Objects/SkinnedMesh)但我不知道这是否会奏效。或许可以浏览ThreeJS文档,看看共享骨架是否可行,或者可能会直接提出另一个问题?