레이 트레이싱 구현기 2-1. Pinhole Camera

Plato·2023년 5월 27일
0

서론

우리가 사는 공간은 삼차원적이다. 필자가 지금 타이핑하고 있는 키보드의 위치는 세 개의 실수로 표현될 수 있을 것이다. 이처럼 많은 사람이 물리적 공간을 3차원 실공간으로 모델링한다. 우리가 원하는 것은, 삼차원 실공간에 존재하는 대상을 모니터에 출력할 수 있는 형태로 바꾸는 것이다. 모니터와 같은 출력 장치는 이차원적이기 때문에, 삼차원 실공간을 이차원 평면으로 맵핑할 수 있는 방법이 필요하다. 실생활에서 삼차원 공간을 이차원 공간에 맵핑하여 이미지를 생성하는 장치를 쉽게 볼 수 있는데, 카메라가 대표적이다. 카메라를 시뮬레이트하기 전에, 카메라를 이해하기 위해 필요한 기하광학과 Pinhole Camera의 동작 원리를 간단히 알아보자.

본론

기하광학

기하광학은, 영국의 아이작 뉴턴에 의해 시작된 학문으로 빛을 설명한다. 위키피디아의 '기하광학' 문서에 따르면, 빛은

  1. 균일한 매개체를 통과할 때 직진한다.
  2. 두 다른 매개체를 통과할 때, 구부러지고 나누어질 수 있다.
  3. 굴절 지수가 변하는 매개체를 통과할 때, 곡선의 경로를 따른다.
  4. 흡수되거나 반사될 수 있다.

즉, 기하광학에서 빛은 기본적으로 직진하고 기존에 통과하던 매개체와 다른 매개체를 만나면 구부러지고 매개체를 지나면서 매개체에 의해 흡수되거나 반사될 수 있다는 것이다. 이를 통해, 빛을 선으로 표현할 수 있음을 쉽게 추론할 수 있다. 기하 광학에서 빛의 경로를 계산하는 수식을 알아야만 핀홀 카메라를 이해할 수 있는 것은 아니기에, 이는 넘어가도록 하자.

핀홀 카메라의 구조와 원리

핀홀 카메라는 최소한 아래와 같은 구성 요소를 갖는 카메라이다.
1. 빛이 들어오는 작은 구멍인 핀홀
2. 빛을 막아줄 카메라 본체
3. 빛이 도달할 목적지인 필름 혹은 센서

출처: wikipedia

빛은 균일한 매개체를 통과할 때 직진하기 때문에, 위의 그림에서와 같이 빛을 선으로 표현할 수 있다. 이렇게 직진한 빛이 핀홀을 통과하여 카메라의 필름/센서에 뒤집혀 맵핑되는 것을 확인할 수 있다.

왜 핀홀이 필요한가?

핀홀없이 카메라 본체와 필름/센서만 존재한다면 카메라 본체에 의해 모든 빛이 차단되어 센서에 빛이 도달할 수 없을 것이다. 이 경우 어떠한 이미지도 생성되지 않는다.
또한 카메라 본체와 핀홀이 존재하지 않는다면, 센서의 한 포인트에 도달하는 광선은 무한히 많을 것이다. 나무로부터 오는 광선, 하늘 그리고 땅과 같이 여러 대상으로부터 오는 광선이 혼재돼, 노이즈로 가득한 이미지가 생성될 것이다.
센서의 한 포인트에, 하나의 광선만 도달할 수 있도록 만들어 줄 핀홀과 카메라 본체는 이러한 이유로 필요하다. (물론, 실제로 핀홀 카메라 센서의 한 포인트에 도달하는 광선은 하나일 수 없다. 핀홀은 길이와 면적이 없는 점을 말하는 것인데, 이러한 점을 만들 수도 없거니와 구멍의 크기가 너무 작아져버리면 간섭 현상에 의해 생성되는 이미지에 노이즈가 발생하는 문제점이 있다. 요점은, 최대한 센서의 한 포인트에 도달하는 광선의 개수를 줄여 이미지의 노이즈를 줄이기 위해 카메라 본체와 구멍이 존재한다는 것이다.)

핀홀 카메라를 시뮬레이트할 때 고려할 내용

카메라를 시뮬레이트함에 있어서 제일 중요한 것은 실제 카메라와 유사한 이미지를 생성하는 것이다. 카메라를 최대한 현실적으로 시뮬레이트하는 것이 좋아 보일 수 있지만, 결과물에 큰 차이가 없다면 오히려 불필요하게 문제의 복잡성을 높이는 것이기에 바람직하지 않다.
실제 카메라와 유사한 이미지를 생성하기 위해서는, 어떤 것을 고려해야 하는 것일까?

  1. 센서
    센서가 실제로 어떻게 빛을 받아들이고 어떤 과정을 거쳐 이미지를 생성하는지 구현하는 것은 중요하지 않다. 다만 센서처럼 빛을 받아줄 역할을 할 가상의 평면은 존재할 필요가 있다.
  2. 핀홀과 카메라 본체
    핀홀과 카메라 본체는, plane의 한 포인트에 하나의 광선만 도달하도록 만들어 이미지의 노이즈를 줄이는 역할을 한다. 그렇기에, 삼차원 공간에 핀홀과 카메라 본체를 만들지 않더라도, 위에서 말한 가상의 평면 위의 점을 통과하는 광선이 하나만 되도록 구현해주면 된다.
  3. 화각
    화각에 영향을 미치는 요소는 1. 센서와 이미지 간의 거리와 2. 센서의 크기이다. 이 두 가지 요소가 화각에만 영향을 준다면, 따로 따로 구현하는 것보다 단순히 우리가 시뮬레이트할 카메라의 화각을 계산한 뒤, 가상의 카메라가 생성할 이미지의 화각이 실제 카메라의 화각과 일치하도록 구현해 주기만 하면 된다. (이 또한 문제를 많이 단순화한 것인데, 센서와 이미지 간의 거리가 화각에만 영향을 주는 것은 아니다. 카메라 본체 내부를 이동하면서 빛 에너지를 잃을수도 있고 센서에 도달하는 광선이 구성하는 solid angle이 작아지기 때문에, 센서와 이미지 간의 거리가 커지면서 센서에 도달하는 빛의 양이 작아지게 된다. 하지만 카메라 본체가 너무 작아서, 센서와 이미지 간의 거리가 커지며 생기는 빛의 양 감소는 미미하기에 이를 고려할 필요가 없다.)

위의 내용을 고려했을 때, 핀홀 카메라를 시뮬레이트하는 과정에서 크게 세 개의 소목표를 가질 수 있다.

1. 센서의 역할을 해줄 가상의 평면을 만든다.
2. 가상의 평면 위의 한 점을 지나는 광선이 하나가 되도록 구현한다.
3. 임의의 화각을 전달했을 때, 해당 화각의 이미지를 생성하도록 구현한다.

마무리

이번 글을 통해, 핀홀 카메라는 어떤 것이고 핀홀 카메라를 시뮬레이트할 때 문제의 복잡성을 낮추기 위해 어느 부분에 집중해야 할지 알아봤다. 특히, 핀홀 카메라가 생성하는 이미지에 영향을 미칠만한 요소를 나누어서, 각 요소가 어떤 기능을 하는지에 중점을 두어, 구현해야 할 내용을 선택했다. 다음 글에서 핀홀 카메라를 실제로 시뮬레이트해보자.

0개의 댓글