꽃미남 프로그래머 김포프가 창립한 탑 프로그래머 양성 교육 기관 POCU 아카데미 오픈!
절찬리에 수강생 모집 중!
프로그래밍 언어 입문서가 아닌 프로그래밍 기초 개념 입문서
문과생, 비전공자를 위한 프로그래밍 입문책입니다.
jobGuid 꽃미남 프로그래머 "Pope Kim"님의 이론이나 수학에 치우치지 않고 실무에 곧바로 쓸 수 있는 실용적인 셰이더 프로그래밍 입문서 #겁나친절 jobGuid "1판의내용"에 "새로바뀐북미게임업계분위기"와 "비자관련정보", "1판을 기반으로 북미취업에 성공하신 분들의 생생한 경험담"을 담았습니다.
Posted by 알 수 없는 사용자
안녕하세요 흑룡해를 맞아 삼가 인사올립니다.
T모사의 뭐든 궁금해 하는 배경아티스트/TA Silverchime 입니다.

오늘은 프레넬 효과Fresnel Effect에 관해 이야기해보려 합니다.
누구나 한번쯤 들어 보셨겠죠? 반사쪽만 보면 매번 이 단어가 튀어나와서 참 힘들었네요. 그런데 막상 그게 무엇인지 설명을 부탁드려도 될까요? 하면 쉽게 말하기 힘든것도 사실입니다. 오늘 이 부분에 대해서 한번 이야기를 풀어보려 합니다.

물체가 우리에게 보이는 것은 빛이 물체에 반사해서 들어오는 것을 눈(시신경)이 감지하는 것입니다. 컴퓨터쪽으로 말하면 Diffuse, Specular, Reflection이 아마 기본이 될 것입니다.
<물체의 표면에 빛이 반사하는 모델>을 말할 때, Bidirectional reflectance distribution function. 즉 양방향반사분포함수... 약어로 BRDF라는 말을 씁니다.

왜 뜬금없이 BRDF모델이라는 생소한 단어를 꺼내느냐? 라고 물으신다면, 물체 표면에서 빛이 반사되는 성질을 우리는 이 여러가지 수학적 모델로 풀어내고 있으며, 또 위에서 말한 Diffuse, Specular 를 설명하는 것에도 역시 필요하기 때문입니다.
자, 맥스를 켜 보신다면 다음과 같은 매트리얼창을 참 많이 보셨을 겁니다. 이것이 바로 BRDF를 선택하는 풀다운 메뉴입니다. 이외로 가까운 곳에 있지요... ^^
 
일반적으로 Diffuse에 관한 모델은 Lambertian model, Oren–Nayar model 들이 대표적입니다.
그리고 Specular 모델은 리얼타임 게임쪽에서는 Blinn–Phong model 모델을 주로 사용합니다.
그리고 다른 방법으로 Reflection, Refraction이 추가가 될 것입니다. (여러가지 트릭과 기법으로...)

제가 이 글을 쓰게 된 계기는, 과연 매트한 재질에서 디퓨즈와 스페큘러를 알았다면, 이걸로 대부분의 조명을 설명해 낼 수 있는가- 였습니다. 그리고 계속 거리와 풍경, 발밑을 보면서 걸었습니다. 반짝이는걸 다 스페큘러 이런걸로 해석해봐도, 뭔가 좀 부족한게 아닌가... 이런 의문이었습니다. 특히 지하 복도 같은 곳에서는 특히 심했습니다. 그러다 한 곳에서 재미있는 글을 읽게 되었습니다.  
모든물체는 프레넬을 가진다- 라는 글이었습니다. 전 이 글을 읽고 너무나 기뻤습니다.
이참에 번역을 옮겨보도록 하겠습니다.

===============================================================================================
모든 물체는 프레넬을 가진다 - 
게임에서 가장 주요하게 쓰이는 Blinn–Phong model모델의 다이어그램을 보겠습니다.


H = normalize(V+L);
specVal = pow(saturate(dot(H,N)),power);


V는 View Vector, 즉 카메라의 위치를 가리킵니다. L은 Light 광원의 방향입니다.
N은 노멀 벡터, H는 둘의  하프벡터입니다.
공식과 그림에 따르면, 구체의 어느 지점이 가장 밝을(스페큘러 밸류가 높을)까요?  광원에서 들어온 빛이 바로 카메라를 직격하는 곳일겁니다. 기술적으로 말하면 하프벡터가 노멀과 일치하는 곳이 가장 밝을 것입니다. 광원이. 반사되서, 카메라를 때린다. 네 명확합니다.  

