ousttrue/UniGLTF

gltfExporter may have to add morphTarget to all primitives

Closed this issue · 1 comments

UniGLTF(UniVRM)で出力したVRMモデルをthree.jsでモーフィングする際、meshにprimitiveが複数あるような場合に、その内の1つしかモーフしない症状に遭遇しました。

色々とモーフに関連するコードを当たった結果、UniGLTFの以下の部分でmorphTargetgltfMesh.primitives[0]にしか追加していないことによるものではないかと考え、下記のように書き変えると(おそらく)正常にモーフできるようになりました。

three.jsのglTFローダ側で対処することも考えられましたが、glTFの仕様を見るにtargetsを省略することは想定されてなさそうでしたので、こちらでissueを書きました。🙇

All primitives are required to list the same number of targets in the same order.


//
// first primitive has whole blendShape
//
var firstPrimitive = gltfMesh.primitives[0];
firstPrimitive.targets.Add(morphTarget);
firstPrimitive.extras.targetNames.Add(mesh.GetBlendShapeName(j));

image

for (int k = 0; k < gltfMesh.primitives.Count; ++k) {
    gltfMesh.primitives[k].targets.Add(morphTarget);
    gltfMesh.primitives[k].extras.targetNames.Add(mesh.GetBlendShapeName(j));
}

image

フィードバックありがとうございます。
修正取り入れさせていただきます。