랜드스케이프 테크니컬 가이드

랜드스케이프 야외 터레인의 구성 및 치수에 관해 알아봅니다.

Choose your operating system:

Windows

macOS

Linux

언리얼 엔진에서 랜드스케이프를 만들 때 미학과 퍼포먼스 간의 균형을 잡는 것은 쉽지 않습니다. 랜드스케이프를 만들 때는 랜드스케이프 액터가 어떻게 구성되는지, 어떤 치수가 최적의 퍼포먼스를 제공하는지 이해하는 것이 중요합니다. 랜드스케이프 하이트맵에 유효한 치수가 항상 처음부터 명확한 것은 아닙니다. 어떤 하이트맵 치수가 유효한지, 어떤 치수가 최적인지 판단하려면 이 페이지에서 설명하는 것처럼 기반이 되는 랜드스케이프 아키텍처를 철저히 이해해야 합니다.

랜드스케이프 컴포넌트

랜드스케이프는 다수의 랜드스케이프 컴포넌트로 나뉩니다. 랜드스케이프 컴포넌트는 언리얼 엔진의 렌더링, 비저빌리티 계산, 콜리전에 쓰이는 기본 유닛입니다. 랜드스케이프 내의 모든 랜드스케이프 컴포넌트는 크기가 동일하며 항상 정사각형입니다. 랜드스케이프 컴포넌트의 크기는 랜드스케이프가 생성될 때 정해지며, 랜드스케이프의 크기와 디테일에 따라 달라집니다.

각 랜드스케이프 컴포넌트의 높이 데이터는 단일 텍스처에 저장됩니다. 따라서 그 텍스처의 크기는 2의 제곱 개의 버텍스여야 합니다. 이웃한 두 랜드스케이프 컴포넌트가 변을 따라 공유하는 버텍스 행은 중복되어 각 컴포넌트에 저장됩니다. 따라서 각 랜드스케이프 컴포넌트 내 4변 폴리곤(쿼드)의 개수를 생각해 봐도 됩니다.

아래 그림은 4개의 랜드스케이프 컴포넌트가 포함된, 녹색 외곽선으로 표시한 아주 단순한 랜드스케이프입니다. 각 랜드스케이프 컴포넌트는 하나의 쿼드로 되어 있으며, 컴포넌트 중 하나는 랜드스케이프 컴포넌트가 접하는 부분의 버텍스가 어떻게 중복되는지 나타내기 위해 분리되어 있습니다.

4개의 랜드스케이프 컴포넌트로 구성된 랜드스케이프

컴포넌트 섹션

선택 사항으로, 랜드스케이프 해상도를 높이기 위해 컴포넌트를 1개 또는 4개(2×2)의 서브섹션으로 분리할 수 있습니다. 이러한 서브섹션은 랜드스케이프 LOD 계산의 기본 유닛입니다.

4개(2×2)의 서브섹션을 사용할 경우, 하이트맵의 크기는 서브섹션이 1개뿐인 랜드스케이프 컴포넌트를 4배 사용할 때와 동일하지만 랜드스케이프 컴포넌트를 더 적게 사용하므로 퍼포먼스가 향상됩니다.

각 섹션의 크기(버텍스 개수)는 다양한 LOD 레벨이 텍스처 밉맵에 저장될 수 있도록 반드시 2의 제곱(최대 256×256)이어야 합니다. 그러면 각 방향(x 또는 y)의 랜드스케이프 컴포넌트 내 쿼드 수는 2의 제곱 -1(랜드스케이프 컴포넌트당 섹션이 1개일 경우) 또는 2의 제곱 -2(랜드스케이프 컴포넌트당 섹션이 4개일 경우)가 됩니다.

아래 그림은 4개의 섹션이 포함된, 녹색 윤곽선으로 표시된 개별 랜드스케이프 컴포넌트입니다. 각 섹션은 9개(3×3)의 쿼드로 이루어집니다. 여기서도 섹션이 맞닿는 부분의 버텍스가 중복되는 것을 볼 수 있습니다.

4개의 서브섹션을 포함하는 랜드스케이프 컴포넌트

랜드스케이프 컴포넌트 UI

