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


[ PBR 이란 무엇인가 ] 19. BRDF

오늘은 BRDF 에 대해서 이야기해 보려 합니다. BRDF 는 "Bidirectional Reflectance Distribution Function" 의 머리글자입니다. 우리 말로는 "양방향 반사율 분포 함수"입니다. 이 BRDF 는 Diffuse BRDF 와 Specular BRDF 로 나뉩니다. 한번에 모든 것을 설명할 수 있는 모델이 있으면 좋겠지만, 안타깝게도 현재까지는 ( 필자가 알기로는 ) 상용화된 모델이 존재하지 않습니다.

어쨌든 BRDF 는 그림1 의 파라미터들을 사용해 식1 과 같은 형태의 함수 fr 로 정의됩니다[ 1 ] :

식1. BRDF 함수 형태. 출처 : [ 2 ].

 

그림1. BRDF 함수를 정의하는 다이어그램. 출처 : [ 2 ].

식이 나오니 뭔가 어렵게 느껴지실 수도 있지만 규칙을 알면 어려울 것이 없습니다.

식1 에서 r 이라는 아래첨자( subscrip )는 reflectance 의 머리글자입니다. 함수가 r 에 대한 함수라는 의미죠. ω( 오메가 ) 라는 파라미터( 매개변수, parameter )는 함수의 입력값을 의미하죠. 여기에서는 i 라는 아래첨자는 incident( 입사하는 ) 의 머리글자입니다. 즉 ωi 는 입사광 벡터( 광원을 향하는 벡터 )을 의미하고 ωr 은 반사광 벡터( 관찰자를 향하는 벡터 )를 의미합니다.

자, 정리해 봅시다. 함수 f 는 입사 방향과 반사 방향을 입력으로 받으면, 그 관계에 따라 반사율( 입사광과 반사광의 비율 = 반사광 / 입사광 )을 출력으로 내뱉어 준다는 것입니다.

여기에서 f 는 실제 식을 가지고 있지 않습니다. 형태만을 정의한 것이죠. 다시 말해 다음과 같은 조건을 만족하면 BRDF 라 할 수 있는 것입니다.

    • 반사율 분포( Reflectance Distribution )를 출력으로 내뱉음.
    • 양방향성( Bidirectional )을 가짐: 광원과 관찰자의 관계가 동일하다면 반사율 분포가 변하지 않음.
    • 광원과 관찰자를 입력 파라미터로 받음.
    • 함수( Function )여야 함: 같은 입력에는 항상 하나의 같은 결과가 나와야 함.

그렇다면 여러분은 위의 조건을 만족하기만 하면 구현하는 사람마다 다른 결과를 낼 수 있을 것이라는 사실을 유추하실 수 있을 겁니다. 그래서 BRDF 모델은 참 다양합니다( 그림2 참조 ).

그림2. 다양한 BRDF 모델들. 출처 : [ 1 ].

우리가 많이 들어 본 Cook-Torrance, Oren-Nayar, Phong, Blinn 등 여러 가지 BRDF 모델들이 있군요. Theroical( 이론적인 ) 은 이론적으로는 더 올바른 결과를 내는 모델들을 의미하고, Empirical( 경험적인 ) 은 덜 이론적이지만 실증된 결과를 반영한 것을 의미합니다. 마지막으로 Experimental( 실험적인 ) 은 말 그대로 실험적인 결과를 보여 줍니다. 살색은 결과가 Isotropic( 등방성 ) 이라는 것이고 녹색은 결과가 Anisotropic( 비등방성 ) 이라는 것입니다.

Diffuse BRDF

일반적으로 Diffuse BRDF 는 Lambertian reflectance( 램버트 반사율 ) 를 사용합니다. 복잡한 모델들도 있을 수 있겠지만 diffuse 모델의 경우에는 별 차이가 나지 않습니다.

램버트 반사율은 표면이 이상적인 확산 반사를 보여준다고 가정합니다. 소위 "무광( matte )" 재질을 의미합니다. 모든 방향으로 균일하게 빛을 반사하고 있다는 것이죠.

전에 [ 16. Reflection 에 대한 잘못된 상식들 ] 에서 언급했듯이 diffuse 는 표면에 흡수된 후에 다시 방출되는 것이라서 재질의 색상을 보여 준다고 했습니다.

그림6. Diffuse 의 발생과정. 출처 : [ 4 ].

그런데 이게 어떻게 튈지는 구성요소의 성분과 밀도에 따라 달라지기에 한정된 자원을 가진 현세대 컴퓨터로 이를 제대로 표현하는 것은 힘듭니다. 그래서 전방향으로 균일하게 반사한다고 가정하는 것이 바로 램버트 반사율입니다( 그런 재질을 가졌다고 가정한 상태에서의 표면을 Lambertian surface 라고 부르기도 합니다 ).

하여간 이를 그림으로 표현하면 그림7 과 같습니다.

그림7. Lambertian reflectance. 붉은색이 diffuse. 출처 : [ 4 ].

그런데 글을 차분히 읽으신 분은 여기에서 강한 의문을 표하게 될 것입니다 : "모든 방향으로 균일하게 반사한대며?".

그렇다면 그림7 은 잘못된 것일까요? 그림8 이 맞는 걸까요?

그림8. Lambertian reflectance. 전방향으로 동일하게 반사. 출처 : Optical PTFE from Lake Photonics.

제가 "안 누구누구"는 아니지만 "그림7 일수도 있고 그림8 일수도 있습니다" 라고 대답하도록 하겠습니다.

