From 90b53dacb460855d1efef95dbc15a078bf5aa4da Mon Sep 17 00:00:00 2001 From: skal Date: Sun, 22 Mar 2026 09:00:43 +0100 Subject: fix(cnn_v3): blender_export Blender 5 compositor activation + document RenderLayer sockets - Activate compositor in Blender 5.0+ by relying on compositing_node_group assignment (no use_nodes needed, avoids deprecation warning) - Document full CompositorNodeRLayers output socket list for Blender 5.0.1 - Clean up SOCKET_ALIASES to match confirmed socket names --- cnn_v3/training/blender_export.py | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/cnn_v3/training/blender_export.py b/cnn_v3/training/blender_export.py index f8ca9f6..290a35a 100644 --- a/cnn_v3/training/blender_export.py +++ b/cnn_v3/training/blender_export.py @@ -87,6 +87,7 @@ def _get_compositor_tree(scene): scene.compositing_node_group = bpy.data.node_groups.new( name="Compositor", type="CompositorNodeTree" ) + # In Blender 5.0+, assigning compositing_node_group activates compositing. return scene.compositing_node_group if hasattr(scene, "node_tree"): # Blender <= 4.x scene.use_nodes = True @@ -136,6 +137,23 @@ def configure_scene(args): return _discard_dir +# Full CompositorNodeRLayers output socket list (Blender 5.0.1, queried via console): +# ng = bpy.data.node_groups.new("T", "CompositorNodeTree") +# rl = ng.nodes.new("CompositorNodeRLayers") +# print([s.name for s in rl.outputs]) +# bpy.data.node_groups.remove(ng) +# +# ['Image', 'Alpha', 'Depth', 'Normal', 'UV', 'Vector', 'Position', +# 'Deprecated', 'Deprecated', +# 'Shadow', 'Ambient Occlusion', +# 'Deprecated', 'Deprecated', 'Deprecated', +# 'Object Index', 'Material Index', 'Mist', 'Emission', 'Environment', +# 'Diffuse Direct', 'Diffuse Indirect', 'Diffuse Color', +# 'Glossy Direct', 'Glossy Indirect', 'Glossy Color', +# 'Transmission Direct', 'Transmission Indirect', 'Transmission Color', +# 'Subsurface Direct', 'Subsurface Indirect', 'Subsurface Color'] +# +# Mapping used here (socket name → EXR layer name → Blender 5+ type): # (render-layer socket name, EXR layer name, Blender 5+ socket type) PASS_SOCKETS = [ ("Image", "Combined", "RGBA"), # beauty / target @@ -185,11 +203,11 @@ def configure_compositor(args): # Socket name aliases across Blender versions. SOCKET_ALIASES = { - "Shadow": ["Shadow Catcher", "ShadowCatcher"], - "Diffuse Color":["DiffCol", "Diffuse"], - "Depth": ["Z"], - "Object Index": ["IndexOB", "Object Index"], - "Alpha": ["Alpha"], + "Shadow": ["Shadow Catcher", "ShadowCatcher"], + "Diffuse Color": ["DiffCol", "Diffuse"], + "Depth": ["Z"], + "Object Index": ["IndexOB"], + "Alpha": ["Alpha"], } # Link each render-layer output to the file output slot by name. -- cgit v1.2.3