자 그럼 이번 다이어그램을 보겠습니다. 자 여기서도  노멀과 하프벡터가 일치한다고 한다고 가정하면, 위와 거의 일치하는 밝기가 나타나야겠죠? 이론상으로는 맞습니다만 실제 현실에서도 그럴까요?

답은 NO 입니다.



많이 보셨지요? 이런 현상. 단순히 사각 벽돌 매트리얼에서도 블린-퐁 스페큘러 모델이 다르게 나타납니다. 좌측은 편광필터로 디퓨즈만 뽑은것이고 우측은 스페큘러를 뽑은 사진입니다.
Glancing Angle( 아주 얕은 각도) 에서 같은 광원이라 할지라도 스페큘러가 훨씬 밝게 보이는 현상,
이걸 바로 프레넬 현상,  Fresnel Effect라고 합니다.
리얼타임 게임에서 메탈등에 사용되는 BRDF Schlick approximaion model을 사용하면 (GPU Gems 3 chapter on skin:) (Schlick 의 Approx 공식은 다음과 같습니다. )

float base = 1 – dot(V,H);
float exponential = pow( base, 5.0);
float fresnel = exponential + F0 * (1.0 – exponential);
specVal *= fresnel;

이러한 형식으로 프레넬의 밝기를 구할 수 있습니다.

사람들은 흔히 프레넬 현상을 알고 있다고 하더라도, 반짝이는 물체에서만 이 현상이 일어난다고 믿는 경향이 있습니다. 물이나, 유리, 금속 같은 경우지요. 그렇지만 사실은, 거의 모든 물체에서 강력하게 나타납니다. 오히려 반짝이지 않는 재질에서 더 극적으로 발생한다고 생각합니다.  

PVC 파이프 정면

 PVC 파이프 얕은 각도.  

골판지 상자

골판지 얕은 각도
 

짱돌

짱돌 얕은 각도
 

수건

수건 얕은 각도

하나더 짚고 가자면 X-Rite 카메라 칼라체커를 사용할때 주의사항으로, 언제나 카메라에 직각으로 대고 사용할것을 권장합니다. 왜 그런지 이제 논의 할 필요는 없겠지요. (당연히 더 밝아지니까요 색상이 다 변해버립니다. )

자 위 글까지는 그냥 프레넬에 관한 글과 공식을 옮긴것이고, 과연 그럼 프레넬이란 어떤현상인지 좀더 알아보겠습니다.

Augustin-Jean Fresnel  (/freɪˈnɛl/ fray-nel; French: [ɔɡystɛ̃ ʒɑ̃ fʁɛnɛl]; 1788–1827),