빛은 그림8 처럼 표면에서 균일하게 반사되어 나가는 것이 맞습니다만, 표면에 들어 온 조도( 빛의 양 )가 다릅니다. [ 5. 조도( illuminance ) 측정 ] 에서 빛을 받는 서피스의 기울기에 따라서 빛을 받는 양이 달라진다고 했던 것이 기억나시나요? 표면에 도달한 빛은 그림8 처럼 모든 방향으로 균일하게 방출되지만, 눈으로 볼 때는 그림7 처럼 기울기에 따라 다른 양의 빛을 받게 되는 겁니다. 램버트 모델에서는 관찰자의 위치에 따라 반사율이 달라질 수는 없지만 조도가 다르기 때문에 기울기가 커지면 점점 어두워 보이게 되는 것입니다.

그림9. 기울기와 조도의 관계. 램버트 코사인 법칙. 출처 : Lambert's Cosine Law, Ocean Optics.

그림9 에서 박스가 눈의 면적만큼의 빛덩이라고 가정합시다. 기울기가 작아지면 같은 면적이라고 할지라도 더 적은 양의 빛이 들어 오게 되는 것을 알 수 있습니다. 이  이것을 수학적으로 정리한 사람이 Lambert 이고 그 결과가 cosine 법칙과 같기 때문에, 이를 램버트 코사인 법칙( lambertian cosine law )라고 부릅니다.

빛을 향하는 벡터와 표면의 노멀을 내적(  dot product )하면 그 결과는 cosine 과 같아집니다. 왜냐하면 N 과 L 은 정규화된( normalized ) 벡터이므로 그 길이가 1 이기 때문입니다.

식2. Diffuse BRDF. 램버트 코사인 법칙.

이것이 소위 말하는 "엔닷엘"입니다. 식2NL 중간에 있는 mid dot( · ) 연산자가 dot product( 내적 )을 의미합니다. N 은 표면의 노멀( Normal ) 벡터이고 L 은 라이트( Light ) 벡터입니다.

그런데 이 시점에서 민감하신 분들은 왜 식1 의 형식과 다르냐고 지적하실 수 있습니다. 여기에서는 ωi 를 입력값으로 받지 않죠. 왜냐하면 전술했듯이, 그림8 처럼 관찰자의 위치와 관계없이 모든 방향으로 균일하게 빛을 반사하기 때문에 관찰자의 위치는 필요하지 않습니다. ωi 를 입력값으로 넣는다고 해도 아무런 변화가 없다는 것입니다. N·L 은 조도계산을 위해서 필요한 것입니다. 

에너지 보존( Energy Conservation ) 법칙

아티스트들과 연구자들은 이 Diffuse BRDF 가 뭔가 이상하다는 것을 깨닫게 됩니다( 사실 물리적으로 올바르지 않으면 자연스럽지도 않습니다. 그것이 얼마나 많이 티가 나느냐는 차이가 있을 뿐이죠. 왜냐하면 우리 눈은 실세계에서 물리적 현상들에 익숙해져있기 때문입니다. 일부러 왜곡하는 경우는 배제하고 이야기하는 것입니다 ).

뭐가 이상한지 찾아 보았더니 들어온 빛의 세기와 나가는 빛의 세기의 합을 해보니 들어온 빛보다 나가는 빛이 더 많다는 것을 알게 된 것입니다.

그림8 을 보시면 모든 방향으로 빛이 나가는 것을 알 수 있습니다. 다른 방향으로 가고 있는 빛은 관찰자에게 도달할 수 없습니다. 그런데 N·L 은 다른 방향으로 가고 있는 빛을 고려하고 있지 않습니다. 단지 빛과 표면의 노멀의 관계만을 고려한 것이죠.

그래서 나가는 빛의 양을 모두 합산한 다음에 그것으로 나눠줍니다. 예를 들어 피자 한 판을 10 조각으로 나누고 내가 한 조각을 먹었다면, 내가 먹은 비율은 1 / 10 이라고 계산하는 것과 같습니다. [ 7. Light intensity 설정 ] 에서 점광원의 광속( lumen )으로부터 광도( lux )를 계산할 때 전체 입체각의 크기인 4π 로 나눠야 정확한 광도가 나온다는 것을 기억하시나요? 그것과 유사합니다.

이걸 증명하려면 미적분이 들어가므로 여기에서 구체적으로 설명을 하지는 않겠습니다. π 로 나눠야 한다는 것만 알려드리도록 하겠습니다. 실제 유도하는 과정이 궁금하시다면 [ 5 ] 의 "Relating peak luminous intensity and luminous flux" 를 참조하시기 바랍니다.

최종 Diffuse BRDF 식은 식3 과 같이 결정됩니다. 이번에는 식1 과 같은 형태로 정리해 봤습니다.

식3. Diffuse BRDF. 에너지 보존 법칙을 고려.

그렇기 때문에 여러분은 PBR 이 적용된 엔진에서는 Diffuse 가 1/3( π = 3.141592... ) 정도 줄어드는 것을 느끼게 될 것입니다.

우리는 Diffuse 맵( 언리얼에서는 Base texture )을 알베도( albedo, RGB 채널당 표면 반사율 )의 개념으로 사용합니다. 알베도는 절대값인 색상이 아니라 비율입니다. 색상이라기보다는 데이터라는 의미죠. 그러므로 PBR 환경에서는 다른 파라미터를 통해서 밝기를 조정하시는 것이 좋습니다( 예를 들면 광원의 밝기 ).

참고자료

[ 1 ] An Overview of BRDF Models, Rosana Montes and Carlos Urena.

[ 2 ] Bidirectional reflectance distribution function, Wikipedia.

[ 3 ] Lambertian reflectance, Wikipedia.

[ 4 ] Diffuse reflection, Wikipedia.

[ 5 ] Lambert's cosine law, Wikipedia.

+ Recent posts