본문 바로가기

Library/Computer Graphics

조명(Lighting)

사람이 실세계에서 표면을 볼 때 빛을 인지할 수 있는 것은, 망막에 도달한 광자 에너지가 추상체를 자극하기 때문이다. 광자는 하나 또는 여러 개의 광원으로부터 나오는데, 이들 중 일부는 흡수되고 일부는 표면에 반사된다. 뿐만 아니라, 표면의 속성에 따라 광자를 흡수하거나 반사하는 정도가 크게 달라진다. 예를 들어, 어떤 것은 빛을 일정한 방향으로만 반사하여 광택이 나지만, 어떤 것은 빛을 모든 방향으로 고르게 반사한다. 대부분의 표면은 이러한 극단적인 두 경우 사이의 속성을 갖는다.

어떤 물체를 시각으로 인지할 수 있다는 것은, 그 물체에서 반사된 빛이 관찰자의 눈까지 도달했다는 것이다. 그렇지만, 관찰자의 눈까지 도달한 빛은 순수하게 물체가 반사된 빛 외에도 여러 빛들이 포함되어 있다. 예를 들어, 어떤 투명한 물체 A가 있고, 불투명한 물체 B가 거의 일직선상에 놓여 있다고 생각해보자. 투명한 물체 A를 통해 B를 바라본다면, 광원으로부터 B를 통해 반사된 빛만 보여지는게 아니라, A에서 반사된 빛 역시 영향을 준다. 즉, 어떤 물체가 보여지는 것은 순수하게 그 물체의 반사된 빛에 의해서가 아니라, 주변의 모든 물체의 반사된 빛도 영향을 주는 것이다. 이렇게 다른 물체에 의한 빛의 영향까지 고려한 조명 모델을 전역 조명 모델(Global illumination Model)이라 한다. 이 모델을 실제로 구현하고자 한다면 엄청난 계산을 필요로 하며, 이런 이유로 실시간 렌더링 시스템에서는 그다지 적당한 방법이 아니다.

지역 조명 모델(Local Illumination Model)은 전역 조명 모델을 단순화한 것이다. 즉, 지역 조명 모델은 다른 물체에서 반사된 빛을 일체 고려하지 않으며, 물체가 보여지는 색상을 결정하는데 있어서 광원으로부터 직접 이 물체에 반사되어 관찰자의 눈에 들어오는 빛만 고려한다.

많은 그래픽 시스템은 지역 조명 모델을 사용하는데, 이것은 순전히 속도 문제 때문이다. 물체의 조명을 계산하는데 있어 다른 물체에서 반사되어 입사되는 빛까지 고려한다면 엄청난 계산 능력을 필요로 하기 때문이다. 이 외에도 실세계에서는 어떤 한 점에서만 빛이 나오는 것이 아니다. 점이 아닌 면적에서 빛이 나오는데, 실시간 렌더링 시스템에서 점이 아닌 면적을 광원으로 간주하여 물체의 조명을 계산하는 것 또한 매우 힘든 일이다. 그것보다는 복수의 점광원을 설정하여 근사적으로 물체의 조명을 계산하는 것이 훨씬 현실적이다. 이 경우 근사화에 사용된 각각의 광원을 분산광원(distributed light source)이라 한다.


Reference
주우석, OpenGL로 배우는 컴퓨터 그래픽스, 한빛미디어
Dave Shreiner, OpenGL Programming Guide 3rd edition, Pearson Education