fix(render): cache settings at batch start so they apply consistently to all scenes
This commit is contained in:
31
operators.py
31
operators.py
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user