Blinn 과 Newell 은 1976 년에 reflection mapping( environment mapping 이라 불리기도 함 ) 이라는 기법을 소개했는데요, 이는 거울같은 서피스로부터의 반사를 시뮬레이션합니다. 그 공식은 다음과 같습니다[ 1 ].


식 1. Reflection Vector 계산


여기에서 N 은 서피스의 노멀( normal ) 벡터이며 V 는 서피스로부터 뷰어( viewer )를 향하는 벡터입니다. 그리고 R 은 반사 벡터입니다. N 과 V 는 모두 정규화( normalize )되어 있다고 가정합니다.


이 식을 처음 보면 상당히 이해하기 힘든데요, 그림을 그려서 관계를 살펴 보면 쉽게 이해할 수 있습니다. R 은 N 과 V 가 이루는 평면상에 존재하게 되므로 사실 이는 2D 수학입니다.


그림 1. Reflection Vector 계산 과정.


먼저 N 과 V 가 모두 정규화되어 있기 때문에 dot( N, V ) 는 VN 에 사영했을 때의 길이가 됩니다. 이게 마름모를 형성하고 있으므로 그것을 2 배 한 만큼 N 방향으로 밀어 낸 후에 -V 방향을 더하면 R 이 나옵니다.


그런데 셰이더를 작성할 때 이걸 일일히 계산할 필요는 없습니다. HLSL 내장함수로 reflect( I, N ) 라는 것이 존재합니다.


Blinn 과 Newell 의 공식과 차이가 있는데요, 뷰어와 노멀의 관계에서 반사 벡터를 구하는 것이 아니라, 입사( incident ) 벡터와 노멀의 관계에서 뷰어를 구한다는 것입니다.


식 2. HLSL reflect( i, n ) 의 계산식.


그림 1 처럼 직접 그려 보시면 이해가 갈 것이라 생각합니다. 자세한 내용은 [ reflect ] 에서 확인하세요.


참고자료


[ 1 ] 38p. TEXTURING & MODELING. A Procedural Approach. THIRD EDITION.

+ Recent posts