Skip to content

New initCompositing #1

@huizinga

Description

@huizinga

def initCompositing(useBackground, useMasks):
"""Initialize Blender compositing graph for background and/or mask compositing."""

scene = bpy.context.scene
scene.render.film_transparent = True
scene.use_nodes = True

tree = scene.node_tree
nodes = tree.nodes
links = tree.links

# Eerst: alles opruimen behalve Composite-node (handig voor consistent gedrag)
for node in list(nodes):
    if node.type not in {'COMPOSITE'}:
        nodes.remove(node)

# Render Layers node
nodeRender = None
for n in nodes:
    if n.type == 'R_LAYERS':
        nodeRender = n
        break
if nodeRender is None:
    nodeRender = nodes.new(type='CompositorNodeRLayers')
    nodeRender.name = "Render Layers"
    nodeRender.location = (-600, 300)

# Composite output node (altijd aanwezig)
nodeComposite = None
for n in nodes:
    if n.type == 'COMPOSITE':
        nodeComposite = n
        break
if nodeComposite is None:
    nodeComposite = nodes.new(type='CompositorNodeComposite')
nodeComposite.location = (600, 300)

# Nieuwe nodes voor achtergrond en masker
nodeAlphaOver = nodes.new(type="CompositorNodeAlphaOver")
nodeAlphaOver.location = (300, 300)

nodeSetAlpha = nodes.new(type="CompositorNodeSetAlpha")
nodeSetAlpha.location = (0, 100)

nodeBackground = nodes.new(type="CompositorNodeImage")
nodeBackground.name = "Background"
nodeBackground.location = (-200, 500)

nodeMask = nodes.new(type="CompositorNodeImage")
nodeMask.name = "Mask"
nodeMask.location = (-200, -100)

# Eerst alle oude links verwijderen
for l in list(links):
    links.remove(l)

# Koppelingen afhankelijk van de gekozen opties
if useBackground and useMasks:
    # Background + Mask
    links.new(nodeBackground.outputs['Image'], nodeAlphaOver.inputs[1])
    links.new(nodeRender.outputs['Image'], nodeSetAlpha.inputs['Image'])
    links.new(nodeMask.outputs['Image'], nodeSetAlpha.inputs['Alpha'])
    links.new(nodeSetAlpha.outputs['Image'], nodeAlphaOver.inputs[2])
    links.new(nodeAlphaOver.outputs['Image'], nodeComposite.inputs['Image'])

elif useBackground:
    # Alleen background overlay
    links.new(nodeBackground.outputs['Image'], nodeAlphaOver.inputs[1])
    links.new(nodeRender.outputs['Image'], nodeAlphaOver.inputs[2])
    links.new(nodeAlphaOver.outputs['Image'], nodeComposite.inputs['Image'])

elif useMasks:
    # Alleen masker toepassen
    links.new(nodeRender.outputs['Image'], nodeSetAlpha.inputs['Image'])
    links.new(nodeMask.outputs['Image'], nodeSetAlpha.inputs['Alpha'])
    links.new(nodeSetAlpha.outputs['Image'], nodeComposite.inputs['Image'])

else:
    # Geen achtergrond/masker — direct render doorsturen
    links.new(nodeRender.outputs['Image'], nodeComposite.inputs['Image'])

return nodeBackground, nodeMask

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions