주의 : 잘못된 내용이 포함되어 있을 수 있으므로 이상하면 참고자료를 확인하세요.


[ PBR 이란 무엇인가 ] 3. 빛의 감쇠

개요

시리즈의 3 번째입니다. 지난번에 [ 2. 조도와 휘도 ] 에서 방사측정( Radiometry )과 광도측정( Photometry )의 차이에 대해 언급했습니다. 기억이 잘 안 나시는 분들을 위해 복습하자면 방사측정은 빛의 모든 파장 영역의 에너지( power )를 측정하는 것이고, 광도측정은 빛의 가시 파장 영역이 밝기( brightness )를 측정하는 것입니다.

그런데 모든 물리단위들은 기준이라는 것이 있어야 합니다. 우리가 물리기반( Physically-based )를 이야기하고 있으니, 당연히 물리적으로 납득할 수 있는 기준과 단위들이 필요하겠죠.

UE4 엔진의 경우에는 포인트/스포트 라이트의 세기를 설정하는 기준 단위가 루멘( lumen )이라고 이야기하고 있습니다[1]. 세기( intensity )를 밝기( brightness )라고 표현하기도 합니다.

그림1. UE4 에서의 빛의 세기를 설정하는 속성. 루멘단위.

요새 다른 PBR 엔진들도 루멘을 사용하는 추세이죠. 이렇게 된 이유는 광원의 세기를 아티스트의 기분에 따라 설정하지 말고 어떤 기준을 잡고 설정하라는 의미일 것입니다. 그래서 아티스트들이 루멘이 무엇인지 이해할 필요가 있습니다. 루멘이 무엇인지 이해하는 것은 빛에 대해서 더 깊게 이해할 수 있는 기반을 제공할 것입니다.

이 문서에서는 어떤 조명( 광원 )의 광속( luminous flux ), 광도( luminance intensity ), 조도( illuminance ), 휘도( luminance )가 어떤 의미인지 이해하기 위한 선행학습 과정에 대해 다룰 것입니다. 여기에서부터는 약간의 기하와 산수가 나오기 때문에 조금 짜증나실 수는 있습니다. 하지만 여러분은 이 개념들에 대해서 무작정 외우려고 하실 필요는 없습니다, 어떤 원리인지를 이해하고 단위만 잘 기억하시면 됩니다.

그렇게 어려운 내용은 아니니 차분히 읽어 보시면 이해하실 수 있을 거라 생각합니다.

빛은 왜 감쇠할까요?

일반적으로 우리는 빛이 감쇠( attenuation )한다고 알고 있습니다. 강한 빛도 멀리 갈 수록 약해집니다. 여기에서 주의하실 점은 감쇄( reduction )가 아니라 감쇠( attenuation )라는 것입니다. 감쇠는 힘이나 세력이 약해짐을 의미하고, 감쇄는 힘이나 세력이 약해져서 최종적으로는 없어짐을 의미합니다. 지금은 왜 뜬금없이 차이를 이야기할까 싶으시겠지만 뒤에 좀더 설명을 할 것입니다.

빛이라는 것은 전자기파들의 조합이기는 하지만( 파동성 ), 어떤 경우에는 입자들처럼 보일 때가 있습니다( 입자성 ). 입자처럼 보일 때의 빛을 광자( photon, 포톤 )라고 합니다. 그냥 그러려니 하시면 됩니다. 여기에서 더 들어 가면 저도 잘 모르는 양자론에 대해 주절거려야 하기 때문에 더 나아가지는 않겠습니다. 대신에 빛이라는 것을 대충 이런 식으로 이해하시면 됩니다( 정확하지는 않지만 그러려니 하십시오 ).

그림2. 광자의 느낌? 여러개의 전자기파의 묶음을 입자의 관점에서 볼 때 광자라 부릅니다.

어쨌든 광자의 개념에서 빛이 발산하는 모습을 생각해 봅시다.

진공상태라고 가정하면 다른 입자( 먼지, 대기중의 분자들 )들에 의한 산란( 투과, 흡수, 반사 )이 발생하지 않습니다. 그러므로 눈에 들어 오기 전까지는 영원히 직진하겠죠.

그림3. 진공상태에서의 광자의 이동.

눈치가 빠르신 분들은 이 시점에서 한 가지 의문을 가지게 될 겁니다; "그럼 왜 거리가 멀어지면 빛이 감쇠하나요?".

우리는 태양광에 대해서는 평행하게 빛이 도달한다고 생각합니다.

그림4. 태양에서 오는 빛은 평행하다고 가정합니다.

이것이 사실일까요? 그렇지 않습니다. 태양과의 거리는 엄청나게 멀기 때문에 지구에서 사는 사람의 입장에서는 상대적으로 빛이 평행하게 오는 것처럼 느껴질 뿐입니다( 그림5 참조 ). 단지 그래픽스 영역에서는 그 차이가 무시할 수 있을 정도로 의미가 없을 뿐이죠.

