물 분자 전체를 실제 물 영역 안에 포함한 r3 시제품 검증

This commit is contained in:
NINI
2026-10-10 01:30:59 +09:00
parent b1d697e320
commit ee3d18be33
20 changed files with 2165 additions and 43 deletions
@@ -6,7 +6,7 @@ import subprocess
from PIL import Image, ImageChops
ROOT = Path(__file__).resolve().parents[3]
BASE = Path('projects/water-hydrogen-bond-surface-tension/stages/08-scenes/r2')
BASE = Path('projects/water-hydrogen-bond-surface-tension/stages/08-scenes/r3')
BLENDER = 'C:/Program Files/Blender Foundation/Blender 5.2/blender.exe'
PYTHON = 'C:/Users/baram/anaconda3/python.exe'
COMPOSITOR = Path('C:/git/ShortVideoGenerator/projects/water-hydrogen-bond-surface-tension/renderer/node_modules/@remotion/compositor-win32-x64-msvc')
@@ -37,6 +37,7 @@ def run(args, records):
if __name__=='__main__':
parser=argparse.ArgumentParser()
parser.add_argument('--kind',choices=['image','video'],required=True)
parser.add_argument('--cut',choices=['c07','c16','c18'])
args=parser.parse_args()
record_path=ROOT/BASE/'cli-commands.json'
records=json.loads(record_path.read_text(encoding='utf-8')) if record_path.exists() else []
@@ -45,13 +46,15 @@ if __name__=='__main__':
record.pop('stderr',None)
artifact=json.loads((ROOT/ARTIFACT).read_text(encoding='utf-8'))
for cut,scene,obj,start,end,boundary in PLAN:
if args.cut and args.cut!=cut:
continue
assert not any(s['id']==cut+'-'+args.kind for s in artifact['payload']['preview']['samples']), '이미 반영한 sample을 같은 버전에서 재생성하지 않는다'
common=[PYTHON,'-B','-X','utf8','tools/blender/run.py']
inspect=run(common+['inspect','--blender',BLENDER,'--source',SOURCE,'--scene',scene,'--require-object',obj],records)
artifact['payload']['preview']['scene_file']=inspect['scene_file']
(ROOT/ARTIFACT).write_text(json.dumps(artifact,ensure_ascii=False,indent=2)+'\n',encoding='utf-8')
options=['--frame',str(boundary)] if args.kind=='image' else ['--start',str(start),'--end',str(end)]
rendered=run(common+['render','--mode','preview','--project',PROJECT,'--artifact',ARTIFACT,'--output-revision','2','--blender',BLENDER,'--source',SOURCE,'--scene',scene,'--require-object',obj,'--cut-id',cut,'--ffmpeg',str(COMPOSITOR/'ffmpeg.exe'),'--ffprobe',str(COMPOSITOR/'ffprobe.exe')]+options,records)
rendered=run(common+['render','--mode','preview','--project',PROJECT,'--artifact',ARTIFACT,'--output-revision','3','--blender',BLENDER,'--source',SOURCE,'--scene',scene,'--require-object',obj,'--cut-id',cut,'--ffmpeg',str(COMPOSITOR/'ffmpeg.exe'),'--ffprobe',str(COMPOSITOR/'ffprobe.exe')]+options,records)
# 실행기의 실제 증거만 미디어 메타데이터로 사용한다.
evidence=rendered
if args.kind=='video':