Skip to content

Commit

Permalink
Fix missing invert multi tile order
Browse files Browse the repository at this point in the history
  • Loading branch information
oli414 committed Dec 3, 2023
1 parent ab7f88f commit ce41f62
Show file tree
Hide file tree
Showing 15 changed files with 178 additions and 24 deletions.
5 changes: 4 additions & 1 deletion rct-graphics-helper/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
from .properties.tiles_properties import register_tiles_properties, unregister_tiles_properties
from .properties.walls_properties import register_walls_properties, unregister_walls_properties
from .properties.general_properties import register_general_properties, unregister_general_properties
from .properties.track_properties import register_track_properties, unregister_track_properties
from .rct_graphics_helper_panel import GraphicsHelperPanel
from . import developer_utils
import importlib
Expand All @@ -23,7 +24,7 @@
"name": "RCT Graphics Helper",
"description": "Render tool to replicate RCT graphics",
"author": "Olivier Wervers",
"version": (0, 4, 1),
"version": (0, 4, 6),
"blender": (2, 79, 0),
"location": "Render",
"support": "COMMUNITY",
Expand All @@ -50,6 +51,7 @@ def register():
register_tiles_properties()
register_vehicles_properties()
register_walls_properties()
register_track_properties()

print("Registered {} with {} modules".format(
bl_info["name"], len(modules)))
Expand All @@ -65,5 +67,6 @@ def unregister():
unregister_tiles_properties()
unregister_vehicles_properties()
unregister_walls_properties()
unregister_track_properties()

print("Unregistered {}".format(bl_info["name"]))
18 changes: 15 additions & 3 deletions rct-graphics-helper/builders/scene_builder.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ def __init__(self):
def build(self, context):
scene = context.scene

self.remove_scene_object(context, "Lamp")

# Root rig object
rig_obj = self.create_scene_object(context, "Rig", None)
rig_obj.location = (0, 0, 0)
Expand Down Expand Up @@ -112,7 +114,7 @@ def create_main_light(self, context):
lamp_data.use_diffuse = True
lamp_data.shadow_method = "RAY_SHADOW"
lamp_data.shadow_ray_sample_method = "ADAPTIVE_QMC"
lamp_data.shadow_ray_samples = 2
lamp_data.shadow_ray_samples = 4
lamp_data.shadow_soft_size = 0.5
lamp_data.shadow_adaptive_threshold = 0.001

Expand All @@ -129,9 +131,13 @@ def create_filler_light(self, context):
lamp_data = self.create_lamp_data(context, "FillerLight", "SUN")

lamp_data.energy = 0.5
lamp_data.use_specular = False
lamp_data.use_specular = True
lamp_data.use_diffuse = True
lamp_data.shadow_method = "NOSHADOW"
lamp_data.shadow_method = "RAY_SHADOW"
lamp_data.shadow_ray_sample_method = "ADAPTIVE_QMC"
lamp_data.shadow_ray_samples = 4
lamp_data.shadow_soft_size = 0.5
lamp_data.shadow_adaptive_threshold = 0.001

lamp_object = self.create_scene_object(
context, 'FillerLight', lamp_data)
Expand Down Expand Up @@ -162,6 +168,12 @@ def create_scene_object(self, context, name, data=None):
context.scene.objects[name], do_unlink=True)
return bpy.data.objects.new(name, data)

def remove_scene_object(self, context, name):
if name in context.scene.objects:
bpy.data.objects.remove(
context.scene.objects[name], do_unlink=True)


def create_lamp_data(self, context, name, type):
name = self.prefix + name + self.suffix
if name in bpy.data.lamps:
Expand Down
13 changes: 10 additions & 3 deletions rct-graphics-helper/builders/task_builder.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@ def __init__(self):
self.width = 1
self.length = 1

self.invert_tile_positions = False

