38 lines
2.7 KiB
Python
38 lines
2.7 KiB
Python
import bpy,os,json,math
|
|
from mathutils import Vector
|
|
O=os.path.abspath(os.path.join(os.path.dirname(__file__),'..'));s=bpy.context.scene
|
|
for c in ['22 PLAY - guided camera tour','15 Expansion labels - toggle to hide']:
|
|
for o in bpy.data.collections[c].objects:
|
|
if o.type=='FONT':o.hide_render=True
|
|
cam=s.camera;cam.animation_data_clear();cam.data.animation_data_clear();cam.data.dof.use_dof=False
|
|
# Eight compact camera movements; no fly-through through walls or furniture.
|
|
shots=[
|
|
('A home in the garden',(35,43,29),(32,40,27),(0,-3,1),38),
|
|
('Timber verandah and open living',(7,11,3.3),(5.8,9.7,3.1),(0,1.5,2.1),31),
|
|
('Kitchen / natural materials',(1.5,2.35,2.85),(.7,2.1,2.75),(-3.5,-1.3,2.15),27),
|
|
('Room for shared meals',(17,9,4.3),(16,8.2,4.0),(10,3.5,1.9),36),
|
|
('A private sleeping wing',(-6.4,.7,4.2),(-7.3,.4,3.9),(-12,-5,2),34),
|
|
('Meditation in the garden',(-6.9,18.5,3),(-7.7,17.7,2.6),(-12.4,15.35,.65),42),
|
|
('Growing food / collecting water',(34,15,17),(32,13,15),(21,-3,1),37),
|
|
('Space to grow over time',(23,33,20),(20,30,18),(0,13,1),35)]
|
|
s.render.fps=24;s.frame_start=1;s.frame_end=8*72
|
|
for i,(label,a,b,target,lens) in enumerate(shots):
|
|
start=i*72+1;end=(i+1)*72
|
|
for f,p in [(start,a),(end,b)]:
|
|
cam.location=p;cam.rotation_euler=(Vector(target)-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=lens;cam.data.keyframe_insert('lens',frame=f)
|
|
for owner in [cam,cam.data]:
|
|
for layer in owner.animation_data.action.layers:
|
|
for strip in layer.strips:
|
|
for bag in strip.channelbags:
|
|
for fc in bag.fcurves:
|
|
for k in fc.keyframe_points:k.interpolation='LINEAR'
|
|
s.render.engine='CYCLES';s.cycles.samples=12;s.cycles.use_denoising=True;s.cycles.use_adaptive_sampling=True;s.cycles.adaptive_threshold=.08;s.render.resolution_x=1920;s.render.resolution_y=1080;s.render.resolution_percentage=100;s.render.image_settings.file_format='PNG';s.render.filepath=O+'/video/frames/frame_';s.render.film_transparent=False
|
|
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.use_persistent_data=True;s.frame_set(1)
|
|
bpy.ops.wm.save_as_mainfile(filepath=O+'/samford-client-cinematic.blend')
|
|
json.dump([dict(title=sh[0],start=i*72+1,end=(i+1)*72,seconds=3) for i,sh in enumerate(shots)],open(O+'/video/cinematic-shots.json','w'),indent=2)
|
|
# Compare a real-time preview frame before choosing the final video renderer.
|
|
s.render.engine='CYCLES';s.cycles.samples=12;s.frame_set(145);s.render.filepath=O+'/renders/cinematic-kitchen-test.png';bpy.ops.render.render(write_still=True)
|
|
print('CINEMATIC_PREPARED',flush=True)
|