Skip to content

Commit d064588

Browse files
committed
Fix IM compatibility with 7.1. Render to custom recolor 1 colorfor better color accuracy. Improve recolorable materials base colors. Fix cross platform paranthesees in IM command
1 parent 66809b9 commit d064588

20 files changed

Lines changed: 61 additions & 18 deletions

README.md

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -39,13 +39,7 @@ Please check the [guidelines](https://github.com/oli414/Blender-RCT-Graphics/wik
3939

4040
**Lighting**
4141

42-
The lighting intensity of the three light sources (dome, filler and main) are not yet final, an may be tweaked in the future for better results.
43-
44-
**Primary Remap**
45-
46-
The primary remap relies on the orange color group defined by OpenRCT2. This color group is suboptimal for dithering as the range (low to high) is drastically different from the color groups defined by the original game.
47-
48-
This in practice means that the primary remap may turn out darker then expected. This will be fixed with a future update.
42+
The lighting intensity of the three light sources (dome, filler and main) are not yet final, an may be tweaked in the future for better results.
4943

5044
**Animated Materials**
5145

rct-graphics-helper/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
"name": "RCT Graphics Helper",
2323
"description": "Render tool to replicate RCT graphics",
2424
"author": "Olivier Wervers",
25-
"version": (0, 0, 3),
25+
"version": (0, 3, 1),
2626
"blender": (2, 79, 0),
2727
"location": "Render",
2828
"support": "COMMUNITY",

rct-graphics-helper/builders/materials_builder.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ def __init__(self):
2525
def build(self, context):
2626
self.create_world_position_material(context)
2727

28-
self.create_recolorable_material("Recolorable 1", (1, 0.1, 0), 1)
29-
self.create_recolorable_material("Recolorable 2", (0.8, 0, 0.3), 2)
28+
self.create_recolorable_material("Recolorable 1", (0.1, 0.9, 0.3), 1)
29+
self.create_recolorable_material("Recolorable 2", (0.9, 0.1, 0.4), 2)
3030
self.create_recolorable_material("Recolorable 3", (0.9, 0.6, 0), 3)
3131

3232
def create_recolorable_material(self, name, color, pass_index):

rct-graphics-helper/builders/scene_builder.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ def create_camera(self, context):
9898
def create_main_light(self, context):
9999
lamp_data = self.create_lamp_data(context, "MainLight", "SUN")
100100

101-
lamp_data.energy = 1.5
101+
lamp_data.energy = 1.3
102102
lamp_data.use_specular = True
103103
lamp_data.use_diffuse = True
104104
lamp_data.shadow_method = "RAY_SHADOW"
@@ -140,7 +140,7 @@ def create_filler_light(self, context):
140140

141141
def create_light_dome(self, context):
142142
lamp_data = self.create_lamp_data(context, "LightDome", "HEMI")
143-
lamp_data.energy = 0.2
143+
lamp_data.energy = 0.3
144144
lamp_data.use_specular = False
145145

146146
lamp_object = self.create_scene_object(context, 'LightDome', lamp_data)

rct-graphics-helper/magick_command.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
# Class for building magick commands
2+
import os
3+
4+
25
class MagickCommand(object):
36
full_command = ""
47

@@ -49,6 +52,10 @@ def id_mask(self, r, g, b):
4952
color + "\" -fill \"#ffffffff\" -opaque \"" + \
5053
color + "\""
5154

55+
# Replaces all instances of color with color2
56+
def replace_color(self, color, color2):
57+
self.full_command += " -fill " + color2 + " -opaque " + color
58+
5259
# Mixes between the current source, and source B given a mask
5360
def mask_mix(self, sourceB, mask):
5461
self.full_command = "( " + self.full_command + " ) " + \
@@ -90,7 +97,10 @@ def output(self, file):
9097
def get_command_string(self, magick_path, output):
9198
if self.use_repage:
9299
self.full_command = self.full_command + " +repage"
93-
return magick_path + " " + self.full_command + " \"" + output + "\""
100+
final_command = magick_path + " " + self.full_command + " \"" + output + "\""
101+
if os.name == "posix":
102+
final_command = final_command.replace("(", "\(").replace(")", "\)")
103+
return final_command
94104

95105
def __stringify_input(self, input):
96106
if type(input) is str:

rct-graphics-helper/models/palette.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
"animated_water_sparkle",
3939
"animated_chain",
4040
"recolor_1",
41+
"recolor_1_orct2",
4142
"transparent",
4243
]
4344

