3D Video Production/Unreal Engine (5.6.1)

UE 5.6 Height Map & Mask로 Landscape 만들기

보별 2026. 7. 15. 17:09
반응형

넓은 산악 지형을 언리얼 엔진에서 처음부터 Sculpt 도구로 만드는 데는 많은 시간이 필요하다.

외부 프로그램에서 만든 Height Map을 이용하면 지형의 기본 형태를 빠르게 가져올 수 있지만, 지형을 불러오는 것만으로 작업이 끝나는 것은 아니다.
산, 평지, 물길마다 다른 머티리얼을 배치하려면 Landscape Material과 Layer Info도 함께 구성해야 한다.

이번 포스트에서는 외부 Height Map으로 언리얼 엔진 5.6 Landscape를 생성하고, Gaea에서 함께 출력한 Flow와 Slope Mask를 이용해 넓은 지형에 머티리얼을 자동으로 배치하는 과정을 정리했다.

 

Height Map

Height Map은 흑백 이미지의 밝기 값을 지형의 높이로 변환하는 데이터다.

  • 검은색: 낮은 지역
  • 흰색: 높은 지역
  • 회색: 중간 높이

언리얼 엔진 5.6은 Gaea, World Machine, Houdini 등의 프로그램에서 만든 16비트 그레이스케일 PNG Height Map을 Landscape로 가져올 수 있다.

일반 이미지처럼 보이지만 각 픽셀이 높이 정보를 저장하고 있으므로, 색상 보정이나 JPEG 압축을 적용하면 지형 데이터가 손상될 수 있다.

 

새 레벨에서 Height Map 불러오기

먼저 새로운 레벨을 생성하고 기본으로 배치된 Floor를 삭제했다.

이후 Landscape Mode에 진입해 아래와 같이 진행했다.

  1. Manage 탭을 선택
  2. New - Import from File을 선택
  3. Heightmap File에 PNG 파일 경로를 지정
  4. 필요하면 Fit to Data를 눌러 파일 크기에 맞는 Landscape 구성을 다시 계산
  5. 표시된 해상도 확인
  6. Import 실행

언리얼 엔진은 선택한 Height Map의 해상도를 읽어 Heightmap Resolution을 자동으로 표시한다.

이번 작업에서는 파일 경로를 지정한 뒤에도 Fit to Data를 한 번 눌러 설정이 파일 크기에 맞게 갱신되었는지 확인했다.
자동으로 값이 정상 표시된다면 필수 과정은 아니지만, 잘못된 Component 설정으로 Import하는 실수를 줄이는 확인 단계로 사용할 수 있다.

파일을 선택한 직후에는 Import 버튼을 누르기 전에 원본 Height Map의 해상도와 화면에 표시된 Resolution이 같은지 먼저 확인하는 편이 안전하다.

 

Landscape Material 만들기

Height Map으로 지형을 생성한 뒤 새 Material을 만들었다.

여러 종류의 지면 재질을 혼합하려면 Landscape Layer Blend 노드를 사용한다.
이 노드는 레이어별 Weight를 이용해 텍스처나 Material Network를 혼합한다.

Landscape Layer Blend의 Details에서 사용할 머티리얼 수만큼 Index를 추가한다.

추가한 각 Index의 Layer Name을 적용할 지면 재질에 맞게 변경한다.
이 이름은 이후 Paint 탭의 Target Layers에도 그대로 표시되므로 서로 구분하기 쉽게 설정했다.

Material Attributes 방식으로 구성하기

Material의 Details에서 Use Material Attributes활성화한다.

활성화하면 기본 Material 노드의 Base Color, Roughness, Normal 입력이 하나의 Material Attributes 입력으로 변경된다.

각 Landscape Layer에 다음과 같은 별도의 Material Attribute를 만든다.

  1. Make Material Attributes 생성
  2. Base Color Texture 연결
  3. Normal Texture 연결
  4. Roughness Texture 연결
  5. 필요하면 AO와 기타 값 연결
  6. 결과를 Landscape Layer Blend의 해당 Layer에 연결
  7. Landscape Layer Blend의 출력값을 기본 Material 노드의 Material Attributes에 연결

각 지면마다 다른 Material Attribute 결과가 필요하다.

텍스처 타일링 설정하기

Landscape는 일반적인 Static Mesh보다 훨씬 넓기 때문에 텍스처를 그대로 연결하면 한 장이 크게 늘어난 것처럼 보일 수 있다.

이번 작업에서는 다음 노드를 사용해 텍스처 타일링을 조절할 수 있도록 구성했다.

  • TexCoord
  • Scalar
  • Multiply

TexCoord와 Scalar 값을 곱한 뒤 각 Texture Sample의 UV 입력에 연결했다.

다만 생성한 Material Instance에서 타일링을 조절하려면 일반 Scalar가 아니라 Scalar Parameter로 만드는 것이 좋다.

일반적으로 곱셈 방식에서는 값이 커질수록 같은 면적에 텍스처가 더 많이 반복되어 무늬가 작아 보인다.
값이 낮아지면 텍스처 한 장이 더 넓게 표시된다.

Material Instance 생성하기

완성한 Master Material을 부모로 하는 Material Instance를 생성한다.

