Skip to content

Commit 0a5f487

Browse files
committed
de-dupe materials on skeleton imports
1 parent 926d7b9 commit 0a5f487

1 file changed

Lines changed: 30 additions & 0 deletions

File tree

fast64_internal/f3d/f3d_parser.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -851,6 +851,34 @@ def addMaterial(self):
851851
self.materials.append(materialCopy)
852852
self.materialDict[self.getMaterialKey(materialCopy)] = materialCopy
853853

854+
def deduplicateMaterials(self):
855+
if len(self.materials) == 0:
856+
return
857+
858+
dedupedMaterials: list[bpy.types.Material] = []
859+
materialIndexRemap: dict[int, int] = {}
860+
materialByKey: dict[F3DMaterialHash, tuple[int, bpy.types.Material]] = {}
861+
duplicateMaterials: list[bpy.types.Material] = []
862+
863+
for index, material in enumerate(self.materials):
864+
key = self.getMaterialKey(material)
865+
existing = materialByKey.get(key)
866+
if existing is None:
867+
materialByKey[key] = (len(dedupedMaterials), material)
868+
materialIndexRemap[index] = len(dedupedMaterials)
869+
dedupedMaterials.append(material)
870+
else:
871+
materialIndexRemap[index] = existing[0]
872+
if material != existing[1]:
873+
duplicateMaterials.append(material)
874+
875+
self.materials = dedupedMaterials
876+
self.triMatIndices = [materialIndexRemap.get(index, 0) for index in self.triMatIndices]
877+
878+
for material in duplicateMaterials:
879+
if material.users == 0:
880+
bpy.data.materials.remove(material)
881+
854882
def getSizeMacro(self, size: str, suffix: str):
855883
if hasattr(self.f3d, size):
856884
return getattr(self.f3d, size + suffix)
@@ -1890,6 +1918,8 @@ def createMesh(self, obj: bpy.types.Object, removeDoubles, importNormals, callDe
18901918
group = obj.vertex_groups.new(name=self.limbToBoneName[groupName])
18911919
group.add(indices, 1, "REPLACE")
18921920

1921+
self.deduplicateMaterials()
1922+
18931923
for i in range(len(mesh.polygons)):
18941924
mesh.polygons[i].material_index = self.triMatIndices[i]
18951925

0 commit comments

Comments
 (0)