import bpy, bmesh, math, json, os from mathutils import Vector OUT=os.path.dirname(os.path.abspath(__file__)); s=bpy.context.scene # Clear grass from the new vehicle surfaces and garage interior. route=[(36,-40),(28,-33),(22,-27),(8,-26),(5,-22),(5,-13),(1,-12),(-3,-12)] segments=[] for a,b in zip(route,route[1:]): dx,dy=b[0]-a[0],b[1]-a[1]; segments.append((a[0],a[1],dx,dy,dx*dx+dy*dy)) def clear(x,y): if -7.2.01 report['all_23_chapters_animate']=True; json.dump(report,open(os.path.join(OUT,'design-checks.json'),'w'),indent=2) s.camera=tour; s.frame_set(1) for screen in bpy.data.screens: for area in screen.areas: if area.type=='VIEW_3D': area.spaces.active.region_3d.view_perspective='CAMERA'; area.spaces.active.shading.type='SOLID'; area.spaces.active.shading.color_type='MATERIAL'; area.spaces.active.overlay.show_overlays=False s.render.engine='CYCLES'; s.render.resolution_percentage=100; s.cycles.samples=48; s.cycles.use_denoising=True; s.cycles.adaptive_threshold=.035 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.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')) # Captions are useful during playback, but photographs use clean architectural views. 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 s.camera=cam; bpy.ops.render.render(write_still=True); print('OVERVIEW_RENDERED',flush=True) s.camera=tour; s.frame_set(2220); s.render.filepath=os.path.join(OUT,'meditation-room.png'); bpy.ops.render.render(write_still=True); print('MEDITATION_RENDERED',flush=True) s.frame_set(2460); s.render.filepath=os.path.join(OUT,'garage-workstation-bikes.png'); bpy.ops.render.render(write_still=True); print('GARAGE_RENDERED',flush=True) for o in titles:o.hide_render=False s.camera=tour; 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('FINAL_RETREAT_READY_TO_PLAY',flush=True)