그림5. 같은 크기를 가진 물체가 광원에서 멀어졌을 때의 들어 오는 빛들의 각도차이의 변화.

자, 그럼 여러분은 이제 포인트/스포트 라이트와 태양광과의 차이를 아실 수 있습니다. 그냥 거리의 차이입니다. 빛을 받는 오브젝트들의 거리가 너무 가깝기 때문에 각도의 차이가 커집니다. 태양광의 경우에는 엄청나게 많은 광자를 내 뿜고 있으며 태양과 지구와의 거리가 너무 멀기 때문에 거의 평행하게 광자들이 도달합니다. 그래서 우리는 태양광에 대해서 따로 감쇠 거리를 설정하지 않는 것입니다. 하지만 포인트/스포트 라이트들은 내뿜는 광자의 개수가 상대적으로 적으며 가까운 오브젝트가 가까운 거리에서 빛을 받기 때문에 감쇠 거리라는 것이 중요해진 것입니다.

그런데 이 각도가 감쇠라는 것과는 무슨 상관일까요?

세상이 2차원의 평면이고 광원이 점광원이라고 가정합시다. 이 광원은 16 개의 광자를 내뿜을 수 있는 능력을 가졌는데, 광자의 속도가 초당 1 m 라고 가정합시다( 그냥 가정입니다. 광자의 속도는 빛의 속도입니다 ). 1 초 단위로 깜박인다고 가정해 봅시다. 그러면 모든 방향으로 빛을 내 뿜겠죠? 2초 뒤에 광자의 위치는 어떻게 될까요? 시간의 추이에 따라 어떻게 변하는지 그림6 에서 설명하고 있습니다.

그림6. 시간의 변화에 따른 광자의 위치. 2초후에 보면 처음 발사한 광자들은 2 m 를 이동했고, 두번째로 발사한 광자들은 1m 를 이동했습니다.

여러분은 그림6 을 보고 어떤 생각을 하셨나요?

광원으로부터의 거리가 멀어질 수록, 광자끼리의 거리도 멀어집니다. 결국 같은 각도 내에 존재하는 광자의 개수는 동일하지만, 그것이 커버해야 하는 면적이 넓어졌습니다. 이것을 3D 관점에서 보면 그림7 과 같은 느낌이 됩니다.

그림7. 3D 에서 빛의 감쇠. 출처 : [2].

r 의 거리에서 한칸에 해당하는 면적에 광자가 3( = 3/1 ) 개가 있었다면, 2r 의 거리에서는 에서는 한칸에 평균적으로 3/4 의 광자가 존재합니다. 물론 광자의 위치에 따라 3 개나 2 개가 있을 수 있겠죠. 그림7 에서는 2 개가 있는 것으로 나왔군요.  3r 의 거리에서는 한칸에 평균적으로 1/3( = 3/9 )의 광자가 존합니다. 그림7 에서는 1 개로 나왔구요. 그물을 잡아 당겨서 늘리면 구멍이 커지는 느낌으로 생각하시면 됩니다.

이렇게 면적당 광자의 개수관계를 생각하면, 거리에 따라 빛의 밝기가 감쇠하는 것과 관련한 공식을 다음과 같이 쓸 수 있습니다. 일단 여기에서는 광자 1 개당 세기를 1 이라고 가정했습니다.

식1. 거리에 따른 빛의 세기의 감쇠. 거리의 제곱에 반비례합니다.

수학을 좀( ? ) 배우신 아티스트들은 이 공식을 보면서 의문을 가지게 될 것입니다; "언제 빛의 세기가 0 이 되나요?".

Distance 가 무한대가 되더라도 0 에 수렴할 뿐 0 이 되지는 않습니다. 즉 거리가 멀어질 수록 세기가 기하급수적으로 낮아지기는 하지만 아예 영향력이 없는 것은 아니라는 것이죠. 그러므로 대부분의 엔진들의 광원에는 UE4 에서와 같은 "Attenuation Radius( 감쇄 반경 )" 라는 속성이 있습니다[1]. 광원의 영향력을 모든 오브젝트에 반영한다는 것은 현실적으로 힘들기 때문입니다( 라이팅 계산이 무겁기 때문에 현재 하드웨어에서는 힘듭니다 ). 게다가 인간의 눈은 성능이 별로( ? ) 안 좋기 때문에 0 에 가까운 밝기를 인지하지 못합니다. 계산해 봐야 크게 의미가 없는 것입니다. 그래서 아티스트가 보기에 이 정도까지만 라이팅을 처리해도 괜찮겠다 싶은 거리를 지정하게 하는 것입니다. 쓸데없이 거리를 길게 잡게 된다면, 눈에는 거의 안 보이는데 처리를 해야 해서 계산비용이 늘어나겠죠.

