점광의 대표적인 예는 전구이다. 전구는 빛의 구면상의 모든 방향으로 방출한다.
다른 빛들과 마찬가지로 점광의 빛 벡터는 빛이 나아가는 방향의 반대이다. 즉, 점광의 빛 벡터는 임의의 점 P에서 점광원 Q로 가는 벡터이다.
점광과 평행광의 차이는 빛 벡터의 계산 방식뿐이다. 점광의 경우 점마다 빛 벡터를 달리 계산해야 하지만 평행광의 경우 모든 점에 대해 동일한 벡터를 사용한다. 내가 DirectX11 포트폴리오를 만들 때 그림자를 위해 태양 벡터 한 개를 쓰고, 몬스터의 범위 공격표시를 위해 포인트 라이트를 썼던 것을 기억하자. 지금 생각해보면 태양 벡터를 평행광이라고 부르는 것이다.
1.빛의 감쇠
물리적으로 빛의 세기는 역제곱 법칙에 근거한 거리의 함수로서 약해진다. 광원에서 d만큼 떨어진 점이 받는 빛의 세기는 다음과 같이 주어진다.
I0는 광원에서 d = 1만큼 떨어진 지점에서의 빛의 세기이다. 하지만 위 공식은 항상 눈으로 보기에 좋은 결과를 주지 않으므로, 빛의 세기를 변경할 때 흔히 쓰이는 공식은 아래와 같다.
위 공식에서 a0 a1, a2는 감쇠 매개변수(attenuation parameter)들이다. 만약 이전 공식처럼 빛이 거리의 역에 따라 감쇠하게 하고 싶다면 a0 = 0, a1 = 1, a2 = 0으로 두면 된다. 어렵게 생각할 것 없다.
아래는 이를 도입해서 얻은 새로운 조명 방정식이다.
감쇠가 주변광 항에는 영향을 미치지 않는다는 점을 기억하자.
2.범위
광원과의 거리가 광원의 범위보다 큰 점은 그 광원으로부터 빛을 전혀 받지 않는다. 과장해서 부산에 있는 전구가 서울에서 보이지 않는 것이다. 범위를 매개변수로 지정하면 빛을 특정 지역에 국한 시키고자 할 때 유용하다. 또한 셰이더의 최적화에도 유용하다. 만일 주어진 점이 광원의 범위 밖이면 셰이더 코드가 일찍 결과를 출력함으로써 값비싼 조명 계산과 동적 분기를 생략할 수 있다.
'서적 정리 > DirectX11을 이용한 3D 게임 프로그래밍 입문' 카테고리의 다른 글
70.조명된 두개골 예제 (0) | 2022.03.16 |
---|---|
69.조명 예제 (0) | 2022.03.07 |
68.조명 구현 (0) | 2022.03.05 |
67.점적광(Spot Light) (0) | 2022.03.03 |
65.평행광(Parallel Light) (0) | 2022.03.03 |
64.재질의 설정 (0) | 2022.03.03 |
63.조명 중간 정리 (0) | 2022.03.03 |
62.반영광 조명 (0) | 2022.03.03 |
댓글