Report to user what we done.

This commit is contained in:
Yusarina
2024-09-19 23:43:25 +01:00
parent f41ea341a7
commit 1782e54ff3
2 changed files with 30 additions and 11 deletions
+29 -11
View File
@@ -81,23 +81,30 @@ class AvatarToolKit_OT_CombineMaterials(Operator):
init_progress(context, 5) # 5 steps in total init_progress(context, 5) # 5 steps in total
update_progress(self, context, t("Optimization.consolidating_materials")) update_progress(self, context, t("Optimization.consolidating_materials"))
self.consolidate_materials(meshes) num_combined = self.consolidate_materials(meshes)
update_progress(self, context, t("Optimization.cleaning_material_slots")) update_progress(self, context, t("Optimization.cleaning_material_slots"))
self.clean_material_slots(meshes) cleaned_slots = self.clean_material_slots(meshes)
update_progress(self, context, t("Optimization.cleaning_material_names")) update_progress(self, context, t("Optimization.cleaning_material_names"))
self.clean_material_names() cleaned_names = self.clean_material_names()
update_progress(self, context, t("Optimization.clearing_unused_data")) update_progress(self, context, t("Optimization.clearing_unused_data"))
self.clear_unused_data_blocks() removed_data_blocks = self.clear_unused_data_blocks()
update_progress(self, context, t("Optimization.finalizing")) update_progress(self, context, t("Optimization.finalizing"))
finish_progress(context) finish_progress(context)
self.report({'INFO'}, t("Optimization.materials_optimization_report").format(
num_combined=num_combined,
num_cleaned_slots=cleaned_slots,
num_cleaned_names=cleaned_names,
num_removed_data_blocks=removed_data_blocks
))
return {'FINISHED'} return {'FINISHED'}
def consolidate_materials(self, meshes: List[Object]) -> None: def consolidate_materials(self, meshes: List[Object]) -> int:
mat_mapping: Dict[str, Material] = {} mat_mapping: Dict[str, Material] = {}
num_combined: int = 0 num_combined: int = 0
for mesh in meshes: for mesh in meshes:
@@ -118,21 +125,32 @@ class AvatarToolKit_OT_CombineMaterials(Operator):
continue continue
else: else:
mat_mapping[base_name] = mat mat_mapping[base_name] = mat
return num_combined
self.report({'INFO'}, t("Optimization.materials_combined").format(num_combined=num_combined)) def clean_material_slots(self, meshes: List[Object]) -> int:
cleaned_slots = 0
def clean_material_slots(self, meshes: List[Object]) -> None:
for obj in meshes: for obj in meshes:
obj.select_set(True) obj.select_set(True)
bpy.context.view_layer.objects.active = obj bpy.context.view_layer.objects.active = obj
initial_slots = len(obj.material_slots)
bpy.ops.object.material_slot_remove_unused() bpy.ops.object.material_slot_remove_unused()
cleaned_slots += initial_slots - len(obj.material_slots)
obj.select_set(False) obj.select_set(False)
return cleaned_slots
def clean_material_names(self) -> None: def clean_material_names(self) -> int:
cleaned_names = 0
for obj in bpy.data.objects: for obj in bpy.data.objects:
if obj.type == 'MESH': if obj.type == 'MESH':
clean_material_names(obj) result = clean_material_names(obj)
if result is not None:
cleaned_names += result
return cleaned_names
def clear_unused_data_blocks(self) -> None: def clear_unused_data_blocks(self) -> int:
initial_count = sum(len(getattr(bpy.data, attr)) for attr in dir(bpy.data) if isinstance(getattr(bpy.data, attr), bpy.types.bpy_prop_collection))
bpy.ops.outliner.orphans_purge(do_local_ids=True, do_linked_ids=True, do_recursive=True) bpy.ops.outliner.orphans_purge(do_local_ids=True, do_linked_ids=True, do_recursive=True)
final_count = sum(len(getattr(bpy.data, attr)) for attr in dir(bpy.data) if isinstance(getattr(bpy.data, attr), bpy.types.bpy_prop_collection))
return initial_count - final_count
+1
View File
@@ -27,6 +27,7 @@
"Optimization.cleaning_material_names": "Cleaning material names...", "Optimization.cleaning_material_names": "Cleaning material names...",
"Optimization.cleaning_material_slots": "Cleaning material slots...", "Optimization.cleaning_material_slots": "Cleaning material slots...",
"Optimization.clearing_unused_data": "Clearing unused data...", "Optimization.clearing_unused_data": "Clearing unused data...",
"Optimization.materials_optimization_report": "Materials optimization completed: Combined {num_combined} materials, cleaned {num_cleaned_slots} material slots, cleaned {num_cleaned_names} material names, and removed {num_removed_data_blocks} unused data blocks",
"Optimization.combine_materials.desc": "Combine similar materials to reduce draw calls and improve performance", "Optimization.combine_materials.desc": "Combine similar materials to reduce draw calls and improve performance",
"Optimization.combine_materials.label": "Combine Materials", "Optimization.combine_materials.label": "Combine Materials",
"Optimization.consolidating_materials": "Consolidating materials...", "Optimization.consolidating_materials": "Consolidating materials...",