55 lines
2.2 KiB
Python
55 lines
2.2 KiB
Python
import pathlib
|
|
import sys
|
|
|
|
import bpy
|
|
|
|
|
|
SCENES = (
|
|
("M11 Constant", (0.125, 0.25, 0.5, 0.75), ()),
|
|
("M11 Exposure", (0.125, 0.25, 0.5, 0.75), (("EXPOSURE", 1.0),)),
|
|
("M11 Invert", (0.125, 0.25, 0.5, 0.75), (("INVERT", None),)),
|
|
("M11 Chain", (0.125, 0.25, 0.5, 0.75), (("EXPOSURE", 1.0), ("INVERT", None))),
|
|
)
|
|
|
|
|
|
def add_graph(scene, color_value, operations):
|
|
tree = bpy.data.node_groups.new(f"{scene.name} Tree", "CompositorNodeTree")
|
|
scene.compositing_node_group = tree
|
|
tree.interface.new_socket(name="Image", in_out="OUTPUT", socket_type="NodeSocketColor")
|
|
color = tree.nodes.new("CompositorNodeRGB")
|
|
color.name = f"{scene.name} Constant"
|
|
color.outputs["Color"].default_value = color_value
|
|
previous = color.outputs["Color"]
|
|
for index, (operation, parameter) in enumerate(operations):
|
|
if operation == "EXPOSURE":
|
|
node = tree.nodes.new("CompositorNodeExposure")
|
|
node.inputs["Exposure"].default_value = parameter
|
|
else:
|
|
node = tree.nodes.new("CompositorNodeInvert")
|
|
node.name = f"{scene.name} {operation.title()} {index}"
|
|
tree.links.new(previous, node.inputs["Image" if operation == "EXPOSURE" else "Color"])
|
|
previous = node.outputs["Image" if operation == "EXPOSURE" else "Color"]
|
|
output = tree.nodes.new("NodeGroupOutput")
|
|
output.name = f"{scene.name} Composite"
|
|
tree.links.new(previous, output.inputs["Image"])
|
|
|
|
|
|
def main(output_path):
|
|
bpy.ops.wm.read_factory_settings(use_empty=True)
|
|
first = bpy.context.scene
|
|
for index, (name, color, operations) in enumerate(SCENES):
|
|
scene = first if index == 0 else bpy.data.scenes.new(name)
|
|
scene.name = name
|
|
add_graph(scene, color, operations)
|
|
output = pathlib.Path(output_path).resolve()
|
|
output.parent.mkdir(parents=True, exist_ok=True)
|
|
bpy.ops.wm.save_as_mainfile(filepath=str(output), compress=True)
|
|
print(f"m11-compositor-allowlist fixture={output} scenes={len(SCENES)}")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
arguments = sys.argv[sys.argv.index("--") + 1:]
|
|
if len(arguments) != 1:
|
|
raise SystemExit("usage: blender -b --python generate-m11-compositor-allowlist.py -- OUTPUT")
|
|
main(arguments[0])
|