import bpy from .materials import plane_mat # noqa def setup_renderer(denoising=True, oldrender=True, accelerator="gpu", device=[0]): bpy.context.scene.render.engine = "CYCLES" bpy.data.scenes[0].render.engine = "CYCLES" if accelerator.lower() == "gpu": bpy.context.preferences.addons[ "cycles" ].preferences.compute_device_type = "CUDA" bpy.context.scene.cycles.device = "GPU" i = 0 bpy.context.preferences.addons["cycles"].preferences.get_devices() for d in bpy.context.preferences.addons["cycles"].preferences.devices: if i in device: # gpu id d["use"] = 1 print(d["name"], "".join(str(i) for i in device)) else: d["use"] = 0 i += 1 if denoising: bpy.context.scene.cycles.use_denoising = True bpy.context.scene.render.tile_x = 256 bpy.context.scene.render.tile_y = 256 bpy.context.scene.cycles.samples = 64 # bpy.context.scene.cycles.denoiser = 'OPTIX' if not oldrender: bpy.context.scene.view_settings.view_transform = "Standard" bpy.context.scene.render.film_transparent = True bpy.context.scene.display_settings.display_device = "sRGB" bpy.context.scene.view_settings.gamma = 1.2 bpy.context.scene.view_settings.exposure = -0.75 # Setup scene def setup_scene( res="high", denoising=True, oldrender=True, accelerator="gpu", device=[0] ): scene = bpy.data.scenes["Scene"] assert res in ["ultra", "high", "med", "low"] if res == "high": scene.render.resolution_x = 1280 scene.render.resolution_y = 1024 elif res == "med": scene.render.resolution_x = 1280 // 2 scene.render.resolution_y = 1024 // 2 elif res == "low": scene.render.resolution_x = 1280 // 4 scene.render.resolution_y = 1024 // 4 elif res == "ultra": scene.render.resolution_x = 1280 * 2 scene.render.resolution_y = 1024 * 2 scene.render.film_transparent= True world = bpy.data.worlds["World"] world.use_nodes = True bg = world.node_tree.nodes["Background"] bg.inputs[0].default_value[:3] = (1.0, 1.0, 1.0) bg.inputs[1].default_value = 1.0 # Remove default cube if "Cube" in bpy.data.objects: bpy.data.objects["Cube"].select_set(True) bpy.ops.object.delete() bpy.ops.object.light_add( type="SUN", align="WORLD", location=(0, 0, 0), scale=(1, 1, 1) ) bpy.data.objects["Sun"].data.energy = 1.5 # rotate camera bpy.ops.object.empty_add( type="PLAIN_AXES", align="WORLD", location=(0, 0, 0), scale=(1, 1, 1) ) bpy.ops.transform.resize( value=(10, 10, 10), orient_type="GLOBAL", orient_matrix=((1, 0, 0), (0, 1, 0), (0, 0, 1)), orient_matrix_type="GLOBAL", mirror=True, use_proportional_edit=False, proportional_edit_falloff="SMOOTH", proportional_size=1, use_proportional_connected=False, use_proportional_projected=False, ) bpy.ops.object.select_all(action="DESELECT") setup_renderer( denoising=denoising, oldrender=oldrender, accelerator=accelerator, device=device ) return scene