Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 20 additions & 12 deletions quickbake/op.py
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -47,15 +47,20 @@ 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."""
obj = context.active_object
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()
Expand All @@ -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")
Expand All @@ -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:
Expand Down Expand Up @@ -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:
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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
2 changes: 2 additions & 0 deletions quickbake/panel.py
Original file line number Diff line number Diff line change
Expand Up @@ -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")
Expand Down
6 changes: 6 additions & 0 deletions quickbake/properties.py
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down