self.use_anti_aliasing = True
self.anti_alias_with_background = False
self.maintain_aliased_silhouette = True
Expand Down Expand Up @@ -65,7 +67,7 @@ def add_viewing_angles(self, number_of_viewing_angles, animation_frame_index=0,
frame_index = start_output_index + i * animation_frames + j
frame = Frame(frame_index, self.task, angle + self.view_angle,
self.bank_angle, self.vertical_angle, self.mid_angle)
frame.set_multi_tile_size(self.width, self.length)
frame.set_multi_tile_size(self.width, self.length, self.invert_tile_positions)

frame.set_offset(self.offset_x, self.offset_y)

Expand All @@ -92,8 +94,12 @@ def add_viewing_angles(self, number_of_viewing_angles, animation_frame_index=0,
if frame.oversized:
output_indices = []
for k in range(frame.width * frame.length):
tile_index = k
if frame.invert_tile_positions:
tile_index = (frame.width * frame.length - k - 1)
output_indices.append(
start_output_index + k * animation_frames * number_of_viewing_angles + j * number_of_viewing_angles + i)
start_output_index + tile_index * animation_frames * number_of_viewing_angles + j * number_of_viewing_angles + i)

frame.set_output_indices(output_indices)

self.angles.append(frame)
Expand Down Expand Up @@ -129,9 +135,10 @@ def set_anti_aliasing_with_background(self, use_anti_aliasing, anti_alias_with_b
not anti_alias_with_background) or maintain_aliased_silhouette) and use_anti_aliasing

# Sets the size of the render in tiles
def set_size(self, width, length):
def set_size(self, width, length, invert_tile_positions):
self.width = width
self.length = length
self.invert_tile_positions = invert_tile_positions

# Sets the rotation applied to future render angles
def set_rotation(self, view_angle, bank_angle=0, vertical_angle=0, mid_angle=0):
Expand Down
5 changes: 4 additions & 1 deletion rct-graphics-helper/frame.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ def __init__(self, frame_index, task, view_angle, bank_angle=0, vertical_angle=0
self.width = 1
self.length = 1
self.oversized = False
self.invert_tile_positions = False

self.recolorables = 0

Expand Down Expand Up @@ -99,11 +100,13 @@ def set_offset(self, offset_x, offset_y):
self.offset_x = offset_x
self.offset_y = offset_y

def set_multi_tile_size(self, width, length):
def set_multi_tile_size(self, width, length, invert_tile_positions):
self.width = width
self.length = length

self.oversized = self.width > 1 or self.length > 1
if self.oversized:
self.invert_tile_positions = invert_tile_positions

def set_layer(self, layer_name):
self.layer = layer_name
Expand Down
2 changes: 1 addition & 1 deletion rct-graphics-helper/operators/render_tiles_operator.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ def create_task(self, context):
general_props.number_of_recolorables)

self.task_builder.set_size(
props.object_width, props.object_length)
props.object_width, props.object_length, props.invert_tile_positions)

for animationIndex in range(general_props.number_of_animation_frames):
self.task_builder.add_viewing_angles(
Expand Down
28 changes: 28 additions & 0 deletions rct-graphics-helper/operators/track_render_operator.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
'''
Copyright (c) 2022 RCT Graphics Helper developers
For a complete list of all authors, please refer to the addon's meta info.
Interested in contributing? Visit https://github.com/oli414/Blender-RCT-Graphics
RCT Graphics Helper is licensed under the GNU General Public License version 3.
'''

import bpy
import math
import os

from .render_operator import RCTRender


class RenderTrack(RCTRender, bpy.types.Operator):
bl_idname = "render.rct_track"
bl_label = "Render RCT Track"

def create_task(self, context):
scene = context.scene
props = scene.rct_graphics_helper_track_properties
general_props = scene.rct_graphics_helper_general_properties

# Create the list of frames with our parameters
self.task_builder.clear()
return self.task_builder.create_task(context)
2 changes: 1 addition & 1 deletion rct-graphics-helper/operators/vehicle_render_operator.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ def create_task(self, context):
self.task_builder.set_anti_aliasing_with_background(
context.scene.render.use_antialiasing, general_props.anti_alias_with_background, general_props.maintain_aliased_silhouette)
self.task_builder.set_output_index(general_props.out_start_index)
self.task_builder.set_size(1, 1)
self.task_builder.set_size(1, 1, False)

# Add vehicle frames
self.task_builder.set_recolorables(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,10 @@ def process(self, frame, callback):
meta_render_output = frame.get_meta_render_output_file_name(
output_suffix)

if frame.oversized:
self.renderer.set_multi_tile_size(frame.width, frame.length)
else:
self.renderer.set_multi_tile_size(1, 1)
self.renderer.set_layer(frame.layer)
self.renderer.set_aa(self.with_anti_aliasing)
self.renderer.set_meta_output_path(
Expand Down
20 changes: 11 additions & 9 deletions rct-graphics-helper/properties/general_properties.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ class GeneralProperties(bpy.types.PropertyGroup):

cast_shadows = bpy.props.BoolProperty(
name="Shadows",
description="Control wether or not the render contains shadows.",
description="Control whether the lights should cast shadows.",
default=True)

anti_alias_with_background = bpy.props.BoolProperty(
Expand All @@ -48,8 +48,8 @@ class GeneralProperties(bpy.types.PropertyGroup):
default=False)

maintain_aliased_silhouette = bpy.props.BoolProperty(
name="Maintain Aliased Silhouette",
description="Maintains the aliased image's silhouette.",
name="Maintain Aliased Silhouette (For modular pieces)",
description="The image is anti-aliased against the background, but is masked using the aliased silhoutte.",
default=False)

out_start_index = bpy.props.IntProperty(
Expand Down Expand Up @@ -101,7 +101,9 @@ class GeneralProperties(bpy.types.PropertyGroup):
("VEHICLE", "Vehicle",
"Renders a vehicle from the necesssary angles given a set of track ability flags.", 2),
("WALLS", "Walls",
"Renders a wall piece.", 3)
"Renders a wall piece.", 3),
("TRACK", "Track",
"Renders track pieces.", 4)
)
)

Expand All @@ -112,13 +114,13 @@ class GeneralProperties(bpy.types.PropertyGroup):

build_gx = bpy.props.BoolProperty(
name="Generate GX (optimized sprite file)",
description="Whether or not to create a .dat sprite file.",
default=True)
description="Whether or not to create a .dat sprite file. Having GXC installed is required.",
default=False)

