빛의 감쇠 계산
빛의 감쇠를 계산하는 방법
1. 기본적인 방법.
점광원으로부터 방출되어서 하나의 표면을 떄리는 에너지는
표면과의 거리가 멀어짐에 따라 감소한다.
간단하게 func(Attenuation) = 1/d(L) 을 사용하기도 하는데 이보다는
제곱을 사용하는것이 결과물이 더 좋다.
func(Attenuation) = 1 / (d(L) * d(L))
그런데 테스트 해 보면 알 수 있지만 이 공식의 문제는 가까울 때에는 너무 선명하고
멀어질 수록 너무 극명하게 약해진다는 것이다.
그래서 Direct3D에서 점광의 감쇠는 아래의 공식을 사용한다.
func(Attenuation) = 1 / ( A(0) + A(1) * d(L) + A(2) * d(L) * d(L) )
여기서 A0,1,2는 감쇠 상수이다.
A1 = 0, A2>0이면 방사성 거리 감쇠(radial distance falloff)가 되고
A1>0, A2 = 0이면 선형 감쇠(linear falloff)가 된다.
빛의 감쇠는 두가지를 신경써야 한다.
광원이 표면과 너무 가까이 있을때, 빛이표면에 영향을 주는 최대 범위의 경계에서
빛이 없다가 갑자기 나타나게 되는 경우이다.
너무 가까울 떄 빛이 너무 밝아지는 것을 막기 위해 A0을 1 이상으로 설정한다.
그리고 최대범위에서 갑자기 빛이 나타나는 것을 막기 위해 범위 경계에서
감쇠계수가 0.0에 가깝게 되도록 감쇠 상수들을 설정하는 것이다.
2. 빛이 놓여있는 가상 영역을 사용하는 방법
여기서 추가적으로 pow( attenuation, 상수 k) 로 감쇠 정도를 조절해주면 좋을 듯.
'Study > Graphics ' 카테고리의 다른 글
9콘 필터 샘플링 (0) | 2012.01.26 |
---|---|
Ambient Aperture Lighting (0) | 2011.07.14 |
조명효과 - 램버트 확산 조명 (0) | 2011.05.05 |
PartialPrecision (0) | 2011.04.21 |
Gemetric Modeling Systems (0) | 2010.11.27 |