사용자 가이드

2장 — 인스펙터 (Expert View)

Expert 모드 비어 있음 — 왼쪽에 Images/Cameras/Log가 있는 Project Navigator, 헤더 「Images (0)」과 드롭 영역 「Drop images here / or tap + to import」, 가운데는 빈 뷰포트, 오른쪽에는 여섯 개의 접힌 섹션(Presets, Cameras & Capture, Training, Progress, Look, Export)이 있는 Inspector, 각 섹션에는 제목과 회색 단계 부제목이 있음; 하단에는 녹색 시작 버튼과 빨간 정지 버튼이 있는 「Idle」 상태 표시줄
Expert 모드 비어 있음 — 왼쪽에 Images/Cameras/Log가 있는 Project Navigator, 헤더 「Images (0)」과 드롭 영역 「Drop images here / or tap + to import」, 가운데는 빈 뷰포트, 오른쪽에는 여섯 개의 접힌 섹션(Presets, Cameras & Capture, Training, Progress, Look, Export)이 있는 Inspector, 각 섹션에는 제목과 회색 단계 부제목이 있음; 하단에는 녹색 시작 버튼과 빨간 정지 버튼이 있는 「Idle」 상태 표시줄

가져오기 전 비어 있는 인스펙터: 왼쪽 열에는 Images, Cameras, Log 항목이 표시되고, 그 아래에는 헤더 「Images (0)」과 드롭 영역 「Drop images here / or tap + to import」가 있다. 가운데 뷰포트는 비어 있다. 오른쪽에는 여섯 개의 접힌 섹션이 있는 Inspector가 있다: Presets, Cameras & Capture, Training, Progress, Look, Export. 각 제목 아래에는 회색 줄이 해당 섹션이 무엇을 하고 언제 작동하는지 알려준다 — 「Ready-made recipes — they replace the training settings」(Presets), 「Before training · decides how camera positions are solved · applies to the next run」(Cameras & Capture), 「Before training · drives scene build-up and optimization · applies to the next run」(Training), 「Display only」(Progress), 「After training · applies immediately · reversible any time」(Look), 「Leveling the floor turns the view at once; the chosen orientation and format apply when saving」(Export). 맨 아래에는 상태 표시줄이 「Idle」 상태와 녹색 시작 버튼, 빨간 정지 버튼과 함께 표시된다; 오른쪽 위에는 Simple/Expert 전환 스위치가 있으며, 여기서는 Expert로 설정되어 있다.

35개의 이미지가 가져와진 인스펙터 — 헤더 「Images (35)」, 오름차순 파일명 IMG_0953.JPG, 뷰포트는 아직 비어 있음, 상태는 「Idle」
35개의 이미지가 가져와진 인스펙터 — 헤더 「Images (35)」, 오름차순 파일명 IMG_0953.JPG, 뷰포트는 아직 비어 있음, 상태는 「Idle」

가져오기 후 인스펙터: 이미지 목록의 헤더에는 「Images (35)」가 표시되고, 그 아래에 가져온 사진들이 IMG_0953.JPG부터 오름차순 파일명으로 나열된다. 이 테스트 세트의 이미지는 4032×3024 픽셀 해상도를 가지며, Auto-Render-Scale 로직이 이 해상도를 읽어 그에 맞는 Render Scale을 제안한다. 뷰포트는 아직 비어 있고, 상태 표시줄은 「Idle」이다. 왼쪽 아래의 녹색 시작 버튼이 이제 활성화되어 있으며, 이를 누르면 활성 Preset으로 트레이닝이 시작된다.

훈련 중인 인스펙터 — 타이틀바 「RadianceKit — Training 23%」, 뷰포트에는 양가죽 위 천 오리 인형의 실시간 미리보기, 진행률 4,700/20,000, ETA 1m9s, 메트릭 바 Loss 0.0109 / LR 2.0e-04 / SH 1 / Gaussians 16.0K, 인스펙터에서 「Balanced 20K iters」가 녹색으로 표시된 펼쳐진 CLASSIC 그룹
훈련 중인 인스펙터 — 타이틀바 「RadianceKit — Training 23%」, 뷰포트에는 양가죽 위 천 오리 인형의 실시간 미리보기, 진행률 4,700/20,000, ETA 1m9s, 메트릭 바 Loss 0.0109 / LR 2.0e-04 / SH 1 / Gaussians 16.0K, 인스펙터에서 펼쳐진 CLASSIC 그룹에 「Balanced 20K iters」가 녹색으로 표시됨

훈련 중 인스펙터: 타이틀바에는 전체 진행률이 표시되며, 여기서는 「RadianceKit — Training 23%」이다. 뷰포트는 진행 중인 재구성을 실시간으로 렌더링한다 — 양가죽 위의 천 오리 인형이 이미 뚜렷하게 알아볼 수 있게 나타난다(실시간 미리보기의 갱신 간격은 Settings → General → Training → Live Preview에서 설정할 수 있다). 뷰포트 아래에는 진행률(「4,700/20,000」, 「ETA 1m9s」)과 Loss 0.0109, LR 2.0e-04, SH 1, Gaussians 16.0K로 구성된 메트릭 바가 표시된다; 왼쪽 아래에는 일시정지 및 정지 버튼이 있다. 인스펙터에서는 CLASSIC 그룹이 펼쳐져 있고, 「Balanced 20K iters」에 녹색 체크 표시가 있다. 「Modified」 배지는 파라미터가 Preset에서 벗어날 때만 표시되는데 — 여기서는 보이지 않는다. 사이드바의 「Log」는 SfM 및 트레이닝 단계 이벤트를 모은다.

훈련 완료 후 인스펙터 — 타이틀바 「RadianceKit — Training Complete — 8,708 Gaussians」, 왼쪽에 8,708 Gaussians가 표시된 「Complete」, Images 25 및 Cameras 35, 상태 표시줄 「Completed」 20,000/20,000, 메트릭 바 Loss 0.0075 / LR 0.0e+00 / SH 3 / Gaussians 9.7K, 뷰포트에는 오리의 완성된 재구성이 화면 전체를 채움
훈련 완료 후 인스펙터 — 타이틀바 「RadianceKit — Training Complete — 8,708 Gaussians」, 왼쪽에 「Complete」와 8,708 Gaussians, Images 25 및 Cameras 35, 상태 표시줄 「Completed」 20,000/20,000, 메트릭 바 Loss 0.0075 / LR 0.0e+00 / SH 3 / Gaussians 9.7K, 뷰포트에는 오리의 완성된 재구성이 화면 전체를 채움

훈련 후 인스펙터: 타이틀바에는 결과가 표시된다: 「Training Complete — 8,708 Gaussians」. 왼쪽 열에는 같은 숫자와 함께 「Complete」가 표시되고, Images 25와 Cameras 35도 나온다 — 이미지가 25장인 이유는 Frame-Quality 대화상자가 35장 중 흔들린 사진 열 장을 걸러냈기 때문이다. 상태 표시줄은 20,000/20,000에서 「Completed」를 알리고, 메트릭 바는 Loss 0.0075, LR 0.0e+00, SH 3, Gaussians 9.7K를 보여준다. 뷰포트는 완성된 포인트 클라우드를 화면 전체에 채워 표시한다 — 오비탈 드래그 내비게이션이 활성화되어 있다(장면 중심을 기준으로 회전).

여기서 두 가지 서로 다른 Gaussian 개수가 나오는 것은 의도된 것이다: 메트릭 바와 Training Metrics는 트레이닝 종료 시점의 값을 나타내고(여기서는 9,660, 반올림하면 9.7K), 타이틀바와 장면은 자동 정리 과정 이후의 값(8,708)을 나타낸다. 그 사이에는 Post-Training Compactification과 바늘 및 원반 모양 스플랫의 제거 과정이 있다. 더 작은 숫자가 뷰포트에 표시되고 내보낼 때 저장되는 숫자다. Training Metrics와 Loss History 그룹은 이제 최종 값으로 채워져 있고, Export 섹션은 활성화되어 있다.

인스펙터는 Expert Mode(⌘2)의 오른쪽 사이드바이다. 트레이닝과 관련된 모든 파라미터를 여섯 개의 접을 수 있는 섹션으로 묶으며, 2026-07-18부터 영역별로 그룹화되어 있다. 위에서 아래로의 기본 순서는 다음과 같다: Presets, Cameras & Capture, Training, Progress, Look, Export. 각 제목 아래에는 단계를 알려주는 두 번째 줄이 있다 — 해당 섹션이 언제 작동하고 얼마나 되돌릴 수 있는지를 나타낸다(예: Cameras & Capture의 「Before training · decides how camera positions are solved · applies to the next run」, Look의 「After training · applies immediately · reversible any time」, Progress의 「Display only」). 예전에 있던 두 개의 섹션은 합쳐졌다: MetricsLoss Graph는 이제 Progress 안에서 각각 접을 수 있는 별도 그룹(「Training Metrics」와 「Loss History」)이 되었고, 예전의 Enhancements 섹션은 완전히 Training 안에 들어갔다. 「Look」 섹션(훈련 후 이미지 조정)은 예전 「Finishing」 섹션이 실제 UI에서 이름이 바뀐 것이다 — 호환성을 위해 내부 이름은 여전히 「Finishing」으로 남아 있고, 표시되는 제목은 「Look」이다(같은 방식으로 Training은 내부적으로 「Training Configuration」이라는 이름을 갖는다). 각 섹션은 헤더를 클릭해 접을 수 있고, 순서는 드래그 앤 드롭으로 다시 정렬할 수 있다. 처음 실행 시에는 섹션이 접혀 있다 — 위 이미지에서는 여섯 개 모두 닫혀 있다; 이후로는 App-State가 접힘 및 순서 설정을 앱 재실행 후에도 저장한다. 이미 저장된 예전 배치는 처음 실행 시 한 번만 새로운 그룹화로 마이그레이션된다; Viewport ▸ Reset Inspector Layout은 출고 시 상태로 되돌린다.

인스펙터의 여러 컨트롤 요소는 설정(3장)에도 거의 동일한 형태로 등장한다 — 대표적으로 SfM 백엔드, Sky-Masking 및 비슷한 기본값들이다. 이 분리는 의도된 것이다: 설정은 새로 생성되는 프로젝트를 위한 앱 전역 템플릿을 제공하고, 인스펙터는 현재 열려 있는 프로젝트에 대해 이 값을 덮어쓴다. 한쪽의 조작 논리를 알고 있으면 다른 쪽도 그대로 사용할 수 있다.

Expert Mode의 왼쪽 열 — Project Navigator — 는 인스펙터에 속하지는 않지만 바로 옆에 있다. 여기서는 가져온 이미지를 클릭으로 선택하고, 스페이스바로 Quick Look에서 볼 수 있으며, 마이너스 버튼이나 삭제 키로 제거할 수 있다(Cmd-Z로 되돌리기 가능). 인스펙터는 현재 사이드바 선택을 따라가며 그에 맞는 세부 정보를 보여주지만, 일곱 개의 주요 섹션은 항상 사용 가능한 상태로 남아 있다.

Look 섹션 (L1–L5)

Look 섹션(내부적으로는 여전히 "Finishing"이라 불림)은 도메인 재구성 이후 다섯 번째 Inspector 섹션이 되었으며 — 진행 상황과 내보내기 사이에 위치하고 — 학습 이후의 이미지 조정을 한곳에 모아 놓았다. 모든 슬라이더는 비파괴적으로 동작한다. 각 슬라이더는 Look 계산을 변경되지 않은 Pristine 스냅샷(원본 DC 색상, Opacity, 스케일)에 매번 새로 적용하므로 — 이 조정은 누적되지 않고 멱등적이다. 결과는 뷰포트에 실시간으로 표시되며(WYSIWYG, 나중의 내보내기와 정확히 동일), 모든 내보내기에 반영된다. 이 섹션은 학습 실행이 완료된 후에만 사용할 수 있으며(그전에는 "Available after a training run completes."라는 문구가 표시됨), 값은 새로운 학습을 시작할 때마다 초기화된다. 내보내기가 진행되는 동안에는 모든 슬라이더가 잠기며 — "Locked while exporting — the file uses the current settings."라는 잠금 안내가 표시되고 GroupBox는 비활성화된다.

L1Saturation 슬라이더

위치

Inspector → Look 섹션 → GroupBox → Saturation.

기술적 설명

슬라이더 범위 0.5–1.2, 소수점 둘째 자리까지 표시(예: "1.00"). 각 Splat의 SH-DC 채도를 휘도 값을 기준으로 스케일링한다: 1.0 = 변화 없음, < 1.0 = 채도 감소(색상을 회색조 쪽으로 끌어당김), > 1.0 = 더 강렬해짐. 수학적으로 DC 색상은 Pristine 스냅샷에서부터 다시 계산되므로 슬라이더를 반복해서 움직여도 값이 누적되지 않는다. 지나치게 강조된 색을 보이는 경향이 있는 DJI 드론 촬영 소재(Pensford 고가교)로 검증되었으며 — 드론 기본값은 0.82이다. 오직 색상 기반(SH 0차)에만 영향을 미치며, 상위 SH 계수는 영향을 받지 않는다.

L2Splat length 슬라이더

위치

Inspector → Look 섹션 → GroupBox → Splat length.

기술적 설명

슬라이더 범위 0.3–1.0, 소수점 둘째 자리까지 표시. 각 Gaussian의 세 스케일 축을 로그 공간에서 평균값 쪽으로 끌어당긴다(값이 작을수록 강도가 세짐): 1.0 = 변화 없음, 값이 작을수록 길쭉한 "바늘" 모양 Splat이 더 둥글어지며, 0이면 완전한 구가 된다. 전체 크기를 바꾸지 않으면서 바늘 모양의 지나치게 늘어난 Splat만 다루므로, 전형적인 "콘페티" 아티팩트가 줄어든다. Pristine 스냅샷(원본 로그 스케일)에서부터 적용되므로 멱등적이다. 로그 공간에서 함께 작동하기 때문에 Splat size(L3)와 교환 가능하다.

L3Splat size 슬라이더

위치

Inspector → Look 섹션 → GroupBox → Splat size.

기술적 설명

슬라이더 범위 0.5–2.0, 소수점 둘째 자리까지 표시. 각 Gaussian을 세 축 모두 균일하게 스케일링한다: 1.0 = 변화 없음, < 1.0 = 더 작고/촘촘하고/선명함, > 1.0 = 더 크고/"보풀 같음"(Splat 사이의 빈틈을 메움). 스케일 값이 로그 공간에 있으므로 이 곱셈은 그 공간에서 덧셈적인 이동이 된다 — 이는 Splat length(L2)와 교환 가능한데, 상수 오프셋이 평균으로부터의 편차를 건드리지 않기 때문이다. Pristine 스냅샷에서 적용되므로 멱등적이다. 이번 버전에서 새로 추가되었다.

L4Fade far region (서브 슬라이더 포함)

위치

Inspector → Look 섹션 → GroupBox → 토글 "Fade far region" 그리고 서브 슬라이더 "Fade start ×radius"와 "Fade floor".

기술적 설명

카메라 중심점으로부터의 거리에 따른 방사형 Opacity 감쇠를 활성화하는 토글 — 배경에서 약하게 관측된 "Far-콘페티"를 서서히 사라지게 한다. 오빗 촬영에만 해당: 씬이 이에 해당하지 않으면 (직선 비행, 카메라 수 부족 또는 퇴화된 카메라) 토글은 회색으로 비활성화되며, 이때는 서브 슬라이더 대신 "Far-fade applies only to orbit captures (not this scene)."라는 안내가 표시된다. 적합성은 카메라 위치의 방위각 분포로 판단한다(오빗은 중심점을 둘러싸며 많은 방위 섹터를 채우지만, 직선 비행은 ~2개 정도만 채운다). 두 서브 슬라이더가 기하 구조를 제어한다: Fade start ×radius (1.0–3.0)는 오빗 반경의 배수로 내부 반경을 설정하며, 이 안쪽에서는 완전한 Opacity가 유지된다; Fade floor (0.0–1.0)는 Fade 반경을 훨씬 벗어난 지점의 Opacity 계수다. 중요한 점: 이 Fade는 Sky-Dome 영역은 건너뛴다 (돔의 고정된 Gaussian들), 의도적으로 만든 배경 돔이 함께 어두워지지 않도록 하기 위함이다.

L5Reset finishing 버튼

위치

Inspector → Look 섹션 → GroupBox → "Reset finishing"(아래쪽의 작은 버튼).

기술적 설명

모든 Look 설정을 기본값으로 되돌린다 (Saturation 1.0, Fade 꺼짐, Splat length 1.0, Splat size 1.0)이며 즉시 Finishing을 다시 실행시켜, 뷰포트가 변경되지 않은 학습된 상태로 되돌아가게 한다. Look 스택 전체가 Pristine 스냅샷에서 멱등적으로 계산되기 때문에, "기본값으로 되돌리기"는 정확히 원래의 학습 결과와 같다 — 여러 번 왔다 갔다 해도 품질 저하가 없다. 섹션의 다른 모든 슬라이더와 마찬가지로, 내보내기가 진행되는 동안에는 잠긴다.

Presets-Sekt션 (I1–I11)

잠깐, 이건 실수입니다. 다시 작성하겠습니다.

Presets-섹션 (I1–I11)

Presets-섹션은 검증된 구성을 적용하는 가장 빠른 방법이다. 내장 Preset(Capture Class, Classic, MCMC, Hybrid)은 검증되고 재현 가능한 출발점을 제공하며, 직접 만든 Preset을 저장, 내보내기, 가져오기, 공유할 수도 있다. 목록은 카테고리(Capture Class, Classic, MCMC, Hybrid, Custom)별로 그룹화되어 있고, 두 개 이상의 카테고리를 동시에 펼쳐 둘 수 있다. 컨텍스트 메뉴(행을 마우스 우클릭)를 통해 내보내기, 복제, 그리고 — 사용자 Preset의 경우 — 삭제 기능에 접근할 수 있다.

