Interchange GLTF importer truncates skeletal mesh bone influences to 4 per vertex

Summary

The UE5 Interchange GLTF importer appears to truncate skeletal mesh bone influences to a maximum of 4 influences per vertex, even when the source glTF asset contains additional valid JOINTS_n / WEIGHTS_n attribute sets representing more than four influences.

As a result, importing a glTF skeletal mesh through the Interchange GLTF pipeline can produce a skeletal mesh whose skinning data differs from the source asset, with additional bone influences being silently discarded.

What Type of Bug are you experiencing?

Other

Steps to Reproduce

  1. Create a skeletal glTF asset with one or more vertices influenced by more than 4 bones.
  2. Import the glTF asset into UE5.
  3. Inspect the imported skeletal mesh’s skin weights.

Expected Result

The importer should preserve all supported JOINTS_n / WEIGHTS_n attribute sets from the source glTF

Observed Result

Only the first 4 bone influences per vertex are imported. Additional influences present in the source glTF are discarded, resulting in incorrect skinning compared to the original asset.

Affects Versions

5.8

Platform(s)

Windows

Additional Notes

These are the relevant sections of the UE source that appear to be involved:
https://github.com/EpicGames/UnrealEngine/blob/release/Engine/Plugins/Interchange/Runtime/Source/Import/Private/Gltf/InterchangeGltfMesh.cpp#L185
https://github.com/EpicGames/UnrealEngine/blob/release/Engine/Plugins/Interchange/Runtime/Source/Parsers/GLTFCore/Private/GLTF/GLTFMesh.cpp#L437
https://github.com/EpicGames/UnrealEngine/blob/release/Engine/Plugins/Interchange/Runtime/Source/Parsers/GLTFCore/Public/GLTFMesh.h#L26
https://github.com/EpicGames/UnrealEngine/blob/release/Engine/Plugins/Interchange/Runtime/Source/Parsers/GLTFCore/Public/GLTFAccessor.h#L145

It is the glTF specification that limits mesh bone influences to 4 per vertex. UE is aligned on the format spec.

Where do you get your glTF from? Are you exporting it from a specific DCC?

https://registry.khronos.org/glTF/specs/2.0/glTF-2.0.html#skinned-mesh-attributes

1 Like

The glTF spec limits each JOINTS_n / WEIGHTS_n attribute to 4 joints/weights, but it does not necessarily limit a vertex to 4 total influences. Additional influences can be stored in additional attribute sets, for example:

  • JOINTS_0 / WEIGHTS_0 → influences 0–3
  • JOINTS_1 / WEIGHTS_1 → influences 4–7
  • and so on…

The spec explicitly describes this mechanism for vertices influenced by more than four joints.

The asset was exported from Blender 5.2 using its built-in glTF 2.0 exporter.

Thanks, that is pass my knowledge of the glTF importer implementation, I created a ticket so a dev look into it.

By any chance, do you have a model already made you could share with me in DM?

1 Like

test.glb (91.6 KB)

Here’s a model created in Blender to demonstrate

If you import the model into Blender and switch to edit mode, you’ll notice that some vertices are influenced by 10 bones. However, in the Unreal Editor, under the “Edit Skin Weights” menu, no more than 4 bones influence any given vertex.