본문 바로가기

Unity3D C#/유니티 쉐이더 공부

Normal map(노멀맵)

NormalMap Example


Normal map이란, 실제 디테일이 없는 부분을 디테일ㄹ이 있는 것처럼 보이게 만들기 위한 눈속임 맵. 일반적으로 푸른색을 띠고 있으며, 빛을 속이기 위한 벡터 데이터들로 이루어진 텍스쳐 파일. NormalMap을 이용해서 빛을 속이게 되면 마치 매우 많은 폴리곤으로 이루어진 오브젝트처럼 디테일이 표현되지만, 실제로 폴리곤이 늘어나는 것은 아님.

NormalMap 은 지브러쉬(ZBursh)나 머드박스(Mudbox)같은 스컾팅(Sculpting)툴을 이용하거나, 3D 프로그램에서 고품질의 하이 폴리곤 모델링을 한 후 렌더 투 텍스쳐(Render to texture: RTT)을 이용하여 추출하지만, 이미지의 음영을 기반으로 간단하게 NormalMap을 추출하는 크레이지범프(Crazybump) 또는 B2M 툴을 이용하기도 함

물론 유니티에도 음영을 기반으로 NormalMap을 추출할 수 있는 기능이 포함되어 있음


1.일반 텍스쳐를 선택하고, Inspector에서 Texture type을 NormalMap으로 바꿔줌

2.Create from Grayscale을 선택하고, Bumpiness나 Flittering을 적절히 조절해줌

3.그 후 Apply를 누르면 일반 텍스쳐가 NormalMap 으로 변하게 됨




NormalMap은 벡터 데이터로 이루어진 일종의 '수치들의 집합'에 가깝지만 그 형식은 텍스쳐이기 때문에, 일반적인 텍스쳐를 받는 것과 동일하게 만듬

_BumpMap("Normalmap", 2D) = "bump"{ }

유니티에 있는 다른 내장된 쉐이더에서 저 명칭을 사용하고 있기 때문에 다른 쉐이더와의 호환성을 위해서라도 저 명칭을 쓰는 것이 좋다고 생각됨. 

저장하고 엔진으로 가보면, NormalMap을 입력받는 텍스쳐 영역이 생긴 것을 알 수 있음. 'NormalMap을 받는 쉐이더인데 당신은 지금 NormalMap을 쓰지 않았다. 그럴거면 NormalMap이 없는 쉐이더를 쓰는게 더 낫지 않은지 고려해 봐라' 라는 안내 문구가 뜨게 됨