I1Save…-버튼

위치

Inspector → Presets-섹션 → Save…-버튼 (아래쪽 액션 바).

기술적 설명

텍스트 필드와 Save/Cancel 버튼이 있는 팝오버를 연다. 현재 Training 설정 상태가 새 사용자 정의 Preset으로 영구 저장된다(JSON으로 인코딩되어 앱 전역에 저장). Save 과정에서 81개 Training 파라미터 전체와 현재 Densification 전략이 복사된다. Preset은 어떤 내장 Preset에서 파생되었는지와 무관하게 자동으로 Custom 카테고리에 들어간다. 빈 이름과 공백만으로 이루어진 입력은 거부된다. 이미 존재하는 이름은 거부되지 않는다 — 각 Preset은 고유한 내부 ID를 가지므로 이름 중복은 기술적으로는 허용되지만 실제로는 혼란을 야기한다.

I2Preset Name TextField

위치

Save-팝오버 → 텍스트 필드 「Preset Name」.

기술적 설명

모서리가 둥근 테두리의 넓은 형태를 가진 단순한 텍스트 필드. 입력값은 Save 버튼 클릭 시 Preset 이름으로 채택된다. UI상 길이 제한은 없지만, 저장되는 이름은 JSON으로 인코딩 가능하고 UI 목록에 표시 가능해야 한다 — 이모지와 움라우트도 작동한다. 내용은 팝오버를 열 때마다 자동으로 빈 문자열로 초기화된다. 필드가 트림 후 비어 있는 동안에는 Save 버튼이 비활성화 상태로 유지된다. 자동 완성이나 현재 활성 Preset 이름으로의 사전 채움 기능은 없다.

I3Cancel-버튼 (Save-대화상자)

위치

Save-팝오버 → Cancel-버튼 (왼쪽).

기술적 설명

저장하지 않고 팝오버를 닫는다. 텍스트 필드 내용을 버린다 — 다음에 열 때 Save…-버튼 로직(I1)에 의해 다시 비어 있는 상태로 초기화된다. 표준 버튼 스타일이며 확인 대화상자나 단축키는 없다. Save 경로 자체가 실행되지 않았으므로 현재 TrainingConfig는 변경되지 않은 채 유지된다.

I4Save-버튼 (Save-대화상자)

위치

Save-팝오버 → Save-버튼 (오른쪽, 강조된 스타일).

기술적 설명

실제 영구 저장을 트리거한다. 이름이 비어 있지 않은지 다시 한번 확인(방어적 체크)한 다음 현재 TrainingConfig를 JSON으로 앱 저장소에 기록한다. 이후 팝오버를 닫는다. 파란색으로 강조되며 텍스트 필드가 비어 있는 동안에는 비활성화된다. 저장이 실패할 경우 (예: 앱 저장소가 가득 찬 경우 — 매우 드문 상황), 현재로서는 표시되는 오류 대화상자가 없다. 이 경우 Preset은 다음 앱 실행 시 그냥 나타나지 않게 된다.

I5Export…-버튼

위치

Inspector → Presets-섹션 → 액션 바 → Export…-버튼.

기술적 설명

현재 선택된 Preset을 .radiancepreset 파일(내부적으로 JSON)로 내보낸다. Preset이 선택되지 않은 경우 비활성화된다. 클릭하면 앱이 미리 지정된 파일명(Preset 이름 + .radiancepreset 확장자)으로 저장 대화상자를 연다. 저장되는 형식에는 전체 TrainingConfig와 메타데이터(이름, 카테고리, ID, 내장 여부 플래그)가 포함된다. Finder에서 더블클릭하면 앱이 열리지만 — 가져오기가 자동으로 실행되지는 않는다. 사용자가 직접 Import-버튼(I6)을 사용해야 한다.

I6Import…-버튼

위치

Inspector → Presets-섹션 → 액션 바 → Import…-버튼.

기술적 설명

.radiancepreset 파일만 허용하는 파일 대화상자를 연다 (다중 선택은 비활성화). 파일을 선택하면 JSON 파일이 로드, 검증되어 Custom 카테고리에 새 내부 ID로 추가된다 — 내장 Preset과 충돌이 생기지 않도록 하기 위함이다. 가져오기는 내보낸 Preset이 원래 예를 들어 내장 Preset이었더라도 카테고리를 자동으로 Custom으로 설정한다. 손상되었거나 이전 스키마 버전과 호환되지 않는 파일은 오류 대화상자 없이 조용히 거부된다(단, 콘솔 로그에는 기록이 남는다).

I7Preset 행 (클릭으로 활성화)

위치

Inspector → Presets-섹션 → 각 카테고리의 모든 Preset 행.

기술적 설명

Preset 행을 클릭하면 TrainingConfig의 모든 필드가 Preset의 값으로 교체되고, 활성 Preset의 ID가 기억되며, Modified 상태가 초기화된다. 행 앞의 활성 체크 표시는 Preset이 선택되어 있고 동시에 수정되지 않은 상태일 때만 나타난다. TrainingConfig의 값(다른 Inspector 섹션의 슬라이더, 스테퍼, 토글)이 하나라도 변경되면 이름 뒤에 주황색 「Modified」 배지가 나타난다. 내장 Preset은 덮어쓸 수 없다 — 수정한 경우 Save-버튼(I1)을 통해 직접 사본을 만들어야 한다.

I8컨텍스트 메뉴 「Export…」

위치

모든 Preset 행을 마우스 우클릭 → 첫 번째 항목 「Export…」.

기술적 설명

I5(Export…-버튼)와 기능적으로 동일하지만 Preset을 미리 선택할 필요 없이 더 편리하게 접근할 수 있다. 행에서 클릭한 Preset을 바로 내보낸다. 모든 Preset 카테고리(내장 또는 Custom)에 동일하게 작동하며 제약이 없다. 내보내기에는 내장 여부 플래그와 원래 카테고리가 포함되지만, 다시 가져올 때는 I6에서 설명한 대로 카테고리가 Custom으로 매핑된다.

I9컨텍스트 메뉴 「Duplicate」

위치

모든 Preset 행을 마우스 우클릭 → 두 번째 항목 「Duplicate」.

기술적 설명

Preset을 Custom 카테고리로 복제한다. 새 내부 ID를 생성하고 이름 뒤에 " Copy"를 붙여 사본을 저장한다. 내장 Preset에도 작동한다 — 이 경우 복제본은 편집 가능해진다. 원본은 그대로 유지된다. TrainingConfig는 값 단위로 복사되므로(JSON 라운드트립), 원본과 사본 사이에 참조 연결이 존재하지 않는다.

I10컨텍스트 메뉴 「Delete」

위치

직접 만든 Preset 행을 마우스 우클릭 → 마지막 항목 「Delete」(빨간색, 파괴적 작업).

기술적 설명

Custom Preset에만 표시된다. 내장 Preset은 삭제할 수 없다. 항목은 파괴적으로 표시되어 컨텍스트 메뉴에서 빨간색으로 나타나며, 실수로 클릭하지 않도록 구분선 뒤에 배치된다. 확인 대화상자는 없다 — 클릭 한 번으로 Preset이 즉시 삭제된다. 삭제된 Preset은 복구할 수 없다(Cmd-Z는 여기서 작동하지 않는다 — 현재 빌드에서 실행 취소는 이미지 목록에만 있고 Preset 작업에는 없다). 삭제된 Preset이 마침 활성 상태였다면 현재 TrainingConfig는 변경되지 않은 채 유지되며, 활성 Preset 선택만 초기화된다.

I11카테고리 헤더 (펼치기/접기)

위치

Inspector → Presets-섹션 → 각 카테고리 헤더 (Capture Class, Classic, MCMC, Hybrid, Custom).

기술적 설명

카테고리별로 서로 다른 기본값을 가진 접힘 상태: 큐레이션된 그룹인 Capture Class는 펼쳐진 상태로 시작하고, Classic, MCMC, Hybrid, Custom은 접힌 상태로 시작한다. 이 상태는 영구 저장되지 않는다 — 앱을 재시작하면 모든 카테고리가 다시 기본 상태로 돌아간다. 셰브런 화살표는 애니메이션과 함께 회전한다. 헤더 오른쪽의 숫자는 해당 카테고리에 있는 Preset의 개수를 보여준다. 클릭 히트 영역은 헤더 전체를 포함한다.

트레이닝 구성 섹션 (I12–I22)

