mirror of
https://github.com/alicevision/Meshroom.git
synced 2025-08-02 00:08:29 +02:00
Support latest blender version
This commit is contained in:
parent
8c7eed2f34
commit
167b9934db
1 changed files with 27 additions and 18 deletions
|
@ -144,26 +144,33 @@ def initCompositing(useBackground, useMasks):
|
||||||
'''Initialize Blender compositing graph for adding background image to render.'''
|
'''Initialize Blender compositing graph for adding background image to render.'''
|
||||||
bpy.context.scene.render.film_transparent = True
|
bpy.context.scene.render.film_transparent = True
|
||||||
bpy.context.scene.use_nodes = True
|
bpy.context.scene.use_nodes = True
|
||||||
nodeAlphaOver = bpy.context.scene.node_tree.nodes.new(type="CompositorNodeAlphaOver")
|
|
||||||
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")
|
|
||||||
nodeRender = bpy.context.scene.node_tree.nodes['Render Layers']
|
nodeRender = bpy.context.scene.node_tree.nodes['Render Layers']
|
||||||
|
nodeMask = bpy.context.scene.node_tree.nodes.new(type="CompositorNodeImage")
|
||||||
|
nodeMask.use_straight_alpha_output = False
|
||||||
|
# nodeMask.colorspace = 'Non-Color' # how to set the colorspace?
|
||||||
|
|
||||||
|
nodeRenderMasked = bpy.context.scene.node_tree.nodes.new(type="CompositorNodeSetAlpha")
|
||||||
|
nodeRenderMasked.mode = "APPLY" # "REPLACE_ALPHA"
|
||||||
|
|
||||||
|
nodeBackground = bpy.context.scene.node_tree.nodes.new(type="CompositorNodeImage")
|
||||||
|
|
||||||
|
nodeRenderOnBackground = bpy.context.scene.node_tree.nodes.new(type="CompositorNodeAlphaOver")
|
||||||
nodeComposite = bpy.context.scene.node_tree.nodes['Composite']
|
nodeComposite = bpy.context.scene.node_tree.nodes['Composite']
|
||||||
if useBackground and useMasks:
|
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'], nodeRenderMasked.inputs['Image'])
|
||||||
bpy.context.scene.node_tree.links.new(nodeRender.outputs['Image'], nodeSetAlpha.inputs['Image'])
|
bpy.context.scene.node_tree.links.new(nodeMask.outputs['Image'], nodeRenderMasked.inputs['Alpha'])
|
||||||
bpy.context.scene.node_tree.links.new(nodeMask.outputs['Image'], nodeSetAlpha.inputs['Alpha'])
|
bpy.context.scene.node_tree.links.new(nodeBackground.outputs['Image'], nodeRenderOnBackground.inputs[1])
|
||||||
bpy.context.scene.node_tree.links.new(nodeSetAlpha.outputs['Image'], nodeAlphaOver.inputs[2])
|
bpy.context.scene.node_tree.links.new(nodeRenderMasked.outputs['Image'], nodeRenderOnBackground.inputs[2])
|
||||||
bpy.context.scene.node_tree.links.new(nodeAlphaOver.outputs['Image'], nodeComposite.inputs['Image'])
|
bpy.context.scene.node_tree.links.new(nodeRenderOnBackground.outputs['Image'], nodeComposite.inputs['Image'])
|
||||||
elif useBackground:
|
elif useBackground:
|
||||||
bpy.context.scene.node_tree.links.new(nodeBackground.outputs['Image'], nodeAlphaOver.inputs[1])
|
bpy.context.scene.node_tree.links.new(nodeBackground.outputs['Image'], nodeRenderOnBackground.inputs[1])
|
||||||
bpy.context.scene.node_tree.links.new(nodeRender.outputs['Image'], nodeAlphaOver.inputs[2])
|
bpy.context.scene.node_tree.links.new(nodeRender.outputs['Image'], nodeRenderOnBackground.inputs[2])
|
||||||
bpy.context.scene.node_tree.links.new(nodeAlphaOver.outputs['Image'], nodeComposite.inputs['Image'])
|
bpy.context.scene.node_tree.links.new(nodeRenderOnBackground.outputs['Image'], nodeComposite.inputs['Image'])
|
||||||
elif useMasks:
|
elif useMasks:
|
||||||
bpy.context.scene.node_tree.links.new(nodeRender.outputs['Image'], nodeSetAlpha.inputs['Image'])
|
bpy.context.scene.node_tree.links.new(nodeRender.outputs['Image'], nodeRenderMasked.inputs['Image'])
|
||||||
bpy.context.scene.node_tree.links.new(nodeMask.outputs['Image'], nodeSetAlpha.inputs['Alpha'])
|
bpy.context.scene.node_tree.links.new(nodeMask.outputs['Image'], nodeRenderMasked.inputs['Alpha'])
|
||||||
bpy.context.scene.node_tree.links.new(nodeSetAlpha.outputs['Image'], nodeComposite.inputs['Image'])
|
bpy.context.scene.node_tree.links.new(nodeRenderMasked.outputs['Image'], nodeComposite.inputs['Image'])
|
||||||
return nodeBackground, nodeMask
|
return nodeBackground, nodeMask
|
||||||
|
|
||||||
|
|
||||||
|
@ -192,14 +199,16 @@ def setupBackground(view, folderUndistorted, nodeBackground):
|
||||||
|
|
||||||
def setupMask(view, folderMasks, nodeMask):
|
def setupMask(view, folderMasks, nodeMask):
|
||||||
'''Retrieve mask corresponding to view and use it in compositing graph.'''
|
'''Retrieve mask corresponding to view and use it in compositing graph.'''
|
||||||
matches = glob.glob(folderMasks + '/*' + view['viewId'] + "*") # try with viewId
|
matches = glob.glob(folderMasks + '/' + view['viewId'] + ".???") # try with viewId
|
||||||
if len(matches) == 0:
|
if len(matches) == 0:
|
||||||
baseImgName = os.path.splitext(os.path.basename(view['path']))[0]
|
baseImgName = os.path.splitext(os.path.basename(view['path']))[0]
|
||||||
matches = glob.glob(folderMasks + '/*' + baseImgName + "*") # try with image name
|
matches = glob.glob(folderMasks + '/' + baseImgName + ".???") # try with image name
|
||||||
if len(matches) == 0:
|
if len(matches) == 0:
|
||||||
# no background image found
|
# no background image found
|
||||||
|
print(f"Failed to find mask for viewId={view['viewId']}")
|
||||||
return None
|
return None
|
||||||
maskPath = matches[0]
|
maskPath = matches[0]
|
||||||
|
print(f"maskPath={maskPath} for viewId={view['viewId']}")
|
||||||
mask = bpy.data.images.load(filepath=maskPath)
|
mask = bpy.data.images.load(filepath=maskPath)
|
||||||
nodeMask.image = mask
|
nodeMask.image = mask
|
||||||
return mask
|
return mask
|
||||||
|
@ -208,7 +217,7 @@ def setupMask(view, folderMasks, nodeMask):
|
||||||
def loadModel(filename):
|
def loadModel(filename):
|
||||||
'''Load model in Alembic of OBJ format. Make sure orientation matches camera orientation.'''
|
'''Load model in Alembic of OBJ format. Make sure orientation matches camera orientation.'''
|
||||||
if filename.lower().endswith('.obj'):
|
if filename.lower().endswith('.obj'):
|
||||||
bpy.ops.import_scene.obj(filepath=filename, axis_forward='Y', axis_up='Z')
|
bpy.ops.wm.obj_import(filepath=filename, forward_axis='Y', up_axis='Z')
|
||||||
meshName = os.path.splitext(os.path.basename(filename))[0]
|
meshName = os.path.splitext(os.path.basename(filename))[0]
|
||||||
return bpy.data.objects[meshName], bpy.data.meshes[meshName]
|
return bpy.data.objects[meshName], bpy.data.meshes[meshName]
|
||||||
elif filename.lower().endswith('.abc'):
|
elif filename.lower().endswith('.abc'):
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue