카테고리 없음

Normal Mapping

춤추는수달 2022. 1. 3. 23:04

Noraml Map을 사용해 각 픽셀마다 다른 Noraml 벡터를 전달해주는 것. 

 

Normal Mapping이 없으면 색상이 대체로 밋밋해 보이게 됨. 왜냐하면 하나의 면에 Noraml 벡터가 하나 뿐일 경우 한 면에 대해 한 가지 색상이 계산되어 입혀지기 때문. 그런데 Normal Mapping을 통해 각 픽셀마다 다른 Normal 벡터를 주게되면 각 픽셀마다 다른 색상으로 계산됨. 

 

Normal Map이 푸른색을 띄는 이유 : Normal map은 이름처럼 Noraml 벡터들을 모아놓은 정보임. 따라서 Z축 값이 1에 가까운데, 이는 RGB값에서 파란 색에 해당함. 그래서 대체로 푸른색임.

실제 물체의 평면은 여러 방향을 향하는데, Normal Map이 픽셀마다 Z축을 향하는 이유 : 물체가 애니메이션에 의해 움직이면 계속 Noraml벡터가 바뀌기 떄문에, Noraml Map은 별도의 좌표계를 따름. Tangent 좌표계,  즉 접하는 평면의 좌표계를 따름. 이떄 접하는 평면을 Tangent Space 라고 함.

이 탄젠트 좌표계는 Tangent, Binoraml, Noraml 세 가지 축으로 이루어짐. 이 떄 Noraml이 평면에 수직인 벡터, 즉 파란색에 해당하는 벡터임. 

 

즉 우리는 Pixel Shader에 Normal Map의 정보를 넘겨주고 연산 시킬 때, 이 정보를 Tanget좌표계에서 카메라가 보는 View Space 좌표계로 바꿔주어야함. 

이 때 곱해주는 변환 행렬은 Tangent, Binormal, Noraml 세 벡터의 속성을 열거한 형태의 행렬이 된다.

 

#참고로 기존엔 Pixel Shader에 가기 전에 정점마다 전해준 uv 값을 Rasterizer가 보간해 픽셀마다 Pixel마다 PixelShader가 실행됨.

#Tangent : 접하다. 접하는 평면