import bpy,os from mathutils import Vector OUT=os.path.dirname(os.path.abspath(__file__)); s=bpy.context.scene; c=bpy.data.collections['23 NOW - Quiet meditation room'] # Keep the entrance clear and support the low stone candle shelf on matching stone feet. for o in c.objects: if o.name.startswith(('Low stone candle shelf','Stone candle holder','Meditation candle','Small candle flame','Soft candle glow')):o.location.x-=1.4 for x in [-12.9,-11.9]: bpy.ops.mesh.primitive_cube_add(size=1,location=(x,10.36,1.235)); o=bpy.context.object; o.name='Low candle shelf stone foot'; o.dimensions=(.14,.30,.23); bpy.ops.object.transform_apply(location=False,rotation=False,scale=True) for col in list(o.users_collection):col.objects.unlink(o) c.objects.link(o); o.data.materials.append(bpy.data.materials['Split sandstone facing - mineral grain']); mod=o.modifiers.new('Soft stone edge','BEVEL'); mod.width=.008; mod.segments=2 cam=bpy.data.objects['PLAY TOUR camera'] for f,p in [(2161,(-9.3,14.0,3.0)),(2280,(-9.6,13.5,2.8))]: cam.location=p; cam.rotation_euler=(Vector((-11.5,11.5,1.55))-cam.location).to_track_quat('-Z','Y').to_euler(); cam.keyframe_insert('location',frame=f); cam.keyframe_insert('rotation_euler',frame=f); cam.data.lens=25; cam.data.keyframe_insert('lens',frame=f) for o in bpy.data.collections['22 PLAY - guided camera tour'].objects: if o.type=='FONT' and o.name.startswith('19 /'):half=36/25; o.location=(-half*.91,half*9/16*.84,-2) s.frame_set(1); s.camera=cam bpy.ops.wm.save_as_mainfile(filepath=os.path.join(OUT,'samford-retreat-garage-tour.blend')) titles=[o for o in bpy.data.collections['22 PLAY - guided camera tour'].objects if o.type=='FONT'] for o in titles:o.hide_render=True prefs=bpy.context.preferences.addons['cycles'].preferences; prefs.compute_device_type='METAL'; prefs.get_devices() for d in prefs.devices:d.use=d.type=='METAL' s.cycles.device='GPU'; s.cycles.samples=40; s.frame_set(2220); s.render.filepath=os.path.join(OUT,'meditation-room.png'); bpy.ops.render.render(write_still=True) for o in titles:o.hide_render=False s.frame_set(1); s.render.filepath=os.path.join(OUT,'retreat-garage-overview.png'); bpy.ops.wm.save_as_mainfile(filepath=os.path.join(OUT,'samford-retreat-garage-tour.blend')) print('MEDITATION_FINAL_READY',flush=True)