diff options
Diffstat (limited to 'cnn_v3')
| -rw-r--r-- | cnn_v3/docs/HOW_TO_CNN.md | 1 | ||||
| -rw-r--r-- | cnn_v3/training/blender_export.py | 27 |
2 files changed, 26 insertions, 2 deletions
diff --git a/cnn_v3/docs/HOW_TO_CNN.md b/cnn_v3/docs/HOW_TO_CNN.md index 6214b20..c9c16a7 100644 --- a/cnn_v3/docs/HOW_TO_CNN.md +++ b/cnn_v3/docs/HOW_TO_CNN.md @@ -163,6 +163,7 @@ not to Blender. Each `#` in `--output` is replaced by a zero-padded frame digit. | `--height N` | 360 | Render resolution | | `--start-frame N` | scene start | First frame | | `--end-frame N` | scene end | Last frame | +| `--view-layer NAME` | first layer | View layer name; pass `?` to list available layers | **Render pass → CNN channel mapping:** 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 |
