[blender] preview: correctly handle useBackground and useMasks in compositing graph

This commit is contained in:
Loïc Vital 2023-08-29 16:00:19 +02:00
parent 28d57748bf
commit 4f4d688f58
2 changed files with 19 additions and 18 deletions

View file

@ -68,7 +68,7 @@ One frame per viewpoint will be rendered, and the undistorted views can optional
),
desc.BoolParam(
name="useMasks",
label="Use Masks",
label="Apply Masks",
description="Apply mask to the rendered geometry.",
value=True,
uid=[0],

View file

@ -140,7 +140,7 @@ def initScene():
bpy.context.scene.cycles.use_denoising = False
def initCompositing():
def initCompositing(useBackground, useMasks):
'''Initialize Blender compositing graph for adding background image to render.'''
bpy.context.scene.render.film_transparent = True
bpy.context.scene.use_nodes = True
@ -148,21 +148,22 @@ def initCompositing():
nodeSetAlpha = bpy.context.scene.node_tree.nodes.new(type="CompositorNodeSetAlpha")
nodeBackground = bpy.context.scene.node_tree.nodes.new(type="CompositorNodeImage")
nodeMask = bpy.context.scene.node_tree.nodes.new(type="CompositorNodeImage")
bpy.context.scene.node_tree.links.new(
nodeAlphaOver.outputs['Image'],
bpy.context.scene.node_tree.nodes['Composite'].inputs['Image'])
bpy.context.scene.node_tree.links.new(
nodeBackground.outputs['Image'],
nodeAlphaOver.inputs[1])
bpy.context.scene.node_tree.links.new(
bpy.context.scene.node_tree.nodes['Render Layers'].outputs['Image'],
nodeSetAlpha.inputs['Image'])
bpy.context.scene.node_tree.links.new(
nodeMask.outputs['Image'],
nodeSetAlpha.inputs['Alpha'])
bpy.context.scene.node_tree.links.new(
nodeSetAlpha.outputs['Image'],
nodeAlphaOver.inputs[2])
nodeRender = bpy.context.scene.node_tree.nodes['Render Layers']
nodeComposite = bpy.context.scene.node_tree.nodes['Composite']
if useBackground and useMasks:
bpy.context.scene.node_tree.links.new(nodeBackground.outputs['Image'], nodeAlphaOver.inputs[1])
bpy.context.scene.node_tree.links.new(nodeRender.outputs['Image'], nodeSetAlpha.inputs['Image'])
bpy.context.scene.node_tree.links.new(nodeMask.outputs['Image'], nodeSetAlpha.inputs['Alpha'])
bpy.context.scene.node_tree.links.new(nodeSetAlpha.outputs['Image'], nodeAlphaOver.inputs[2])
bpy.context.scene.node_tree.links.new(nodeAlphaOver.outputs['Image'], nodeComposite.inputs['Image'])
elif useBackground:
bpy.context.scene.node_tree.links.new(nodeBackground.outputs['Image'], nodeAlphaOver.inputs[1])
bpy.context.scene.node_tree.links.new(nodeRender.outputs['Image'], nodeAlphaOver.inputs[2])
bpy.context.scene.node_tree.links.new(nodeAlphaOver.outputs['Image'], nodeComposite.inputs['Image'])
elif useMasks:
bpy.context.scene.node_tree.links.new(nodeRender.outputs['Image'], nodeSetAlpha.inputs['Image'])
bpy.context.scene.node_tree.links.new(nodeMask.outputs['Image'], nodeSetAlpha.inputs['Alpha'])
bpy.context.scene.node_tree.links.new(nodeSetAlpha.outputs['Image'], nodeComposite.inputs['Image'])
return nodeBackground, nodeMask
@ -332,7 +333,7 @@ def main():
initScene()
print("Init compositing")
nodeBackground, nodeMask = initCompositing()
nodeBackground, nodeMask = initCompositing(args.useBackground, args.useMasks)
print("Parse cameras SfM file")
views, intrinsics, poses = parseSfMCameraFile(args.cameras)