XREAL
Vision
🔎

존재하지 않는 카메라 시점을 구현할 수 있다고? 🔍 (feat. NeRF)

3D 렌더링(Rendering), 또는 이미지 합성(Image Synthesis)이란 컴퓨터 프로그램을 활용해 3D 모델 또는 이들을 모아놓은 장면인 씬 파일로부터 영상을 만들어내는 과정을 말합니다. 전통적인 렌더링 방식 중 대표적인 것은 "Ray tracing"입니다. 'Ray'란 특정 물체가 방출하는 빛에 의해 생기는 선을 뜻합니다. 'Ray tracing'은 빛이 물체의 표면에 닿을 때 반사, 굴절되는 빛을 물리학의 법칙을 통해 추적하여 실재감 있는 물체의 2D 이미지를 생성하는 방법입니다. Ray tracing 기술은 실제 물리학의 법칙을 적용한 것이기 때문에, 카메라, 빛, 모션 등 씬을 구성하는 여러 변수들을 제어할 수 있다는 장점이 있지만, 렌더링을 하기 위해 많은 시간이 걸리고 씬 설정 등을 위한 수동적인 작업이 필요하다는 단점이 있습니다. 그래서 최근에는 이러한 단점을 보완하기 위해 새로운 렌더링 방식이 많이 연구가 되고 있습니다. 바로 뉴럴 렌더링(Neural Rendering) 입니다.
Unsplash의 Uriel SC
뉴럴 렌더링이란 씬의 여러 요소들을 제어할 수 있도록 이미지나 비디오 생성을 하는 뉴럴 네트워크를 뜻합니다 . 뉴럴 렌더링 중에 대표적인 것은 NeRF(Neural Radiance Field)입니다. NeRF는 여러 시점에서 찍은 사진들을 가지고 머신러닝을 학습시키면, 존재하지 않는 임의의 위치와 방향에서 본 이미지도 생성할 수 있는 기술입니다. NeRF는 시간이 고정된 상태에서도, 카메라의 위치와 방향이 임의로 설정된 시점에서의 이미지를 생성할 수 있다는 특징을 가지고 있습니다. 언뜻 보기에는, 카메라의 위치를 바꾸려면, 단순히 이미지를 그만큼 이동하면 되는 것처럼 보이지만, 멀리 있는 대상은 카메라가 많이 움직여도 덜 움직인 것처럼 보이고, 가까이 있는 대상은 더 많이 움직인 것처럼 보입니다. 그렇다면 이런 상황에서, NeRF는 구체적으로 어떤 원리로 동작하는 걸까요?
픽셀이란 화면을 구성하는 가장 작은 단위를 일컫는 말입니다. 이미지는 픽셀들의 2차원 형태로 구성되어 있는데, 이 픽셀의 색깔과 깊이값을 뉴럴 네트워크가 계산을 합니다. 픽셀의 깊이값이란 얼마나 대상이 멀리 떨어져있는지를 나타내는 값입니다. 뉴럴 네트워크를 한번 학습할 때, 마다 결괏값으로 ray가 나옵니다. 이 ray 선을 n개의 칸으로 나누고, 이 칸 중에 하나를 선택해서 랜덤하게 샘플링하는 기법(stratified sampling)을 활용하면, 머신러닝 학습을 할 때마다, 학습하는 점이 달라지기 때문에, 연속한 점을 학습 할 수 있습니다.
NeRF 자체는 간단한 뉴럴 네트워크이지만, 이 간단한 네트워크를 잘 학습 시킬 수 있는 방법이 있습니다. 아까 언급한 stratified sampling 기법을 활용해서 샘플링을 한 이후에 각 ray에 놓여있는 점들 중 밀도가 높은 점들을 골라서, 그 점들을 가지고 더 잘게 쪼개서 학습을 한번 더 하는 방식을 활용합니다.
NeRF는 용량이 5mb 밖에 안되고, 다른 뉴럴 렌더링 방식들과 비교했을 때, 더 세밀하게 표현할 수 있는 장점을 가지고 있습니다. 아직까지는 하나의 뉴럴네트워크가 하나의 장면만 학습할 수 있다는 한계를 가지고 있습니다. 그렇지만 계속해서 활발히 연구되고 있는 분야인 만큼, 앞으로의 미래가 기대됩니다.
(작성자 : 이서윤)
Ben Mildenhall.(2020).NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis