하이트맵이란?
Height Map은 지형 혹은 오브젝트 표면의 UV정보 중에서 높낮이를 그레이 스케일로 나타낸 것이다. 1차원 형태의 텍스쳐이기 때문에 흑백(혹은 빨간색)으로만 나타낸다. 게임엔진에서는 이 정보를 Mask Map에 넣어서 활용할 수 있다.
특히 게임 엔진에서는 터레인(Terrain)에 많이 사용한다. 지형 정보의 높낮이를 나타낼 때 하이트맵을 사용할 수 있기 때문이다.
이번 포스팅에서는 해당 하이트맵을 DCC툴(블렌더)로 제작하고 베이크 하여 게임엔진(Unity)에서 사용하는 방법을 기록하였다.
블렌더에서 하이트맵 제작 방법
하이트맵은 어떠한 용도로 사용되냐에 따라 제작방식이 조금은 다르다. 3D 오브젝트에 해당하는 하이트맵은 일반적인 베이크 방식으로 제작할 수 있으나, 오브젝트의 경우 하이트맵보다는 노멀맵이 더 많이 사용되므로 이번 포스팅은 터레인을 기준으로 작성하였다.
터레인 스탬프로 사용할 매쉬 제작
하이트맵으로 제작하고자 하는 Mesh를 우선 모델링하여 만든다.
(필자는 Sculpting을 하여 주름을 나타내었다.)
이미지의 Mesh를 스탬프로 찍듯이 게임 엔진에서 지형으로 사용하려고 한다.
이제 Mesh 정보를 0~1사이의 그레이스케일 텍스쳐로 나타내는 작업이 필요하다.
하이트맵 셰이더 작업
블렌더에서 Shading탭으로 가서 노드를 작성해야 한다. (머테리얼을 하나 선택하거나 하나 새로 만들어준다.)
Geometry 노드와 Separate 노드를 끌어온다.
우리에게 필요한 정보는 오브젝트의 높이값이다. 따라서 Position에서 Z(높이)만 노드를 뽑아온다.
그리고 하이트맵 세기를 지정할수 있도록 Multiply노드를 추가한다.
만약 높이맵이 약하다면 매쉬를 변경할 필요 없이 이 노드에서 Value를 변경하면 된다.
Clamp는 높이맵의 값을 0~1로 제한하기 위해 넣어두었다.
아래는 전체 노드이다.
위의 머테리얼을 적용한 오브젝트는 다음과 같이 바뀐다.
Z 축을 기준으로 0보다 낮은 지점은 모두 검은색(0에 해당)이고 높이가 1에 가까울수록 흰색(1에 해당)으로 밝아진다.
우리는 이 정보를 하이트맵 텍스쳐로 사용하면 된다.
이제 텍스쳐로 변환하는 작업만 남았다.
높이 좌표 이미지 변환
블렌더에서 카메라를 하나 추가한다.
Output탭에서 Resolution을 원하는 해상도로 변경한다.
파일포맷은 PNG로 변경한 후 배경을 투명하게 만들기 위해서 아래처럼 Render탭으로 이동하여 Transparent를 체크해 준다.
이제 F12키를 눌러서 렌더링 한 다음 이미지파일로 저장하면 된다.
우리는 이제 이 이미지를 하이트맵으로써 사용할 수 있다.
유니티에서 하이트맵 사용
터레인을 하나 만든 후 해당 하이트맵을 불러온다. (Terrain Tools를 기준으로 설명)
임포트 세팅에서 Texture Type과 Max Size를 변경해 준다.
Texture Type의 경우 Single Channel로 변경한다. 하이트맵은 그레이 스케일이므로 하나의 채널만 사용한다. 따라서 텍스처가 무거운 경우 싱글 채널로 변경하여 비용을 절감할 수 있다. (변경하지 않아도 크게 상관없다.)
Max Size의 경우 텍스처의 사이즈보다 큰 사이즈를 지정해 준다. 예를 들어, 텍스처의 크기가 4K일 경우 4096으로 맞춰주어야 한다. 그렇지 않으면 압축을 진행하기 때문에 원하는 퀄리티가 나오지 않을 수도 있다.
이제 터레인에서 New Brush를 눌러 방금 이미지를 브러시로 넣어준다.
이 브러시를 Stamp Terrain으로 사용하거나 Raise Or Lower Terrain으로 사용하면 된다.
결과물
아래는 제작한 터레인을 스탬프로 사용했을 때의 결과물이다.
만약 스탬프를 찍어도 디테일이 떨어진다면 Terrain Settings로 가서 Height Map Resolution을 높이면 된다.
'블렌더 > 모델링 스킬' 카테고리의 다른 글
[Blender] 머테리얼 베이크 (3) - 노멀맵 베이크 (Normal Map Bake) (1) | 2023.12.21 |
---|---|
[Blender] 머테리얼 베이크 (2) - 디퓨즈/알베도맵 베이크 (Diffuse/Albedo Map Bake) (1) | 2023.12.20 |
[Blender] 색깔이 모두 핑크(마젠타)색으로 나타날 경우 (0) | 2023.12.17 |
[Blender] 한 번에 머테리얼 베이크 하는 법 - Nvidia Omniverse (1) | 2023.12.12 |
[Blender] 시뮬레이션 및 파티클 캐시 베이크 (Cache bake) (1) | 2023.07.26 |