diff --git a/quickbake/op.py b/quickbake/op.py index ab223fe..b4bd44a 100644 --- a/quickbake/op.py +++ b/quickbake/op.py @@ -3,7 +3,7 @@ import bpy from bpy_extras.node_shader_utils import PrincipledBSDFWrapper -from .preferences import get_preferences +from .preferences import get_preferences, QuickBakeAddonPreferences from .properties import MaterialMode, QuickBakeToolPropertyGroup from .util import enable_logging, disable_logging, is_development @@ -47,6 +47,11 @@ class RENDER_OT_bake(bpy.types.Operator): # "UV": "", } + # Fields used during execution, these get cleared between executions + + prefs: QuickBakeAddonPreferences + props: QuickBakeToolPropertyGroup + @classmethod def poll(cls, context): """Disable baking until a mesh object is selected.""" @@ -54,8 +59,8 @@ def poll(cls, context): return obj is not None and obj.type == "MESH" def execute(self, context: bpy.types.Context): - prefs = get_preferences(context) - if prefs.enable_logging or is_development(): + self.prefs = get_preferences(context) + if self.prefs.enable_logging or is_development(): enable_logging() else: disable_logging() @@ -66,6 +71,9 @@ def execute(self, context: bpy.types.Context): scene = context.scene assert scene is not None, "Context must have a scene, got None" + # Setup passes for each enabled layer + props = self.props = scene.QuickBakeToolPropertyGroup # type: ignore + # Make sure cycles is the current render engine if scene.render.engine != "CYCLES": _log.info("Setting render engine to cycles") @@ -89,10 +97,6 @@ def execute(self, context: bpy.types.Context): self.report({"ERROR"}, "Active object must be a mesh") return {"CANCELLED"} # canceled because nothing was altered / needs undo - # Setup passes for each enabled layer - props: QuickBakeToolPropertyGroup - props = scene.QuickBakeToolPropertyGroup # type: ignore - # layer name : is data passes: list[tuple[str, bool]] = [] if props.diffuse_enabled: @@ -182,7 +186,7 @@ def execute(self, context: bpy.types.Context): if props.mat_mode == MaterialMode.IMAGES: return {"FINISHED"} - mat = self.create_material(props, uv_layer, passes, images) + mat = self.create_material(uv_layer, passes, images) # Duplicate object and assign material to new if props.mat_mode == MaterialMode.DUPLICATE: @@ -308,16 +312,15 @@ def cleanup_image_nodes(self, mesh: bpy.types.Mesh): def create_material( self, - props: QuickBakeToolPropertyGroup, uv_layer: bpy.types.MeshUVLoopLayer, passes: list[tuple[str, bool]], images: dict[str, bpy.types.Image], ): # Create Material - mat = bpy.data.materials.get(props.bake_name) + mat = bpy.data.materials.get(self.props.bake_name) if mat is None: - _log.debug("Creating material %s", props.bake_name) - mat = bpy.data.materials.new(props.bake_name) + _log.debug("Creating material %s", self.props.bake_name) + mat = bpy.data.materials.new(self.props.bake_name) mat.use_nodes = True # Get shader node (create if not exist) @@ -415,4 +418,9 @@ def create_material( tex_node.outputs["Color"], principled_node.inputs[shader_input] ) + if layer == "EMIT": + principled_node.inputs[ + "Emission Strength" + ].default_value = self.props.emit_strength + return mat diff --git a/quickbake/panel.py b/quickbake/panel.py index a5e8e2e..1b0f014 100644 --- a/quickbake/panel.py +++ b/quickbake/panel.py @@ -45,6 +45,8 @@ def draw(self, context): layout.prop(props, "glossy_enabled") layout.prop(props, "transmission_enabled") layout.prop(props, "emit_enabled") + if props.emit_enabled: + layout.prop(props, "emit_strength") layout.prop(props, "ao_enabled") layout.prop(props, "shadow_enabled") layout.prop(props, "environment_enabled") diff --git a/quickbake/properties.py b/quickbake/properties.py index 32d1c7a..93a8f2e 100644 --- a/quickbake/properties.py +++ b/quickbake/properties.py @@ -95,6 +95,12 @@ class QuickBakeToolPropertyGroup(bpy.types.PropertyGroup): name="Emission", description="Bake the Emission map", default=False ) + emit_strength: bpy.props.FloatProperty( + name="Emission Strength", + description="Shader strength of emissions", + default=1.0, + ) + ao_enabled: bpy.props.BoolProperty( name="Ambient Occlusion", description="Bake the Ambient Occlusion map",