Crop der Training-Sektion — Densification als Dreier-Umschalter Classic | MCMC | Hybrid mit Classic aktiv, darunter die ausgegrauten Zeilen MCMC Quality (aus), Auto-scale by scene (an) und Max Gaussians 150,000 samt Schloss-Hinweis; abgesetzt darunter Depth-Priority Scatter (aus), Full-Resolution Training (aus), Max Iterations 5,000 und Densify Until 3,500 mit blauem Ketten-Symbol, Regler SSIM Weight bei 0.20 und Render Scale bei 50%
Training 섹션의 크롭 — Densification이 Classic | MCMC | Hybrid의 3단 토글로 되어 있고 Classic이 활성화된 상태, 그 아래로 회색 처리된 MCMC Quality (꺼짐), Auto-scale by scene (켜짐), Max Gaussians 150,000 항목과 자물쇠 안내문이 보인다; 그 아래 구분되어 Depth-Priority Scatter (꺼짐), Full-Resolution Training (꺼짐), Max Iterations 5,000 그리고 파란 사슬 아이콘이 있는 Densify Until 3,500, SSIM Weight 슬라이더 0.20, Render Scale 슬라이더 50%

여기에는 트레이닝 실행을 위한 핵심 조작 요소들이 모여 있다: Densification이 어떻게 동작하는지, 반복 횟수가 얼마인지, SSIM 가중치가 얼마인지 — 그리고 맨 아래쪽에는 예전에는 별도로 존재했던 개선 기능들(Perceptual Loss, Outdoor 그룹, Advanced Densifier, Post-Training 패스)이 있다. 맨 위에는 Densification이 Classic | MCMC | Hybrid 3단 토글로 자리잡고 있다. SfM 백엔드는 이제 여기에 없고, 별도 섹션인 카메라 및 촬영 (I12, I13)으로 옮겨졌다. 세 개의 MCMC 항목("MCMC Quality", "Auto-scale by scene", "Max Gaussians")은 더 이상 Classic 모드에서 사라지지 않고, 계속 보이되 회색으로 비활성화된다; 그 아래에는 자물쇠 아이콘과 함께 무엇을 바꿔야 하는지 알려주는 문구가 있다("Only used by the MCMC and Hybrid densifiers — switch Densification above to change these."). 그 아래 구분된 블록은 어떤 densifier에서도 적용되는 항목들을 모아 놓았다: Depth-Priority Scatter, Full-Resolution Training, 서로 연결된 Max Iterations / Densify Until 쌍, 그리고 SSIM Weight와 Render Scale 슬라이더.

I12Camera Alignment 피커

위치

Inspector → 카메라 및 촬영 → Camera Alignment (Projection 피커 아래의 팝업 메뉴).

기술적 설명

팝업 메뉴이며 세그먼트 피커가 아닌 이유는 — 라벨이 좁은 Inspector 칼럼 폭을 넘어서기 때문이다. 어떤 항목이 나타나는지는 빌드에 따라 다르다: 샌드박스 처리된 App Store 버전은 Apple PhotogrammetryNative를 제공하고, 개발자용/DMG 빌드는 여기에 추가로 COLMAP을 제공한다. 이유는 COLMAP이 외부 커맨드라인 프로그램이고, 샌드박스 앱은 외부 바이너리를 실행할 수 없기 때문이다(App Review 지침 2.5.2) — 그래서 Store 빌드에서는 Mapper 피커와 바이너리 경로를 포함한 백엔드 항목 자체가 아예 없다, 영구적으로 회색 처리되는 것이 아니라. 절대 활성화될 수 없는 항목은 안내가 아니라 잡음이기 때문이다. 혼동하지 말 것: COLMAP 워크스페이스의 임포트와 익스포트는 순수한 Swift 파일 파싱으로, COLMAP 설치가 필요 없고 모든 빌드에서 작동한다(1장, M5). Native 항목의 "(Beta)" 표기는 사라졌다 — Native는 v1.5.2부터 더 이상 베타가 아니다. 이 선택은 다음 실행의 SfM 백엔드를 결정하며, 동시에 그 아래 항목들(I13, High-Quality, Native SfM Recipe)이 조작 가능한지도 함께 결정한다. UI 내 각주: 정렬되지 않은 사진 세트의 경우 파이프라인은 피커가 무엇을 보여주든 상관없이 항상 Native로 정렬을 수행한다 — 이 레시피는 그곳에서만 존재한다. 이때 피커는 의도적으로 잠기지 않는다(값 자체가 사용 불가능한 것이 아니라 단지 무시될 뿐이다); 대신 분기 기호와 함께 안내 문구가 표시된다.

I13FOV Override 입력란 (Native SfM)

위치

Inspector → 카메라 및 촬영 → FOV Override (항상 표시되며, Camera Alignment = Native일 때만 조작 가능).

기술적 설명

숫자 입력란(범위 0-170°), 기본값 0 = EXIF 또는 휴리스틱에서 자동으로 결정. 입력 이미지가 초점 거리 메타데이터가 없는 비디오에서 추출된 경우 수동 입력이 필요하다. 대표값: iPhone Wide ≈ 73°, DJI Mavic Wide-Crop ≈ 70°, 풀프레임 센서 드론 ≈ 84°. 값은 [0, 170]으로 클램프되며 — 범위를 벗어난 값은 즉시 되돌려진다. 네이티브 SfM 파이프라인(Q4/Q5)에만 영향을 미치며, Apple Photogrammetry는 이 값을 완전히 무시한다. 2026-07-18부터: 다른 백엔드에서는 이 입력란이 더 이상 숨겨지지 않고 회색으로 비활성화된다 — "High-Quality" 및 "Native SfM Recipe"와 함께, 그리고 자물쇠 아이콘이 있는 안내문("These configure the Native aligner — choose Native under Camera Alignment to change them.")도 함께. 예전의 숨김 방식은 이런 옵션이 애초에 존재한다는 사실 자체를 감췄다. 이 게이트는 선택된 백엔드에 따라 걸리는 것이지 실제로 사용되는 백엔드에 따르는 것이 아니다 — 정렬되지 않은 사진 세트가 Native로 우회되는 것은 대신 I12 아래의 안내문이 알려준다. "Native SfM Recipe" 항목은 추가로 정렬되지 않은 사진 세트를 필요로 하며, 그렇지 않으면 자체 설명 문구를 표시한다.

I15Densification 피커

위치

Inspector → 트레이닝 구성 → Densification (세그먼트 피커, 항상 표시됨).

기술적 설명

두 가지 Densification 전략 사이를 전환한다: Classic (Clone/Split/Prune와 그래디언트 임계값을 사용하는 원본 3DGS 방식)과 MCMC(Relocation이 포함된 Stochastic Gradient Langevin Dynamics, NeurIPS 2024). Classic에서 MCMC로 전환하면 앱이 MCMC 관련 필드를 자동으로 검증된 기본값으로 설정한다(Reg-Weights = 0, MCMC-Cap- Multiplier 3.0, Sample-/Noise 스케줄). 이 자동 초기화가 없으면 오래된 프리셋을 사용한 세션이 1.4.4 MCMC 붕괴 버그(460K→5개 Gaussian, 워치독 강제 종료)를 겪었다. 이 피커 선택은 추가로 어떤 Inspector 요소가 보이는지도 결정한다 — MCMC일 때는 I16/I17이 나타난다. 항목별 상세 동작은 6장 T11–T16(Classic)과 T61–T73(MCMC)에서 다룬다.

I16MCMC Quality 토글

위치

Inspector → Training → MCMC Quality (항상 표시되며, Densification = MCMC 또는 Hybrid일 때 조작 가능).

기술적 설명

그래디언트 누적을 2단계(켜짐) 또는 1단계(꺼짐)로 전환한다. 옵티마이저 스텝을 실행하기 전에 두 개의 연속된 카메라 뷰에서 나온 그래디언트를 누적한다. 이는 최적화 경로를 매끄럽게 만들며 최종 결과를 약간이지만 눈에 띄게 개선한다. 대가는 트레이닝 시간이 두 배가 되는 것이다. 매우 긴 트레이닝(20만 반복)의 경우 추가로 10분 이상의 대기 시간이 발생한다 — 따라서 마지막 몇 퍼센트의 품질이 정말로 필요한 경우에만 사용할 가치가 있다. 트레이닝에만 영향을 미치며, 익스포트 포맷이나 뷰포트 표시에는 영향을 미치지 않는다. 동일한 MCMC 메커니즘을 사용하는 Hybrid에도 적용된다. 2026-07-18부터: Classic에서 이 항목은 더 이상 사라지지 않고 I17 및 "Max Gaussians"와 함께 회색으로 비활성화된다; 그 아래에는 "Only used by the MCMC and Hybrid densifiers — switch Densification above to change these."라는 문구가 표시된다.

I17Auto-scale by scene 토글

위치

Inspector → Training → Auto-scale by scene (항상 표시되며, Densification = MCMC 또는 Hybrid일 때 조작 가능).

기술적 설명

