0
$\begingroup$

I have set up our pipeline to auto pickup versions in the filename and conform to our file name conventions for 3d renders (arnold/redshift, maya houdini) Since we need Single Layer OpenEXR files, i name the slot.path of the EXR accordingly to get the proper output file name. As seen in the image. enter image description here

Now comes the issue, float and vector connections are passing their info to the wrong EXR channel. The metadata of the exr channels is not recognized by nukes read node. Normal (vector) comes in an "X" "Y" and "Z" exr channel which is partially translated to disparity in nuke. Float values like Mist and Depth are coded into a "V" channel which is interpreted as motion by nuke.

enter image description here

Is there any way I can control the channel name Blender is writing to. By default it should always target RGBA in a singleLayer EXR. Otherwise its unpredictable behaviour.

OpenEXR Multilayer output all Channels/Layers are behaving correctly.

But in singleLayer EXR , utility passes are not getting written to the correct channel.

How can I add a Node or otherwise control which EXR channel the Info is written to. For Mist and Depth, a workaround is putting a "Mix Color" Node in-between the viewLayer AOV and the CompositorNodeOutputFile slots, changing its type from float (grey connection) to image (yellow connection) but this workaround is not working for the Normal pass.

This for sure must be a bug, normally the singleLayer OpenEXR information should stay in RGBA, or Z for the standard AOVs.

Also i tried to see if layer slot or file slots are wrong named, but they seem fine. I think its Blenders Type handling that messes up:

    import bpy
    # Get the compositor node tree
    tree = bpy.context.scene.node_tree
    # Ensure we're in the compositor context and nodes are used
    if tree and bpy.context.scene.use_nodes:
        selected_nodes = [node for node in tree.nodes if node.select]
    
        if selected_nodes:
            # You can loop or just grab the first selected one
            selected_node = selected_nodes[0]
    
            if isinstance(selected_node, bpy.types.CompositorNodeOutputFile):
                selected_out_node = selected_node
                print(f"Selected Output File Node found: {selected_out_node}")
            else:
                print("Selected node is not a CompositorNodeOutputFile.")
        else:
            print("No node is selected.")
    else:
        print("Compositor nodes not enabled or node tree is missing.")
    
    
    for slot in selected_out_node.layer_slots:
        print(f"layer slot: {slot.name}")
    
            
    for slot in selected_out_node.file_slots:
        print(f"file slot: {slot.path}")
        
    >>>
    layer slot: rgba
    layer slot: z
    layer slot: Mist
    layer slot: Pworld
    layer slot: Normal
    layer slot: UV
    file slot: previz_main.previz_mmr.p_main.dataRGBA.v025.
    file slot: previz_main.previz_mmr.p_main.Depth.v025.
    file slot: previz_main.previz_mmr.p_main.Mist.v025.
    file slot: previz_main.previz_mmr.p_main.Position.v025.
    file slot: previz_main.previz_mmr.p_main.Normal.v025.
    file slot: previz_main.previz_mmr.p_main.UV.v025.

  
$\endgroup$

0

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.