본문 바로가기

Library/Computer Graphics

Global Illumination : Ray Casting and Ray Tracing

지역 조명 모델에서는 광원에서 빛이 방출되고, 표면에 충돌했을 때 관찰자에게 빛이 도달할 때까지 다른 빛의 영향을 받지 않는 것으로 가정한다. 하지만, 실제 자연 현상은 이보다 복잡하다. 전역 조명 모델은 표면에서 반사되는 빛에, 다른 물체에서의 반사, 굴절 따위를 반영한 빛을 고려한다. 보통, 전역 조명 모델에서는 빛이 표면과 부딪히는 순간, 반사, 굴절, 흡수, 자체 발광의 4가지 요소를 사용하여 근사한다. 그리고 빛이 입사하는 순간, 자체 발광을 제외한 방출되는 빛의 총량은 들어온 빛의 총량보다 많아질 수 없다. 즉, 입사되는 빛 중 반사되는 빛의 양이 60%라고 했을 때, 굴절되는 빛이 입사된 빛의 40%를 넘을 수 없다. 표면에서 방출되는 빛이 그대로 관찰자에게 도달한다고 가정하는 지역 조명 모델과 달리, 전역 조명 모델에서는 이렇게 반사되거나 굴절되는 빛들이 다른 물체의 조명에 영향을 미친다. 따라서, 이런 현상까지 보다 근사적으로 감안한, 최종적으로 렌더링된 이미지는 보다 사실적인(정확하게 말한다면, 더 실사와 같은 사진처럼) 영상을 만들어내게 된다.

보다 사실적인 영상을 얻어내기 위해, 전역 조명 모델을 적용하고자 하는 시도 중 주목할만한 첫번째 시도는 레이 캐스팅(ray casting)이다. 레이 캐스팅은 그 이름이 의미하는 것처럼, 단순히 관찰자로부터 광선이 출발한다고 하고, 결과적으로 이 빛의 진행 경로를 막고 있는 가장 가까운 물체를 찾는 것이다. 즉, 어떤 물체의 표면이 광원을 향하고 있을 때, 빛이 이 표면에 닿았다면 빛은 차단되지 않았거나 그림자를 만들거나 둘 중 하나이다. 이때, 표면의 음영은 전통적인 음영 처리 기법을 사용하여 계산할 수 있다. 이것은 깊이 버퍼 기법과 비슷한데, 깊이 버퍼 알고리즘은 표면을 한번에 하나씩 처리하고, 모든 투영점에 대해 깊이 값을 계산한다. 계산된 표면의 깊이는 해당 픽셀에서 보이는 면을 판단하기 위해 앞서 저장된 깊이 값과 비교한다. 레이 캐스팅은 픽셀을 중심으로 하나씩 처리하며, 해당 픽셀에 이르는 투영 경로상의 모든 표면의 깊이를 계산한다는 차이가 있다. 레이 캐스팅의 주된 장점은, 예전의 스캔 라인 기반의 렌더링 기법에 비해 불규칙한 면을 가진 물체들에 대해 빛과의 교차점 검사가 더 간단하다는 것이다. 즉, 단순히 진행 방향에 대해서 교점을 가지고 있느냐, 그렇지 않느냐만 판별하면 되며, 특히 구를 고려한 효율적인 교차점 검사 방법들이 존재한다.

그러나, 레이 캐스팅은 정확하게 말한다면 전역 조명을 위한 것이 아니라 가시면 검출을 위한 것이다, 그럼에도 불구하고 이것을 이야기한 것은 다음에 이야기할 레이 트레이싱(ray tracing, 광선 추적)에 중요한 밑바탕이 되었기 때문이다. 레이 캐스팅은, 광선을 한번 던진 다음에 물체와 교차점 검사만 수행하기 때문에, 실질적으로 이 광선이 다른 물체에 영향을 미치는 것은 아니다. 즉, 각 픽셀로부터 가장 가까운 물체에 이르는 단일 광선만 고려한다. 레이 트레이싱은, 레이 캐스팅이 이렇게 한번 광선을 던진 이후에도 빛을 추적한다. 즉, 표면에 빛이 닿았을 때 이 표면이 빛을 받는 것인지 그림자를 만드는 것인지만 결정하는 것이 아니라, 표면에 닿는 순간 반사, 굴절, 그림자 광선과 같은 추가적인 빛이 다시 생성된다고 가정한다. 이렇게 생성된 각각의 빛들은 또 다시 다른 표면에 대해 같은 작용을 하게 되고, 이것은 레이 캐스팅보다 훨씬 현실에 가깝게 재현할 수 있다.

그러나, 레이 트레이싱은 막대한 계산량이 필요하다는 단점이 있다. 특히, 광원에서 나오는 모든 빛에 대해 이렇게 광선 추적을 정방향 추적은 현실적으로 불가능하기 때문에, 관찰자의 시선으로부터 광선을 추적하는 역방향 추적을 많이 사용한다. 그럼에도 불구하고 레이 트레이싱은 실시간으로 처리하기 매우 어렵다. 이런 계산량을 줄이기 위한 여러가지 방법이 있는데, 그림자 광선을 먼저 추적하는 방법이 있다, 즉, 그림자 광선을 먼저 적용하여 보이지 않는 부분에 대해서 빛을 추적하지 않는 것이다. 어떤 표면이 빛을 향하고 있을 때, 광원과 표면의 교점을 구하고, 이 사이에 어떤 불투명한 물체가 존재한다면, 이 빛은 이 표면에 아무런 영향을 미치지 못하기 때문이다. 이외에도, 모든 빛들이 눈에 들어오지 않고 감쇄가 일어나므로, 이 감쇄 효과에 의해 완전히 소멸된 빛은 더 이상 추적할 필요가 없다.

레이 트레이싱은, 다른 렌더링 알고리즘을 사용했을 때 구현하기 곤란한 그림자, 반사 효과 따위가 알고리즘 자체에 자연스럽게 포함되어 있다는 장점을 갖는다. 또, 상대적으로 다른 알고리즘에 비해 구현이 비교적 간단하며, 광선 하나 하나가 다른 빛과 상관없이 개별적인 계산 과정을 거치므로 병렬화에 유리하다는 장점도 있다.