활성화되면 유효 Max Gaussians 상한이 SfM 초기 포인트 개수 × MCMC-Cap-Multiplier(기본값 3.0)로 스케일링된다. 예: SfM이 25만 개의 초기 포인트를 제공하고, 기본 Cap = 15만, Multiplier 3.0 → 유효 상한 = max(15만, 75만) = 75만. 비활성화 시에는 기본값만 엄격하게 적용된다. 기본값 자체는 바로 아래의 Max Gaussians 항목에 있다(1.8부터, 기본값 150,000, 입력값은 10,000–30,000,000으로 클램프됨). 유효 상한이 기본값을 초과하면 앱은 이를 텍스트로 표시한다("Effective cap for this scene: …") — 값이 너무 높아지면 RAM 경고도 함께 표시된다. v1.4.5에 도입된 이유는, 1000프레임이 넘는 대규모 야외 촬영에서 SfM 포인트 밀도가 높아 고정된 15만 기본 Cap 때문에 Densification이 굶주리는 문제가 있었기 때문이다 — 불필요한 포인트는 남아 있는데 새로운 포인트는 생성되지 못했다. 커스텀 프리셋에서는 기본값이 OFF, MCMC 내장 프리셋에서는 ON이다. 트레이닝 시점에만 영향을 미치며, 익스포트에는 영향을 주지 않는다. 2026-07-18부터: Classic에서는 이 항목이 숨겨지지 않고 회색으로 비활성화된다(I16과 동일한 설명 문구와 함께); 텍스트 표시와 RAM 경고는 의도적으로 그곳에서 나타나지 않는데, Classic은 애초에 상한을 적용하지 않기 때문이다.

I18Max Iterations 스테퍼

위치

Inspector → 트레이닝 구성 → GroupBox → Max Iterations.

기술적 설명

범위 1,000–100,000, 단위 1,000의 스테퍼. 옵티마이저 반복의 전체 횟수를 결정한다. 트레이닝 시간과 선형 상관관계에 있다(절반으로 줄이면 시간도 약 50%로). 검증된 값은 20K(Classic Balanced), 40K(Classic Quality), 200K(MCMC Full)이다. 40K를 넘어서면 Classic은 개선 폭이 거의 없다 — 효과가 평탄해진다. 값을 바꿀 때, 링크 기능(I19)이 켜져 있으면 Densify Until이 비례적으로 함께 조정된다(기본 비율: 0.5, 즉 Densify-Until = Max/2).

I19Link/Unlink 버튼 (Densify ↔ Iterations)

위치

Inspector → 트레이닝 구성 → GroupBox → Max Iterations와 Densify Until 사이의 작은 링크 버튼.

기술적 설명

Densify Until과 Max Iterations의 비율을 고정하는 토글 버튼. 활성 상태(링크 아이콘 강조 표시)에서는 Max Iterations를 바꿀 때마다 Densify Until이 비례적으로 따라 움직인다. 링크 해제 (Link-Plus 아이콘) 시에는 두 값이 독립적으로 유지된다. 기본값은 linked인데, 이는 전형적인 상관관계를 반영하기 때문이다 — 트레이닝 반복 횟수를 두 배로 늘리면 대부분 Densification 단계도 비례해서 더 길게 실행하고 싶어한다. 이 비율은 링크 버튼을 켤 때 현재 값에서 계산되며, 전형적인 비율은 0.5(Densify-Until = 반복 횟수의 절반)다.

I20Densify Until 스테퍼

위치

Inspector → 트레이닝 구성 → GroupBox → Densify Until.

기술적 설명

범위 500–50,000, 단위 500의 스테퍼. Clone/Split(Classic) 또는 Relocation(MCMC)을 통해 새로운 Gaussian이 더 이상 추가되지 않는 반복 인덱스를 결정한다. 이 지점 이후에는 위치와 색상만 정제된다. 값이 높을수록 = Gaussian이 많아지고 = 파일이 커지고 = 반복당 시간이 늘어난다(스텝당 GPU 시간 +30-60%). 대표값: 15K(Max-Iter 30K용), 20K(40K용), 100K(200K MCMC용). 링크(I19)가 활성화되어 있으면 자동으로 함께 스케일링된다. Classic과 MCMC에서 작동 방식이 다르다: Classic은 성장을 완전히 멈추고, MCMC는 Relocation 로직을 멈추지만 Sample-/ Noise 적응은 계속 진행된다.

I21SSIM Weight 슬라이더

위치

Inspector → 트레이닝 구성 → GroupBox → SSIM Weight.

기술적 설명

0.0–1.0 범위, 0.05 단위 슬라이더, "0.20"으로 표시됨. L1 Loss(0.0)와 SSIM Loss(1.0)를 혼합한다. L1은 픽셀 단위 밝기를 조정하고, SSIM은 구조적 유사성(가장자리, 국소 통계)을 조정한다. 기본값 0.2는 원본 3DGS 논문(Kerbl 2023)에서 가져온 값이며 거의 모든 씬에 대해 견고한 절충안이다. 값이 높을수록(0.5+) 디테일 보존을 선호하지만 국소적인 밝기 오차를 무시할 수 있다. 값이 낮으면(0.1 미만) 날카로운 가장자리에서 디테일 손실이 발생한다. SSIM 계산은 셰이더 내에서 11×11 가우시안 윈도우로 이루어진다. 성능: 0.0 (L1만)에서는 셰이더에서 SSIM 계산이 생략되므로 트레이닝이 약 8-12% 더 빠르다.

I22Render Scale 슬라이더

위치

Inspector → 트레이닝 구성 → GroupBox → Render Scale.

기술적 설명

0.25–1.0 범위, 0.25 단위 슬라이더, "100%"로 표시됨. 원본 이미지 크기 대비 트레이닝 렌더링 해상도를 스케일링한다. 성능에 가장 큰 영향을 미치는 요소: 50%는 GPU 시간을 약 75% 줄이고(픽셀이 4배 적기 때문), 25%는 약 94% 줄인다. 그래디언트 임계값도 자동으로 함께 스케일링된다. 슬라이더 아래에는 MP 단위의 실시간 해상도 표시가 나타난다(예: "2304×1296 (3.0 MP)"). 현재 값이 권장값과 다르면 오렌지색 글자로 "— recommended: 50%"가 표시된다. 이 권장값은 약 3 MP의 유효 해상도를 목표로 하는데 — 이는 Apple Silicon GPU가 가장 효율적으로 처리할 수 있는 범위다. 예를 들어 4K 원본 이미지에는 자동으로 25%가 권장되고, FullHD 이미지에는 100%가 권장된다. 값을 바꾸면 버퍼 재할당도 함께 트리거된다.

Enhancements 그룹 (Training 섹션 내, I26–I29, I42–I44)

오늘날 Training 섹션 맨 아래에 위치한 Enhancements 행들의 크롭 — 맨 위에는 Perceptual Loss 슬라이더가 완전히 왼쪽 „Off”에 맞춰져 있고, 그 아래에는 Sky Masking, Person Masking, Floater Cleanup, Reconstruct Sky Dome라는 네 개의 꺼진 스위치가 있는 Outdoor 그룹, 이어서 경고 삼각형이 달린 접힌 행 „Advanced Densifier (Expert)”, 마지막으로 „Runs automatically at the end of training” 그룹에 Post-Training Compactification(켜짐)과 Remove Needle/Disc Floaters가 있다. 각 행에는 별도의 설명 줄이 붙어 있다
오늘날 Training 섹션 맨 아래에 위치한 Enhancements 행들의 크롭 — 맨 위에는 Perceptual Loss 슬라이더가 완전히 왼쪽 „Off"에 맞춰져 있고, 그 아래에는 Sky Masking, Person Masking, Floater Cleanup, Reconstruct Sky Dome라는 네 개의 꺼진 스위치가 있는 Outdoor 그룹, 이어서 경고 삼각형이 달린 접힌 행 „Advanced Densifier (Expert)", 마지막으로 „Runs automatically at the end of training" 그룹에 Post-Training Compactification(켜짐)과 Remove Needle/Disc Floaters가 있다. 각 행에는 별도의 설명 줄이 붙어 있다

이 그룹들은 핵심 Training-Loop 자체를 바꾸지 않으면서 이미지 품질을 개선하는 기능들을 모아 놓은 것이다. 2026-07-18까지는 이들이 별도의 Inspector 섹션인 Enhancements를 이루고 있었지만, 도메인 재편 이후로는 Training 섹션의 맨 아래에 자리잡았다. 예전의 Viewport-Scaling 피커(Off/MetalFX/Lanczos)는 대체 없이 사라졌다: 애초에 아무 효과도 없었으며 — Viewport의 블릿 결정은 순전히 기하학적이었다 — 게다가 그 라벨은 업스케일링을 암시했지만 실제 Lanczos 패스는 오버샘플된 이미지를 안티앨리어싱하며 다운스케일하는 처리였다. 그에 맞춰 Viewport의 표시 이름도 이제 „Scaling" 대신 „Sampling"으로 바뀌었으며(4장), 앱 어디에서도 MetalFX로 업스케일링하지 않는다. Perceptual Loss(I29)는 그룹 소속에도 불구하고 Training의 일부다 — Training 중에 추가 손실 항으로 활성화되며, 맨 위에 위치해 „Multi-scale blur feature matching for structural similarity"라는 설명 줄과 함께 표시된다. 그 아래에는 네 개의 스위치를 가진 Outdoor 그룹이 온다 — Sky Masking, Person Masking, Floater Cleanup, Reconstruct Sky Dome(I42–I44) — 하늘 Floater를 방지하기 위한 Training 옵션들로, 예전에는 설정 창에 있었지만 이제는 프로젝트별로 여기에 위치한다. 이어서 경고 삼각형이 달린 접힌 행 „Advanced Densifier (Expert)"가 나오는데, 그 뒤에는 Training을 완전히 망가뜨릴 수도 있는 조절기들이 있기 때문이다. 마지막은 „Runs automatically at the end of training" 그룹으로, Post-Training Compactification(I26)과 „Remove Needle/Disc Floaters" 스위치로 마무리된다.