Material Instance에서는 부모 머티리얼에서 Parameter로 만든 값만 조절할 수 있다.
이번 작업에서는 Scalar Parameter로 만든 텍스처 타일링 값을 변경할 수 있다.

생성한 Material Instance를 Landscape Actor의 Landscape Material에 적용한다.

Master Material을 직접 적용해도 동작하지만, 실제 작업에서는 수정 속도와 관리 편의성을 위해 Material Instance를 사용하는 편이 좋다.

 

Layer Info 생성하기

Landscape Mode의 Paint 탭으로 이동하면 Landscape Layer Blend에 생성한 Layer Name이 Target Layers에 표시된다.

각 레이어의 + 버튼을 누른 뒤 Weight-Blended Layer를 생성한다.

Weight Blend에서는 모든 레이어의 Weight 합계가 1이 되도록 서로 영향을 주고받는다.
한 레이어의 비중이 높아지면 같은 영역의 다른 레이어 비중은 줄어든다.

수업에서는 모든 지면 Layer를 Weight-Blended Layer로 생성했다.

Layer Info 파일은 별도의 폴더를 만들어 한곳에 보관하는 것이 좋다.
이름이 같은 파일을 여러 폴더에 흩어 놓으면 나중에 어떤 Landscape에서 사용한 파일인지 확인하기 어려워진다.

 

기본 레이어 Fill하기

Layer Info를 만든 뒤 지형 전체에 기본으로 보일 레이어를 하나 정한다.

해당 레이어를 우클릭하고 Fill Layer를 실행한다.

기본 레이어를 Fill하지 않으면 Weight가 없는 영역에서 Landscape가 검게 보이거나 머티리얼이 정상적으로 표시되지 않을 수 있다.

전체를 먼저 기본 재질로 채우고 필요한 곳에 다른 재질을 덮는 방식이 작업 결과를 예상하기 쉽다.

 

Mask로 머티리얼 범위 자동 지정하기

해상도가 높고 범위가 넓은 Landscape를 브러시로 직접 칠하면 시간이 많이 걸리고, 경사면의 작은 굴곡까지 정확히 따라가기 어렵다.

Gaea에서 Height Map과 함께 출력한 Slope와 Flow Mask를 사용하면 지형의 구조에 맞춰 머티리얼 범위를 한 번에 지정할 수 있다.

Mask는 Landscape와 동일한 해상도의 8비트 그레이스케일 PNG로 준비했다.

Mask Import 과정

  1. Landscape Mode의 Manage 탭으로 이동
  2. Import 선택
  3. Layers 항목을 펼침
  4. Mask를 적용할 Target Layer의 체크박스를 활성화
  5. 해당 Layer 옆에 PNG 경로를 지정
  6. Import 실행

기본 레이어는 이미 Fill Layer로 전체에 적용했으므로 별도의 Mask를 지정하지 않는다.

첫 번째 Mask 적용 결과

첫 번째 Mask를 Import하면 흰색에 가까운 영역에 선택한 머티리얼이 강하게 적용된다.

검은색 영역에는 기존의 기본 레이어가 남고, 회색 영역에서는 두 머티리얼이 Weight에 따라 혼합된다.
그 결과 지형의 흐름을 따라 새로운 머티리얼이 적용된 것을 확인할 수 있다.

Mask 경계가 전체적으로 너무 딱딱하다면 Gaea에서 Slope의 Falloff나 Mask 대비를 조절하는 편이 일관된 결과를 얻기 좋다.
특정 구역만 어색한 경우에는 Unreal Engine의 Paint 도구로 직접 보정할 수 있다.

두 번째 Mask 함께 적용하기

서로 다른 범위를 가진 Mask를 추가로 Import할 수 있다.

예를 들면 다음과 같이 사용할 수 있다.

  • Flow Mask: 물길이나 젖은 흙
  • Slope Mask: 바위와 절벽
  • Deposit Mask: 흙이나 자갈이 쌓인 곳
  • Wear Mask: 침식으로 드러난 암반

두 번째 Layer의 체크박스를 활성화하고 다른 PNG 경로를 지정한 뒤 다시 Import한다.

Weight-Blended Layer는 같은 위치에서 Weight 합계를 정규화하기 때문에 두 Mask가 겹치면 한쪽이 단순히 위에 덮이는 것이 아니라 서로의 적용 비중에 영향을 준다.

여러 Mask를 한 번에 적용했을 때 예상보다 색이 약하게 보인다면, Material 자체보다 Mask가 서로 겹치는 영역을 먼저 확인해야 한다.

PIE에서 확인

 

Height Map은 Landscape의 형태를 만들고, Mask는 각 머티리얼이 적용될 영역을 결정한다.

두 데이터를 분리해서 사용하면 Gaea에서 만든 산과 계곡의 특징을 Unreal Engine에서도 그대로 활용할 수 있다.

특히 Slope, Flow, Deposit과 같은 Mask를 이용하면 넓은 Landscape를 직접 칠하지 않아도 경사면과 물길에 맞는 재질을 자동으로 배치할 수 있다.
이후 필요한 부분만 Paint로 보정하면 작업 속도와 결과의 일관성을 함께 확보할 수 있다.