랜드스케이프 액터는 랜드스케이프 컴포넌트의 각 타입을 더 쉽게 식별할 수 있도록 색으로 구분됩니다. 랜드스케이프의 변은 노란색으로 하이라이트되며, 각 컴포넌트의 변은 연녹색, 섹션의 변(2×2 섹션으로 설정된 경우)은 중간 녹색, 개별 랜드스케이프 쿼드는 짙은 녹색으로 표시됩니다.

뷰포트에서 생성되어 UI 색을 표시하는 새 랜드스케이프

설명

노란색

랜드스케이프 액터 변

연녹색

랜드스케이프 컴포넌트 변

중간 녹색

랜드스케이프 섹션 변

짙은 녹색

랜드스케이프 개별 쿼드

퍼포먼스 고려사항

총 랜드스케이프 컴포넌트 개수 대비 랜드스케이프 컴포넌트 크기를 선택할 때는 퍼포먼스 절충이 발생합니다. 랜드스케이프 컴포넌트 크기가 작으면 LOD 트랜지션이 빨라지고 더 많은 터레인 오클루전이 발생하지만 이는 랜드스케이프 컴포넌트가 더 많이 필요하다는 뜻이기도 합니다.

랜드스케이프 컴포넌트마다 렌더 스레드 CPU 프로세싱 비용을, 섹션마다 드로 콜을 유발하기 때문에 그 수를 최소한으로 유지해야 합니다. 아주 큰 랜드스케이프의 경우 에픽에서는 최대 1,024개의 랜드스케이프 컴포넌트를 권장합니다.

하이트맵 치수 계산하기

아주 큰 터레인 크기를 수용하면서도 메모리와 퍼포먼스 측면에서 효율적인 시스템을 생성하기 위해 아키텍처는 하이트맵의 치수를 제한합니다. 이러한 제한은 아래에 설명되어 있습니다. 즉, 유효한 치수도 있고, 유효하지 않은 치수도 있습니다.

랜드스케이프의 치수는 섹션당 쿼드 개수, 랜드스케이프 컴포넌트당 섹션 개수, 랜드스케이프 내 총 랜드스케이프 컴포넌트 개수를 기반으로 합니다. 총 컴포넌트 개수 및 각 컴포넌트의 해상도를 정하고 나면 아래 공식을 사용하여 전체 랜드스케이프의 치수를 계산할 수 있습니다.

(A*쿼드 + 1, B*쿼드 + 1)

A와 B는 각 방향의 랜드스케이프 컴포넌트 개수이며, 쿼드는 랜드스케이프 컴포넌트당 쿼드 개수입니다.

아래는 이 공식의 두 가지 사용 예시입니다.

예시 1

64×64개의 버텍스를 포함하는 단일 서브섹션으로 구성된 랜드스케이프 컴포넌트로 시작한 경우, 랜드스케이프 컴포넌트 크기는 63×63쿼드입니다. 랜드스케이프에 이러한 랜드스케이프 컴포넌트가 10×10개 있다면 랜드스케이프 내 총 쿼드 개수는 630×630개입니다. 이 랜드스케이프에 대한 높이 정보를 임포트하려면 버텍스가 631×631개인 하이트맵이 필요합니다. 버텍스 행은 언제나 쿼드보다 하나 많기 때문입니다(예: 1×1 쿼드의 경우 버텍스 4개 필요). 그러므로 631×631이 유효한 랜드스케이프 크기입니다.

예시 2

랜드스케이프 컴포넌트 하나가 4개의 서브섹션으로 나뉘고, 각 서브섹션은 64×64개의 버텍스로 이루어진다면, 쿼드 개수는 섹션당 63×63개, 랜드스케이프 컴포넌트당 126×126개가 됩니다. 이런 컴포넌트가 32×32개 있다면, 각 방향의 총 쿼드 개수는 126*32= 4,032개입니다. 따라서 총 랜드스케이프 크기는 4033×4033 버텍스입니다.

예시에서는 정사각형 랜드스케이프를 중심으로 살펴보았습니다. 그러나 정사각형이 아닌 랜드스케이프도 만들 수 있습니다. 컴포넌트당 63개의 쿼드가 있다면, 컴포넌트가 A×B개인 랜드스케이프의 총 크기는 (A*63+1, B*63+1)개 버텍스가 됩니다.

