
얼마나 걸릴지 모르겠지만.. 너무 블로그를 방치해놓았던 죄로.. 노말맵에 대한 강좌를 해볼까 합니다.이번시간엔 개념 전체를 설명하려고 했지만.. 생각보다 양이 많군요. 다음시간까지는 Normal Map과 관련된 개념들을 설명하고 그 이후에 직접적인 활용법을 설명드리겠습니다.
3D 작업에 있어서도 개념에 대한 이해는 무엇보다 중요합니다. 지루할수도.. 뻔히 아는 내용일지도 모르지만. 한번더 새겨두도록 하심이... ^^
Class 01 : Normal 의 개념
노말맵의 전체 명칭은 Normal Bump Map 입니다. 기본적으로 범프맵과 마찬가지로 작은 요철을 표현하는데 쓰이는 것입니다.
노말맵도 범프맵과 마찬가지로 실제로 요철이 생기지는 않습니다. 하지만 노말맵은 단순한 깊이정보가 아닌 방향정보를 포함하기 때문에 범프에서는 만들수 없던 세밀한 깊이감을 표현할 수 있게 됩니다. 디스플레이스먼트의 느린 속도를 개선하고, 범프맵의 표현한계를 적절히 해결한 방식이라고 볼 수 있겠지요.
여기까지는 모두 알고 계시는 개념일 겁니다. 하지만 정확히 어떤 원리를 통해 노말맵이 구현되는지는 모르시는 분들도 많으리라 생각됩니다.
이번시간엔 노말맵의 개념에 앞서 "노말(Normal)" 의 개념을 확실히 짚고 넘어갈 것입니다. Normal Map은 바로 이 Normal 로부터 시작한 것이기 때문에 Normal 값에 대한 확실한 이해는 Normal Map 전체를 이해하는데 큰 도움이 될 것입니다.
노말맵도 범프맵과 마찬가지로 실제로 요철이 생기지는 않습니다. 하지만 노말맵은 단순한 깊이정보가 아닌 방향정보를 포함하기 때문에 범프에서는 만들수 없던 세밀한 깊이감을 표현할 수 있게 됩니다. 디스플레이스먼트의 느린 속도를 개선하고, 범프맵의 표현한계를 적절히 해결한 방식이라고 볼 수 있겠지요.
여기까지는 모두 알고 계시는 개념일 겁니다. 하지만 정확히 어떤 원리를 통해 노말맵이 구현되는지는 모르시는 분들도 많으리라 생각됩니다.
이번시간엔 노말맵의 개념에 앞서 "노말(Normal)" 의 개념을 확실히 짚고 넘어갈 것입니다. Normal Map은 바로 이 Normal 로부터 시작한 것이기 때문에 Normal 값에 대한 확실한 이해는 Normal Map 전체를 이해하는데 큰 도움이 될 것입니다.
1. Normal 의 기본 개념

Normal은 3D에 이미 오랫동안 쓰여온 개념입니다. 세개의 점(Vertex)은 하나의 면(Face)을 만들고 이 면에 수직방향이 바로 Normal 방향입니다. 세개의 점은 각각 정 반대방향으로 두개의 면을 만들 수 있기 때문에 이러한 노말방향이 없으면 모든 면을 양쪽으로 랜더링 걸어야 합니다. 하지만 노말뱡향만 랜더링 걸게 되면 그 절반의 시간만 들이면 되는 것이죠.
이러한 노말방향의 "Normal"이 노말맵의 "Normal"과 같은 것입니다. 보통 노말방향(값)은 뒤집히면 매쉬가 붙지 않거나, 오류가 나게 되기 때문에. 그런 문제를 해결하기 위해 가끔 확인해주는 정도의 개념이지만. 노말맵이 있기 전부터 실제로 노말방향은 몇가지 용도로 더 쓰여왔습니다.
2. Normal 방향과 Rendering
노말값은 앞에서 살펴보았든 면의 앞뒷면을 살펴보는 정도로도 사용되지만. 하나의 기울기 값이라는 것 역시 노말값이 가진 속성입니다.
아무런 매트리얼값도 들어가지 않은 기본 오브젝트에 하나의 라이팅이 떨어졌다고 가정합시다.(물론 랜더링은 L.I 방식이 되겠지요..) 이때 오브젝트의 각각면은 빛의 방향과의 기울기 값의 차이로 인해 어두워 지거나 밝게 랜더링 되며 이에 따라 오브젝트는 하나의 물체로서 형상화(랜더링) 되는 것입니다.
너무 당연한 예기지만. 여기서 바로 노말값이 사용됩니다. 노말방향은 다시 말해 각 면의 기울기 값을 대표하며, 노말방향과 라이팅이 서로 마주보고 있다면 이 부분이 가장 밝은 부분이 됩니다. 반대로 노말방향과 라이팅이 90도 이상 차이나게 되면 전혀 빛을 받지 못하게 되는 것이죠.