예전에는 감쇠를 위해서 "Light Radius" 혹은 "Source Radius" 라는 용어를 사용했지만, area light 라는 개념이 나오면서 "source radius" 는 광원 자체의 반지름을 의미하는 것으로 바뀌었습니다. 그러므로 "Attenuation Radius" 와 "Source Radius" 를 혼동하지 마시기 바랍니다.

감쇠는 어떻게 계산된 것인가요?

앞에서 감쇠된 빛의 세기는 거리의 제곱에 반비례한다는 결론을 냈습니다. 물론 그림7 에서 볼 수 있듯이 거리가 1r 일 때 1칸, 2r 일때 4 칸, 3r 일때 9 칸, 이런 식으로 하면 거리의 제곱에 반비례한다는 사실이 유추되기는 합니다. 하지만 그림7 은 단순화해서 표현한 것일 뿐입니다.

이것이 어떻게 유도되었는지를 명확하게 이해해야 앞으로 나올 개념들을 이해하는데 도움이 됩니다. 이를 위해서는 입체각( solid angle )이라는 개념에 대해 먼저 알아야 합니다.

호도법

입체각에 대해 알려면 호도법에 대해 먼저 이해하는 것이 편합니다. 입체각이라는 것은 3차원에서의 각을 표현하는 것이기 때문에 2차원에서의 각인 호도법을 살펴 봄으로써 좀 더 쉽게 이해할 수 있기 때문입니다.

사람들은 평면에서 각을 표현할 때 도( degree )라는 단위를 선호합니다. 그래서 아티스트가 접하게 되는 대부분의 단위는 도 단위로 표현이 됩니다. 하지만 수학적인 영역으로 들어 가면 도 단위보다는 호도( radian ) 단위를 선호합니다. 매우 직관적이고 편하기 때문입니다.

여러분은 학교에서 반지름( radius )이 1 인 원의 둘레는 2π( pi, 파이 ) 라고 배우셨을 겁니다. π 는 순환하지 않는 무한소수로 원주율이라고 불립니다. 그 값인 3.1415926... 을 열심히 외우셨을테구요. 이때 질문이 들어갑니다. 각도가 a° 일 때 만들어지는 부채꼴의 호의 길이( arc length )는 얼마일까요?

그림8. 반지름 1인 원에서 각도가 a 도일 때의 부채꼴의 호의 길이는?

360 도일 때 원의 둘레가 2π 였기 때문에 비례식을 쓰면 a 도일때의 부채꼴의 호의 길이를 알 수 있죠.

식2. 반지름 1인 원에서 a 도인 부채꼴의 호의 길이 x 구하기.

좀 더 응용해 봅시다. 반지름이 r 일 때는 원의 둘레가 2πr 입니다. a 도일때의 부채꼴의 호의 길이는 무엇일까요? 식2 에서처럼 비례식을 사용해 값을 구할 수 있습니다.

식3. 반지름이 r 인 원에서 a 도인 부채꼴의 호의 길이 x 구하기. 

반대로 해 봅시다. 반지름 r 인 원에서 부채꼴의 호의 길이가 x 일 때 부채꼴의 각은 몇 도인가요? 식2, 3 에서 처럼 비례식을 써서 구할 수 있습니다.

식4. 반지름이 r 인 원에서 호의 길이가 x 인 부채꼴의 각 a 구하기. 

뭔가 숫자를 외워야 하고 나눗셈이 들어갑니다. 이건 매우 귀찮은 작업이며 실수의 여지가 있습니다. 그래서 수학자들은 이를 쉽게 할 수 있는 방법을 찾게 되었고, 호도법이라는 것이 나오게 되었습니다( 1714 년에 Roger Cotes 라는 사람이 호의 길이를 각처럼 사용하자는 제안했다고 합니다[3] ). 호도법이라는 것은 반지름이 r 일 때 부채꼴의 호의 길이가 r 인 경우를 1 라디안( radian )이라고 표현하는 것입니다. 즉 각의 크기를 도에서 길이의 단위로 바꿔버리는 겁니다( 그림9 참조 ).

그림9. 반지름이 r 인 부채꼴의 호의 길이가 r 일 경우 각도를 1 라디안이라 합니다.

여기가 바로 질문이 나올 타이밍입니다; "대체 뭐가 편한데요?".

우리는 반지름이 r 인 원의 둘레가 2πr 이라는 것을 알고 있습니다. 반지름이 r 인 부채꼴( 반원 )의 호의 길이는 πr 이죠. 이 때의 각은 π 입니다( 그림10 참조 ).

그림10. 반지름 r 인 ( 그리고 각이 π 인 ) 반원의 호의 길이는 πr 입니다.

