1 배경 / 목적
EgoX를 비전공자에게 보여줄 발표 상영용 설명 영상이 필요하다. 전달 내용은 네 문장이다: 밖에서 찍은 영상 한 편이 있다 → 3D 공간으로 세운다 → 카메라를 주인공 눈으로 옮긴다(안 보이던 곳은 비어 있다) → AI가 원본을 참고해 빈 곳을 채운다. 내용이 단순한 만큼 화면 완성도가 중요하고, 영상의 중심인 "눈으로 날아 들어가는 컷"을 그림이 아닌 실제 클립 데이터로 렌더하기로 했다.
| 항목 | 결정 |
| 규격 | 16:9, 1920x1080, 30fps, 약 80초, 무음 |
| 자막 | 큰 한글 자막, 한 컷에 한 문장. "3D 공간 / 밑그림 / AI"만 사용 |
| 구성 | 훅 → 문제 → ① 3D로 세움 → ② 눈으로 이동 → ③ AI가 채움 → 결과 몽타주 → 엔딩 (7컷) |
| 제작 방식 | 자체 GPU 포인트 렌더러 + Remotion 합성. 이후 핵심 컷의 Blender 상향은 별도 검토 |
2 작업 내용
explainer/render3d/scene.py — exo 영상(784x448, 49프레임) + depth + 카메라 파라미터로 프레임별 3D 점 생성. 불량 depth 픽셀 제거, 프레임 수 불일치 시 즉시 오류.
splat.py — z-buffer 원판 스플랫. 픽셀마다 (depth 30비트, 점 인덱스 22비트)를 int64 하나로 묶어 scatter_reduce(amin). 점 반지름을 원본 픽셀의 실제 크기에 비례시켜 원래 시점에서는 빈틈이 없고, 시점이 바뀌면 가려졌던 곳만 구멍으로 남는다.
shots.py — flyin(exo 카메라 → 조망 위치 → 주인공 눈), lift(평면 → 3D). 49프레임 클립은 절반 속도 왕복 재생.
post.py — 배경, 피사계 심도, 블룸, 비네트.
ego 카메라 방향에 90° roll. 저장된 ego_extrinsics(world-to-camera)를 그대로 쓰면 화면이 옆으로 눕는다. roll 4가지로 렌더해 실제 prior와 대조하고 EGO_ROLL_DEG = 90으로 고정했다.
Figure 1: 왼쪽부터 실제 prior, roll 0 / 90 / 180 / 270. 위에서부터 조커, 아이언맨, 홀란드. 세 행 모두 roll 90 열이 prior와 같은 방향이다.
Remotion 사용 가능. 헤드리스 Chromium에 없던 것은 libnss3, libnssutil3, libnspr4 3개뿐. conda-forge nss nspr를 개인 env에 설치해 LD_LIBRARY_PATH로 연결. Pretendard 폰트 파일로 한글 자막 1080p 렌더 확인.
3 결과
Figure 2: 조커 fly-in 150프레임 중 0, 30, 60, 90, 120, 140번째. 주황 링이 머리 위치, 청록 선이 원래 카메라. 인물 뒤 검은 영역이 원래 영상에서 가려져 있던 곳이다.
Figure 3: 조커 lift(평면 → 3D) 0, 50, 90, 140번째 프레임.
Figure 4: 10클립 비교. 열은 원본, fly-in 0 / 57 / 105 / 149번째 프레임, 실제 prior, 생성 결과. 149번째(도착)와 prior 열의 구도가 같다.
| 클립 | 조망 컷 3D 가독성 | 도착 시점 | 생성 결과 | 평가 |
| tabletennis | 탁구대·두 선수 뚜렷 | 탁구대와 상대 선수 정면 | 선명 | 후보 1 |
| joker | 인물 뒤 구멍이 뚜렷 | 손과 도로를 내려다봄 | 양손이 보임 | 후보 2 |
| yamamoto | 타석·포수·관중 뚜렷 | 투수 쪽 | 선명 | 후보 3 |
| djokovic | 코트 전체 | 코트·상대 선수 | 파란/초록 톤 | 결과 색 문제 |
| halland | 경기장 넓게 | 골대·관중석 | 어두운 파란 톤 | 결과 색 문제 |
| hulk_blackwidow | 보통 | 나무 위주 | 선명 | 도착 시점 약함 |
| spiderman_stanlee | 보통 | 책상 위 | 선명 | 중간 구간 빈 화면 |
| breakingbadS5E8 | 보통 | 돈더미 | 양호 | 중간 구간 빈 화면 |
| ironman | 너무 가까워 점이 흩어짐 | 팔·얼굴이 화면을 가림 | 양호 | 3D 컷 부적합 |
| ironman_captain | 인물 겹침 | 바닥 위주 | 파란 톤 | 부적합 |
확인된 문제. (1) fly-in 105번째 프레임 부근에서 카메라가 장면 밖을 향해 화면이 거의 비는 클립이 있다(ironman, spiderman_stanlee, breakingbadS5E8) — 조망 방향과 ego 방향을 단순 Slerp로 잇기 때문. (2) 원래 카메라 표시가 대부분 화면 밖. (3) 0.85초/프레임은 960x540 기준이라 1080p에서는 더 느리다.