I26Post-Training Compactification 토글

위치

Inspector → Training → „Runs automatically at the end of training" 그룹 → Post-Training Compactification.

기술적 설명

끝부분에 정리 단계를 활성화한다: Training 반복이 끝난 후 Opacity가 0.01(가시성 1%) 미만인 Gaussian들이 삭제된다. 이는 눈에 띄는 품질 저하 없이 파일 크기를 일반적으로 절반 정도까지 줄여준다 — 이런 Gaussian들은 어차피 시각적으로 아무 기여도 하지 않기 때문이다. Compactification은 GPU Compact 패스로 실행되며 Gaussian 개수에 따라 수십분의 1초에서 몇 초 정도 걸린다. Training 성능에는 영향을 주지 않는다. 이 토글이 꺼져 있으면 보이지 않는 Gaussian들도 함께 export된다 — Continue Training으로 추가 Training 단계를 위해 이 포맷이 필요한 경우에만 의미가 있으며, 그렇지 않으면 저장 공간 낭비다.

I29Perceptual Loss 슬라이더

위치

Inspector → Training → Perceptual Loss.

기술적 설명

0.01 단위로 0.0–0.2 범위의 슬라이더, 0.0일 때는 „Off"로 표시되고 그 외에는 „0.05" 등으로 표시된다. 렌더링의 멀티스케일 Gaussian-Blur를 Ground-Truth 이미지와 비교하는(3단계 Blur 스케일) 추가 손실 항을 활성화한다. L1+SSIM만으로는 감지하지 못하는 구조적 차이를 포착한다. 0.05에서 0.1 사이의 값은 미세한 구조를 눈에 띄게 개선하면서도 Training 시간은 조금밖에, 대략 5%밖에(Blur 커널을 통한 추가 Forward-Pass) 소모하지 않는다. 0.15를 넘으면 이 손실 항이 최적화를 지배하게 되어 Training이 불안정해지고 품질이 다시 떨어진다. Post-Processing이 아니라 Training 중에 작용한다 — Training 섹션 끝의 Enhancement 행에 위치해 있음에도 불구하고, 사후에 이루어지는 단순 보정이 아니다.

I42Sky Masking

위치

Inspector → Training(Outdoor 그룹) → „Sky Masking" 토글. 프로젝트별로 저장됨; 기본값: 꺼짐.

기술적 설명

Training 시작 전 Apple Vision 기반 하늘 픽셀 세그멘테이션을 활성화한다. Training 시작 전에 각 입력 카메라에 대해 하늘 영역을 Apple Vision Foreground-Mask를 통해 추출하고(Sky = Background) 해당 카메라의 픽셀별 마스크로 대응시킨다. Training 중에는 픽셀별 손실 기여도가 Sky 마스크의 보완값과 곱해진다 — 하늘 픽셀은 그레이디언트에 0을 기여하므로 하늘로 투영되는 Gaussian들은 최적화 신호를 받지 못하고 „더 조밀해지거나" „밝아지지" 않는다. Outdoor/드론 씬에서 Floater(하늘 속 어두운 덩어리)를 눈에 띄게 줄여준다. 고전적인 40K Training에서 ~3%의 L1 회귀 비용이 든다. 하늘이 명확히 구분되는 Outdoor 씬에서만 의미가 있으며, 실내 씬이나 흰색 배경에서는 Sky 세그멘테이션이 잘못된 영역을 식별해 유효한 손실 신호를 차단한다. 값은 (더 이상 앱 전역이 아니라) 프로젝트별로 저장되며 Preset이나 씬 파일을 따른다.

I43Floater Cleanup

위치

Inspector → Training(Outdoor 그룹) → „Floater Cleanup" 토글 (부제 „Remove Gaussians outside all camera views"). 프로젝트별로 저장됨; 기본값: 꺼짐.

기술적 설명

이 스위치는 서로 다른 조건을 가진 두 가지 효과를 제어한다; 둘 다 시작 시 실행-로컬 Config로 도출되며 저장된 Config에는 기록되지 않는다(그렇지 않으면 한 번 켜진 채로 계속 남게 될 것이다). (1) Training 종료 시 Frustum-Union-Cull — 모든 카메라 Frusta의 합집합 밖에 있는 Gaussian들이 제거된다(„한 번도 관찰되지 않음" = „한 번도 제약되지 않음", 그리고 실제로 대부분의 Floater가 여기에 속한다). 이 부분은 전략 조건이 없으며 Classic, MCMC, Hybrid 모두에서 동일하게 실행된다 — 스위치 이름이 여기서 왔다. (2) Training 도중의 추가 Density-Control 패스 두 번Classic에서만, 그리고 30,000회 반복 이상에서만 적용되며 전체 길이의 55%와 85% 지점에 설정된다 (35–40K이면 대략 20K와 30K). 두 패스 모두 Opacity가 매우 낮고, 화면 공간 크기가 아주 작으며, 손실에 기여하지 않는 Gaussian들을 찾아 제거한다. 효과: 최종적으로 Gaussian이 ~5–15% 줄어들며, 드론/Outdoor 씬에서 하늘 속 어두운 덩어리가 눈에 띄게 줄어든다. 클로즈업 실내 씬에서는 ~1–3%의 L1 회귀 비용이 들기 때문에 기본값으로 활성화되어 있지 않다. 값은 프로젝트별로 저장되며 Preset이나 씬 파일을 따른다. 이전 판본 대비 정정 사항: 이 토글은 더 이상 Classic Densifier에 국한되지 않으며 MCMC/Hybrid에서도 더 이상 회색으로 비활성화되지 않는다 — 예전에는 오히려 MCMC와 Hybrid 사용자들에게 정작 효과가 있는 Cull을 사용하지 못하게 막고 있었다. 짧은 실행(예: P2 Preview 5K)에서는 실행 도중 부분만 생략된다.

I44Reconstruct Sky Dome

위치

Inspector → Training(Outdoor 그룹) → „Reconstruct Sky Dome" 토글. 프로젝트별로 저장됨; 기본값: 꺼짐.

기술적 설명

Training 전에 Sky-Dome 투영을 활성화한다. SfM 이후, Training 시작 전에 각 입력 카메라에 대해 S7에서 공유되는 Apple Vision Sky 마스크를 이미지에서 추출하고, 하늘 픽셀들을 카메라 Intrinsics를 이용해 가상의 구면(기본 반지름은 씬 반지름의 8배)으로 역투영한다. 이 구 위에 투영된 하늘 픽셀들의 평균 색상, 매우 큰 스케일(씬 단위 1.0), 초기 Opacity 0.95를 가진 새로운 Gaussian ~5000개가 초기화된다. 이 5000개의 Gaussian은 고전적 의미의 Sky-Mask가 아니다 — 다른 모든 Gaussian처럼 Training되지만, 높은 초기 Opacity 덕분에 얇은 껍질 형태로 남게 된다. 결과: Outdoor/드론 씬에서 360° Novel-View를 볼 때 어두운 색종이 조각 같은 덩어리 대신 실제 하늘 색과 구름 구조가 나타난다. 값은 재시작 후에도 기억된다. 최소한 360° 카메라 커버리지가 있는 Outdoor 씬에서만 의미가 있으며, 하늘이 보이지 않는 순수 오브젝트 캡처에서는 아무 효과가 없다. 상태: 실험적, 더 다양한 Outdoor 세트에 대한 폭넓은 A/B 검증은 아직 진행되지 않았다.

메트릭 섹션 (I30–I37)

학습 완료 후 「Training Metrics」 그룹의 크롭 — 여덟 줄: Iteration 20000 / 20000, Loss 0.007471, Learning Rate 0.00e+00, SH Degree 3, Gaussians 9,660, GPU Memory 5.7 MB, Speed 223.7 it/s, Elapsed 1:29
학습 완료 후 「Training Metrics」 그룹의 크롭 — 여덟 줄: Iteration 20000 / 20000, Loss 0.007471, Learning Rate 0.00e+00, SH Degree 3, Gaussians 9,660, GPU Memory 5.7 MB, Speed 223.7 it/s, Elapsed 1:29

학습이 진행되는 동안 메트릭 그룹(「Training Metrics」, 진행 상황 섹션에 있는 두 개의 접이식 그룹 중 하나)은 학습 루프에서 나오는 여덟 개의 실시간 값을 보여준다. 학습을 시작하기 전에는 비어 있다("Start training to see live metrics"). 모든 값은 약 30 반복마다 갱신된다(실시간 메트릭의 갱신 주기). 이 섹션은 읽기 전용이다 — 어떤 요소도 클릭하거나 변경할 수 없다. 더 깊은 분석을 위해서는 ~/Documents/RadianceKit/Logs/에 있는 JSONL 학습 로그를 참고하자.

