summaryrefslogtreecommitdiff
path: root/cnn_v3/training
diff options
context:
space:
mode:
Diffstat (limited to 'cnn_v3/training')
-rw-r--r--cnn_v3/training/blender_export.py27
1 files changed, 25 insertions, 2 deletions
diff --git a/cnn_v3/training/blender_export.py b/cnn_v3/training/blender_export.py
index 63dd0e3..5d07c26 100644
--- a/cnn_v3/training/blender_export.py
+++ b/cnn_v3/training/blender_export.py
@@ -6,6 +6,12 @@ then renders the current scene to a multi-layer EXR.
Usage (headless):
blender -b scene.blend -P blender_export.py -- --output renders/frame_###
+ # List available view layers in the blend file:
+ blender -b scene.blend -P blender_export.py -- --view-layer ?
+
+ # Use a specific view layer:
+ blender -b scene.blend -P blender_export.py -- --output renders/frame_### --view-layer "MyLayer"
+
Each '#' in the output path is replaced by Blender with the frame number (zero-padded).
The script writes one multi-layer EXR per frame containing all required passes.
@@ -57,6 +63,11 @@ def parse_args():
"--end-frame", type=int, default=None,
help="Last frame to render (default: scene end frame)"
)
+ parser.add_argument(
+ "--view-layer", default=None, metavar="NAME",
+ help="View layer name to use (default: first available). "
+ "Use --view-layer without a value (or pass '?') to list available layers."
+ )
return parser.parse_args(argv)
@@ -77,8 +88,20 @@ def configure_scene(args):
# Use Cycles for best multi-pass support
scene.render.engine = "CYCLES"
- # Enable required render passes on the active view layer
- vl = scene.view_layers["ViewLayer"]
+ # Enable required render passes on the selected view layer
+ available = list(scene.view_layers.keys())
+ if getattr(args, "view_layer", None) in (None, "?"):
+ if args.view_layer == "?":
+ print("Available view layers:", available)
+ sys.exit(0)
+ vl = scene.view_layers[0]
+ else:
+ try:
+ vl = scene.view_layers[args.view_layer]
+ except KeyError:
+ print(f"ERROR: view layer '{args.view_layer}' not found.")
+ print(f"Available: {available}")
+ sys.exit(1)
vl.use_pass_combined = True # beauty target
vl.use_pass_diffuse_color = True # albedo
vl.use_pass_normal = True # world normals