fix(render): cache settings at batch start so they apply consistently to all scenes

This commit is contained in:
2026-06-02 23:08:33 +02:00
parent 634700e4db
commit 49cd08494b

View File

@@ -82,7 +82,7 @@ class SCENERENDERER_OT_render_all(bpy.types.Operator):
bpy.app.handlers.render_cancel.remove(on_render_cancel)
def _render_scene(self, context, scene_name):
settings = context.scene.scene_renderer
settings = SCENERENDERER_OT_render_all._cached_settings
scene = bpy.data.scenes.get(scene_name)
if not scene:
print(f" [SKIP] Scene not found: {scene_name}")
@@ -110,26 +110,26 @@ class SCENERENDERER_OT_render_all(bpy.types.Operator):
r.film_transparent = True
c = scene.cycles
c.samples = 1 if settings.test_mode else settings.samples
c.samples = 1 if settings["test_mode"] else settings["samples"]
if settings.exposure != 0.0:
scene.view_settings.exposure = settings.exposure
scene.cycles.film_exposure = 2.0 ** settings.exposure
if settings.look != 'None':
scene.view_settings.look = settings.look
if settings["exposure"] != 0.0:
scene.view_settings.exposure = settings["exposure"]
scene.cycles.film_exposure = 2.0 ** settings["exposure"]
if settings["look"] != 'None':
scene.view_settings.look = settings["look"]
if settings.test_mode:
if settings["test_mode"]:
r.resolution_percentage = 10
render_dir = bpy.path.abspath("//renders")
if settings.test_mode:
if settings["test_mode"]:
render_dir = os.path.join(render_dir, "test")
os.makedirs(render_dir, exist_ok=True)
safe_name = scene.name.replace("/", "_").replace("\\", "_").replace(":", "_").strip()
output_path = os.path.join(render_dir, safe_name)
if settings.skip_existing and os.path.exists(output_path + ".png"):
if settings["skip_existing"] and os.path.exists(output_path + ".png"):
print(f" [SKIP] Already exists: {safe_name}.png")
SCENERENDERER_OT_render_all._is_rendering = False
return
@@ -161,6 +161,17 @@ class SCENERENDERER_OT_render_all(bpy.types.Operator):
def execute(self, context):
settings = context.scene.scene_renderer
# Cache the settings exactly as they were when the user pressed "Render All Scenes".
# This prevents the settings from reverting to defaults when Blender switches the active scene context.
SCENERENDERER_OT_render_all._cached_settings = {
"test_mode": settings.test_mode,
"skip_existing": settings.skip_existing,
"use_cpu": settings.use_cpu,
"samples": settings.samples,
"exposure": settings.exposure,
"look": settings.look,
}
if on_render_complete not in bpy.app.handlers.render_complete:
bpy.app.handlers.render_complete.append(on_render_complete)