-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
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
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels