## 제22장 · AI가 바꾼 3차원

### 22.1 3차원을 만드는 일에서 배우는 일로

현실의 공간을 디지털로 옮기는 일은 오랫동안 조립 작업이었다. 사진을 여러 장 찍는다. 같은 지점이 어느 사진의 어느 픽셀에 찍혔는지 대응을 찾는다. 그 대응에서 카메라가 어디 있었는지를 역산한다. 카메라 위치를 알면 삼각측량으로 점의 3차원 좌표가 나온다. 점이 충분히 모이면 삼각형 면으로 잇는다. 마지막으로 그 면 위에 사진을 되붙여 색을 입힌다.

네 단계가 순차적이다. 앞 단계의 오차는 뒤 단계에서 회복되지 않는다. 카메라 위치가 조금 틀리면 점군이 흐트러진다. 점군이 흐트러지면 면이 울퉁불퉁해진다. 면이 울퉁불퉁하면 텍스처가 늘어진다. 그래서 이 파이프라인은 항상 사람의 손을 요구했다. 실패한 사진을 골라내고, 점군을 잘라내고, 면을 다듬고, 이음선을 고치는 작업이 결과물 한 건마다 붙었다.

무너지는 자리도 정해져 있었다. 유리, 물, 금속, 나뭇잎, 머리카락. 목록이 잡다해 보이지만 공통점이 하나다. 이들은 삼각형 면의 집합으로 정의되지 않는다. 유리와 금속은 보는 방향에 따라 색이 바뀐다. 잎과 머리카락은 경계가 면이 아니라 확률에 가깝다. 대응점을 찾는 첫 단계부터 이미 성립하지 않는다. 같은 지점이 두 사진에서 다른 색으로 찍히면 대응을 찾을 방법이 없다.

세상을 종이접기로 재현하려는 시도였다고 말할 수 있다. 상자와 벽은 잘 접힌다. 안개는 접히지 않는다.

2020년에 전제가 바뀐다. Mildenhall과 동료들이 발표한 NeRF는 형태를 조립하지 않는다. 대신 함수를 하나 학습한다. 그 함수는 공간의 임의의 점에서 임의의 방향을 볼 때 무엇이 보이는지에 답한다. 입력은 사진 여러 장과 각 사진의 촬영 위치뿐이다. 3차원 모델링도, 깊이 센서도, 메시도 필요하지 않다. 만드는 일이 배우는 일로 바뀐 것이다.

이 전환 이후 5년 사이에 재구성 시간은 하루 단위에서 분 단위로 내려갔다. 렌더링은 프레임당 30초에서 초당 100프레임 이상으로 올라갔다. 이 장은 그 변화가 어떤 원리로 일어났는지를 따라간다. 그리고 무엇이 아직 비싼 채로 남아 있는지를 정직하게 적는다. <sup class="citation-group"><a class="citation" id="cite-ch22-1-1" href="#ref-ch22-1" role="doc-noteref" aria-label="참고문헌 1">[1]</a><a class="citation" id="cite-ch22-2-1" href="#ref-ch22-2" role="doc-noteref" aria-label="참고문헌 2">[2]</a><a class="citation" id="cite-ch22-3-1" href="#ref-ch22-3" role="doc-noteref" aria-label="참고문헌 3">[3]</a></sup>

### 22.2 빛의 장을 함수로 적다

NeRF가 학습하는 함수의 입력과 출력을 먼저 보자. 입력은 두 덩어리다. 공간의 한 점을 나타내는 좌표 세 개, 그리고 그 점을 바라보는 시선 방향이다. 방향은 개념적으로 각도 두 개로 말할 수 있고 논문도 입력을 5차원이라 부른다. 다만 실제 구현은 방향을 길이 1인 데카르트 벡터의 세 성분으로 넣는다. 출력은 두 가지다. 그 점의 밀도, 그리고 그 방향에서 보이는 색이다. 밀도는 빛을 얼마나 막는가를 나타낸다.

여기에 설계상의 비대칭이 하나 숨어 있다. 밀도는 방향과 무관하게 정해지고 색만 방향에 따라 달라진다. 이유가 있다. 물체의 형태는 어디서 보든 같아야 한다. 반면 금속의 하이라이트나 유리의 반사는 보는 위치에 따라 이동한다. 밀도를 방향에 의존시키면 시점을 옮길 때마다 형태 자체가 흔들린다. 색만 방향에 열어 두면 형태의 일관성과 방향 의존 반사를 동시에 얻는다. 종이접기가 못 하던 일이 이 비대칭에서 풀린다.

화면의 한 픽셀 값은 이렇게 얻는다. 카메라에서 그 픽셀을 향해 광선을 하나 쏜다. 광선 위의 여러 지점에서 함수에 질의해 밀도와 색을 받는다. 그리고 색을 밀도로 가중해 적분한다. 앞쪽에 밀도가 높은 지점이 있으면 뒤쪽 색은 가려진다. 이것은 신경망을 위해 새로 만든 식이 아니다. 반투명 매질을 그리는 고전 볼륨 렌더링 공식 그대로다.

결정적인 것은 이 적분 전체가 미분 가능하다는 사실이다. 렌더링한 결과와 원본 사진의 차이를 계산하면, 그 오차를 적분을 거슬러, 질의한 지점들을 거슬러, 신경망의 가중치까지 밀어 보낼 수 있다. 그러면 학습의 정의가 놀랄 만큼 단순해진다. 장면 하나에 신경망 하나를 통째로 과적합시키는 것이 전부다. 일반화가 목표가 아니다. 이 신경망은 이 장면만 알면 된다.

장면을 사진첩으로 보관하는 대신 질문에 답하는 안개 지도를 한 권 만들어 두는 셈이다. 사진을 꺼내 보는 것이 아니다. 광선이 안개 속을 지나며 색을 조금씩 주워 모아 픽셀 하나를 완성한다.

광선 위의 지점을 어디에 둘지가 또 하나의 설계다. 균일하게 놓으면 대부분이 빈 공간에 낭비된다. NeRF는 두 단계로 나눈다. 먼저 성긴 신경망이 광선 위 64개 지점을 보고 밀도의 대략적 분포를 낸다. 그 분포를 확률로 삼아 128개 지점을 밀도가 있을 만한 곳에 추가로 뽑는다. 정밀 신경망은 처음 64개와 새 128개를 합친 192개 지점 전부를 본다.

여기서 숫자를 혼동하기 쉽다. 서로 다른 지점은 192개다. 신경망 질의 횟수는 성긴 망 64회와 정밀 망 192회를 더한 256회다. 지점 수와 질의 횟수는 서로 다른 단위다. 64와 128을 더해 256이 되는 것이 아니다.

| 항목 | 값 |
|---|---|
| 광선당 성긴 단계 샘플 지점 | 64 |
| 광선당 정밀 단계 샘플 지점 | 192 (성긴 64 + 추가 128) |
| 광선당 신경망 질의 횟수 | 256 (성긴 64회 + 정밀 192회) |
| 학습 배치 | 광선 4,096개 |
| 학습 반복 | 100,000~300,000회 |

<p class="table-source">표 출처: <sup class="citation-group"><a class="citation" id="cite-ch22-1-2" href="#ref-ch22-1" role="doc-noteref" aria-label="참고문헌 1">[1]</a></sup> (본문 기준으로 재구성)</p>

<sup class="citation-group"><a class="citation" id="cite-ch22-1-3" href="#ref-ch22-1" role="doc-noteref" aria-label="참고문헌 1">[1]</a></sup>

### 22.3 좌표를 화음으로 바꾸다

좌표 세 개를 그대로 신경망에 넣으면 결과가 흐릿하게 나온다. 같은 신경망, 같은 데이터, 같은 학습 시간인데도 경계가 뭉개진다. 원인은 신경망 자체의 성질에 있다. 일반적인 신경망은 입력에 대해 완만하게 변하는 함수를 먼저, 훨씬 쉽게 학습한다. 급격히 변하는 함수는 훨씬 나중에, 훨씬 어렵게 배운다. 스펙트럴 바이어스라 부르는 편향이다. Tancik과 동료들이 2020년에 이 성질을 푸리에 특징이라는 틀로 정리했다.

문제를 좌표 쪽에서 보면 이렇다. 3.51미터와 3.52미터는 숫자로 거의 같다. 신경망 입장에서 두 입력은 거의 구별되지 않는다. 그런데 벽과 창틀의 경계는 그 1센티미터 사이에 있다. 입력이 구별되지 않으면 출력도 구별될 수 없다.

NeRF의 해법은 좌표를 넣기 전에 사인과 코사인의 사다리를 통과시키는 것이다. 주파수를 두 배씩 올린 사인·코사인 값을 나란히 늘어놓아 저차원 좌표를 고차원 벡터로 부풀린다. 가장 낮은 주파수 항은 두 좌표를 거의 같게 본다. 가장 높은 주파수 항은 1센티미터 차이에도 값이 크게 달라진다. 결과적으로 공간적으로 아주 가까운 두 점이 인코딩 후에는 뚜렷이 다른 벡터가 된다. 신경망은 그 차이를 근거로 미세한 경계를 표현할 수 있다.

피아노 건반으로 위치를 말하는 것과 같다. 옥타브가 다른 열 개의 음을 동시에 눌러 좌표를 표현하면 3.51미터의 화음과 3.52미터의 화음은 확연히 다르게 울린다. 신경망은 숫자의 근접성이 아니라 화음의 차이를 듣고 경계를 그린다.

위치와 방향에 쓰는 주파수 개수가 다르다. 방향에 낮은 주파수를 쓰는 이유는 방향 의존 효과가 본래 완만하기 때문이다. 하이라이트는 시점을 조금 옮기면 조금 움직인다. 1도 차이로 색이 급변하는 물체는 드물다.

