Normal Mapping
Normal Mapping
-
한 면을 표현하는 Vertex들의 Normal 값이 같다면 내부의 vector들도 동일한 값을 가진다.
-
구의 같은 경우 각각의 Vertex마다 Normal값을 다르게 주기 때문에 입체적인 구현이 가능하지만 큐브의 경우 각 면을 표현하는 Vertex값이 같은 Normal값을 가지므로 내부의 픽셀들 또한 입체적으로 표현되지 않는다.
// 큐브의 앞면을 나타냄
vec[0] = Vertex(Vec3(-w2, -h2, -d2), Vec2(0.0f, 1.0f), Vec3(0.0f, 0.0f, -1.0f), Vec3(1.0f, 0.0f, 0.0f));
vec[1] = Vertex(Vec3(-w2, +h2, -d2), Vec2(0.0f, 0.0f), Vec3(0.0f, 0.0f, -1.0f), Vec3(1.0f, 0.0f, 0.0f));
vec[2] = Vertex(Vec3(+w2, +h2, -d2), Vec2(1.0f, 0.0f), Vec3(0.0f, 0.0f, -1.0f), Vec3(1.0f, 0.0f, 0.0f));
vec[3] = Vertex(Vec3(+w2, -h2, -d2), Vec2(1.0f, 1.0f), Vec3(0.0f, 0.0f, -1.0f), Vec3(1.0f, 0.0f, 0.0f));
//각 정점들이 같은 Normal로 표현된다
-
Vertex의 수를 늘려주는 방식으로 입체적으로 표현하도록 해결하면 늘어난 Vertex에 따라 연산양이 늘어나기 때문에 적합하지 않다.
-
따라서 별도의 이미지 파일인 Normal Map을 만들어 각 픽셀에 해당하는 Normal값을 저장하여 사용하는 방식으로 해결하는 방법이 Normal Mapping이다.
Normal Mapping은 텍스처의 각 픽셀의 Normal 값을 가진 별도의 파일에서 정보를 불러와 텍스처를 보다 입체적이게 표현하는 방법이다.
-
Normal Texture는 별도의 좌표계인 Tangent Space를 활용한다.
-
Tangent Space란?
- 접하는 평면을 기준으로 좌표계를 새로 생각한다.
- 따라서 Normal Vector는 대부분 Up방향을 향한다. 전체 맵의 성분을 그려주면 대부분 파란색으로 표현되는 것이 그 이유 이다.
결과
- before
-
after
왼쪽: NormalMapping 적용
오른쪽: 미적용
Author And Source
이 문제에 관하여(Normal Mapping), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@sansam41/Normal-Mapping저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)