157 lines
9.2 KiB
Markdown
157 lines
9.2 KiB
Markdown
# Mingle Camera Work AI Unity Package
|
|
|
|
생성할 새 Unity Timeline에서 캐릭터 모션과 원본 음원을 60 FPS로 추출하고,
|
|
완전히 새로 만든 카메라를 비파괴 프리뷰 Timeline으로 불러옵니다. 생성 입력에
|
|
Cinemachine Track이나 기존 카메라 애니메이션은 필요하지 않으며, 존재해도
|
|
생성 입력으로 사용하지 않습니다.
|
|
축적된 작업자 데이터를 재구성하는 고품질 생성 엔진은
|
|
`CWCameraWorker.exe`로 실행됩니다. 워커에 Python 런타임과 라이브러리가
|
|
포함되므로 작업 PC에 Python을 별도로 설치하지 않아도 됩니다.
|
|
동일한 구간과 음원으로 후보 A/B를 녹화하고 Camera AI Review Portal에
|
|
반입할 provenance manifest도 생성합니다.
|
|
|
|
설치와 씬 요구사항은 저장소의 `docs/UNITY_COLLECTION.md`를 참고하세요.
|
|
워커 빌드와 배포 검증은 `docs/CLI_WORKER_PACKAGING.md`에 정리되어 있습니다.
|
|
|
|
Unity Package Manager의 `Add package from git URL`에는 다음 주소를 사용할 수
|
|
있습니다.
|
|
|
|
`https://kindnick-git.duckdns.org/mingle/streamingle-unity-utilities.git?path=/CameraAI~#v0.1.16`
|
|
|
|
배포 패키지에는 Windows x64용 `CWCameraWorker` 폴더 전체가 포함됩니다.
|
|
Python은 따로 설치하지 않아도 되지만, Git 패키지의 대용량 바이너리를 받으려면
|
|
Unity를 열기 전에 Git과 Git LFS를 설치해야 합니다. Worker는 단일 파일 EXE가
|
|
아니므로 `CWCameraWorker.exe`와 같은 폴더의 `_internal` 내용을 함께 유지해야
|
|
합니다.
|
|
|
|
카메라 생성에 필요한 준비된 참조 카메라·모션 데이터와 컷 모델은 패키지의
|
|
읽기 전용 `RuntimeData~`에 포함됩니다. 별도의 `CW-AI` 체크아웃은 필요하지
|
|
않습니다. 더 최신의 권한 제어 데이터가 있다면 `CWAI_ROOT` 환경 변수, Unity
|
|
프로젝트 옆의 `CW-AI` 폴더 또는 생성 창의
|
|
`고급 · 진단 > 참조 데이터 루트`에서 선택적으로 덮어쓸 수 있습니다.
|
|
상세 설치 절차는 `Documentation~/EXTERNAL_INSTALLATION.md`를 참고하세요.
|
|
참조 데이터는 읽기 전용이어도 됩니다. 반복 생성 캐시는 기본적으로 현재 Unity
|
|
프로젝트의 `Library/CWAI`에 저장되며, 필요하면 `CWAI_CACHE_ROOT` 환경 변수로
|
|
별도의 쓰기 가능한 위치를 지정할 수 있습니다.
|
|
|
|
메뉴:
|
|
|
|
- `Tools/Streamingle/AI 카메라 생성`
|
|
- `Tools/Streamingle/Timeline/Export Camera Dataset (60 FPS)`
|
|
- `Tools/Streamingle/Timeline/Create AI Camera Preview`
|
|
- `Tools/Streamingle/Timeline/Remove AI Camera Preview`
|
|
- `Tools/Streamingle/Timeline/Render AI Camera A-B`
|
|
|
|
## 카메라 생성
|
|
|
|
일반 작업자는 다음 세 단계만 사용하면 됩니다.
|
|
|
|
1. `Tools > Streamingle > AI 카메라 생성`을 엽니다.
|
|
2. 모션 트랙과 Audio Track만 들어 있는 `원본 Timeline`을 선택하고
|
|
`새 카메라 생성하기`를 누릅니다. 입력 추출, 새 카메라 생성과 Timeline
|
|
반영이 자동으로 이어집니다. 실행 중에는 현재 단계, 경과 시간과 예상
|
|
남은 시간 범위가 표시됩니다.
|
|
3. 결과를 확인한 뒤 Timeline의 생성 카메라 clip 또는 Hierarchy의 카메라를
|
|
선택하고 필요하면 `선택한 카메라만 다시 생성` 또는
|
|
`완성본 씬으로 저장`을 누릅니다.
|
|
|
|
Timeline이 하나뿐이면 자동으로 선택됩니다. 특별한 연출 의도가 없다면
|
|
`연출 설정 (선택)`도 열 필요가 없습니다. 샷 거리, 움직임, 인물 구도와
|
|
강도를 직접 지정하려는 경우에만 펼칩니다.
|
|
|
|
경로, 워커 실행 파일, 내부 입력 ID, Seed, 캐시, 수동 가져오기와 로그는
|
|
`고급 설정 및 관리` 안에 있습니다. 기본 생성에서는 입력할 필요가 없습니다.
|
|
|
|
기본 화면에는 `데이터셋 곡`을 고르는 절차가 없습니다. 여기서 “입력”은 지금
|
|
선택한 새 Timeline 한 개이고, 고품질 워커가 내부적으로 참고하는 누적
|
|
작업자 카메라 데이터는 별도의 참조 라이브러리입니다. 새 Timeline을 그
|
|
라이브러리 안의 기존 곡과 연결하거나 기존 카메라를 정답으로 제공할 필요가
|
|
없습니다.
|
|
|
|
배포된 워커는 다음 명령을 제공합니다. Unity 생성 창은 `generate`와
|
|
`prepare-cache`를 호출하고, 설치·배포 확인에는 `version`과 `doctor`를
|
|
사용합니다.
|
|
|
|
```powershell
|
|
CWCameraWorker.exe version --json
|
|
CWCameraWorker.exe doctor
|
|
CWCameraWorker.exe prepare-cache --help
|
|
CWCameraWorker.exe generate --help
|
|
```
|
|
|
|
`version --json`은 워커의 CLI 계약 버전을 확인하고, `doctor`는 배포 파일과
|
|
필수 데이터 경로를 진단합니다. `prepare-cache`는 반복 생성용
|
|
준비 캐시를 구성하며, `generate`는 전체 생성과 선택 샷 재생성을 처리합니다.
|
|
|
|
전체 결과는 카메라별 CinemachineCamera, Animator, Animation Track과 `.anim`으로
|
|
1:1 분리됩니다. 각 카메라의 Transform/Track Offset과 커브를 다른 샷에 영향을
|
|
주지 않고 조정할 수 있습니다. 선택 샷 재생성은 기존 clip GUID와 컷 경계를
|
|
유지하고 나머지 샷을 보존합니다. `Balanced` 또는 `Editable` 키 단순화를
|
|
선택하면 위치·Quaternion·렌즈 오차 한도 안에서 키가 축약됩니다.
|
|
|
|
예상 시간은 Timeline 길이와 준비·후보 캐시 상태를 기준으로 범위로 표시합니다.
|
|
같은 PC에서 완료된 전체 생성과 선택 샷 생성 시간을 별도로 누적해 이후 예측을
|
|
보정합니다. 준비 캐시 생성 시간은 실제 카메라 생성 기록에 섞지 않습니다.
|
|
|
|
처음 실행하는 PC에서는 `고품질 생성 준비 캐시 만들기 / 갱신`을
|
|
한 번 실행합니다. 준비 모델 seed와 후보 seed는 분리되어 있으므로 이후
|
|
선택 샷 재생성에서 seed가 바뀌어도 같은 무결성 검증 캐시를 재사용합니다.
|
|
|
|
`Seed`는 안전 검사를 통과하고 최종 화면에서 서로 구별되는 카메라
|
|
후보 중 하나를 결정론적으로 선택합니다. 같은 Seed와 입력은 같은 결과를
|
|
재현하며, 안전한 구별 후보가 둘 이상이면 인접 Seed는 다른 후보를 선택합니다.
|
|
후보는 최고 안전 후보와의 선택 점수 차이가 허용 범위 안인 경우에만 사용되어,
|
|
다양성을 위해 구도 품질을 과도하게 낮추지 않습니다.
|
|
다음 샷의 계획 문맥은 최고 안전 후보로 고정되므로, 앞 샷에서 Seed로 고른
|
|
후보가 뒤 샷의 후보 풀을 바꾸어 다시 같은 카메라로 수렴하지 않습니다.
|
|
명시한 `static` 연출은 유지되고, 안전한 구별 후보가 하나뿐인 샷은 Seed를
|
|
바꿔도 같을 수 있습니다. 기존 결과를 다시 적용하는 기능은 새 후보를 생성하지
|
|
않으므로 Seed를 사용하지 않습니다.
|
|
|
|
`metadata.json`의 샷별 `variationSeed`, `variationPoolSize`,
|
|
`variationIndex`, `variationApplied`, `variationQualityEligibleCandidateCount`,
|
|
`variationSelectedScoreDeltaFromBest`, `sequenceContinuationPolicy`와 전체 요약
|
|
`seedVariationPolicy`,
|
|
`seedVariationAppliedShotCount`, `seedVariationPoolSizeMinMedianMax`로 Seed가
|
|
실제로 적용된 범위와 후보 풀이 하나뿐이었던 예외를 확인할 수 있습니다.
|
|
|
|
생성된 회전은 AnimationClip에 굽고 런타임 LookAt이나 Tracking Target을
|
|
사용하지 않습니다. 캐릭터 관절 envelope와 의미 기반 구도를 검증하며,
|
|
안전한 후보가 없으면 결과 생성을 중단합니다. 사용자가 `static` 또는
|
|
움직임 강도 0을 명시했을 때는 정지 의도를 유지합니다.
|
|
|
|
가져오기, 제거, 전체/선택 샷 재생성은 모두 같은 원본 Director scope만
|
|
사용합니다. 씬에 사용할 수 있는 `Timeline` Director가 하나뿐이면 자동으로
|
|
선택됩니다.
|
|
|
|
`현재 씬을 AI Camera Final 복사본으로 저장`은 preview Timeline과 생성된 `.anim`
|
|
파일을 Final 전용 asset 폴더로 복제하고, 복사된 씬이 그 복제본을 참조하게 합니다.
|
|
따라서 이후 작업 씬에서 preview를 제거하거나 재생성해도 Final 씬의 참조가 끊기지
|
|
않습니다.
|
|
|
|
샷별 JSON 예시는 `Samples~/CameraDirections/camera_directives.example.json`
|
|
에 있습니다.
|
|
|
|
## A/B 렌더
|
|
|
|
1. 씬과 Timeline을 저장합니다.
|
|
2. 두 생성 결과 디렉터리의 `metadata.json`, `world_camera.f32`,
|
|
`time.f64`, 선택적인 `shots.json`이 완전한지 확인합니다.
|
|
3. A/B 렌더 창에서 두 디렉터리와 `[startFrame, endFrameExclusive)`
|
|
구간을 선택합니다.
|
|
4. 렌더러는 두 후보의 sample rate, frame count, `time.f64`, song ID,
|
|
evaluation group, aspect ratio가 같은지 먼저 검증합니다.
|
|
5. 후보마다 원본 씬을 다시 열고 Preview Timeline을 만든 뒤, 기존
|
|
RecorderTrack은 mute하고 MainCamera와 Timeline audio를 녹화합니다.
|
|
6. 완료 폴더의 `manifest.json`과 두 영상을 웹 포털에 함께 반입합니다.
|
|
|
|
작업 상태는 `Library/CWAI/ABRender/active_job.json`에 저장되어 Play Mode
|
|
domain reload 뒤에도 이어집니다. 실패·취소 시 원본 scene setup을
|
|
복구하며, 원본 Timeline과 생성 카메라 파일은 수정하지 않습니다.
|
|
|
|
UniCLI 공개 진입점:
|
|
|
|
- `AICameraABRenderRunner.StartABRenderForCli(...)`
|
|
- `AICameraABRenderRunner.GetABRenderStatusForCli(jobId)`
|
|
- `AICameraABRenderRunner.CancelABRenderForCli(jobId)`
|