이쯤에서 이 위의 그림을 봅시다. 좌우 모두 하나의 구 모양의 매쉬와 상단에 라이트가 하나 있습니다. 지금까지의 설명대로라면 좌우중에 어떤식으로 랜더링 되었을까요?? 물론 오른쪽값대로 랜더링 되었을 것입니다.
왜냐하면 노말방향은 한 면에 하나 뿐이며. 그 면은 모두 같은 밝기로 랜더링 되어야 하기 때문이죠. 예전의 Virture Fighter가 처음 나왔을때. 모든 캐릭터들은 오른쪽 처럼 각지고 끊어진 모습이었습니다. 그것은 바로 면과 면 사이의 Edge를 부드럽게 처리하는 기술이 없었기 때문이었는데 그것은 바로 노말방향은 각각의 면에 한개 뿐이라는 설정에 묵여 있었기 때문입니다.

추억의 게임 Virture Fighter 1 당시엔 너무나도 멋져 보였엇는데.. ㅜ,ㅜ
3. Soft Edge와 Normal 값
이후에 왼쪽의 구처럼 같은 오브젝트라고 하더라도 부드럽게 처리하는 랜더링 기술이 쓰였는데. 모두들 알고 계시듯 Soft Edge라는 개념입니다. 여기까지 천천히 읽어오셨다면 벌써 눈치를 채셨을 겁니다. Soft Edge라는 개념은 Normal 값을 각각의 면에 한개만 두고 있지 않다 라는 것을 말이죠.

Hard 및 Soft Edge 별 노말값의 차이 (매쉬의 노말값이 아닌 랜더링 시의 노말값)
위의 그림에서 처럼 Soft edge를 사용할경우에 각각의 면은 Vertex 별로 노말값을 가지게 됩니다.(이 Normal 값이 정확이 어떤 계산으로 생성되는지 까지는 모릅니다. 전 3D 프로그래머가 아니라구욧!) 그리고. 이 Vertex부분이 랜더링의 중심값이 되며 이로 부터 다음 버텍스까지는 중간값으로 처리하게 되는 것입니다.
당연하게 쓰여왔던 이 방법에는 사실 Normal 값의 비밀이 숨어 있었던 것입니다. 그리고 이러한 Soft Edge 방식의 Normal 값이 바로 Normal Map을 만들때 사용됩니다.
이번시간엔 Normal을 설명하는데만 시간이 다 흘럿군요. 다음시간엔 Normal Map의 개념과 기본원리를 설명하겠습니다. 그럼~~
댓글을 달아 주세요
우왓! 드디어 슬슬 발동을 거시는군요! 강좌 열심히 보겠습니다^^
네에 ^^
http://chulin28ho.egloos.com/
에서 트랙백 해 갑니다. ^^ 감사합니다.
좋은글 잘 보고 갑니다^^
스크랩좀 해갈게요^^
담아갑니다.
좋은 글 담아갑니다.