오귀스텡 쟝 프레넬. ( 프레스넬이 아닙니다 s가 묵음이라... 후... 저도 최근까지 프레스넬이라고 했는데 부끄럽네요 ///ㅅ/// ) 그냥 프레넬이라고 하겠습니다. 이분은 16세기말, 17세기에 파동광학 Wave Optics 의 확립에 크게 기여한 프랑스 엔지니어입니다.
 
1655년 뉴턴이 프리즘으로 스펙트럼을 분리한 이후, 반사와 굴절에 관한 연구는 그야말로 급진전했습니다. 16세기가 대항해시대가 한창이었을때니...

물체의 망원경이나 렌즈와 같은 옵티컬 디바이스에 대한 연구의 요구와 맞물려 수많은 발명이 이루어 졌습니다.  하지만 당시 빛이 프리즘에 분리되는걸 관찰하고 뉴턴은 빛은 입자다 하는 입자설을 주장했습니다, 지금에 와서는 입자와 파동이 혼재한다는걸 정설로 하고 있지만, 이 프레넬이란 분이 19세기에 파동설이 입자설을 대치하게 한 장본인중 한명이라니 대단하죠...
  물체의 반사와 굴절을 다루다보면 만나게되는 스넬의 법칙 Snell’s Law,  

왜 갑자기 또 뜬금없이 스넬의 법칙이냐고요? 왜냐하면, 스넬의 법칙은 바로 이 프레넬 방정식의 일부이기 때문입니다.
스넬의 법칙에 따르면, 두 매질medium이 마주하는 경계면에서 임계각 (Critical Angle)을 넘으면 전반사가 일어난다. - 즉, 입사된 모든 빛이 반사된다는 것입니다. 수학공식을 나열하면 머리가 엄청나게 아프실지도 모를 아티스트분들을 위해 사진을 준비해 보았습니다. 출처 : <동영상으로 보실분들은 요기

자 어떠셨나요?  이제 낮은 입사각에서 두 물체에서 반사가 일어나는 걸 아셨지요?

유리쪽에서 보면 40’ 언저리입니다. 유리에서->공기간의 Critical Angle은 41.8' 입니다.
 

이제 이 그림을 보시겠습니다.

좌측 그림에서 수영장의 수면이 거의 직각일때는 내부가 훤히 비쳐 보이지만, (거의 Tranmitted 되버림) 우측처럼 비스듬이 수면을 바라보면 하늘만이 거의다 반사되어 보이고 풀 내부는 거의 보이지 않습니다. (Reflection) 이는 위 Snell’s Law를 적용 받아 IOR(굴절율) 계수가 높아질수록, 점점 더 정면에서 벗어날수록, 각이 더 얕아질수록 반사가 더 강하게 일어난다는것입니다. (구체라면 중심부는 어둡고 주변부가 더 밝아 지겠지요)
 입사각 > 임계각 = 반사Reflection
 
입사각 < 임계각 = 굴절Transmission 

출처 : SketchupUcation

Glossiness는 실제 반짝거리는 강도를 결정한다면,

IOR(굴절율)이 강하면 강할수록 주변광 반사의 영향이 증가한다는것을 알 수 있습니다.

실제로도, Fresnel Reflection을 이용하는 매트리얼은 IOR 핸들러가 거의 반드시 있습니다. (ex) CryEngine, Unreal Engine 등)
비록 이것은 단지 빛을 투과하는 두 매질에서만 일어나는 것이 아니라는 것입니다. 실제 여러분의 현실에서 직각으로 볼때, 거의 제 색으로 보이다가, 비스듬히 보았을때 밝아지는 거의 모든 사물들이 있습니다. 이것은 단지 게임에서 쓰는 스페큘러 BRDF 모델인 Blinn-Phong 으로 설명할 수 없기에, 우리는 이것을 프레넬 효과(Fresnel Effect) 라고 부릅니다. 요즘엔 림라이트셰이더 rim-light shader로 많이들 fake하는데 바로 이 프레넬효과를 immitate하는 것입니다.  

대표적으로 카페인트. 단순히 블린-퐁 스페큘러만으로는 이런느낌은 힘들죠 시야각이 얕아질수록 점점더 밝아집니다.

다음으로 수면. 굴절이 되면서 수면아래 바닥이 보이네요.

그러나 Critical Angle을 넘어가면서 거울처럼 변해버립니다.


제가 출근길에 마구 찍은 사진입니다. 사실 프레넬 이펙트 안들어간거 찍기가 더 힘들어요. 가능하다면 게임에서도 향후 모든 매트리얼에 들어가지 않을까 합니다. (바램)

 

얼굴에 있는 유막때문에 사람피부 표현에도 프레넬을 적용한 예. (실제로는 훨씬 수많은 기법이 쓰였습니다만, 프레넬만 보겠습니다) 

Comparing Fresnel Formulations

When Computing Kelemen/Szirmay-Kalos Specular Reflectance

http://http.developer.nvidia.com/GPUGems3/gpugems3_ch14.html


자 이제 프레넬 효과에 대해 한번 알아보았습니다. 요약하면, BRDF Blinn-Phong만으로 설명할수 없는 빛의 스페큘러 반사가 존재한다.
그 반사는 정면에서 바라보면 크게 눈에 뜨이지 않지만, 얕은 각도로 보면 물체의 표면이 밝아진다. 이를 프레넬 효과라 한다. 이는 물체 경계면에서 굴절율IOR 에 따라 다르게 나타난다. 그리고...
모든 물체는 프레넬 이펙트를 가진다.
우... 기나긴글 수고하셨습니다. 이걸 다 읽으신 분이 있다면 진심으로 존경스럽습니다. 그리고 서투른 글 보아주셔서 감사드립니다. 솔직히 연구해가면서 쓴 글이라 틀린게 많을것 같아 걱정입니다. ㅠㅅㅠ아마 이걸 보신 다음 나가서 주변의 사물을 보시면 조금은 더 다르게 느껴지실까요? 해질녂 노을에 비친 풍경이나 바다를 보면서 한번쯤 생각해 주세요. 오귀스땡 쟝 프레넬이라는 멋진 사람을...그리고 이런것들을 하나하나 표현하려고 애쓰는 현대 그래픽 프로그래머들과 아티스트들도 말입니다.

그럼, 오늘도 부디 좋은 하루 되세요! ^^
 
반응형
,