diff --git a/README.md b/README.md index 8f66427..a30911b 100644 --- a/README.md +++ b/README.md @@ -21,13 +21,15 @@ Download this repo as a zip file and install through the Blender addons. ### Inputs -| Field | Description | -| ----------- | ------------------------------------------------------ | -| Name | Name used for baked images and material | -| Mode | What to do with images after bake | -| Size | Bake image size in pixels | -| Save Images | Save images to external directory | -| Layers | Enable baking of different layers, one image per layer | +| Field | Description | +| ------------- | ------------------------------------------------------ | +| Name | Name used for baked images and material | +| Mode | What to do with images after bake | +| Size | Bake image size in pixels | +| Bake UV | UV layer name used for baking | +| Unwrap Object | Unwrap the object using smart project before baking | +| Save Images | Save images to external directory | +| Layers | Enable baking of different layers, one image per layer | Mode has the following options diff --git a/docs/panel.png b/docs/panel.png index d4140ad..6e8fd7f 100644 Binary files a/docs/panel.png and b/docs/panel.png differ diff --git a/quickbake/op.py b/quickbake/op.py index b4bd44a..d7d68a7 100644 --- a/quickbake/op.py +++ b/quickbake/op.py @@ -214,16 +214,17 @@ def execute(self, context: bpy.types.Context): return {"FINISHED"} def unwrap_object(self, mesh: bpy.types.Mesh) -> bpy.types.MeshUVLoopLayer: - uv_name = "bake_uv" - _log.debug("Unwrapping mesh %s with uv layer %s", mesh.name, uv_name) + _log.debug("Unwrapping mesh %s with uv layer %s", mesh.name, self.props.uv_name) # Use existing or create new uv layer for baking - bake_uv = mesh.uv_layers.get(uv_name) + bake_uv = mesh.uv_layers.get(self.props.uv_name) if bake_uv is None: - _log.info("Creating new uv layer %s", uv_name) - bake_uv = mesh.uv_layers.new(name=uv_name) + _log.info("Creating new uv layer %s", self.props.uv_name) + bake_uv = mesh.uv_layers.new(name=self.props.uv_name) else: - _log.debug("Reusing existing uv layer %s", uv_name) + _log.debug("Reusing existing uv layer %s", self.props.uv_name) + if not self.props.unwrap_object: + return bake_uv # Store currently active layer active_layer = None diff --git a/quickbake/panel.py b/quickbake/panel.py index 1b0f014..ac5e352 100644 --- a/quickbake/panel.py +++ b/quickbake/panel.py @@ -25,8 +25,10 @@ def draw(self, context): props = scene.QuickBakeToolPropertyGroup # type: ignore layout.prop(props, "bake_name") - layout.prop(props, "mat_mode") layout.prop(props, "bake_size") + layout.prop(props, "uv_name") + layout.prop(props, "unwrap_object") + layout.prop(props, "mat_mode") layout.prop(props, "save_img") row = layout.row() diff --git a/quickbake/properties.py b/quickbake/properties.py index 93a8f2e..6468f60 100644 --- a/quickbake/properties.py +++ b/quickbake/properties.py @@ -28,6 +28,21 @@ class QuickBakeToolPropertyGroup(bpy.types.PropertyGroup): step=1024, # not yet implemented ) + uv_name: bpy.props.StringProperty( + name="Bake UV", + description="UV layer name used for bake texture", + default="bake_uv", + ) + + unwrap_object: bpy.props.BoolProperty( + name="Unwrap Object", + description=( + "Unwrap object using smart project before baking. " + "If the uv layer does not exist, the object will be unwrapped regardless of this option." + ), + default=True, + ) + mat_mode: bpy.props.EnumProperty( name="Mode", description="What to do with images after baking",