| 구성 요소 | 값 |
|---|---|
| 신경망 | MLP 8층 × 256채널, 5층에 스킵 연결, 뒤에 128채널 1층 |
| 입력 | 위치 3차원 + 시선 방향 단위벡터 3차원 |
| 출력 | 밀도 1 + 색 RGB 3 |
| 위치 인코딩 | L=10, 3차원이 60차원으로 |
| 방향 인코딩 | L=4, 3차원이 24차원으로 |
| 주파수 범위 | 2의 0제곱부터 2의 L-1제곱까지 옥타브 상승 |

<p class="table-source">표 출처: <sup class="citation-group"><a class="citation" id="cite-ch22-4-1" href="#ref-ch22-4" role="doc-noteref" aria-label="참고문헌 4">[4]</a></sup> (본문 기준으로 재구성)</p>

이 장치 하나의 유무가 결과 품질을 눈에 띄게 가른다. 그리고 뒤에 나오는 가속 기법들은 모두 같은 질문의 다른 답이다. 좌표를 어떤 형태로 표현해야 신경망이 적은 계산으로 많은 디테일을 담는가. <sup class="citation-group"><a class="citation" id="cite-ch22-4-2" href="#ref-ch22-4" role="doc-noteref" aria-label="참고문헌 4">[4]</a></sup>

### 22.4 계산 청구서

NeRF의 아름다움은 전부 반복 계산으로 지불된다. 픽셀 하나를 만들려면 신경망을 256번 호출해야 한다. 800×800 이미지는 광선이 64만 개다. 곱하면 1억 6,400만 회다. 논문 부록은 이미지 한 장당 1억 5천만에서 2억 회 사이의 질의가 필요하다고 적는다. 학습은 이 렌더링을 수십만 번 반복하는 일이다.

손으로 그린 극사실 초상화 같다. 완성작은 사진과 구분이 안 가지만 한 장에 이틀이 걸린다. 증강현실은 초당 60장을 요구하는 매체다.

| 항목 | 값 | 측정 조건 |
|---|---|---|
| 학습 | 장면당 약 1~2일 | NVIDIA V100 1장 |
| 렌더링 | 프레임당 약 30초 | V100, 800×800 |
| 이미지 1장당 신경망 질의 | 1억 5천만~2억 회 | 800×800 |
| 60 Hz 디스플레이 예산 | 프레임당 16.7 ms | 모든 계산 포함 |
| 90 Hz 헤드셋 예산 | 프레임당 11.1 ms | 모든 계산 포함 |

<p class="table-source">표 출처: <sup class="citation-group"><a class="citation" id="cite-ch22-5-1" href="#ref-ch22-5" role="doc-noteref" aria-label="참고문헌 5">[5]</a></sup> (본문 기준으로 재구성)</p>

간극의 크기를 계산해 보면 문제의 성격이 드러난다. 30초를 16.7 ms로 나누면 약 1,800배다. 90 Hz 기준인 11.1 ms로 나누면 약 2,700배다. 그것도 렌더링만 그렇다. 장면을 처음 만드는 학습 비용까지 넣으면 간극은 더 벌어진다.

이 두 숫자가 이후 몇 년의 연구 방향을 정했다. 품질은 이미 증명됐다. 필요한 것은 세 자릿수 이상의 가속이다. 그리고 가속은 두 갈래로 갈렸다. 학습을 줄이는 쪽과 렌더링을 줄이는 쪽이다.

측정 조건을 기억해 둘 필요가 있다. 프레임당 30초는 V100에서 800×800 합성 장면을 그린 값이다. 뒤에 나올 가속 배수들은 다른 GPU, 다른 해상도, 다른 종류의 장면에서 측정된 것이므로 배수를 그대로 인과로 읽으면 안 된다. <sup class="citation-group"><a class="citation" id="cite-ch22-5-2" href="#ref-ch22-5" role="doc-noteref" aria-label="참고문헌 5">[5]</a></sup>

### 22.5 표를 붙여 가속하다

Müller와 동료들이 2022년에 낸 답은 역설적이다. 신경망이 느리면 신경망을 작게 만들고, 정보를 학습 가능한 조회표에 지게 한다.

공간을 여러 해상도의 격자로 동시에 덮는다. 거친 격자부터 촘촘한 격자까지 여러 겹이다. 어떤 좌표를 질의하면 각 해상도에서 주변 격자점 값을 보간해 가져온다. 모든 해상도의 결과를 이어 붙여 하나의 벡터로 만들고, 그 벡터를 아주 작은 신경망에 통과시킨다. 표현의 무게중심이 신경망에서 표로 옮겨 간 것이다.

문제는 촘촘한 격자의 격자점 수가 폭발한다는 것이다. 여기서 해시가 등장한다. 거친 레벨은 격자점 수가 표 크기보다 작으므로 격자점과 표의 칸이 일대일로 대응한다. 미세 레벨은 그렇지 않다. 격자점 좌표를 해시 함수로 고정 크기 표의 인덱스로 사상한다. 당연히 서로 다른 격자점이 같은 칸을 가리키는 충돌이 생긴다.

기묘한 선택은 여기다. 저자들은 충돌을 해결하지 않는다. 충돌한 칸의 값은 여러 격자점의 요구가 섞인 값이 된다. 그런데 장면의 대부분은 빈 공간이다. 밀도가 있는 지점에서 오는 그래디언트가 빈 공간에서 오는 그래디언트를 압도한다. 그래서 최적화가 진행되면 칸의 값은 중요한 쪽에 맞춰 자리를 잡는다. 여러 해상도가 겹쳐 있고 뒤에 작은 신경망이 붙어 있으므로, 한 레벨에서 섞인 정보는 다른 레벨의 정보로 분해된다.

전문가에게 전부 암기시키는 대신 작은 사전 여러 권을 쥐여 주고 찾아보게 하는 것과 같다. 대략적인 사전부터 세밀한 사전까지 있다. 페이지가 모자라 두 단어가 같은 칸을 쓰게 되어도, 실제로 자주 찾는 단어 쪽으로 칸의 내용이 저절로 맞춰진다.

이 구조에는 조건 분기가 없다. 어떤 좌표가 와도 정해진 횟수의 해시 계산과 보간을 한다. GPU에서 완전히 병렬화된다. 저자들은 여기에 더해 인코딩과 신경망과 렌더링을 하나의 CUDA 커널로 융합했다. 중간 결과가 메모리를 왕복하는 비용까지 없앴다.

| 인코딩 구성 | 파라미터 | 11,000 스텝 학습 시간 | PSNR |
|---|---|---|---|
| 주파수 인코딩 | 신경망 438,000 | 12분 45초 | 자료에 없음 |
| 해시 표 T=2의 14제곱 | 신경망 10,000 + 인코딩 494,000 | 1분 48초 | 22.61 |
| 해시 표 T=2의 19제곱 | 신경망 10,000 + 인코딩 1,260만 | 1분 47초 | 24.58 |

<p class="table-source">표 출처: <sup class="citation-group"><a class="citation" id="cite-ch22-2-2" href="#ref-ch22-2" role="doc-noteref" aria-label="참고문헌 2">[2]</a></sup> (본문 기준으로 재구성)</p>

표를 읽을 때 조심할 지점이 셋 있다. 첫째, 이 시간들은 학습 완료까지의 시간이 아니라 11,000 스텝을 도는 데 걸린 시간이다. 그래서 표를 키운 효과는 시간이 아니라 품질로 나타난다. T를 2의 14제곱에서 2의 19제곱으로 키우면 시간은 1분 48초에서 1분 47초로 사실상 같고 PSNR이 22.61에서 24.58로 오른다. 표를 키우면 학습이 빨라진다는 서술은 비교 축을 잘못 짚은 것이다.

둘째, 논문 캡션은 주파수 인코딩보다 8배 이상 빠르다고 적지만 같은 캡션의 실측값으로는 765초 대 108초, 약 7.1배다. 셋째, 주파수 인코딩 쪽 438,000개는 전부 신경망 파라미터이고 해시 쪽은 신경망 1만에 인코딩 49만 4천이다. 파라미터 수가 같다는 말은 총량의 근사일 뿐 동종 비교가 아니다.

그래도 방향은 분명하다. 학습 시간이 수 일에서 수 초 단위로 내려갔다. 논문 자신의 표현도 몇 초 안에 학습한다는 것이다. 흔히 인용되는 5분 이내라는 수치는 논문의 성능 주장이 아니라 벤치마크 표의 학습 예산 열 이름이다.

남은 문제는 렌더링이다. 이쪽은 실시간이 되지 않았다.

| 데이터셋 | Instant-NGP Base | Instant-NGP Big |
|---|---|---|
| Mip-NeRF 360 | 11.7 FPS, 약 85 ms | 9.43 FPS, 약 106 ms |
| Tanks & Temples | 17.1 FPS, 약 58 ms | 14.4 FPS, 약 69 ms |
| Deep Blending | 3.26 FPS, 약 307 ms | 2.79 FPS, 약 358 ms |

<p class="table-source">표 출처: <sup class="citation-group"><a class="citation" id="cite-ch22-2-3" href="#ref-ch22-2" role="doc-noteref" aria-label="참고문헌 2">[2]</a></sup> (본문 기준으로 재구성)</p>

장면에 따라 프레임당 58 ms에서 358 ms다. 90 Hz 예산인 11.1 ms와 비교하면 아직 다섯 배에서 서른두 배다. 수십 밀리초라는 요약은 가장 유리한 데이터셋만 본 것이다. 학습 병목은 이틀에서 커피 한 잔으로 바뀌었다. 렌더링 병목은 그대로 남았다. <sup class="citation-group"><a class="citation" id="cite-ch22-2-4" href="#ref-ch22-2" role="doc-noteref" aria-label="참고문헌 2">[2]</a></sup>

### 22.6 신경망을 버리고 알갱이를 뿌리다

Kerbl과 동료들이 2023년에 낸 답은 방향을 완전히 바꾼다. 장면을 함수로 두고 광선마다 샘플링하는 구조 자체를 버린다. 대신 반투명한 3차원 타원체 수백만 개를 공간에 배치한다.

각 타원체는 가우시안이다. 중심에서 멀어질수록 불투명도가 부드럽게 떨어진다. 모양은 이방성이다. 방향에 따라 늘어난 타원이므로 평평한 벽은 납작한 타원으로, 가늘고 긴 구조는 길쭉한 타원으로 맞출 수 있다. 색은 하나의 RGB 값이 아니라 구면조화 계수로 표현한다. 보는 방향에 따라 색이 달라지는 성질이 여기에 담긴다.

공분산 행렬을 그대로 최적화하면 물리적으로 성립하지 않는 값이 나오기 쉽다. 그래서 회전 쿼터니언과 축별 크기 벡터로 분해해 최적화한다. 어떤 값이 와도 유효한 타원이 된다.

렌더링이 핵심이다. 레이 마칭이 아니라 래스터화다. 각 가우시안을 화면에 투영하면 2차원 타원이 된다. 이것이 splat이다. 투영된 타원들을 깊이 순으로 알파 합성하면 그림이 완성된다. 광선을 따라 전진하며 반복 질의하는 과정이 통째로 사라진다. 그리고 래스터화는 그래픽 카드가 30년간 최적화해 온 바로 그 연산이다. 속도의 차원이 다르다.

안개 지도를 한 장 한 장 더듬어 읽는 대신 색색의 반투명 젤리 알갱이 수백만 개를 공간에 흩뿌려 놓는 것과 같다. 보는 쪽에서는 그 알갱이들을 유리창에 눌러 붙이듯 겹쳐 놓기만 하면 그림이 된다.

속도의 차이가 구조에서 오는 것임을 짚어 둘 필요가 있다. 레이 마칭은 픽셀 하나마다 광선을 따라 전진하며 정해진 횟수만큼 질의한다. 화면 픽셀 수와 광선당 질의 수가 곱해진다. 래스터화는 반대 방향이다. 프리미티브 하나를 화면에 투영하고 그것이 덮는 픽셀에만 값을 더한다. 계산량이 프리미티브 수와 화면상 면적의 곱에 비례한다. 가우시안 대부분은 화면에서 작은 타원이고 많은 가우시안이 화면 밖으로 나가 아예 계산되지 않는다. 빈 공간을 지나며 질의를 낭비하는 일도 없다. 알갱이는 실제로 무언가 있는 자리에만 놓이기 때문이다.

결정적으로 이 투영과 합성 과정도 전부 미분 가능하다. 그래서 학습의 형태는 NeRF와 같다. 렌더링 결과와 사진의 차이를 역전파해 수백만 개 가우시안의 위치와 모양과 색을 동시에 조정한다. 신경망이 사라졌을 뿐 학습의 원리는 유지된다. 시작점은 SfM이 부산물로 내놓는 성긴 점군이다.

| 가우시안 1개의 성분 | 파라미터 수 |
|---|---|
| 위치 | 3 |
| 축별 크기 | 3 |
| 회전 쿼터니언 | 4 |
| 불투명도 | 1 |
| 색, 구면조화 3차 | 48 |
| 합계 | 59 |

<p class="table-source">표 출처: <sup class="citation-group"><a class="citation" id="cite-ch22-3-2" href="#ref-ch22-3" role="doc-noteref" aria-label="참고문헌 3">[3]</a></sup> (본문 기준으로 재구성)</p>

전형적인 장면이 가우시안 100만에서 500만 개를 쓴다. 500만 개면 실수가 2억 9,500만 개다. 이 숫자가 뒤에서 용량 문제로 돌아온다. <sup class="citation-group"><a class="citation" id="cite-ch22-3-3" href="#ref-ch22-3" role="doc-noteref" aria-label="참고문헌 3">[3]</a></sup>

### 22.7 스스로 개수를 정하고 타일로 그린다

알갱이를 뿌린다는 발상만으로는 작동하지 않는다. 몇 개를 어디에 둘지 사람이 정할 수 없기 때문이다. 장면마다 복잡한 부위와 밋밋한 부위가 다르다.

3DGS는 최적화 도중 개수를 스스로 조절한다. 먼저 위치 그래디언트가 큰 가우시안을 찾는다. 이것은 자기가 맡은 영역을 제대로 못 그리고 있다는 신호다. 그 가우시안이 작으면 복제해 빈 곳을 메운다. 지나치게 크면 둘로 쪼개 세부를 담게 한다. 반대로 불투명도가 임계값 아래로 떨어진 가우시안은 제거한다. 주기적으로 모든 불투명도를 0 근처로 리셋하는 장치도 있다. 카메라 근처에 쓸모없이 떠 있는 얼룩을 걸러내기 위한 것이다.

점묘화를 그리는 화가와 같다. 그리다가 점이 성기다 싶으면 하나 더 찍고, 점이 너무 뭉툭하다 싶으면 반으로 쪼개고, 거의 안 보이는 점은 지운다. 붓질 계획을 미리 세우지 않고 그리면서 정한다.

렌더링 쪽 장치는 타일 기반 래스터라이저다. 화면을 16×16 픽셀 타일로 나눈다. 가우시안 하나가 여러 타일에 걸치면 걸친 타일 수만큼 복제해 각각에 타일 번호와 깊이를 키로 붙인다. 그리고 프레임마다 이 키 전체를 GPU 기수 정렬로 한 번에 정렬한다.

정렬 횟수의 단위를 정확히 잡아야 한다. 정렬은 프레임당 한 번이다. 타일마다 한 번씩 돌리는 것이 아니다. 전역으로 한 번 정렬하면 각 타일이 자기 구간을 얻고, 그 결과 순서의 단위가 타일이 된다. 그러면 픽셀마다 추가로 정렬할 일이 없어진다. 픽셀당 정렬이 없다는 것이 속도의 실질이다. 역전파도 같은 타일 구간을 거꾸로 훑어 가우시안 개수에 제한 없이 그래디언트를 얻는다.

| 최적화 항목 | 값 |
|---|---|
| 밀도 제어 주기 | 100 반복마다 |
| 불투명도 리셋 주기 | 3,000 반복마다 |
| 타일 크기 | 16×16 픽셀 |
| 전체 학습 | 30,000 반복 |
| 실용 품질 도달 | 7,000 반복 |
| 깊이 정렬 | 프레임당 전역 1회, 순서 단위는 타일 |

<p class="table-source">표 출처: <sup class="citation-group"><a class="citation" id="cite-ch22-6-1" href="#ref-ch22-6" role="doc-noteref" aria-label="참고문헌 6">[6]</a></sup> (본문 기준으로 재구성)</p>

7,000 반복으로 이미 실용 품질이 나온다는 점이 실무에서 중요하다. 완전 학습의 6분의 1 정도 시간으로 결과를 먼저 확인하고, 쓸 만하다고 판단한 촬영만 끝까지 돌릴 수 있다. <sup class="citation-group"><a class="citation" id="cite-ch22-6-2" href="#ref-ch22-6" role="doc-noteref" aria-label="참고문헌 6">[6]</a></sup>

### 22.8 숫자로 보는 전환점

기술 세대의 전환은 같은 데이터에서 잰 숫자로 확인해야 한다. 표준 시험대는 Barron과 동료들이 2022년에 제시한 Mip-NeRF 360 데이터셋이다. 카메라가 대상 주위를 360도 도는 실내·실외 장면들이고, 배경이 무한히 멀고 중심 대상은 가깝다. 이 규모 불일치가 초기 NeRF가 가장 취약했던 조건이다. Mip-NeRF 360 자체는 비선형 장면 파라미터화와 왜곡 정칙화로 이 문제를 풀어 품질 기준선을 세웠다. 이전 세대인 mip-NeRF 대비 평균제곱오차를 57% 줄였다. 대가는 학습 시간이었다.

같은 코스에서 잰 랩타임 표를 읽는 일과 같다. 한 대는 완주에 며칠이 걸리지만 짐이 가볍다. 한 대는 40분에 끝내고 초당 130바퀴를 돌지만 트렁크가 0.7기가바이트다.

| 방식 | 학습 시간 | 렌더링 | 모델 용량 |
|---|---|---|---|
| Mip-NeRF 360 | 48 GPU·시간 환산 | 0.06 FPS | 8.6 MB |
| Plenoxels | 25분 49초 | 자료에 없음 | 2.1~2.7 GB |
| Instant-NGP Base | 5분 37초 | 11.7 FPS | 13 MB |
| Instant-NGP Big | 자료에 없음 | 9.43 FPS | 48 MB |
| 3DGS 7,000 반복 | 6분 25초 | 160 FPS | 523 MB |
| 3DGS 30,000 반복 | 41분 33초 | 134 FPS | 734 MB |

<p class="table-source">표 출처: <sup class="citation-group"><a class="citation" id="cite-ch22-7-1" href="#ref-ch22-7" role="doc-noteref" aria-label="참고문헌 7">[7]</a></sup> (본문 기준으로 재구성)</p>

학습 시간과 렌더링과 용량은 Mip-NeRF 360 데이터셋 기준이다. Plenoxels 용량만 세 데이터셋의 범위다. 표를 읽을 때 조건을 세 가지 붙여야 한다.

첫째, 이 측정은 A6000 한 장 기준이되 Mip-NeRF 360 방식만 예외다. 48시간은 A6000의 벽시계 시간이 아니다. A100 4장으로 12시간 돌린 것을 한 장 기준으로 환산한 GPU·시간이다. A100이 A6000보다 빠르다는 단서까지 논문이 붙여 놓았다. 시간과 GPU·시간은 다른 단위다.

둘째, Mip-NeRF 360 원 논문 자신이 보고하는 학습 비용은 이와 다르다. 32코어 TPU v2에서 250,000 반복을 돌려 장면당 6.2시간에서 8.8시간이다. 48시간을 Mip-NeRF 360의 학습 시간으로 쓰면 하드웨어와 단위가 함께 바뀐다.

셋째, FPS는 데이터셋별 원본 해상도에서 측정했다. 3DGS 논문 초록의 1080p 기준 30 FPS 이상, 저자 프로젝트 페이지의 1080p 기준 100 FPS 이상과 같은 축에 놓고 비교할 수 없다. 세 값의 불일치 사유도 공개 자료로는 확인되지 않는다.

세 데이터셋으로 넓혀 보면 실제 범위가 드러난다.

| 데이터셋 | 7K 학습 | 30K 학습 | 7K FPS | 30K FPS | 7K 용량 | 30K 용량 |
|---|---|---|---|---|---|---|
| Mip-NeRF 360 | 6분 25초 | 41분 33초 | 160 | 134 | 523 MB | 734 MB |
| Tanks & Temples | 6분 55초 | 26분 54초 | 197 | 154 | 270 MB | 411 MB |
| Deep Blending | 4분 35초 | 36분 2초 | 172 | 137 | 386 MB | 676 MB |

<p class="table-source">표 출처: <sup class="citation-group"><a class="citation" id="cite-ch22-7-2" href="#ref-ch22-7" role="doc-noteref" aria-label="참고문헌 7">[7]</a></sup> (본문 기준으로 재구성)</p>

30,000 반복 모델은 27분에서 42분 사이에 학습되고 134에서 154 FPS로 렌더링된다. 7,000 반복 모델은 4분 35초에서 6분 55초에 학습되고 160에서 197 FPS로 렌더링된다. 실촬영 장면의 최고값은 197 FPS다. 합성 장면에서는 180에서 300 FPS까지 나온다. 두 학습 길이의 값을 하나의 범위로 묶으면 안 된다. 41분에서 45분이라는 서술이 돌아다니지만 45분에 해당하는 측정값은 어느 데이터셋에도 없다.

트레이드오프의 구조는 이렇게 정리된다. Mip-NeRF 360은 최고 품질, 최악 속도, 최소 용량이다. Instant-NGP는 최고 학습속도, 중간 품질, 소용량이다. 3DGS는 최고 속도, 최고급 품질, 최악 용량이다. 3DGS가 지불한 대가는 계산이 아니라 저장 공간이다. <sup class="citation-group"><a class="citation" id="cite-ch22-7-3" href="#ref-ch22-7" role="doc-noteref" aria-label="참고문헌 7">[7]</a></sup>

### 22.9 용량이라는 대가

빠른 이유가 곧 무거운 이유다. 장면 하나가 수백만 개의 독립적인 가우시안이고 각각이 실수 59개를 들고 있다. 압축 없는 모델은 7,000 반복에서 270 MB에서 523 MB, 30,000 반복에서 411 MB에서 734 MB다. 참고로 같은 표에서 복셀 기반인 Plenoxels는 2.1 GB에서 2.7 GB다. 3DGS는 기가바이트급은 아니다. 다만 8.6 MB인 Mip-NeRF 360이나 13 MB인 Instant-NGP와 비교하면 두 자릿수 차이다.

배포 경로를 생각하면 이 차이가 곧 이탈률이다. 휴대폰이나 헤드셋에 내려받아 쓰는 형태라면 500 MB짜리 장면은 아무도 받지 않는다. 클라우드에서 스트리밍한다면 용량은 대역폭 비용으로 바뀐다. 어느 쪽이든 압축은 학술적 곁가지가 아니라 제품이 되기 위한 마지막 관문이다.

압축은 세 방향에서 이뤄진다. Fan, Wang, Wen, Zhu, Xu, Wang이 2024년에 제시한 LightGaussian이 세 방향을 한꺼번에 보여 준다.

첫째 가지치기다. 각 가우시안이 최종 화면에 실제로 얼마나 기여했는지를 잰다. 얼마나 자주 보이는지, 투영 면적이 얼마인지, 불투명도가 얼마인지를 종합해 전역 중요도를 매긴다. 하위를 제거하고 남은 것들을 짧게 재학습해 품질을 회복한다.

둘째 구면조화 차수 낮추기다. 색의 방향 의존성을 담는 48개 계수가 파라미터의 대부분이다. 고차 계수를 지식 증류로 저차에 흡수시킨다. 원본 모델이 만든 가짜 시점 영상을 교사로 삼는 방식이다.

셋째 벡터 양자화다. 중요도가 낮은 가우시안일수록 더 거친 코드북으로 표현해 비트 폭을 줄인다.

핵심 통찰은 가우시안들의 기여도가 극도로 불균등하다는 것이다. 그래서 균일하게 줄이는 것이 아니라 중요도에 비례해 차등 압축하는 것이 정답이 된다. 사진첩을 정리하는 일과 같다. 거의 보지 않는 사진은 버리고, 자주 보는 사진만 고화질로 남기고, 나머지는 해상도를 낮춘다.

| LightGaussian 보고값 | 값 |
|---|---|
| 평균 압축률 | 15배 |
| 렌더링 속도 | 144 FPS에서 237 FPS로 |
| 속도 향상폭 | 약 64% |
| 평가 데이터셋 | Mip-NeRF 360, Tanks & Temples |

<p class="table-source">표 출처: <sup class="citation-group"><a class="citation" id="cite-ch22-8-1" href="#ref-ch22-8" role="doc-noteref" aria-label="참고문헌 8">[8]</a></sup> (본문 기준으로 재구성)</p>

압축이 렌더링 속도까지 올린다는 점이 흥미롭다. 가우시안 수가 줄면 투영과 정렬과 합성의 양이 함께 줄기 때문이다. 다만 논문이 보고하는 것은 평균 압축률과 FPS 변화다. 원본 용량을 15로 나누어 압축 후 절대 용량을 짐작하는 계산은 논문이 제시한 값이 아니다. <sup class="citation-group"><a class="citation" id="cite-ch22-8-2" href="#ref-ch22-8" role="doc-noteref" aria-label="참고문헌 8">[8]</a></sup>

### 22.10 지도와 위치를 동시에

SLAM은 카메라가 두 가지를 동시에 푸는 문제다. 내가 지금 어디 있는가, 그리고 주변이 어떻게 생겼는가. 전자를 추적, 후자를 지도작성이라 한다. 둘은 서로를 필요로 한다. 위치를 알아야 관측을 지도에 올릴 수 있고, 지도가 있어야 위치를 맞출 수 있다.

전통적 SLAM의 지도는 두 종류였다. 성긴 특징점, 또는 부호거리장 복셀이다. 특징점 지도는 너무 듬성하다. 위치추정에는 충분하지만 보고 쓸 수 있는 장면이 아니다. 복셀 지도는 메모리를 많이 먹으면서도 관측하지 않은 영역을 빈 채로 남긴다.

신경 표현은 여기에 두 가지를 준다. 첫째 완결성이다. 학습된 사전 지식이 관측되지 않은 빈틈을 자연스럽게 메운다. 둘째 사진 수준의 렌더링이다. 지도가 곧 볼 수 있는 장면이 된다. 지도와 최종 결과물이 같은 물건이 되면 파이프라인 하나가 사라진다.

낯선 건물 안을 걸으며 지도를 그리는 사람을 생각하면 된다. 그 지도가 선 몇 개짜리 약도가 아니라 실제 사진으로 된 파노라마다. 그리고 자기 위치를 확인할 때 나침반을 보는 것이 아니라 자기가 그린 파노라마를 눈앞 풍경과 겹쳐 맞춰 본다.

전환점은 가우시안이었다. SplaTAM은 명시적 가우시안을 지도로 삼는다. 그러면 렌더링이 빠르다는 성질을 추적에도 그대로 쓸 수 있다. 현재 추정 자세로 지도를 렌더링해 실제 프레임과 비교하고, 그 오차를 자세 파라미터로 역전파해 자세를 직접 최적화한다. 별도의 특징점 매칭이 필요 없다. 여기에 실루엣 마스크를 두어 이 픽셀은 아직 관측된 적이 없다는 사실을 명시적으로 구분한다. 미탐색 영역에는 가우시안을 새로 추가해 지도를 구조적으로 확장한다.

| 계보 | 지도 표현 | 입력 | 보고된 성능 |
|---|---|---|---|
| iMAP, Sucar 등 2021 | 단일 MLP | RGB-D | 실시간 학습 첫 시도 |
| NICE-SLAM, Zhu 등 2022 | 계층적 특징 격자 | RGB-D | 대형 실내로 확장 |
| SplaTAM, Keetha 등 2024 | 명시적 3D 가우시안 | 자세 없는 RGB-D | 기존 방식 대비 최대 2배 |
| MonoGS, Matsuki 등 2024 | 3D 가우시안 단일 표현 | 단안 RGB | 3 FPS, SfM 초기화 불필요 |

<p class="table-source">표 출처: <sup class="citation-group"><a class="citation" id="cite-ch22-9-1" href="#ref-ch22-9" role="doc-noteref" aria-label="참고문헌 9">[9]</a></sup> (본문 기준으로 재구성)</p>

MonoGS는 깊이 센서 없이 단안 RGB만으로 같은 일을 해낸다. 3DGS를 유일한 표현으로 쓰고 SfM 초기화도 요구하지 않으며, 투명 물체와 미세 구조까지 복원한다. 다만 3 FPS다. 프레임당 약 333 ms다. 90 Hz 예산인 11.1 ms의 서른 배다. 지도가 사진 품질이 되는 방향은 분명하지만, 이 수치는 아직 제품이 아니다. 그 간극이 현재 이 분야의 최전선이다. <sup class="citation-group"><a class="citation" id="cite-ch22-9-2" href="#ref-ch22-9" role="doc-noteref" aria-label="참고문헌 9">[9]</a></sup>

### 22.11 카메라를 모르고도

지금까지의 모든 재구성에는 숨은 전제가 있었다. 각 사진을 어디서 어떤 렌즈로 찍었는지를 먼저 알아야 한다는 것이다. 카메라의 위치와 방향, 그리고 초점거리 같은 내부 파라미터다. 보통 COLMAP 같은 SfM 도구로 얻는다.

그런데 이 단계는 느리고 잘 실패한다. 사진 수가 적으면 안 된다. 시점 차이가 크면 안 된다. 질감 없는 흰 벽이 많으면 대응점을 찾을 수 없어 안 된다. 유리와 반사면이 많으면 잘못된 대응을 만들어 더 나쁘다. 그리고 SfM이 실패하면 그 촬영은 통째로 버려진다. 현장에 다시 가야 한다.

Wang과 동료들이 2024년에 발표한 DUSt3R는 이 전제 자체를 없앤다. 사진 두 장을 입력받아 각 픽셀에 대응하는 3차원 좌표를 담은 포인트맵을 곧바로 회귀한다. 방정식을 세워 풀지 않는다. 신경망이 좌표를 직접 출력한다.

핵심 설계는 출력 좌표계다. 두 포인트맵을 모두 첫 번째 카메라의 좌표계로 내놓게 한다. 그러면 두 사진 사이의 상대 자세가 두 포인트맵의 대응에서 자동으로 따라 나온다. 투영 기하학의 제약을 방정식으로 푸는 대신 학습으로 흡수한 것이다. 사진이 세 장 이상이면 쌍별 결과를 전역 정렬로 묶는다.

지도 제작자에게 사진 두 장을 건네며 이걸 어디서 찍었는지는 나도 모른다고 말하는 것과 같다. 그런데 이 제작자는 사진만 보고 두 촬영 지점의 관계를 알아맞히고 입체 지도를 내놓는다. 삼각측량을 배운 것이 아니라 수많은 장면을 봐서 감이 생긴 것이다.

논문이 성능을 주장하는 과제는 셋이다. 단안 깊이 추정, 다시점 깊이 추정, 상대 자세 추정이다. 그 외에 픽셀 대응, 카메라 내부 파라미터 복원, 절대 자세 추정은 본문에서 파생 활용으로 소개된다. 하나의 네트워크가 다섯 개 이상의 고전 기하 과제를 통합한다는 식의 집계는 논문에 없다. 벤치마크 수와 응용 수를 섞은 계산이다.

구조는 특별하지 않다. 표준 트랜스포머다. ViT 인코더와 교차 주의 디코더를 쓰고 사전학습 가중치를 그대로 활용한다. 새로운 기하 연산을 발명한 것이 아니라, 기하 문제를 회귀 문제로 재정의한 것이 기여다. 입력 2장부터 동작하고 카메라 파라미터 사전 지식이 필요 없다는 것이 실무적 의미다. 촬영을 잘해야 한다는 진입장벽이 낮아진다. <sup class="citation-group"><a class="citation" id="cite-ch22-10-1" href="#ref-ch22-10" role="doc-noteref" aria-label="참고문헌 10">[10]</a></sup>

### 22.12 한 장의 사진에서 깊이를

사람은 한 눈을 감아도 어느 것이 가까운지 안다. 단안 깊이 추정은 그 능력을 학습으로 재현한다. 문제는 원리가 아니라 데이터다.

깊이 정답은 출처마다 성격이 다르다. 실내 RGB-D 스캔, 실외 라이다, 스테레오 영화, 웹 사진에서 SfM으로 뽑은 깊이가 모두 후보다. 그런데 단위가 다르다. 어떤 것은 미터이고 어떤 것은 상대값이다. 원점도 다르다. 어떤 것은 깊이이고 어떤 것은 역깊이다. 정확도도 다르다. 그냥 합쳐 학습시키면 서로 충돌해 망가진다.

Ranftl과 동료들이 제시한 MiDaS의 해법은 손실 함수 쪽에 있다. 예측과 정답을 각각 정규화해 배율과 오프셋을 제거한 뒤 비교한다. 그러면 전체가 두 배 멀다는 차이나 전체가 1미터씩 밀렸다는 차이는 벌점을 받지 않는다. 오직 상대적인 앞뒤 관계만 학습된다. 호환되지 않던 데이터셋들이 이 손실 아래에서는 함께 쓸 수 있게 된다. 여기에 데이터셋별 가중치를 다루는 다목적 학습과 관련 과제로 인코더를 사전학습하는 전략이 더해진다. 검증은 학습에 쓰지 않은 데이터셋으로만 평가하는 제로샷 교차 데이터셋 전이로 한다.

여러 나라 사람이 각자 다른 단위로 적어 온 키 기록을 합치는 일과 같다. 센티미터, 인치, 반장보다 큼 같은 표기가 섞여 있다. 절대 수치를 맞추려 들면 싸움이 나지만 누가 누구보다 큰가의 순서만 맞추기로 하면 모든 기록을 함께 쓸 수 있다.

남는 한계가 결정적이다. 결과가 상대 깊이다. 무엇이 앞인지는 알지만 몇 미터인지는 모른다.

Yang과 동료들의 Depth Anything은 다른 병목을 공격한다. 라벨된 깊이 데이터의 절대량이다. 답은 라벨 없는 일반 사진을 대규모로 끌어들이는 데이터 엔진이다. 먼저 라벨된 데이터로 교사 모델을 학습시킨다. 그 교사로 6,200만 장의 라벨 없는 사진에 의사 라벨을 붙인다. 그 의사 라벨로 학생 모델을 학습시킨다.

그냥 따라 하게만 하면 학생은 교사를 넘지 못한다. 그래서 두 장치를 넣는다. 첫째, 학생에게 강한 데이터 증강을 걸어 훨씬 어려운 조건에서 교사의 답을 맞히게 한다. 색을 왜곡하고 이미지를 잘라 붙인다. 쉬운 지름길을 막아 더 견고한 표현을 강제하는 것이다. 둘째, DINOv2 같은 사전학습 인코더의 특징을 따라가도록 보조 손실을 걸어 의미론적 사전지식을 물려받게 한다.

V2에서는 한 걸음 더 나간다. 라벨된 실사진을 전부 합성 이미지로 교체했다. 실사 깊이 라벨에는 센서 노이즈와 경계 번짐이 있어 오히려 디테일을 망친다. 합성 데이터는 완벽하게 날카로운 정답을 준다. 합성으로 강한 교사를 만들고 그 교사가 대규모 실사진에 의사 라벨을 붙여 도메인 격차를 메우는 구조다.

그래도 미터는 나오지 않는다. 마지막 조각이 Bochkovskii와 동료들의 Depth Pro다. 사진 한 장에서 절대 거리를 추정하려면 원리적으로 초점거리를 알아야 한다. 같은 사진이 가까운 작은 물체일 수도 있고 먼 큰 물체일 수도 있는 모호성이 초점거리로만 해소되기 때문이다. 그런데 웹에서 구한 사진의 EXIF는 없거나 틀린 경우가 태반이다. Depth Pro는 초점거리 자체를 이미지에서 추정하는 별도 헤드를 둔다. 렌즈가 세상을 얼마나 넓게 담았는지를 사진에서 읽어 내어 거리로 환산하는 목수다.

해상도 문제도 정면으로 다룬다. 고해상도 트랜스포머는 계산량이 폭발한다. 그래서 입력을 여러 스케일로 나누어 겹치는 패치로 자르고, 같은 ViT 백본을 패치들에 병렬로 적용한 뒤 합친다. 덕분에 머리카락이나 잎맥 같은 경계가 살아난다. 평가 지표도 바꿨다. 평균 오차 대신 경계 정확도를 따로 측정하는 지표를 도입했다. 무엇을 재느냐가 무엇이 좋아지느냐를 결정하기 때문이다.

| 모델 | 출력 | 핵심 데이터 | 조건 |
|---|---|---|---|
| MiDaS | 스케일·시프트 불변 상대 역깊이 | 상보적 데이터셋 5개 혼합 | 제로샷 교차 데이터셋 평가 |
| Depth Anything V1 | 상대 깊이 | 라벨 없는 사진 약 6,200만 장 | 공개 데이터셋 6개 제로샷 |
| Depth Anything V2 | 상대 깊이, 메트릭 버전 별도 | 합성 라벨 교사 + 대규모 의사 라벨 | 파라미터 2,500만~13억 |
| Depth Pro | 미터 단위 절대 깊이 | 실사와 합성 혼합 | 1536×1536, V100에서 0.3초 |

<p class="table-source">표 출처: <sup class="citation-group"><a class="citation" id="cite-ch22-11-1" href="#ref-ch22-11" role="doc-noteref" aria-label="참고문헌 11">[11]</a><a class="citation" id="cite-ch22-12-1" href="#ref-ch22-12" role="doc-noteref" aria-label="참고문헌 12">[12]</a><a class="citation" id="cite-ch22-13-1" href="#ref-ch22-13" role="doc-noteref" aria-label="참고문헌 13">[13]</a></sup> (본문 기준으로 재구성)</p>

해상도 표기에 단위 함정이 하나 있다. 1536×1536은 2,359,296화소, 약 236만 화소다. 논문의 2.25 메가픽셀이라는 표현은 1 메가픽셀을 2의 20제곱으로 세는 이진 기준이다. 이를 십진으로 옮겨 225만 화소라고 쓰면 실제보다 약 5% 낮아진다.

시간 표기에도 조건이 붙는다. 0.3초는 V100 기준이다. NeRF의 1~2일과 프레임당 30초도 같은 V100에서 잰 값이다. 두 결과를 세대 차이로 대비시킬 때 하드웨어가 같다는 사실을 빼면 안 된다. 바뀐 것은 GPU가 아니라 방법이다. <sup class="citation-group"><a class="citation" id="cite-ch22-11-2" href="#ref-ch22-11" role="doc-noteref" aria-label="참고문헌 11">[11]</a><a class="citation" id="cite-ch22-12-2" href="#ref-ch22-12" role="doc-noteref" aria-label="참고문헌 12">[12]</a><a class="citation" id="cite-ch22-13-2" href="#ref-ch22-13" role="doc-noteref" aria-label="참고문헌 13">[13]</a></sup>

### 22.13 가상이 현실 뒤로 숨는 법

증강현실이 합성이 아니라 현실로 보이는 결정적 단서는 가림이다. 가상 캐릭터가 실제 기둥 뒤로 사라져야 한다. 손을 뻗으면 손가락이 가상 버튼 앞에 와야 한다. 사용자는 조명이 조금 틀린 것은 넘어간다. 가상 물체가 벽을 뚫고 떠 있으면 즉시 몰입이 깨진다.

첫 번째 갈래는 깊이다. ARCore의 깊이 API는 전용 센서 없이 움직임으로부터의 깊이를 쓴다. 사용자가 기기를 움직이는 동안 서로 다른 각도에서 찍힌 프레임들을 비교해 픽셀마다 시차를 재고 거리로 환산한다. 스테레오 카메라 두 대를 시간으로 대체한 셈이다. 그래서 이 경로는 사용자가 움직이기 전에는 깊이를 내놓지 못한다. 특징이 없는 흰 벽에서도 부정확하다. 다만 이 조건은 움직임 기반 경로에 한정된다. ToF 센서가 있는 기기에서는 가용한 모든 소스를 자동으로 병합하므로 카메라가 정지해 있어도 깊이가 나온다.

| ARCore 깊이 API | 값 |
|---|---|
| 깊이 추정 범위 | 0~65 m |
| 가장 정확한 구간 | 기기로부터 0.5~5 m |
| 움직임 기반 경로 | 기기를 움직인 뒤 유효 |
| ToF 탑재 기기 | 가용 소스 자동 병합, 정지 상태에서도 깊이 제공 |

<p class="table-source">표 출처: <sup class="citation-group"><a class="citation" id="cite-ch22-14-1" href="#ref-ch22-14" role="doc-noteref" aria-label="참고문헌 14">[14]</a></sup> (본문 기준으로 재구성)</p>

두 번째 갈래는 의미분할이다. 깊이맵만으로는 경계가 흐려 머리카락 같은 미세 구조에서 반드시 실패한다. 이 픽셀은 사람이다라는 의미 정보는 깊이와 독립적인 단서를 준다. Kirillov와 동료들의 Segment Anything 같은 프롬프트 기반 분할 기초 모델은 이미지 1,100만 장에 붙인 10억 개 이상의 마스크로 학습했고, 제로샷 성능이 지도학습 기법과 대등하거나 우수하다. 학습 때 보지 못한 물체까지 잘라 내므로 임의의 장면에서 마스크를 즉석에서 얻을 수 있다.

두 갈래가 왜 서로를 필요로 하는지는 해상도에서도 드러난다. 깊이맵은 보통 컬러 영상보다 낮은 해상도로 계산된다. 계산량을 줄이기 위한 선택이다. 그래서 깊이맵을 그대로 확대해 쓰면 경계에 계단이 생기고, 가상 물체의 윤곽이 실제 물체의 윤곽과 한두 픽셀씩 어긋난다. 정지 화면에서는 눈에 잘 안 띈다. 움직이면 그 어긋남이 떨린다. 사람의 시각은 정지한 오차보다 움직이는 오차에 훨씬 민감하다.

무대에서 배우와 영사된 배경이 자연스럽게 겹치게 하는 일과 같다. 하나는 누가 앞에 서 있나를 거리로 재는 방식이다. 다른 하나는 이 실루엣은 사람이다를 알아보고 오려 내는 방식이다. 거리만 재면 머리카락 끝에서 티가 난다. 오려 내기만 하면 앞뒤가 뒤바뀐다.

그래서 실무에서는 둘을 결합한다. 깊이로 대략의 앞뒤를 정하고 의미 마스크로 경계를 다듬는다. 그래도 남는 문제가 있다. 반투명한 것이다. 유리컵이나 얇은 커튼은 앞에 있으면서 뒤를 보여 준다. 앞이냐 뒤냐의 이진 판정으로는 표현되지 않는다. 가림은 가장 먼저 눈에 띄고 가장 늦게까지 안 풀린 문제다. <sup class="citation-group"><a class="citation" id="cite-ch22-14-2" href="#ref-ch22-14" role="doc-noteref" aria-label="참고문헌 14">[14]</a></sup>

### 22.14 촬영하지 않은 것을 만들어 내다

재구성이 있는 것을 옮기는 일이라면 생성은 없는 것을 만드는 일이다. 3차원 생성의 근본 난점은 데이터다. 텍스트와 이미지를 짝지은 데이터는 수십억 쌍이 있다. 라벨된 3차원 데이터는 그 근처에도 못 간다.

세 세대의 답이 있었다. 1세대인 DreamFusion은 3차원 데이터를 아예 포기한다. 대신 이미 학습된 2차원 확산 모델을 심판으로 쓴다. 무작위로 초기화한 NeRF를 임의 각도에서 렌더링하고, 이 그림이 해당 텍스트의 그럴듯한 이미지인가를 2차원 모델에게 묻는다. 그 판단을 점수 증류 손실로 NeRF에 역전파한다. 3차원 데이터 없이 3차원이 나온다.

비용 구조를 정확히 봐야 한다. 물체 하나마다 15,000회의 최적화 스텝을 돈다. 한 건 생성에 TPUv4 4칩으로 약 1.5시간이 걸린다. 그 시간의 절반은 NeRF 렌더링, 절반은 확산 모델 평가에 쓰인다. 그리고 최적화 중 NeRF 렌더 해상도는 64×64이고 확산 모델도 64×64 기반 모델만 쓴다. 저해상도에서 1.5시간이라는 점이 이 방식의 실질적 한계다. 수천 회 최적화라는 요약은 실제의 절반 이하로 비용을 축소한다.

2세대인 LRM은 발상을 뒤집는다. 대규모 3차원 및 다시점 데이터로 트랜스포머를 한 번 크게 학습시켜 두고, 추론은 한 번의 전방 통과로 끝낸다. 사진 한 장을 넣으면 약 5초에 3차원이 나온다. 최적화 루프가 사라진 것이 차이의 전부다.

1세대는 조각가에게 눈을 가리고 조각하게 하면서 옆에서 비평가가 지금 각도에서 보니 아직 사자 같지 않다고 수천 번 지적해 주는 방식이다. 2세대는 수백만 개의 조각을 이미 본 장인이 사진 한 장을 보고 5초 만에 깎아 내는 방식이다.

3세대인 TRELLIS는 출력 표현의 문제를 푼다. 구조화된 잠재표현을 하나 만들고 거기서 래디언스 필드, 3차원 가우시안, 메시를 모두 디코딩할 수 있게 했다. 같은 자산을 용도에 따라 다른 형식으로 꺼내 쓸 수 있고 국소 편집도 가능하다.

| 세대 | 모델 | 규모 | 생성 비용 | 출력 |
|---|---|---|---|---|
| 1세대 | DreamFusion, 2023 | 3차원 학습 데이터 0 | 물체당 15,000 스텝, TPUv4 4칩 약 1.5시간 | NeRF |
| 2세대 | LRM, 2024 | 파라미터 5억, 학습 객체 약 100만 | 단일 이미지에서 약 5초 | 3차원 형상 |
| 3세대 | TRELLIS, 2024 | 파라미터 20억, 3차원 객체 50만 | 자료에 없음 | 래디언스 필드, 가우시안, 메시 |

<p class="table-source">표 출처: <sup class="citation-group"><a class="citation" id="cite-ch22-15-1" href="#ref-ch22-15" role="doc-noteref" aria-label="참고문헌 15">[15]</a></sup> (본문 기준으로 재구성)</p>

생성이 재구성의 빈틈을 메운다. 재구성은 현실에 존재하는 것만 다룰 수 있다. 생성은 존재하지 않는 물체, 설명만 있는 물체를 채운다. 다만 생성물이 그대로 쓸 수 있는 자산인지는 별개 문제다. 위상이 깨끗한가, UV가 붙어 있는가, 스케일이 맞는가, 물리 속성이 정의되어 있는가. 이 질문들은 생성 품질과 무관하게 남는다.

압축의 한계도 분명하다. 가지치기와 양자화는 이미 만들어진 장면을 줄인다. 처음부터 작게 만드는 것이 아니다. 그래서 학습에 필요한 메모리는 줄지 않는다. 대용량 장면을 다루려면 표현을 바꾸거나 장면을 나누어야 한다. <sup class="citation-group"><a class="citation" id="cite-ch22-15-2" href="#ref-ch22-15" role="doc-noteref" aria-label="참고문헌 15">[15]</a></sup>

### 22.15 그래서 무엇이 얼마나 싸졌나

비용 변화를 감상이 아니라 숫자로 정리하면 네 축이 보인다. 계산 시간, 렌더링 속도, 입력 조건, 자산 생산이다.

| 축 | 2020년 | 이후 | 붙여야 할 조건 |
|---|---|---|---|
| 재구성 시간 | 장면당 1~2일, V100 | 11,000 스텝 1분 47초, Instant-NGP / 실용 품질 4분 35초~6분 55초, 완전 학습 26분 54초~41분 33초, 3DGS, A6000 | GPU 세대와 장면 종류가 함께 바뀜 |
| 렌더링 | 프레임당 30초, 즉 0.033 FPS, V100, 800×800 | 134~197 FPS, A6000, 원본 해상도 | 해상도·장면·GPU가 동시에 바뀐 값의 비 |
| 카메라 전제 | 캘리브레이션과 SfM 성공 필수 | 사진 2장에서 포인트맵 직접 회귀, DUSt3R | 전제 제거이며 속도 비교 아님 |
| 깊이 센서 | 필요 | 카메라 정보 없이 미터 단위 깊이, V100에서 0.3초, Depth Pro | NeRF와 동일 세대 GPU |
| 자산 생산 | 수작업 모델링 | 단일 이미지에서 약 5초, LRM | 사용 가능한 자산인지는 별도 판단 |
| 배포 용량 | 해당 없음 | 270~734 MB, 평균 15배 압축 가능 | 압축 후 절대 용량은 미보고 |

<p class="table-source">표 출처: <sup class="citation-group"><a class="citation" id="cite-ch22-16-1" href="#ref-ch22-16" role="doc-noteref" aria-label="참고문헌 16">[16]</a></sup> (본문 기준으로 재구성)</p>

배수를 계산할 수는 있다. 재구성은 24시간을 6분 55초로 나누면 약 208배, 48시간을 4분 35초로 나누면 약 628배다. 렌더링은 0.033 FPS를 134 FPS와 비교하면 약 4,020배, 197 FPS와 비교하면 약 5,900배다. 다만 두 배수 모두 동일 조건 비교가 아니다. 분모는 V100에서 800×800 합성 장면이고 분자는 A6000에서 데이터셋 원본 해상도의 실촬영 장면이다. 배수의 크기는 방법의 개선과 하드웨어 세대와 측정 조건이 뒤섞인 결과다. 방향은 신뢰할 수 있고 자릿수는 참고치로만 읽어야 한다.

인쇄술이 필사를 대체했을 때와 비슷하다. 책 한 권을 만드는 비용은 수백 배 떨어졌다. 무엇을 쓸지 정하고 교정을 보는 일의 비용은 그대로였다.

바뀌지 않은 것도 정직하게 적어야 한다. 첫째 편집 가능성이다. 3DGS 장면에서 이 물체만 옮기기는 메시에서만큼 자명하지 않다. 수백만 개의 알갱이 중 어디부터 어디까지가 그 물체인지가 표현 안에 정의되어 있지 않다. 둘째 재조명이다. 원본 촬영의 그림자와 반사가 표현에 구워져 있다. 새 조명 아래로 옮기면 어색해진다. 셋째 물리다. 충돌 판정과 시뮬레이션은 면과 부피를 전제하는데 반투명 알갱이 집합은 그 전제를 만족하지 않는다. 넷째 품질 검수와 촬영 자체의 인건비다. 이것은 알고리즘이 손댈 수 있는 항목이 아니다.

그리고 실시간이라는 기준선은 아직 걸쳐 있다. 장면을 다 만들어 둔 뒤의 렌더링은 예산 안으로 들어왔다. 매 프레임 추론이 필요한 작업은 그렇지 않다.

| 결과 | 1회 처리 시간 | 16.7 ms 예산 대비 | 11.1 ms 예산 대비 |
|---|---|---|---|
| Depth Pro | 약 300 ms | 약 18배 | 약 27배 |
| MonoGS | 약 333 ms, 3 FPS | 약 20배 | 약 30배 |

<p class="table-source">표 출처: <sup class="citation-group"><a class="citation" id="cite-ch22-16-2" href="#ref-ch22-16" role="doc-noteref" aria-label="참고문헌 16">[16]</a></sup> (본문 기준으로 재구성)</p>

두 결과는 각자의 문제에서 중요한 성취다. 그러나 가림 처리나 실시간 재구성의 완성된 해답으로 배치하려면 예산 초과 배수를 함께 적어야 한다. 한 자릿수가 아니라 스무 배 안팎이다. 경량화와 지연 은닉과 프레임 간 재사용이 그 간극을 메우는 다음 작업이다.

증강현실이 2020년에 기술 시연이었다가 지금 제품이 될 수 있는 이유는 개별 알고리즘의 우아함이 아니다. 재구성과 렌더링과 자산 생성의 단가가 동시에 수백 배에서 수천 배 떨어졌기 때문이다. 싸진 것은 계산이고, 여전히 비싼 것은 사람이 판단해야 하는 부분이다. <sup class="citation-group"><a class="citation" id="cite-ch22-16-3" href="#ref-ch22-16" role="doc-noteref" aria-label="참고문헌 16">[16]</a></sup>

<section class="references" id="references-ch22" role="doc-endnotes" aria-label="참고문헌">
<h2>참고문헌</h2>
<p class="reference-guide">본문의 번호를 누르면 출처로 이동합니다. 절 끝의 번호는 그 절의 사실 자료를, 표 아래의 번호는 표에 사용한 자료를 가리킵니다. 비교·계산·비유와 결론은 필자의 재구성입니다. 한 번호에 함께 사용한 문헌이 둘 이상이면 묶어서 적었습니다.</p>
<p class="reference-guide">서지정보와 확인 메모는 옵시디언 조사 기록을 바탕으로 복원했습니다. 원 기록의 ‘전문 확인’·‘조회’ 표기는 당시 조사 상태이며 이번 웹판에서 모두 재검증했다는 뜻은 아닙니다. 불완전한 서지사항은 임의로 채우지 않았습니다.</p>
<ol class="reference-list">
<li id="ref-ch22-1" data-source="ai3d-1"><span class="reference-number">[1]</span><div>Mildenhall, Srinivasan, Tancik, Barron, Ramamoorthi, Ng, &quot;NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis&quot;, ECCV 2020 (oral), arXiv:2003.08934 — 초록 및 Sec. 5.3 Implementation details <span class="citation-backs"><a href="#cite-ch22-1-1" class="citation-back" aria-label="참고문헌 1 인용 위치 1로 돌아가기">↩1</a> <a href="#cite-ch22-1-2" class="citation-back" aria-label="참고문헌 1 인용 위치 2로 돌아가기">↩2</a> <a href="#cite-ch22-1-3" class="citation-back" aria-label="참고문헌 1 인용 위치 3로 돌아가기">↩3</a></span></div></li>
<li id="ref-ch22-2" data-source="ai3d-4"><span class="reference-number">[2]</span><div>Müller, Evans, Schied, Keller, &quot;Instant Neural Graphics Primitives with a Multiresolution Hash Encoding&quot;, ACM Transactions on Graphics 41(4) (SIGGRAPH 2022), arXiv:2201.05989; 프로젝트 페이지 nvlabs.github.io/instant-ngp <span class="citation-backs"><a href="#cite-ch22-2-1" class="citation-back" aria-label="참고문헌 2 인용 위치 1로 돌아가기">↩1</a> <a href="#cite-ch22-2-2" class="citation-back" aria-label="참고문헌 2 인용 위치 2로 돌아가기">↩2</a> <a href="#cite-ch22-2-3" class="citation-back" aria-label="참고문헌 2 인용 위치 3로 돌아가기">↩3</a> <a href="#cite-ch22-2-4" class="citation-back" aria-label="참고문헌 2 인용 위치 4로 돌아가기">↩4</a></span></div></li>
<li id="ref-ch22-3" data-source="ai3d-5"><span class="reference-number">[3]</span><div>Kerbl, Kopanas, Leimkühler, Drettakis, &quot;3D Gaussian Splatting for Real-Time Radiance Field Rendering&quot;, ACM Transactions on Graphics 42(4) (SIGGRAPH 2023), arXiv:2308.04079; 프로젝트 페이지 repo-sam.inria.fr/fungraph/3d-gaussian-splatting <span class="citation-backs"><a href="#cite-ch22-3-1" class="citation-back" aria-label="참고문헌 3 인용 위치 1로 돌아가기">↩1</a> <a href="#cite-ch22-3-2" class="citation-back" aria-label="참고문헌 3 인용 위치 2로 돌아가기">↩2</a> <a href="#cite-ch22-3-3" class="citation-back" aria-label="참고문헌 3 인용 위치 3로 돌아가기">↩3</a></span></div></li>
<li id="ref-ch22-4" data-source="ai3d-2"><span class="reference-number">[4]</span><div>Mildenhall et al., NeRF, ECCV 2020, Sec. 5.1 &quot;Positional encoding&quot;; 배경 이론은 Tancik et al., &quot;Fourier Features Let Networks Learn High Frequency Functions in Low Dimensional Domains&quot;, NeurIPS 2020 (arXiv:2006.10739) <span class="citation-backs"><a href="#cite-ch22-4-1" class="citation-back" aria-label="참고문헌 4 인용 위치 1로 돌아가기">↩1</a> <a href="#cite-ch22-4-2" class="citation-back" aria-label="참고문헌 4 인용 위치 2로 돌아가기">↩2</a></span></div></li>
<li id="ref-ch22-5" data-source="ai3d-3"><span class="reference-number">[5]</span><div>Mildenhall et al., NeRF, ECCV 2020, Sec. 5.3 및 Sec. 6 (&quot;approximately 1–2 days&quot; on a single NVIDIA V100; &quot;approximately 30 seconds per frame&quot;) <span class="citation-backs"><a href="#cite-ch22-5-1" class="citation-back" aria-label="참고문헌 5 인용 위치 1로 돌아가기">↩1</a> <a href="#cite-ch22-5-2" class="citation-back" aria-label="참고문헌 5 인용 위치 2로 돌아가기">↩2</a></span></div></li>
<li id="ref-ch22-6" data-source="ai3d-6"><span class="reference-number">[6]</span><div>Kerbl et al., 3D Gaussian Splatting, ACM TOG 42(4), 2023 — Sec. 5 &quot;Optimization with Adaptive Density Control&quot; 및 Sec. 6 &quot;Fast Differentiable Rasterizer&quot; <span class="citation-backs"><a href="#cite-ch22-6-1" class="citation-back" aria-label="참고문헌 6 인용 위치 1로 돌아가기">↩1</a> <a href="#cite-ch22-6-2" class="citation-back" aria-label="참고문헌 6 인용 위치 2로 돌아가기">↩2</a></span></div></li>
<li id="ref-ch22-7" data-source="ai3d-7"><span class="reference-number">[7]</span><div>Kerbl et al., 3D Gaussian Splatting, ACM TOG 42(4), 2023 — Table 1~3 (Mip-NeRF360, Tanks&amp;Temples, Deep Blending, 총 13개 실장면 + Blender 합성); Barron, Mildenhall, Verbin, Srinivasan, Hedman, &quot;Mip-NeRF 360: Unbounded Anti-Aliased Neural Radiance Fields&quot;, CVPR 2022, arXiv:2111.12077 <span class="citation-backs"><a href="#cite-ch22-7-1" class="citation-back" aria-label="참고문헌 7 인용 위치 1로 돌아가기">↩1</a> <a href="#cite-ch22-7-2" class="citation-back" aria-label="참고문헌 7 인용 위치 2로 돌아가기">↩2</a> <a href="#cite-ch22-7-3" class="citation-back" aria-label="참고문헌 7 인용 위치 3로 돌아가기">↩3</a></span></div></li>
<li id="ref-ch22-8" data-source="ai3d-8"><span class="reference-number">[8]</span><div>Fan, Wang, Yu, Kong, Zhang, Wang, &quot;LightGaussian: Unbounded 3D Gaussian Compression with 15x Reduction and 200+ FPS&quot;, NeurIPS 2024, arXiv:2311.17245 <span class="citation-backs"><a href="#cite-ch22-8-1" class="citation-back" aria-label="참고문헌 8 인용 위치 1로 돌아가기">↩1</a> <a href="#cite-ch22-8-2" class="citation-back" aria-label="참고문헌 8 인용 위치 2로 돌아가기">↩2</a></span></div></li>
<li id="ref-ch22-9" data-source="ai3d-9"><span class="reference-number">[9]</span><div>Keetha, Karhade, Jatavallabhula, Yang, Scherer, Ramanan, Luiten, &quot;SplaTAM: Splat, Track &amp; Map 3D Gaussians for Dense RGB-D SLAM&quot;, CVPR 2024, arXiv:2312.02126; Matsuki, Murai, Kelly, Davison, &quot;Gaussian Splatting SLAM&quot;, CVPR 2024 (Highlight), arXiv:2312.06741; 계보로 Sucar et al. &quot;iMAP&quot; ICCV 2021, Zhu et al. &quot;NICE-SLAM&quot; CVPR 2022 <span class="citation-backs"><a href="#cite-ch22-9-1" class="citation-back" aria-label="참고문헌 9 인용 위치 1로 돌아가기">↩1</a> <a href="#cite-ch22-9-2" class="citation-back" aria-label="참고문헌 9 인용 위치 2로 돌아가기">↩2</a></span></div></li>
<li id="ref-ch22-10" data-source="ai3d-10"><span class="reference-number">[10]</span><div>Wang, Leroy, Cabon, Chidlovskii, Revaud, &quot;DUSt3R: Geometric 3D Vision Made Easy&quot;, CVPR 2024, arXiv:2312.14132 (Naver Labs Europe); 후속 MASt3R (ECCV 2024) <span class="citation-backs"><a href="#cite-ch22-10-1" class="citation-back" aria-label="참고문헌 10 인용 위치 1로 돌아가기">↩</a></span></div></li>
<li id="ref-ch22-11" data-source="ai3d-11"><span class="reference-number">[11]</span><div>Ranftl, Lasinger, Hafner, Schindler, Koltun, &quot;Towards Robust Monocular Depth Estimation: Mixing Datasets for Zero-shot Cross-dataset Transfer&quot;, IEEE TPAMI(2020년 8월 게재 승인, arXiv:1907.01341); 후속 DPT (Ranftl et al., ICCV 2021) <span class="citation-backs"><a href="#cite-ch22-11-1" class="citation-back" aria-label="참고문헌 11 인용 위치 1로 돌아가기">↩1</a> <a href="#cite-ch22-11-2" class="citation-back" aria-label="참고문헌 11 인용 위치 2로 돌아가기">↩2</a></span></div></li>
<li id="ref-ch22-12" data-source="ai3d-12"><span class="reference-number">[12]</span><div>Yang, Kang, Huang, Xu, Feng, Zhao, &quot;Depth Anything: Unleashing the Power of Large-Scale Unlabeled Data&quot;, CVPR 2024, arXiv:2401.10891; Yang et al., &quot;Depth Anything V2&quot;, NeurIPS 2024, arXiv:2406.09414 <span class="citation-backs"><a href="#cite-ch22-12-1" class="citation-back" aria-label="참고문헌 12 인용 위치 1로 돌아가기">↩1</a> <a href="#cite-ch22-12-2" class="citation-back" aria-label="참고문헌 12 인용 위치 2로 돌아가기">↩2</a></span></div></li>
<li id="ref-ch22-13" data-source="ai3d-13"><span class="reference-number">[13]</span><div>Bochkovskii, Delaunoy, Germain, Santos, Zhou, Richter, Koltun, &quot;Depth Pro: Sharp Monocular Metric Depth in Less Than a Second&quot;, ICLR 2025, arXiv:2410.02073 (Apple) <span class="citation-backs"><a href="#cite-ch22-13-1" class="citation-back" aria-label="참고문헌 13 인용 위치 1로 돌아가기">↩1</a> <a href="#cite-ch22-13-2" class="citation-back" aria-label="참고문헌 13 인용 위치 2로 돌아가기">↩2</a></span></div></li>
<li id="ref-ch22-14" data-source="ai3d-14"><span class="reference-number">[14]</span><div>Google, &quot;Depth adds realism — ARCore Depth API&quot; 개발자 문서(developers.google.com/ar/develop/depth); Du, Turner, Dzitsiuk, Prasso, Duarte, Dourgarian et al., &quot;DepthLab: Real-time 3D Interaction with Depth Maps for Mobile Augmented Reality&quot;, UIST 2020; Kirillov, Mintun, Ravi, Mao, Rolland, Gustafson, Xiao, Whitehead, Berg, Lo, Dollár, Girshick, &quot;Segment Anything&quot;, ICCV 2023, arXiv:2304.02643 <span class="citation-backs"><a href="#cite-ch22-14-1" class="citation-back" aria-label="참고문헌 14 인용 위치 1로 돌아가기">↩1</a> <a href="#cite-ch22-14-2" class="citation-back" aria-label="참고문헌 14 인용 위치 2로 돌아가기">↩2</a></span></div></li>
<li id="ref-ch22-15" data-source="ai3d-15"><span class="reference-number">[15]</span><div>Poole, Jain, Barron, Mildenhall, &quot;DreamFusion: Text-to-3D using 2D Diffusion&quot;, ICLR 2023, arXiv:2209.14988; Hong, Zhang, Gu, Bi, Zhou, Liu, Liu, Sunkavalli, Bui, Tan, &quot;LRM: Large Reconstruction Model for Single Image to 3D&quot;, ICLR 2024, arXiv:2311.04400; Xiang et al., &quot;Structured 3D Latents for Scalable and Versatile 3D Generation (TRELLIS)&quot;, arXiv:2412.01506 (Microsoft Research) <span class="citation-backs"><a href="#cite-ch22-15-1" class="citation-back" aria-label="참고문헌 15 인용 위치 1로 돌아가기">↩1</a> <a href="#cite-ch22-15-2" class="citation-back" aria-label="참고문헌 15 인용 위치 2로 돌아가기">↩2</a></span></div></li>
<li id="ref-ch22-16" data-source="ai3d-16"><span class="reference-number">[16]</span><div>본 항목의 수치는 앞선 항목들의 1차 출처를 종합한 것이다 — Mildenhall et al. ECCV 2020; Müller et al. SIGGRAPH 2022; Kerbl et al. SIGGRAPH 2023 Table 1~3; Fan et al. NeurIPS 2024; Hong et al. ICLR 2024; Bochkovskii et al. ICLR 2025 <span class="citation-backs"><a href="#cite-ch22-16-1" class="citation-back" aria-label="참고문헌 16 인용 위치 1로 돌아가기">↩1</a> <a href="#cite-ch22-16-2" class="citation-back" aria-label="참고문헌 16 인용 위치 2로 돌아가기">↩2</a> <a href="#cite-ch22-16-3" class="citation-back" aria-label="참고문헌 16 인용 위치 3로 돌아가기">↩3</a></span></div></li>
</ol>
</section>
