광원은 적용하고자 하는 방식에 따라 여러 가지로 추상화할 수 있다. 먼저, 어떤 장면을 구성하고, 여기에 조명을 적용할 때, 광원이 아주 멀리 떨어져 있다고 하자. 그렇다면, 이 광원을 점으로 간주할 수 있지만, 아주 멀리 떨어져 있으므로 결국 이 광원에서 나오는 빛은 평행한 선들의 집합으로 간주해도 무리가 없을 것이다. 이런 경우를 parallel light라고 하는데, 방향성 광원, 평행적 광원 등 무엇으로 불러도 상관없지만 개념은 동일하다. parallel light는 광원이 아주 멀리 떨어져 있고, 모든 물체가 동일한 빛을 받는다고 간주하기 때문에 광원으로부터의 거리에 따른 감쇄 효과를 고려하지 않아도 무방하다. parallel light의 대표적인 것으로는 태양광을 꼽을 수 있다.
그러나, 광원이 가까이 있다면, 거리에 따른 감쇄 효과를 고려하지 않을 수 없다. 예를 들어, 전구 불빛과 같은 광원이라면, 거리에 따라 빛의 세기가 줄어드는데, 이것은, 에너지의 양은 거리의 제곱만큼 반비례로 감소하기 때문이다. 이것을 point light라고 하는데, 보통 점광원이라고 표현한다. 정확하게 말한다면, 점에서 광원이 나온다기 보다는 일정한 면적에서 빛이 방출되는 것이지만, 이렇게 되면 너무나 많은 계산이 필요하기 때문에 점으로 단순화한 것이다. 이 감쇄 효과는 다음과 같이 수식으로 표현할 수 있다.
I(d) = I / d^2, (I = 빛의 강도)
좀 더 정확한 표현을 위해서, 추가 인자를 사용하여 감쇄 정도를 보다 정밀하게 지정할 수 있는데, 그 근사식은 다음과 같다.
I(d) = I / (a0 + a1 * d + a2 * d^2)
a0, a1, a2를 감쇄 인자라 하는데, 원하는 정도에 따라 이들을 설정함으로써 원하는 효과를 얻을 수 있다.
마지막으로, 스포트라이트(spotlight)를 생각할 수 있다. parallel light나 point light가 직선상으로 빛이 퍼져나가는 것에 비해, 스포트라이트는 빛이 방사선으로 퍼져나간다. 일반적으로 스포트라이트를 계산하기 위해서, 익숙한 램버트 확산광 모델(lambertian emissive law)을 적용한다.
이런 감쇄 효과와 광원의 종류, 환경광, 난반사광, 정반사광 따위를 고려하여 조명식을 표현한다면, 다음과 같은 형태가 된다.
LitColor = K(spot) * (Ca · Ma + Kd · Cd · Md + Ks · Cs · Ms) / (a0 + a1 * d + a2 * d^2)
Kd = max(L · n, 0)
Ks = max(V · R, 0)^p,
K(spot) = max(-L · d, 0)^p (d는 광원의 방향, -L인 것은 광원에서 나오는 빛이기 때문에)
Library/Computer Graphics