Source code for blendersynth.blender.render

import bpy
from .devices import Devices

ENGINES = ["BLENDER_EEVEE", "BLENDER_WORKBENCH", "CYCLES"]
"""List of valid render engines"""


[docs] def render(animation: bool = False): """Render the scene :param animation: If True, render the animation. Otherwise, render a single frame. """ if animation: bpy.ops.render.render(animation=True) else: bpy.ops.render.render(write_still=True)
[docs] def render_with_cpu(): """Render with CPU""" bpy.context.scene.cycles.device = "CPU"
[docs] def render_with_gpu(force_enable=True, silent=False): """Render with GPU. :param force_enable: If True, enable all GPU devices. Otherwise, use the devices that are already enabled. To enable separately, either change your settings in blender, or see :attr:`blendersynth.blender.devices.Devices.set_device_usage` :param silent: If True, do not print information about device being used. """ # Needed to update the device list bpy.context.preferences.addons["cycles"].preferences.get_devices() bpy.context.scene.cycles.device = "GPU" devices = Devices() if force_enable: devices.set_device_usage(cpu=True, cuda=True, opencl=True, metal=True) enabled_gpus = devices.enabled_gpus if enabled_gpus: if not silent: print(f"Using GPU devices {enabled_gpus.names}") elif not silent: print( "No GPU devices available and enabled.\n" + f"Available GPUs: {devices.available_gpus.names}\n" + "Either set force_enable=True or enable a GPU device in Blender.\n" "Using CPU instead..." )
[docs] def set_engine(engine: str): """Set the render engine :param engine: The render engine to use. See :data:`~blendersynth.blender.render.ENGINES` for valid options. """ assert engine in ENGINES, "Invalid render engine" bpy.context.scene.render.engine = engine
[docs] def set_resolution(x: int, y: int): """Set the render resolution :param x: The width of the image in pixels :param y: The height of the image in pixels""" bpy.context.scene.render.resolution_x = x bpy.context.scene.render.resolution_y = y
[docs] def set_cycles_samples(samples: int): """Set the number of samples for the Cycles renderer""" assert ( bpy.context.scene.render.engine == "CYCLES" ), "Cycles must be the active render engine" bpy.context.scene.cycles.samples = samples
[docs] def render_depth(): """Enable the depth pass of the renderer""" bpy.context.view_layer.use_pass_z = True # enable depth pass
[docs] def set_transparent(scene=None): """Set the background of the scene to transparent :param scene: The scene to set the background of. If None, use the active scene. """ if scene is None: scene = bpy.context.scene scene.render.film_transparent = True