이 논문은 Google Research에서 2021 ICCV에 제출한 Baking Neural Radiance Fields for Real-Time View Synthesis입니다.
NeRF가 너무 느려서 real-time rendering을 하기 위해 학습한 Network 출력 값을 따로 저장해둬 real-time rendering을 해낸 논문입니다.
NeRF는 3D scene representation을 하는 획기적인 기술이지만 rendering과 학습에 시간이 오래 걸린다는 단점이 있습니다. 이 논문은 각각의 active voxel에 opacity, diffuse color, feature vector를 저장하면서 rendering 속도를 높였습니다.
이렇게 저장된 정보들을 활용하기 위해 NeRF에서 두가지를 수정하였습니다.
1) deferred NeRF 구조를 만들어서 pixel마다 한 번 MLP 계산을 하면 되도록 바꿈
2) opacity field를 regularize합니다.
이 두가지를 활용하여 데이터 효율성과 rendering 속도를 강화하였습니다.
realtime rendering NeRF를 위해선 3가지가 필요합니다.
1) 800x800 resolution frame을 rendering하기 위해 0.3초 이내로 걸려야합니다.
2) representation이 100MB이하로 압축될 수 있어야 합니다.
3) 압축되지 않은 representation이 GPU memory에 적합해야하고 streaming하면 안된다.
이것을 할 수 있도록 NeRF를 수정했다고 합니다.
Ray를 MLP에 넣고 3가지 출력값을 내보내도록 학습을 합니다.

3가지는 Volume density, diffuse color, feature입니다.
이렇게 저장한 값을 viewing direction에 따라 잘 합칠 수 있는 Network를 하나 학습을 하여
저장한 color와 feature를 활용하여 rendering을 할 수 있도록 합니다.

이를 통해 3d 공간 한 점마다 MLP를 계산하던 이전과 달리 Pixel마다 계산을 할 수 있어서 시간이 효율성을 강화하였습니다.

이 NeRF의 Loss는 Cauchy Loss입니다.
이것을 통해 Outlier에 강건한 학습을 할 수 있습니다.
opacity value가 일정 이하로 나오면 빈공간으로 보고 계산에 활용하지 않아 속도를 높입니다.
그리고 voxel visibility가 일정 이하로 나와도 빈공간으로 취급합니다.
Voxel안에 저장된 값에 위치에 따라 16개의 값을 gaussian sampling하고 그것의 평균을 다시 계산하여 중간 중간의 값을 고려합니다. 이를 통해 조금 더 부드러운 표현이 가능하다고 합니다.
결국 SNeRG는 2개의 Network를 학습합니다.
ray를 받아 volume, color,feature를 받는 네트워크 하나
viewing direction에 따라 저장된 값들을 합치는 네트워크 하나
이렇게 하여 2가지를 학습해 real time의 memory 효율성이 좋은 NeRF를 제안하였습니다.