Skip to content

fix: keep same-named materials of different models distinct in GLB - #134

Merged
mahach666 merged 1 commit into
mainfrom
fix/assembly-material-dedup
Nov 12, 2026
Merged

mahach666 merged 1 commit into
mainfrom
fix/assembly-material-dedup

Conversation

@mahach666

Copy link
Copy Markdown
Collaborator

Summary

  • NwcAssembly.Create built AllMaterials with a by-name (OrdinalIgnoreCase) map, keeping only the first material per name. Federated disciplines routinely ship their own material named Concrete/Steel with different colours — the later instances were dropped, and since GlbExporter resolves mesh materials by reference, those meshes silently fell back to glTF material index 0 (an arbitrary, unrelated material).
  • Create now dedupes by reference (HashSet<NwcMaterial>; NwcMaterial has no Equals override).
  • Belt and braces: GlbExporter grows its material table on demand when a mesh references a material the caller did not list, instead of substituting index 0 (index 0 remains only for meshes with no material at all, as the glTF default).

Tests

AssemblyGlb_SameNamedMaterialsInDifferentModels_KeepTheirOwnColors: two models, each with its own grey/blue Concrete and a mesh. Asserts both instances survive AllMaterials, both appear in the materials array, and each mesh's primitive references its own colour's material index.

Full suite: 235 passed, 2 skipped.

Closes #82

NwcAssembly.Create deduplicated AllMaterials by name
(OrdinalIgnoreCase), so a later model's own material with a shared
name (Concrete, Steel) was dropped, and GlbExporter — which looks
materials up by reference — silently recoloured that model's meshes
with glTF material index 0, an arbitrary unrelated material. Create
now dedupes by reference, and GlbExporter grows its material table on
demand when a mesh references an unlisted material instead of falling
back to index 0 (index 0 remains only for meshes without a material).

Closes #82
@mahach666
mahach666 merged commit c7a8f05 into main Nov 12, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

NwcAssembly.SaveGlb assigns material 0 to meshes whose material name already appeared in an earlier model

1 participant