"""Fictional scan/database HUD for synthetic 3D visitors; no biometric processing.""" import bpy, os ROOT=os.path.dirname(os.path.dirname(os.path.abspath(__file__))) OUT=os.path.join(ROOT,'preview','v4') bpy.ops.wm.read_factory_settings(use_empty=True);s=bpy.context.scene s.render.resolution_x=1280;s.render.resolution_y=720;s.render.resolution_percentage=100;s.render.fps=24;s.frame_start=1;s.frame_end=480 s.view_settings.view_transform='Standard';s.sequence_editor_create();seq=s.sequence_editor.sequences seq.new_movie('Existing animation',os.path.join(OUT,'halloween_dark_groan.mp4'),channel=1,frame_start=1) seq.new_sound('Existing moan and atmosphere',os.path.join(OUT,'effects_with_groan.wav'),channel=2,frame_start=1) channel=3 def text(name,body,start,end,x,y,size=24,color=(.4,1,.8,1)): global channel o=seq.new_effect(name,type='TEXT',channel=channel,frame_start=start,frame_end=end);channel+=1 o.text=body;o.font_size=size;o.color=color;o.location=(x,y);o.align_x='LEFT';o.align_y='TOP';o.use_shadow=True;o.shadow_color=(0,0,0,1) return o def bar(name,start,end,x,y,w,h,color): global channel o=seq.new_effect(name,type='COLOR',channel=channel,frame_start=start,frame_end=end);channel+=1;o.color=color o.transform.scale_x=w/1280;o.transform.scale_y=h/720;o.transform.offset_x=x-640;o.transform.offset_y=y-360 return o # Scan overlay on fictional figures: static stylized boxes, intentionally not a real detector. bar('Scan header',198,274,640,665,1280,90,(.006,.018,.025)) text('Scan title','SIMULIERTER GESICHTSSCAN',198,274,.035,.96,30) text('Permanent simulation label','3D-DEMO / KEINE REALEN GESICHTSDATEN',198,274,.035,.90,18,(.9,.9,.9,1)) for i,(x,y,w,h) in enumerate([(765,345,68,78),(819,334,68,78),(969,425,90,100),(1140,417,90,100)]): for xx,yy,ww,hh in [(x-w/2,y,2,h),(x+w/2,y,2,h),(x,y-h/2,w,2),(x,y+h/2,w,2)]:bar('Synthetic head frame',198,274,xx,yy,ww,hh,(.08,.6,.38)) text('Synthetic figure label','DEMO %02d'%(i+1),198,274,(x-w/2)/1280,(y+h/2+22)/720,15) line=bar('Scan sweep',198,246,640,475,1100,2,(.05,.6,.35)) line.transform.offset_y=110;line.transform.keyframe_insert('offset_y',frame=198) line.transform.offset_y=-155;line.transform.keyframe_insert('offset_y',frame=245) text('Scan progress','DEMO-BILDAUSSCHNITTE WERDEN VORBEREITET ...',198,246,.04,.13,22) text('Scan completed','4 FIKTIVE 3D-FIGUREN / DEMO-SCAN ABGESCHLOSSEN',246,274,.04,.13,22) # Later simulated database write, using invented records only. bar('Database panel',405,481,365,365,690,540,(.007,.019,.025)) text('Database title','DEMO-DATENBANK',405,481,.045,.84,32) text('Database subtitle','Fiktive Scan-Datensaetze der 3D-Figuren',405,481,.045,.77,20,(.8,.85,.9,1)) for i in range(4): f=410+i*10 text('Record '+str(i),'DEMO-%03d | 3D-Gesichtsausschnitt | GESPEICHERT'%(i+1),f,481,.045,.66-i*.07,19) text('Write confirmation','SCHREIBVORGANG ABGESCHLOSSEN',451,481,.045,.32,24) text('Database simulation notice','SIMULATION: keine Erkennung, keine echte Datenbank.',405,481,.045,.23,18,(.85,.85,.85,1)) s.render.image_settings.file_format='FFMPEG';s.render.ffmpeg.format='MPEG4';s.render.ffmpeg.codec='H264';s.render.ffmpeg.constant_rate_factor='HIGH';s.render.ffmpeg.audio_codec='AAC';s.render.ffmpeg.audio_bitrate=192 s.render.filepath=os.path.join(OUT,'halloween_scan_demo.mp4') bpy.ops.wm.save_as_mainfile(filepath=os.path.join(OUT,'halloween_scan_demo.blend')) bpy.ops.render.render(animation=True) s.render.image_settings.file_format='PNG' for f in [225,465]: s.frame_set(f);s.render.filepath=os.path.join(OUT,'scan_demo_%03d.png'%f);bpy.ops.render.render(write_still=True)