I30Iteration

위치

인스펙터 → 진행 상황 → Training Metrics → Iteration. 읽기 전용.

기술적 설명

「4523 / 40000」 형식의 표시 — 현재 반복 횟수 대비 계획된 전체 반복 횟수. 약 30 반복마다 값을 push하는 학습 루프와 동기화되어 카운트된다. 두 번째 숫자는 시작 시점의 Max-Iterations 값에 해당하며, 사용자가 이후에 스테퍼를 조정하더라도 더 이상 바뀌지 않는다 — 진행 중인 실행은 자체 스냅샷 복사본을 사용한다. Training 메뉴를 통해 반복 횟수를 추가하면(Continue Training +5K/+10K/+20K) 분모가 증가한다.

I31Loss

위치

인스펙터 → 진행 상황 → Training Metrics → Loss. 읽기 전용.

기술적 설명

소수점 여섯 자리를 가진 부동소수점 값(예: 「0.024385」). 결합된 L1+SSIM 손실(비율은 I21 SSIM Weight로 제어됨)과 선택적으로 Perceptual Loss(I29) 및 기타 정규화 항을 측정한다. 척도는 절대적이지 않고 장면에 따라 다르다 — 대부분의 비교에는 동일한 데이터셋이 필요하다. 좋은 설정에서의 일반적인 최종 값: - Classic Quality 40K iters: 0.022–0.025 (Horse, Truck, Garden) - MCMC Full 200K iters: 0.024–0.028 - 야외 드론 30K: 0.030–0.060 (지오메트리에 의한 저하) - 실내 아파트: 0.018–0.025

5K 반복 이후 0.10을 넘는 값은 SfM 문제(잘못된 카메라 포즈)를 시사한다 — 중단하고 SfM을 다시 계산해야 한다.

I32Learning Rate

위치

인스펙터 → 진행 상황 → Training Metrics → Learning Rate. 읽기 전용.

기술적 설명

지수 표기법(과학적 표기) 표시(예: 「1.60e-04」). Position 파라미터의 현재 학습률(3DGS는 Position, SH-DC, SH-Rest, Opacity, Scale, Rotation에 대해 여섯 개의 독립적인 학습률을 가진다 — 여기서는 대표값으로 Position-LR이 표시된다). 기본 초깃값은 1.6e-4이며, 지수 감쇠(Exponential Decay)를 거쳐 학습 종료 시점에는 약 1.6e-6까지 떨어진다. 이 감쇠 곡선은 학습 설정의 LR-Schedule 필드(6장의 T-필드)를 통해 조정할 수 있다. LR이 비정상적으로 높게 유지되면(예: 10,000 반복 이후에도 1e-3 이상), 잘못 로드된 설정을 나타낼 수 있다.

I33SH Degree

위치

인스펙터 → 진행 상황 → Training Metrics → SH Degree. 읽기 전용.

기술적 설명

0-3 사이의 정수. 색상 표현을 위한 구면조화함수(Spherical Harmonics) 차수. 0에서 시작하며(DC 성분만, 즉 Gaussian당 방향과 무관한 색상 — 즉 RGB 상수 하나뿐) 학습이 진행됨에 따라 점진적으로 3까지 올라간다. 기본 스케줄은 1000/2000/3000 반복 시점마다 차수를 1씩 올린다. SH-3은 Gaussian당 48개의 색상 계수에 해당한다 (RGB 채널 3개 × SH 기저함수 16개). SH 차수가 높을수록 방향에 따른 반사가 더 정교해지지만(광택 있는 표면이 다양한 시점에서 올바르게 다르게 보임), 그만큼 메모리 사용량이 늘고 학습 속도도 느려진다.

I34Gaussians

위치

인스펙터 → 진행 상황 → Training Metrics → Gaussians. 읽기 전용.

기술적 설명

모델 내 현재 Gaussian 개수. 로케일 구분자로 포맷됨(예: 「524.318」). 증가 양상: - Classic: SfM 초기 포인트에서 시작(보통 50K-300K), Clone/Split을 통해 Densify Until 직전까지 증가한 뒤 학습 종료까지 정적으로 유지됨(Pruning 제외) - MCMC: MCMC 캡까지 샘플 포인트가 추가되며, 그 이후로는 Relocation만 일어남

정상적인 최종 값: - Classic Quality: 400K-700K (Horse 524K, Garden 800K) - MCMC Full: 캡에 정확히 도달(기본값 150K, Auto-Scale Multiplier 사용 시 × SfM 개수, 장면에 따라 500K-1.5M)

MCMC에서 숫자가 캡의 60% 미만으로 떨어지면 → 이상 징후 (붕괴 지표, 너무 공격적인 정규화 항을 시사).

I35GPU Memory

위치

인스펙터 → 진행 상황 → Training Metrics → GPU Memory. 읽기 전용.

기술적 설명

Gaussian 개수 × 616바이트로 계산한 Gaussian 버퍼 메모리 사용량 추정치(메모리 스타일로 포맷됨). 616바이트는 완전히 채워진 Gaussian 하나의 크기다(위치, 스케일, 회전, 불투명도, 3차 SH 계수, 그래디언트 누산기). 이 표시값에는 렌더러 오버헤드(타일 버퍼, 정렬 버퍼, 백워드 버퍼)가 포함되지 않는다 — 실제 GPU 메모리 사용량은 보통 이 값의 2-3배에 달한다. 500K Gaussians일 때: 표시값 약 290 MB, 실제 약 700 MB. 1.5M Gaussians일 때: 표시값 약 880 MB, 실제 약 2.5 GB. 64 GB 이상의 통합 메모리를 가진 M3 Max에서는 문제없지만, 18 GB의 M3 Pro에서는 이미 한계에 가깝다.

I36Speed

위치

인스펙터 → 진행 상황 → Training Metrics → Speed. 읽기 전용.

기술적 설명

소수점 한 자리로 표시되는 초당 반복 횟수 (「24.3 it/s」). 트레이너가 최근 약 100회 반복에 대한 이동 평균으로 계산한다. 일반적인 값: - Quick 프리셋(1K iters): 80-120 it/s(짧아서 정상 상태에 도달하지 않음) - Classic 20K @ 1.0 Render Scale(Truck 장면, M3 Max): 25-35 it/s - Classic 20K @ 0.5 Render Scale: 80-120 it/s - MCMC 200K @ 0.5 Render Scale: 25-50 it/s (Relocation 때문에 더 느림) - 100만+ Gaussians에 전체 해상도일 때: 10 it/s 미만

학습 진행에 따라 속도가 감소하는 것은 정상이다 — Gaussian이 많아질수록 반복당 연산량도 늘어난다. 갑작스러운 하락(예: 30 → 5 it/s)은 GPU 열 쓰로틀링이나 경쟁하는 앱을 나타낸다.

I37Elapsed

위치

인스펙터 → 진행 상황 → Training Metrics → Elapsed. 읽기 전용.

기술적 설명

경과한 시간을 「4:23」(m:ss) 또는 「1:23:45」(h:mm:ss)로 표시. 1시간을 넘으면 포맷이 전환된다. 순수한 학습 시간만 측정하며, 그 이전 단계(SfM 계산, 이미지 가져오기)는 포함하지 않는다. 일시정지/재개 시에도 시계는 계속 흐른다 — 즉 CPU 시간이 아니라 벽시계(wall-clock) 시간이다.

손실 그래프 섹션 (I39–I41)

훈련이 완료된 후의 「Loss History」 그룹 크롭 — Current: 0.0075, 오른쪽에 녹색으로 Min: 0.0051, 파란색 곡선은 약 0.14에서 급격히 내려간 후 20K까지 들쭉날쭉하게 하강, 왼쪽 축 0.14 / 0.071 / 0.0051; 그 아래 주황색 「Gaussian Count」 다이어그램은 16K부터 9K까지 축이 있고 최종값은 9,660
훈련이 완료된 후의 「Loss History」 그룹 크롭 — Current: 0.0075, 오른쪽에 녹색으로 Min: 0.0051, 파란색 곡선은 약 0.14에서 급격히 내려간 후 20K까지 들쭉날쭉하게 하강, 왼쪽 축 0.14 / 0.071 / 0.0051; 그 아래 주황색 「Gaussian Count」 다이어그램은 16K부터 9K까지 축이 있고 최종값은 9,660

손실 그래프 그룹(「Loss History」, 진행 상황 섹션의 두 번째 접이식 그룹)은 시간에 따른 훈련 경과를 시각화합니다. 이 그룹은 두 개의 차트로 구성됩니다: 손실 곡선 차트(크고, 위쪽, 파란색)와 Gaussian 개수 차트(작고, 아래쪽, 주황색). 두 차트 모두 훈련 중에 실시간으로 구축되며 다음 훈련 시작 전까지 유지됩니다. 첫 훈련 전에는 이 영역이 비어 있습니다(「Loss curve will appear during training」). 이 차트들은 순수한 SwiftUI Path-Drawing으로 구현되어 있으며(Swift Charts 프레임워크 아님), 10만 개 이상의 포인트에서도 부드럽게 렌더링되도록 설계되었습니다.

