# Spearfish: quick perspective looks (Workbench), exec'd in Blender. ENGINE / NAME / SHOTS may be set before exec. import bpy, math, os from mathutils import Vector, Matrix OUTD = os.path.join(r"D:\HADAL - The Descent\models\tender-spearfish", "previews") os.makedirs(OUTD, exist_ok=True) sc = bpy.context.scene eng = globals().get("ENGINE", "BLENDER_WORKBENCH") name = globals().get("NAME", "wb") shots = globals().get("SHOTS", { "q_front_port": (Vector((7.5, -9.0, 4.0)), Vector((0, -0.6, 0.15)), 34), "q_rear_stbd": (Vector((-8.0, 8.5, 3.5)), Vector((0, 0.4, 0.2)), 34), "q_low_side": (Vector((9.5, -1.5, -1.6)), Vector((0, -0.4, 0.0)), 34), "q_top": (Vector((3.0, -2.0, 11.0)), Vector((0, 0.0, 0.3)), 40), }) sc.render.engine = eng if eng == 'BLENDER_WORKBENCH': sh = sc.display.shading sh.light = 'STUDIO'; sh.color_type = 'MATERIAL'; sh.show_object_outline = False; sh.show_cavity = True sh.cavity_type = 'BOTH' sc.render.film_transparent = False sc.render.image_settings.file_format = 'PNG'; sc.render.image_settings.color_mode = 'RGB' sc.render.resolution_x, sc.render.resolution_y, sc.render.resolution_percentage = 1600, 900, 100 cam = bpy.data.objects.get("_pv_cam") if cam is None: cam = bpy.data.objects.new("_pv_cam", bpy.data.cameras.new("_pv_cam")) sc.collection.objects.link(cam) cam.data.type = 'PERSP' prev = sc.camera sc.camera = cam hide = [o for o in bpy.data.objects if o.name.startswith("UCX_")] for o in hide: o.hide_render = True done = [] for nm, (loc, tgt, lens) in shots.items(): cam.location = loc d = (tgt - loc).normalized() cam.rotation_euler = d.to_track_quat('-Z', 'Y').to_euler() cam.data.lens = lens sc.render.filepath = os.path.join(OUTD, "%s_%s.png" % (name, nm)) bpy.ops.render.render(write_still=True) done.append(sc.render.filepath) sc.camera = prev result = done