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)
|
bpy.app.handlers.render_cancel.remove(on_render_cancel)
|
||||||
|
|
||||||
def _render_scene(self, context, scene_name):
|
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)
|
scene = bpy.data.scenes.get(scene_name)
|
||||||
if not scene:
|
if not scene:
|
||||||
print(f" [SKIP] Scene not found: {scene_name}")
|
print(f" [SKIP] Scene not found: {scene_name}")
|
||||||
@@ -110,26 +110,26 @@ class SCENERENDERER_OT_render_all(bpy.types.Operator):
|
|||||||
r.film_transparent = True
|
r.film_transparent = True
|
||||||
|
|
||||||
c = scene.cycles
|
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:
|
if settings["exposure"] != 0.0:
|
||||||
scene.view_settings.exposure = settings.exposure
|
scene.view_settings.exposure = settings["exposure"]
|
||||||
scene.cycles.film_exposure = 2.0 ** settings.exposure
|
scene.cycles.film_exposure = 2.0 ** settings["exposure"]
|
||||||
if settings.look != 'None':
|
if settings["look"] != 'None':
|
||||||
scene.view_settings.look = settings.look
|
scene.view_settings.look = settings["look"]
|
||||||
|
|
||||||
if settings.test_mode:
|
if settings["test_mode"]:
|
||||||
r.resolution_percentage = 10
|
r.resolution_percentage = 10
|
||||||
|
|
||||||
render_dir = bpy.path.abspath("//renders")
|
render_dir = bpy.path.abspath("//renders")
|
||||||
if settings.test_mode:
|
if settings["test_mode"]:
|
||||||
render_dir = os.path.join(render_dir, "test")
|
render_dir = os.path.join(render_dir, "test")
|
||||||
os.makedirs(render_dir, exist_ok=True)
|
os.makedirs(render_dir, exist_ok=True)
|
||||||
|
|
||||||
safe_name = scene.name.replace("/", "_").replace("\\", "_").replace(":", "_").strip()
|
safe_name = scene.name.replace("/", "_").replace("\\", "_").replace(":", "_").strip()
|
||||||
output_path = os.path.join(render_dir, safe_name)
|
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")
|
print(f" [SKIP] Already exists: {safe_name}.png")
|
||||||
SCENERENDERER_OT_render_all._is_rendering = False
|
SCENERENDERER_OT_render_all._is_rendering = False
|
||||||
return
|
return
|
||||||
@@ -161,6 +161,17 @@ class SCENERENDERER_OT_render_all(bpy.types.Operator):
|
|||||||
|
|
||||||
def execute(self, context):
|
def execute(self, context):
|
||||||
settings = context.scene.scene_renderer
|
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:
|
if on_render_complete not in bpy.app.handlers.render_complete:
|
||||||
bpy.app.handlers.render_complete.append(on_render_complete)
|
bpy.app.handlers.render_complete.append(on_render_complete)
|
||||||
|
|||||||
Reference in New Issue
Block a user