I39Current Loss (표시)

위치

Inspector → 진행 상황 → Loss History → 왼쪽 레이블 영역 「Current: 0.0075」. 읽기 전용.

기술적 설명

가장 최근 손실 샘플 포인트의 Float 값으로, 소수점 넷째 자리까지 표시됩니다. I31(Metrics 섹션의 Loss)과 동일하지만 여기서는 더 간결하게 표시됩니다. 데이터 출처는 Loss History — 약 30회 반복마다 한 항목이 추가되는 리스트입니다. 유한한 값만 리스트에 포함되며 — NaN/Infinity(그래디언트 폭발 버그의 경우처럼 매우 드문 경우)는 걸러집니다.

I40Min Loss (표시)

위치

Inspector → 진행 상황 → Loss History → 오른쪽 레이블 영역 「Min: 0.0051」(녹색). 읽기 전용.

기술적 설명

현재 훈련 실행에서 지금까지 관측된 모든 손실 값 중 최솟값. Loss History로부터 실시간으로 재계산됩니다 — 별도의 영속화는 없습니다. 「Min」 = 「지금까지 최선」이라는 의미로 녹색 글씨로 표시됩니다. 차트 하단의 녹색 점선이 이 Y 위치를 시각적으로 표시합니다. Continue- Training 세션에서는 최솟값 추적이 새로 시작됩니다 — 이전 History는 UI에서 새 History로 대체됩니다(이어붙이지 않음). 따라서 현재 훈련이 이전보다 성능이 나쁘게 진행되는 경우, Min 표시가 이전 최종 결과보다 클 수 있습니다.

I41Gaussian Count 차트

위치

Inspector → 진행 상황 → Loss History → 그 아래 두 번째 차트 (주황색). 읽기 전용.

기술적 설명

훈련 반복 횟수에 따른 Gaussian 개수의 선 그래프. 출처: Gaussian Count History(트레이너가 약 30회 반복마다 채우는 (Iter, Count) 쌍의 리스트). Y축 스케일은 History의 최솟값과 최댓값 사이에서 동적으로 결정됩니다. Classic 전략에서는 일반적으로 곡선이 Densify Until까지 꾸준히 상승한 다음 평평해집니다(작은 Pruning 변동 포함). MCMC에서는 Cap까지 가파르게 상승한 후 수평선이 됩니다 (Relocation이 개수를 일정하게 유지). 맨 끝에서의 감소는 정상입니다 — 위 그림에서 곡선이 약 16K에서 9,660으로 내려가는 것은, 마지막 반복 이후 정리 패스가 작동하기 때문입니다(I26). 경고 신호가 되는 것은 오직 훈련 도중의 급락입니다: 그런 경우 Densification이 지나치게 공격적으로 Pruning을 하고 있다는 뜻으로 — 잘못된 기본값이나 알려진 MCMC-Collapse 버그(v1.4.4 핫픽스 주제)의 징후입니다.

손실 곡선은 어떻게 읽어야 할까?

Loss 차트는 Inspector에서 가장 중요한 진단 도구입니다 — 훈련이 유용하게 진행되고 있는지 아니면 멈춰 있는지를 이보다 더 직접적으로 보여주는 지표는 없습니다. 전형적으로 건강한 형태는 처음 1000~3000회 반복 사이에 빠르게 하강한 후(약 0.15에서 약 0.05로), 훈련 종료까지 느리고 균일하게 하강하는(0.020~0.030까지) 모습입니다. 로그 스케일로 보면 이 곡선은 매끄러운 대각선처럼 보입니다.

손실 값의 플래토(정체 구간)는 무엇을 의미할까요? 곡선이 수천 번의 반복 동안 평평하게 유지된다면, 두 가지 해석이 가능합니다: (a) 훈련이 「수렴」한 경우 — 주어진 데이터와 설정으로 모델이 도달할 수 있는 최선의 상태이기 때문에 손실이 더 이상 크게 낮아질 수 없습니다. 이는 바람직한 상태이며, 「완료」를 의미합니다. (b) 훈련이 「멈춘」 경우 — 손실이 실제로는 더 낮아질 수 있지만 최적화가 정체된 것입니다 (지역 최솟값, 너무 작은 학습률, Densification 비활성화 등). 구분하는 방법: 손실 값이 전형적으로 좋은 범위(실내/오브젝트의 경우 0.020~0.030, 야외의 경우 0.040~0.060)에 있고 곡선이 5천 회 반복 이래 평평하다면 수렴한 것입니다. 값이 비교 가능한 씬들에 비해 뚜렷하게 높다면(예: 0.08) 멈춘 것입니다.

주의: Gaussian 플래토 ≠ Loss 플래토. Gaussian 개수의 플래토는 「훈련이 끝났다」는 의미가 아닙니다. 이는 단지 Densification이 새 포인트 추가를 멈췄다는 뜻일 뿐입니다 — Densify Until에 도달했거나(Classic) MCMC의 Cap이 가득 찼기 때문입니다. 이 이후에도 훈련은 계속 진행되며 기존 포인트를 계속 정제할 뿐입니다. 진짜 「완료」 신호는 여기가 아니라 Loss 곡선과 반복 횟수 표시(I30)에서 읽어야 합니다.

중단 여부를 판단하는 경험칙: 5000회 이상 반복 후에도 Loss 곡선이 0.08을 넘고 거의 하강하지 않는다면, SfM 재구성이 잘못되었을 가능성이 매우 높습니다. 훈련을 중단하고, 9장을 참고하여 선택한 SfM 백엔드가 해당 씬에 적합한지 확인한 후, 필요하다면 COLMAP/Native로 전환하고 다시 시작하세요. 잘못된 카메라 정렬로 2시간 동안 훈련하는 것보다, 더 나은 SfM에 10분을 투자하는 편이 낫습니다.

Inspector는 언제 사용하나요?

빠른 참조: 어떤 전형적인 사용 사례에 어떤 섹션 + 어떤 Control이 필요한가?

일반 작업섹션Control ID
완성된 스플랫의 색상 채도 낮추기LookL1 (Saturation)
바늘/컨페티 형태의 스플랫을 둥글게 만들기LookL2 (Splat length)
구멍이 있는 구름 채우기 / 스플랫 크기 키우기LookL3 (Splat size)
궤도 촬영 시 멀리 있는 "Far-컨페티" 숨기기LookL4 (Fade far region)
Look 조정 취소하기LookL5 (Reset finishing)
미리 만들어진 설정 불러오기PresetsI7 (행 클릭)
자체 설정 저장하기PresetsI1 → I2 → I4
동료와 설정 공유하기PresetsI5 (Export) 또는 I6 (Import)
SfM 백엔드 변경하기 (예: Apple-PG가 너무 불안정할 때)카메라 & 촬영I12 (9장 참고)
EXIF 초점 거리 정보가 없는 비디오 프레임 처리하기카메라 & 촬영I13 (FOV Override)
COLMAP 성능: 클래식 대신 GLOMAP카메라 & 촬영I14 — 개발자 빌드에서만 사용 가능, 앱스토어 빌드에는 COLMAP 백엔드가 없음
Classic에서 MCMC로 전환하기TrainingskonfigurationI15
트레이닝을 더 오래 실행하기TrainingskonfigurationI18 (Max Iter) + I20 (Densify Until) — I19를 통해 연동됨
GPU 시간 절반으로 줄이기TrainingskonfigurationI22 (Render Scale 를 50%로)
트레이닝 품질 +6% (MCMC)TrainingskonfigurationI16 (MCMC Quality)
SfM 포인트가 많은 야외 장면TrainingskonfigurationI17 (Auto-scale by scene)
COLMAP 경로 설정 / 변경하기카메라 & 촬영I23 / I24 / I25 — 개발자 빌드에서만 사용 가능
Export 파일 크기 줄이기TrainingI26 (항상 켜두기)
세밀한 구조의 마지막 디테일 살리기TrainingI29 (Perceptual Loss 0.05-0.1)
트레이닝 모니터링하기진행 상황 ▸ Training MetricsI30 (진행 상황), I36 (속도) — 남은 시간은 Viewport 아래 Transport 바에 표시됨
품질을 조기에 판단하기진행 상황 ▸ Training MetricsI31 (5K 이후 Loss < 0.05 = 양호)
SfM 문제가 의심될 때진행 상황 (두 그룹 모두)I31 + I39 (5K 이후 Loss > 0.08 → SfM 재실행)
Convergence와 Stuck 구분하기진행 상황 ▸ Loss HistoryI39 + I40 (Loss 플래토 읽기)
Densification 문제 인식하기진행 상황 ▸ Loss HistoryI41 (Gaussian 곡선이 떨어지면 → 버그)