166 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			166 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|  | import bpy | ||
|  | from bpy.props import * | ||
|  | 
 | ||
|  | class TLM_PostAtlasListItem(bpy.types.PropertyGroup): | ||
|  |     obj: PointerProperty(type=bpy.types.Object, description="The object to bake") | ||
|  |     tlm_atlas_lightmap_resolution : EnumProperty( | ||
|  |             items = [('32', '32', 'TODO'), | ||
|  |                     ('64', '64', 'TODO'), | ||
|  |                     ('128', '128', 'TODO'), | ||
|  |                     ('256', '256', 'TODO'), | ||
|  |                     ('512', '512', 'TODO'), | ||
|  |                     ('1024', '1024', 'TODO'), | ||
|  |                     ('2048', '2048', 'TODO'), | ||
|  |                     ('4096', '4096', 'TODO'), | ||
|  |                     ('8192', '8192', 'TODO')], | ||
|  |                     name = "Atlas Lightmap Resolution",  | ||
|  |                     description="TODO", | ||
|  |                     default='256') | ||
|  | 
 | ||
|  |     tlm_atlas_repack_on_cleanup : BoolProperty( | ||
|  |         name="Repack on cleanup",  | ||
|  |         description="Postpacking adjusts the UV's. Toggle to resize back to full scale on cleanup.",  | ||
|  |         default=True) | ||
|  | 
 | ||
|  |     tlm_atlas_dilation : BoolProperty( | ||
|  |         name="Dilation",  | ||
|  |         description="Adds a blurred background layer that acts as a dilation map.",  | ||
|  |         default=False) | ||
|  | 
 | ||
|  |     tlm_atlas_unwrap_margin : FloatProperty( | ||
|  |         name="Unwrap Margin",  | ||
|  |         default=0.1,  | ||
|  |         min=0.0,  | ||
|  |         max=1.0,  | ||
|  |         subtype='FACTOR') | ||
|  | 
 | ||
|  |     unwrap_modes = [('Lightmap', 'Lightmap', 'Use Blender Lightmap Pack algorithm'), | ||
|  |                  ('SmartProject', 'Smart Project', 'Use Blender Smart Project algorithm'), | ||
|  |                  ('Copy', 'Copy existing', 'Use the existing UV channel')] | ||
|  | 
 | ||
|  |     if "blender_xatlas" in bpy.context.preferences.addons.keys(): | ||
|  |         unwrap_modes.append(('Xatlas', 'Xatlas', 'Use Xatlas addon packing algorithm')) | ||
|  | 
 | ||
|  |     tlm_atlas_merge_samemat : BoolProperty( | ||
|  |         name="Merge materials",  | ||
|  |         description="Merge objects with same materials.",  | ||
|  |         default=True) | ||
|  | 
 | ||
|  |     tlm_postatlas_lightmap_unwrap_mode : EnumProperty( | ||
|  |         items = unwrap_modes, | ||
|  |                 name = "Unwrap Mode",  | ||
|  |                 description="Atlas unwrapping method",  | ||
|  |                 default='SmartProject') | ||
|  | 
 | ||
|  | class TLM_UL_PostAtlasList(bpy.types.UIList): | ||
|  |     def draw_item(self, context, layout, data, item, icon, active_data, active_propname, index): | ||
|  |         custom_icon = 'OBJECT_DATAMODE' | ||
|  | 
 | ||
|  |         if self.layout_type in {'DEFAULT', 'COMPACT'}: | ||
|  | 
 | ||
|  |             #In list object counter | ||
|  |             amount = 0 | ||
|  | 
 | ||
|  |             for obj in bpy.context.scene.objects: | ||
|  |                 if obj.TLM_ObjectProperties.tlm_mesh_lightmap_use: | ||
|  |                     if obj.TLM_ObjectProperties.tlm_postpack_object: | ||
|  |                         if obj.TLM_ObjectProperties.tlm_postatlas_pointer == item.name: | ||
|  |                             amount = amount + 1 | ||
|  | 
 | ||
|  |             row = layout.row() | ||
|  |             row.prop(item, "name", text="", emboss=False, icon=custom_icon) | ||
|  |             col = row.column() | ||
|  |             col.label(text=item.tlm_atlas_lightmap_resolution) | ||
|  |             col = row.column() | ||
|  |             col.alignment = 'RIGHT' | ||
|  |             col.label(text=str(amount)) | ||
|  | 
 | ||
|  |         elif self.layout_type in {'GRID'}: | ||
|  |             layout.alignment = 'CENTER' | ||
|  |             layout.label(text="", icon = custom_icon) | ||
|  | 
 | ||