하이트맵 Z 스케일 계산하기

언리얼 엔진은 16비트 정밀도로 저장된 -256~255.992 사이의 값을 사용하여 하이트맵의 높이를 계산합니다. 그리고 계산된 높이에 하이트맵 데이터를 임포트할 때 입력한 Z 스케일 값을 곱합니다. 예를 들어 Z 스케일 값이 1이면 최대 높이는 약 256cm, 최대 깊이는 -256cm가 됩니다. 따라서 Z 스케일 값이 디폴트인 100일 경우 높이 값은 256~-256m 사이가 됩니다.

임포트 프로세스 중에 Z 스케일을 조절하는 모습입니다.

커스텀 높이를 계산하려면 일정 비율을 사용하여 커스텀 높이 값을 언리얼 엔진이 사용하는 -256~256 범위로 변환해야 합니다. 높이 범위는 총 512유닛(-256에서 0까지 256유닛, 0에서 256까지 256유닛)이므로 비율은 1/512 또는 0.001953125입니다.

측정값을 센티미터로 변환한 다음 이 비율을 곱하여 적용할 수 있습니다.

다음과 같은 예시를 들 수 있습니다.

하와이에서 가장 높은 산봉우리인 높이 4,207m의 마우나 케아(Mauna Kea)를 언리얼 엔진 레벨에서 표현하려면 다음 단계를 따릅니다.

  1. 4,207에 100을 곱하여 높이를 센티미터로 변환합니다. 그러면 420,700cm가 됩니다.

  2. 다음으로 이 새 값에 비율을 곱합니다. 420,700에 0.001953125를 곱하면 821.6796875입니다.

  3. 이에 따라 Z 스케일 값 821.6796875가 도출되며, 하이트맵의 범위는 -210,350~210,350cm가 됩니다.

이 프로세스로는 정확한 산의 높이가 구해지므로, 해수면 아래 값이 들어갈 자리는 없습니다. 랜드스케이프 높이에 추가 공간이 필요하다면 초기 높이를 그에 따라 조정합니다. 위 예시의 마우나 케아는 해수면 아래로도 5,761m 뻗어 있습니다. 따라서 총 높이 9,968m로 시작하면 됩니다.

권장 랜드스케이프 크기

랜드스케이프 컴포넌트의 수를 최소화하면서 영역을 최대화하기 위해 권장되는 랜드스케이프 크기의 목록입니다.

총 크기(버텍스)

섹션당 쿼드

컴포넌트당 섹션

랜드스케이프 컴포넌트 크기

총 랜드스케이프 컴포넌트

8129x8129

127

4(2x2)

254x254

1024(32x32)

4033x4033

63

4(2x2)

126x126

1024(32x32)

2017x2017

63

4(2x2)

126x126

256(16x16)

1009x1009

63

4(2x2)

126x126

64(8x8)

1009x1009

63

1

63x63

256(16x16)

505x505

63

4(2x2)

126x126

16(4x4)

505x505

63

1

63x63

64(8x8)

253x253

63

4(2x2)

126x126

4(2x2)

253x253

63

1

63x63

16(4x4)

127x127

63

4(2x2)

126x126

1

127x127

63

1

63x63

4(2x2)

레이어 디버그 모드

레이어 디버그(Layer Debug) 모드를 활성화하면 뷰포트의 랜드스케이프에 대한 특정 레이어 가중치의 비저빌리티가 토글됩니다. 뷰포트 메뉴에서 레이어 디버그 모드를 토글하려면 뷰(View) > 랜드스케이프 시각화 툴(Landscape Visualizers) 로 이동합니다.

랜드스케이프 디버그 시각화 툴 활성화

레이어 디버그 시각화 툴이 활성화되면 목록에 있는 타깃 레이어의 개별 컬러 채널을 선택할 수 있습니다.

랜드스케이프 디버그 시각화 툴을 사용하여 랜드스케이프의 페인트 레이어를 시각화한 모습입니다.

채널을 선택하면 랜드스케이프에 셰이더가 적용되어 선택된 타깃 레이어에서 해당 채널이 커버하는 영역이 표시됩니다.

랜드스케이프에 랜드스케이프 디버그 시각화 툴이 적용된 모습입니다.