관계가 명확하게 보이시나요? 만약 반지름이 r 인 부채꼴의 각도가 a 라디안이라고 하면, 그것의 호의 길이는 ar 인 것입니다( 그림11 참조 ).

식5. 반지름이 r 이고 각이 a 인 부채꼴의 호의 길이 x 구하기.

그림11. 반지름이 r 이고 부채꼴의 각이 a 라디안이면, 호의 길이는 ar 입니다.

뭔가 복잡하게 변환할 필요가 없습니다. 각과 반지름 알면 호의 길이를 알 수 있고, 각과 호의 길이를 알면 반지름을 구할 수 있고, 반지름과 호의 길이를 알면 각을 구할 수 있습니다. 매우 직관적이고 계산이 단순해집니다.

3차원에서의 각

평면에서의 각은 라디안이라는 단위를 사용해서 쉽게 표현할 수 있다는 것을 알게 되었습니다. 하지만 3 차원에서의 각도는 어떻게 표현해야 할까요?

애초에 우리는 각이라는 것을 평면에서만 사용해 왔습니다. 삼차원에서 10 도라는 개념이 상상이 되시나요?

그림12. 3차원에서 10도를 상상해 봅시다.

3D 에 익숙하신 분들이라면 이를 경도와 위도처럼 나누어서 생각하실 수 있을겁니다. 그림13 처럼 중심이 되는 방향( 벡터 )를 기준으로 수평으로 몇도 수직으로 몇도 이렇게 나눌 수 있겠죠( 물론 다른 표현들도 존재합니다만, 머리만 복잡해지므로 여기에서 굳이 다루지는 않겠습니다 ).

그림13. 3차원에서의 각을 수직각과 수평각으로 나누어서 생각할 수 있습니다.

하지만 수학자들은 호도법을 발명했듯이 입체각( solid angle )이라는 것을 발명하게 되었습니다[4]. 반지름이 r 인 구에서, 면적이 r2 인 면적을 포함하는 원뿔형의 각을 1 스테라디안( steradian, sr )이라고 부르고, 이러한 각도를 입체각이라 정의한 것입니다( 그림14 참조 ).

그림14. 반지름이 r 인 구에서 r2 인 면적을 포함하는 원뿔형의 입체각을 1 스테라디안이라 부릅니다. 출처 : [4]. 

그럼 여기에서 또 뭔가 룰이 보이시나요? 호도법이 호의 길이를 각으로 치환했듯이, 입체각은 겉넓이( 면적 )를 각으로 치환한 것입니다. 호도법에서는 1차원적인 곱인 "호의길이 X 반지름" 으로 표현되듯이, 입체각은 2차원적인 곱인 "겉면적 X 반지름의 제곱" 으로 표현되고 있습니다.

우리는 구의 겉면적을 4πr2 로 알고 있습니다. r2 이 1 스테라디안을 의미하므로 구 전체의 입체각은 4π 인 것입니다.

만약 반지름이 r 인 구에서 입체각이 a sr( 스테라디안 )인 원뿔형의 겉면적을 구해야 한다면 다음과 같은 관계로 표현될 수 있습니다.

식6. 반지름이 r 인 구에서 입체각이 a sr 일 때 원뿔형의 겉면적 x 구하기.

호도법처럼 매우 단순하게 표현되는 것을 알 수 있습니다.

빛이 거리의 제곱에 반비례해 감쇠하는 이유

반지름이 r 인 구에서 입체각 a 인 원뿔형의 겉면적이 ar2 이라는 사실을 알게 되었습니다. 만약 r 값이 늘어난다고 해도 a 는 각이기 때문에 변하지 않습니다. 어떤 광원이  a 라는 입체각 내에 광자를 1 개를 내 보낸다고 가정해 봅시다. 그리고 그것의 밝기를 1 이라고 하죠. 1초가 지났을 때의 반지름은 1 이고 r 초가 지났을 때 반지름은 r 이겠죠. 그렇다면 각각의 겉면적은 a ( = a X 12 ) 과 ar2 입니다. 겉면적의 비율은 1 : r이 됩니다.

면적이 r2 만큼 늘었으니, 광자가 커버해야 하는 영역은 더 넓어지며, 밝기는 반대로 1 / r2 에 비례하는 것입니다.

정리

빛이 감쇠하는 것은 엄밀히 말해 거리가 멀기 때문이 아닙니다. 거리가 멀어질 수록 면적에 비해 광자의 개수가 줄어들기 때문이죠. 거리에 따라 면적이 얼마나 커지느냐는 입체각의 정의를 통해 알 수 있습니다.

참고자료

[1] 라이팅 기초, Unreal Engine Documents.

[2] Light Attenuation, Technical Grahic Director.

[3] Radian, Wikipedia.

[4] Solid Angle, Wikipedia.

+ Recent posts