|  | class TLM_AtlasListItem(bpy.types.PropertyGroup): | ||
|  |     obj: PointerProperty(type=bpy.types.Object, description="The object to bake") | ||
|  |     tlm_atlas_lightmap_resolution : EnumProperty( | ||
|  |         items = [('32', '32', 'TODO'), | ||
|  |                  ('64', '64', 'TODO'), | ||
|  |                  ('128', '128', 'TODO'), | ||
|  |                  ('256', '256', 'TODO'), | ||
|  |                  ('512', '512', 'TODO'), | ||
|  |                  ('1024', '1024', 'TODO'), | ||
|  |                  ('2048', '2048', 'TODO'), | ||
|  |                  ('4096', '4096', 'TODO'), | ||
|  |                  ('8192', '8192', 'TODO')], | ||
|  |                 name = "Atlas Lightmap Resolution",  | ||
|  |                 description="TODO", | ||
|  |                 default='256') | ||
|  | 
 | ||
|  |     tlm_atlas_unwrap_margin : FloatProperty( | ||
|  |         name="Unwrap Margin",  | ||
|  |         default=0.1,  | ||
|  |         min=0.0,  | ||
|  |         max=1.0,  | ||
|  |         subtype='FACTOR') | ||
|  | 
 | ||
|  |     unwrap_modes = [('Lightmap', 'Lightmap', 'Use Blender Lightmap Pack algorithm'), | ||
|  |                  ('SmartProject', 'Smart Project', 'Use Blender Smart Project algorithm'), | ||
|  |                  ('Copy', 'Copy existing', 'Use the existing UV channel')] | ||
|  | 
 | ||
|  |     if "blender_xatlas" in bpy.context.preferences.addons.keys(): | ||
|  |         unwrap_modes.append(('Xatlas', 'Xatlas', 'Use Xatlas addon packing algorithm')) | ||
|  | 
 | ||
|  |     tlm_atlas_lightmap_unwrap_mode : EnumProperty( | ||
|  |         items = unwrap_modes, | ||
|  |                 name = "Unwrap Mode",  | ||
|  |                 description="Atlas unwrapping method",  | ||
|  |                 default='SmartProject') | ||
|  | 
 | ||
|  |     tlm_atlas_merge_samemat : BoolProperty( | ||
|  |         name="Merge materials",  | ||
|  |         description="Merge objects with same materials.",  | ||
|  |         default=True) | ||
|  | 
 | ||
|  |     tlm_use_uv_packer : BoolProperty( | ||
|  |         name="Use UV Packer",  | ||
|  |         description="UV Packer will be utilized after initial UV mapping for optimized packing.",  | ||
|  |         default=False) | ||
|  | 
 | ||
|  |     tlm_uv_packer_padding : FloatProperty( | ||
|  |         name="Padding",  | ||
|  |         default=2.0,  | ||
|  |         min=0.0,  | ||
|  |         max=100.0,  | ||
|  |         subtype='FACTOR') | ||
|  | 
 | ||
|  |     tlm_uv_packer_packing_engine : EnumProperty( | ||
|  |         items = [('OP0', 'Efficient', 'Best compromise for speed and space usage.'), | ||
|  |                 ('OP1', 'High Quality', 'Slowest, but maximum space usage.')], | ||
|  |                 name = "Packing Engine",  | ||
|  |                 description="Which UV Packer engine to use.",  | ||
|  |                 default='OP0') | ||
|  | 
 | ||
|  | class TLM_UL_AtlasList(bpy.types.UIList): | ||
|  |     def draw_item(self, context, layout, data, item, icon, active_data, active_propname, index): | ||
|  |         custom_icon = 'OBJECT_DATAMODE' | ||
|  | 
 | ||
|  |         if self.layout_type in {'DEFAULT', 'COMPACT'}: | ||
|  | 
 | ||
|  |             amount = 0 | ||
|  | 
 | ||
|  |             for obj in bpy.context.scene.objects: | ||
|  |                 if obj.TLM_ObjectProperties.tlm_mesh_lightmap_use: | ||
|  |                     if obj.TLM_ObjectProperties.tlm_mesh_lightmap_unwrap_mode == "AtlasGroupA": | ||
|  |                         if obj.TLM_ObjectProperties.tlm_atlas_pointer == item.name: | ||
|  |                             amount = amount + 1 | ||
|  | 
 | ||
|  |             row = layout.row() | ||
|  |             row.prop(item, "name", text="", emboss=False, icon=custom_icon) | ||
|  |             col = row.column() | ||
|  |             col.label(text=item.tlm_atlas_lightmap_resolution) | ||
|  |             col = row.column() | ||
|  |             col.alignment = 'RIGHT' | ||
|  |             col.label(text=str(amount)) | ||
|  | 
 | ||
|  |         elif self.layout_type in {'GRID'}: | ||
|  |             layout.alignment = 'CENTER' | ||
|  |             layout.label(text="", icon = custom_icon) |