Skip to content

Commit 4acccba

Browse files
committed
add dither control
1 parent 8fd7244 commit 4acccba

6 files changed

Lines changed: 40 additions & 4 deletions

File tree

rct-graphics-helper/magick_command.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,10 @@ def write_to_cache(self, id, delete_previous=False, next_file=""):
2828
" " + delete_addition + ")" + post
2929

3030
# Quantizes the image using a palette
31-
def quantize(self, palette, amount):
32-
self.full_command += " -dither FloydSteinberg -define dither:diffusion-amount=" + str(amount) + "% -remap " + \
31+
def quantize(self, palette, mode, amount):
32+
self.full_command += " -dither "+mode+(amount and " -define dither:diffusion-amount=" + str(amount) + "% -remap " or " ") + \
3333
self.__stringify_input(palette) + " -colorspace sRGB"
34+
print(self.full_command)
3435

3536
# Trims the image to the smallest possible size and outputs the offset difference
3637
def trim(self):

rct-graphics-helper/operators/render_operator.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,9 @@ def finish():
7878
render_task_processor = RenderTaskProcessor(
7979
context, self.palette_manager)
8080

81+
82+
render_task_processor.renderer.set_dither(general_props.dithering_mode, general_props.dithering_mode in general_props.dithering_modes_with_strength and general_props.dithering_strength)
83+
8184
task = self.create_task(context)
8285

8386
render_task_processor.process(task, finish)

rct-graphics-helper/processors/sub_processes/frame_processors/post_processor.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ def process(self, frame, callback=None):
4141
magick_command.write_to_cache("render")
4242

4343
magick_command.quantize(self.renderer.get_palette_path(
44-
frame.base_palette), self.renderer.floyd_steinberg_diffusion)
44+
frame.base_palette),self.renderer.dither_mode, self.renderer.floyd_steinberg_diffusion)
4545

4646
# Force the recolorables to a palette that only contains the recolorable color
4747
channels_to_exclude_for_mai = ["Green", "Blue"]

rct-graphics-helper/properties/general_properties.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,24 @@ class GeneralProperties(bpy.types.PropertyGroup):
9494
description="Which color groups to dither to. Recolorables will be excluded from this palette when used to avoid conflicts.",
9595
size=len(defaults))
9696

97+
dithering_mode = bpy.props.EnumProperty(
98+
name = "Dithering Mode",
99+
items = (
100+
("FloydSteinberg", "Floyd-Steinberg", "Applies Floyd-Steinberg dithering, a configurable dithering algorithm which produces 'grid' dithering.", 1),
101+
("Riemersma", "Riemersma", "Applies Riemrsma dithering, a dithering algorithm which produces more 'random' dithering.", 2)
102+
)
103+
)
104+
105+
dithering_modes_with_strength = ["FloydSteinberg"]
106+
107+
dithering_strength = bpy.props.IntProperty(
108+
name = "Dithering Strength",
109+
description = "Floyd-Steinberg dithering strength",
110+
default = 35,
111+
min = 1,
112+
max = 100
113+
)
114+
97115
render_mode = bpy.props.EnumProperty(
98116
name="Render Mode",
99117
items=(

rct-graphics-helper/rct_graphics_helper_panel.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,15 @@ def draw(self, context):
8282
row = layout.row()
8383
row.separator()
8484

85+
row = layout.row()
86+
87+
box = layout.row()
88+
row = box.row()
89+
row.prop(properties,"dithering_mode")
90+
if properties.dithering_mode in properties.dithering_modes_with_strength:
91+
row = box.row()
92+
row.prop(properties,"dithering_strength")
93+
8594
row = layout.row()
8695
row.label("Dither Palette:")
8796

rct-graphics-helper/renderer.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,8 @@ def __init__(self, context, palette_manager):
3838
self.context = context
3939

4040
self.magick_path = "magick"
41-
self.floyd_steinberg_diffusion = 5
41+
self.dither_mode = "FloydSteinberg"
42+
self.floyd_steinberg_diffusion = 35
4243

4344
self.palette_manager = palette_manager
4445

@@ -63,6 +64,10 @@ def __init__(self, context, palette_manager):
6364
bpy.app.handlers.render_complete.append(self._render_finished)
6465
bpy.app.handlers.render_cancel.append(self._render_reset)
6566

67+
def set_dither(self, mode, percent):
68+
self.dither_mode = mode
69+
self.floyd_steinberg_diffusion = percent
70+
6671
# Render out the current scene
6772
def render(self, output_still, callback):
6873
self.render_finished_callback = callback

0 commit comments

Comments
 (0)