From d4c186ee1ea686b37b0dec6f64adfc4cfb910166 Mon Sep 17 00:00:00 2001 From: Spacek531 Date: Sat, 17 Dec 2022 01:48:24 -0800 Subject: [PATCH] add dither control --- rct-graphics-helper/magick_command.py | 2 +- rct-graphics-helper/operators/render_operator.py | 3 +++ rct-graphics-helper/properties/general_properties.py | 8 ++++++++ rct-graphics-helper/rct_graphics_helper_panel.py | 3 +++ rct-graphics-helper/renderer.py | 5 ++++- 5 files changed, 19 insertions(+), 2 deletions(-) diff --git a/rct-graphics-helper/magick_command.py b/rct-graphics-helper/magick_command.py index 54adec2..dd36a72 100644 --- a/rct-graphics-helper/magick_command.py +++ b/rct-graphics-helper/magick_command.py @@ -29,7 +29,7 @@ def write_to_cache(self, id, delete_previous=False, next_file=""): # Quantizes the image using a palette def quantize(self, palette, amount): - self.full_command += " -dither FloydSteinberg -define dither:diffusion-amount=" + str(amount) + "% -remap " + \ + self.full_command += " -dither FloydSteinberg "+(amount and " -define dither:diffusion-amount=" + str(amount) + "% -remap " or " ") + \ self.__stringify_input(palette) + " -colorspace sRGB" # Trims the image to the smallest possible size and outputs the offset difference diff --git a/rct-graphics-helper/operators/render_operator.py b/rct-graphics-helper/operators/render_operator.py index 639dafc..538d18b 100644 --- a/rct-graphics-helper/operators/render_operator.py +++ b/rct-graphics-helper/operators/render_operator.py @@ -78,6 +78,9 @@ def finish(): render_task_processor = RenderTaskProcessor( context, self.palette_manager) + + render_task_processor.renderer.set_dither(general_props.dithering_strength) + task = self.create_task(context) render_task_processor.process(task, finish) diff --git a/rct-graphics-helper/properties/general_properties.py b/rct-graphics-helper/properties/general_properties.py index db87757..ce66920 100644 --- a/rct-graphics-helper/properties/general_properties.py +++ b/rct-graphics-helper/properties/general_properties.py @@ -94,6 +94,14 @@ class GeneralProperties(bpy.types.PropertyGroup): description="Which color groups to dither to. Recolorables will be excluded from this palette when used to avoid conflicts.", size=len(defaults)) + dithering_strength = bpy.props.IntProperty( + name = "Dithering Strength", + description = "Floyd-Steinberg error diffusion", + default = 35, + min = 1, + max = 100 + ) + render_mode = bpy.props.EnumProperty( name="Render Mode", items=( diff --git a/rct-graphics-helper/rct_graphics_helper_panel.py b/rct-graphics-helper/rct_graphics_helper_panel.py index 973db9c..11de9e2 100644 --- a/rct-graphics-helper/rct_graphics_helper_panel.py +++ b/rct-graphics-helper/rct_graphics_helper_panel.py @@ -82,6 +82,9 @@ def draw(self, context): row = layout.row() row.separator() + row = layout.row() + row.prop(properties,"dithering_strength") + row = layout.row() row.label("Dither Palette:") diff --git a/rct-graphics-helper/renderer.py b/rct-graphics-helper/renderer.py index ab089a6..cfddea5 100644 --- a/rct-graphics-helper/renderer.py +++ b/rct-graphics-helper/renderer.py @@ -38,7 +38,7 @@ def __init__(self, context, palette_manager): self.context = context self.magick_path = "magick" - self.floyd_steinberg_diffusion = 5 + self.floyd_steinberg_diffusion = 35 self.palette_manager = palette_manager @@ -63,6 +63,9 @@ def __init__(self, context, palette_manager): bpy.app.handlers.render_complete.append(self._render_finished) bpy.app.handlers.render_cancel.append(self._render_reset) + def set_dither(self, percent): + self.floyd_steinberg_diffusion = percent + # Render out the current scene def render(self, output_still, callback): self.render_finished_callback = callback