@@ -164,6 +165,11 @@
164165
"default": False
165166
},
166167
"recolor_1": {
168+
"title": "Recolor 1 Clover",
169+
"Description": "Clover green used by RCT Graphics Helper",
170+
"default": False
171+
},
172+
"recolor_1_orct2": {
167173
"title": "Recolor 1 Orange",
168174
"Description": "Orange used by OpenRCT2 to import recolor 1",
169175
"default": False
@@ -230,10 +236,8 @@ def generate_output(self, renderer, output_path):
230236

231237
cmd.as_montage(color_paths)
232238

233-
print(cmd.get_command_string(
234-
renderer.magick_path, output_path))
235239
subprocess.check_output(cmd.get_command_string(
236-
renderer.magick_path, output_path), shell=True)
240+
renderer.magick_path, "PNG8:" + output_path), shell=True)
237241

238242
self.path = output_path
239243
self.generated = True

rct-graphics-helper/palette_manager.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,12 @@
5858
"transparent"
5959
])
6060

61+
recolor_1_orct2_palette = Palette(os.path.join(
62+
palette_base_path, "recolor_1_orct2_palette.png"), [
63+
"recolor_1_orct2",
64+
"transparent"
65+
])
66+
6167
recolor_2_palette = Palette(os.path.join(
6268
palette_base_path, "recolor_2_palette.png"), [
6369
"magenta",
@@ -86,6 +92,12 @@ def __init__(self):
8692
recolor_3_palette
8793
]
8894

95+
self.orct2_recolor_palettes = [
96+
recolor_1_orct2_palette,
97+
recolor_2_palette,
98+
recolor_3_palette
99+
]
100+
89101
# Gets a base palette for the selected palette mode for the selected number of recolorables
90102
def get_base_palette(self, selected_palette_mode, recolors, preference="FULL"):
91103
if selected_palette_mode == "AUTO":
@@ -114,6 +126,10 @@ def get_base_palette(self, selected_palette_mode, recolors, preference="FULL"):
114126
def get_recolor_palette(self, recolor_index):
115127
return self.recolor_palettes[recolor_index]
116128

129+
# Gets the recolor palette for the specified recolor index that is used by ORCT2
130+
def get_orct2_recolor_palette(self, recolor_index):
131+
return self.orct2_recolor_palettes[recolor_index]
132+
117133
# Gets the rider palette
118134
def get_rider_palette(self):
119135
return rider_palette

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

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,9 +50,28 @@ def process(self, frame, callback=None):
5050
mask.nullify_channels(channels_to_exclude_for_mai)
5151
mask.id_mask(i + 1, 0, 0)
5252

53+
palette = self.renderer.palette_manager.get_recolor_palette(i)
54+
orct2_palette = self.renderer.palette_manager.get_orct2_recolor_palette(
55+
i)
56+
5357
forced_color_render = MagickCommand("mpr:render")
5458
forced_color_render.quantize(self.renderer.get_palette_path(
55-
self.renderer.palette_manager.get_recolor_palette(i)), self.renderer.floyd_steinberg_diffusion)
59+
palette), self.renderer.floyd_steinberg_diffusion)
60+
61+
if i == 0:
62+
# Replace our clover green recolor 1 with the OpenRCT2 orange recolor 1
63+
forced_color_render.replace_color("#003F21", "#6F332F")
64+
forced_color_render.replace_color("#00672F", "#83372F")
65+
forced_color_render.replace_color("#0B7B41", "#973F33")
66+
forced_color_render.replace_color("#178F51", "#AB4333")
67+
forced_color_render.replace_color("#1FA35C", "#BF4B2F")
68+
forced_color_render.replace_color("#27B768", "#D34F2B")
69+
forced_color_render.replace_color("#3BDB7F", "#E75723")
70+
forced_color_render.replace_color("#5BEF98", "#FF5F1F")
71+
forced_color_render.replace_color("#77F3A9", "#FF7F27")
72+
forced_color_render.replace_color("#97F7BE", "#FF9B33")
73+
forced_color_render.replace_color("#B7FBD0", "#FFB73F")
74+
forced_color_render.replace_color("#D7FFE5", "#FFCF4B")
5675

5776
magick_command.mask_mix(forced_color_render, mask)
5877

rct-graphics-helper/processors/render_task_processor.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ def continue_process():
8484

8585
self._proceed_task_process_context(task_process_context)
8686

87-
print("Progress: {}".format(
87+
print("Progress: {}%".format(
8888
round(self._get_progress(task_process_context) * 100)))
8989

9090
# Exit this function if the sub process is async, the callback restarts it when the subprocess is ready
1 Byte
Loading

0 commit comments

Comments
 (0)