diff --git a/src/ObjWriting/XModel/XModelDumper.cpp.template b/src/ObjWriting/XModel/XModelDumper.cpp.template index f95effd3..c53ed33e 100644 --- a/src/ObjWriting/XModel/XModelDumper.cpp.template +++ b/src/ObjWriting/XModel/XModelDumper.cpp.template @@ -180,7 +180,7 @@ namespace return true; } - bool HasDefaultArmature(const XModel* model, const unsigned lod) + bool HasDefaultArmatureForLod(const XModel* model, const unsigned lod) { if (model->numRootBones != 1 || model->numBones != 1) return false; @@ -212,6 +212,17 @@ namespace return true; } + + bool HasDefaultArmatureForAllLods(const XModel* model) + { + for (auto lod = 0u; lod < model->numLods; lod++) + { + if (!HasDefaultArmatureForLod(model, lod)) + return false; + } + + return true; + } void OmitDefaultArmature(XModelCommon& common) { @@ -557,7 +568,9 @@ namespace AddXModelVertices(out, model, lod); AddXModelFaces(out, model, lod); - if (!CanOmitDefaultArmature() || !HasDefaultArmature(model, lod)) + // Keep armature handling consistent across all LODs so dumped GLTF/GLB round-trips + // preserve the same bone layout when re-imported. + if (!CanOmitDefaultArmature() || !HasDefaultArmatureForAllLods(model)) { AddXModelBones(out, context, model); AddXModelVertexBoneWeights(out, model, lod);