WIP: Single-frame job compiler #104194

Draft
k8ie wants to merge 30 commits from k8ie/flamenco:single-frame into main

When changing the target branch, be careful to rebase the branch in your fork to match. See documentation.
Showing only changes of commit afe54c7c82 - Show all commits

View File

@ -162,11 +162,8 @@ bpy.context.scene.render.resolution_y = ${settings.resolution_y}
bpy.context.scene.render.resolution_percentage = ${settings.resolution_percentage}
bpy.context.scene.render.use_compositing = True
bpy.context.scene.use_nodes = True
bpy.context.scene.view_layers[0].use = False
if 'Render Layers' in bpy.context.scene.node_tree.nodes:
bpy.context.scene.node_tree.nodes.remove(bpy.context.scene.node_tree.nodes['Render Layers'])
bpy.context.scene.node_tree.nodes.clear()
bpy.context.scene.render.image_settings.file_format = 'OPEN_EXR_MULTILAYER'
bpy.context.scene.render.filepath = basepath + "MERGED"
image_nodes = []
for index, image in enumerate(filenames):
@ -189,9 +186,11 @@ for index, node in enumerate(image_nodes):
bpy.context.scene.node_tree.links.new(image_nodes[index+1].outputs['Combined'], alpha_over_nodes[index].inputs[2])
if index + 1 == len(image_nodes) - 1:
# Link the last image node and feed the output into the composite node
bpy.context.scene.node_tree.links.new(alpha_over_nodes[index].outputs['Image'], bpy.context.scene.node_tree.nodes['Composite'].inputs['Image'])
output_node = bpy.context.scene.node_tree.nodes.new(type='CompositorNodeOutputFile')
output_node.base_path = basepath + "MERGED"
bpy.context.scene.node_tree.links.new(alpha_over_nodes[index].outputs['Image'], output_node.inputs['Image'])
break
bpy.ops.render.render(write_still=True)`;
bpy.ops.render.render()`;
const command = author.Command("blender-render", {
exe: "{blender}",
exeArgs: "{blenderArgs}",
@ -231,18 +230,18 @@ bpy.ops.cycles.denoise_animation(input_filepath="${renderOutput}/MERGED.exr", ou
function authorCreateCompositeTask(settings, renderOutput) {
let filename;
if (settings.use_denoising) {
filename = "DENOISED.exr";
}
else {
filename = "MERGED.exr";
}
let pythonExpression = `
import pathlib
import os
import bpy
C = bpy.context
basepath = "${renderOutput}/"
filename = "${filename}"`;
filenames = [f for f in os.listdir(basepath) if os.path.isfile(basepath + f)]
if "DENOISED.exr" in filenames:
filename = "DENOISED.exr"
else:
filename = next((s for s in filenames if "MERGED" in s), None)
`;
if (settings.use_compositing) {
// Do the full composite+export pipeline
// uses snippets from
@ -265,7 +264,7 @@ for node in C.scene.node_tree.nodes:
if link.from_node != node:
continue
print('DEBUG: Found link %s - %s' % (link.from_socket, link.to_socket))
link_name = "Combined"
link_name = "Image"
for output in image_node.outputs:
print('DEBUG: Checking output:', output.name, link_name)
if output.name != link_name:
@ -287,12 +286,9 @@ C.scene.render.filepath = basepath + "FINAL"
bpy.ops.render.render(write_still=True)`;
}
else {
pythonExpression += `
print("Compositing is disabled")`;
if (settings.format == "OPEN_EXR_MULTILAYER") {
// Only rename
pythonExpression += `
print('Renaming ' + basepath + filename + ' to ' + basepath + 'FINAL.exr')
pathlib.Path(basepath + filename).rename(basepath + 'FINAL.exr')`;
}
else {
@ -300,7 +296,6 @@ pathlib.Path(basepath + filename).rename(basepath + 'FINAL.exr')`;
pythonExpression += `
bpy.ops.image.open(filepath=basepath + filename, use_sequence_detection=False)
image = bpy.data.images[bpy.path.basename(filename)]
print("Saving final image to " + basepath + "FINAL" + "${settings.image_file_extension}")
image.save_render(basepath + "FINAL" + "${settings.image_file_extension}")`;
}
}