解决方案:
问题是由于全局转换值太大而导致skinCluster失去数值精度。要解决此问题,可以使用multMatrix节点将值从全局值更改为本地值。
将变形对象父级指向顶级节点。有一个虚拟组是个好主意,但你也可以使用第一个关节。
为每个关节创建一个multMatrix节点。打开脚本编辑器并为每个关节运行一次此命令:
createNode multMatrix;
- 在每个关节和skinCluster之间添加一个multMatrix节点。这可以在脚本编辑器或连接编辑器中完成。例如:
connectAttr joint1.worldMatrix multMatrix1.matrixIn [0]
对每个关节重复此过程,以便每个joint.worldMatrix都连接到自己的multMatrix.matrix [0]
- 将顶部节点的worldInverseMatrix(在本例中为joint1或您的虚拟组)连接到每个multMatrix节点的matrixIn [1]中。例如:
connectAttr -f joint1.worldInverseMatrix multMatrix1.matrixIn [1]
对每个mulMatrix节点重复此操作。通过从每个关节矩阵中减去joint1矩阵,迫使该工具在局部空间中计算。
- 将multMatrix连接到skinCluster。将相同的关节连接到相同的矩阵索引非常重要。
连接-f multMatrix.matrixSum skinCluster.matrix [0]
如果joint2.matrix连接到skinCluster.matrix [2]并且你将joint2连接到mulMatrix2,那么你需要将multMatrix2.matrixSum连接到skinCluster.matrix [2]