build_assetpack = bpy.props.BoolProperty(
name="Generate the asset pack file",
description="Whether or not to the ORCT2 asset pack file",
default=True)
default=False)

copy_assetpack_to_orct2 = bpy.props.BoolProperty(
name="Copy to OpenRCT2",
Expand All @@ -127,12 +129,12 @@ class GeneralProperties(bpy.types.PropertyGroup):

build_parkobj = bpy.props.BoolProperty(
name="Generate .parkobj file",
description="Automatically build the .parkobj file.",
description="Automatically build the .parkobj file. An object.json file with the object description is required in the output folder.",
default=False)

copy_parkobj_to_orct2 = bpy.props.BoolProperty(
name="Copy to OpenRCT2",
description="Copy the generated .parkobj file to the ORCT2 objects folder.",
description="Copy the generated .parkobj file to the ORCT2 objects folder. Linking your OpenRCT2 Documents folder is required in the add-on preferences.",
default=False)


Expand Down
11 changes: 8 additions & 3 deletions rct-graphics-helper/properties/tiles_properties.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,20 +19,25 @@
class TilesProperties(bpy.types.PropertyGroup):
viewing_angles = bpy.props.IntProperty(
name="Viewing Angles",
description="Number of viewing angles to render for",
description="Number of viewing angles to render for.",
default=4,
min=1)

object_width = bpy.props.IntProperty(
name="Object Width",
description="Width of the object in tiles. Only used for large scenery",
description="Width of the object in tiles. Only used for large scenery.",
default=1,
min=1)
object_length = bpy.props.IntProperty(
name="Object Length",
description="Length of the object in tiles. Only used for large scenery",
description="Length of the object in tiles. Only used for large scenery.",
default=1,
min=1)

invert_tile_positions = bpy.props.BoolProperty(
name="Invert Tile Positions",
description="Some large scenery pieces extend into the negative axis, whilst others extends into the positive axis. Use this setting to switch between the two.",
default=False)


def register_tiles_properties():
Expand Down
31 changes: 31 additions & 0 deletions rct-graphics-helper/properties/track_properties.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
'''
Copyright (c) 2022 RCT Graphics Helper developers
For a complete list of all authors, please refer to the addon's meta info.
Interested in contributing? Visit https://github.com/oli414/Blender-RCT-Graphics
RCT Graphics Helper is licensed under the GNU General Public License version 3.
'''

import bpy
import math
import os

from ..builders.task_builder import TaskBuilder

from ..operators.render_operator import RCTRender

class TrackProperties(bpy.types.PropertyGroup):
placeholder = bpy.props.BoolProperty(
name="Placeholder",
description="Test.",
default=False)


def register_track_properties():
bpy.types.Scene.rct_graphics_helper_track_properties = bpy.props.PointerProperty(
type=TrackProperties)


def unregister_track_properties():
del bpy.types.Scene.rct_graphics_helper_track_properties
Loading

0 comments on commit ce41f62

Please sign in to comment.