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

랜드스케이프의 테크니컬 세팅에 대한 글입니다.

Windows
MacOS
Linux

랜드스케이프 시스템에 최선의 퍼포먼스를 위해서는, 준수해야 할 기술적 기준이 있습니다. 여기서는 그 기준에 대해 알려드림과 동시에 랜드스케이프의 모양과 속도 사이 최적의 균형을 맞출 수 있는 값진 정보를 제공해 드리겠습니다.

기술적 세부사항

랜드스케이프 하이트맵에 적합한 치수는 언제나 시작할 당시에는 바로 알 수가 없습니다. 적합한 하이트맵 치수를 결정하기 위해서, 그리고 최적의 치수를 위해서는 랜드스케이프에 내재된 아키텍처에 대한 철저한 이해가 뒷받침되어야 합니다. 메모리와 퍼포먼스 측면에서 효율적이면서도 거대한 터레인이 가능한 시스템을 만들기 위해서, 아키텍처는 하이트맵 치수에 묵시적인 제한을 두고 있는데, 유효한 치수가 있고 그렇지 않은 치수가 있다는 뜻입니다. 언리얼 엔진의 이전 터레인 시스템에서는 그러한 제한이 없거나 (즉 어떤 치수든 유효 또는 작동되었거나) 있어도 꽤나 단순했습니다 (하이트맵이 2 의 제곱이기만 하면 됐습니다). 랜드스케이프용 하이트맵의 제한은 훨씬 복잡하고 엄격합니다.

랜드스케이프 액터는 색을 통해 각 섹션의 역할을 쉽게 알 수 있습니다. 랜드스케이프 에지는 노랑 으로 강조되고, 각 컴포넌트의 에지는 연녹색, 섹션 에지는 (2x2 섹션으로 설정된 경우) 중간 녹색, 개별 랜드스케이프 쿼드는 짙은 녹색 으로 표시됩니다.

랜드스케이프 컴포넌트

노랑:

랜드스케이프 액터 에지

연녹색:

랜드스케이프 컴포넌트 에지

중간 녹색:

랜드스케이프 섹션 에지

짙은 녹색:

랜드스케이프 개별 쿼드

Landscape_Create_Preview.png

랜드스케이프 컴포넌트

랜드스케이프는 언리얼의 렌더링, 표시여부 계산, 콜리전 기본 단위인 컴포넌트 다수로 나뉘어 있습니다. 랜드스케이프의 컴포넌트는 모두 같은 크기이며 항상 정사각형입니다. 랜드스케이프 컴포넌트의 크기는 랜드스케이프 생성시 선택한 크기와 디테일에 따라 결정됩니다.

각 컴포넌트의 높이 데이터는 하나의 텍스처에 저장됩니다. 이때문에 그 사이즈는 2의 제곱 버텍스가 되어야 합니다. 인접한 두 컴포넌트의 에지에 공유되는 버텍스 열은 복제되어 각 컴포넌트에 저장됩니다. 그런 이유로 각 컴포넌트의 쿼드 수에 대해 생각하는 것이 이치에 맞습니다.

컴포넌트가 넷 들어있는 매우 단순한 랜드스케이프는 아래(초록색 윤곽선)와 같습니다. 각 컴포넌트는 하나의 쿼드로 되어있습니다. 컴포넌트가 만나는 곳의 버텍스가 어떻게 복제되는지 보이기 위해 하나의 컴포넌트를 분리시켰습니다.

Landscape_Components.jpg

컴포넌트 섹션

컴포넌트는 옵션을 통해 1 개 또는 4 (2x2) 개의 서브섹션으로 나눌 수 있습니다. 이 섹션은 랜드스케이프 LOD 계산의 기본 단위입니다.

4 (2x2) 개의 서브섹션 옵션을 사용하면 서브섹션이 하나만 있는 컴포넌트를 네 배로 사용하는 것과 똑같은 크기의 하이트맵이 가능하지만, 컴포넌트를 적게 사용하면 보통 퍼포먼스가 향상됩니다.

(버텍스 갯수로 볼 때) 각 섹션의 크기는 (최대 256x256 내에서) 2 의 제곱이 되어야 합니다. 다양한 LOD 레벨을 텍스처의 밉맵에 저장할 수 있도록 하기 위함입니다. 그렇게 되면 한 컴포넌트의 쿼드 갯수가 (컴포넌트당 1 섹션인 경우) 2 의 제곱 - 1 이거나 (컴포넌트당 4 섹션인 경우) 2 의 제곱 - 2 가 됩니다.

섹션이 넷 들어있는 개별 컴포넌트는 아래( 초록색 윤곽선)와 같습니다. 각 섹션은 9 (3x3) 개의 쿼드로 이루어져 있습니다. 마찬가지로 섹션이 만나는 곳의 버텍스가 복제되는 것을 볼 수 있습니다.

Landscape_Component_Sections.jpg

하이트맵 치수 계산하기

보시듯이 랜드스케이프의 치수는 각 섹션의 쿼드 갯수, 각 컴포넌트의 섹션 갯수, 랜드스케이프에 존재하는 컴포넌트 갯수에 따라 결정됩니다. 컴포넌트 갯수와 각 컴포넌트의 해상도를 결정하고 나면, 랜드스케이프 전체의 치수는 사소한 계산이 됩니다.

예제를 몇 가지 들면 이렇습니다:

예제 1

64x64 버텍스가 들어있는 섹션 하나로 구성된 컴포넌트로 시작한다면, 컴포넌트 크기는 63x63 쿼드입니다. 이러한 컴포넌트 10x10 으로 된 랜드스케이프가 있다고 친다면, 랜드스케이프에는 총 630x630 쿼드가 있습니다. 이제 그러한 랜드스케이프에 대해 하이트맵을 임포트한다고 치면, 631x631 버텍스의 하이트맵이 있어야 합니다. 버텍스 행 갯수는 항상 쿼드보다 하나 많기 때문입니다 (1x1 쿼드를 생각해 보면, 버텍스가 넷 필요합니다). 즉 631x631 이 유효한 랜드스케이프 크기입니다.

예제 2

하나의 컴포넌트가 4 개의 서브섹션으로 나뉘고, 그 각각은 64x64 버텍스로 이루어져 있습니다. 그러면 섹션당 63x63 쿼드이고 컴포넌트당 126x126 쿼드입니다. 이 컴포넌트가 32x32 개 있다면, 각 방향으로 총 126 x 32 = 4032 쿼드가 나옵니다. 즉 총 랜드스케이프 크기는 4033x4033 버텍스가 됩니다.

이 예제는 정사각형 랜드스케이프에 초첨을 맞췄습니다. 하지만 정사각형이 아닌 랜드스케이프를 만들 수도 있습니다. 예를 들어 첫 예제에서 10x10 는 특별하지 않습니다. 컴포넌트당 63 쿼드라 가정하면, 총 크기가 (A*63+1 , B*63+1) 버텍스이기만 하면 어떤 랜드스케이프 AxB 컴포넌트도 가능합니다.

퍼포먼스 고려사항

컴포넌트 크기와 컴포넌트 총 갯수 사이의 선택은 각각의 퍼포먼스 장점에 따른 것입니다. 컴포넌트 크기가 작을 수록 LOD 전환이 빨라지고 더 많은 지형에 대한 오클루전이 가능하지만, 크기가 작아지면 컴포넌트 수가 많아집니다.

각 컴포넌트마다 렌더 스레드 CPU 처리 비용이, 각 섹션마다 드로 콜 비용이 있으므로, 이 수치를 최소한으로 유지시켜 보세요. 최대 랜드스케이프로 에픽에서 추천하는 크기는, 최대 1024 컴포넌트입니다.

추천 랜드스케이프 크기

편의를 돕기 위해 랜드스케이프 컴포넌트 크기를 최소화시키면서 영역을 극대화시킨 크기 몇 가지는 이렇습니다.

전체 크기 (버텍스)

쿼드 / 섹션

섹션 / 컴포넌트

컴포넌트 크기

총 컴포넌트

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 모드는 특정 레이어의 웨이트를 뷰포트에서 랜드스케이프에 시각화시켜주는 모드입니다. 뷰포트의 뷰 메뉴 랜드스케이프 비주얼라이저 아래에서 레이어 디버그 모드를 켤 수 있습니다. 뷰포트의 랜드스케이프 관련된 뷰 모드에 대한 정보는, 뷰 모드 문서를 참고하세요.

레이어 디버그 모드가 켜지면, 리스트에 타깃 레이어와 함께 개별 컬러 채널을 선택할 수 있는 동글 버튼이 표시됩니다.

Landscape_Target_Debug.png

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

Landscape_Target_Debug_Demo.png

태그

새로운 언리얼 엔진 4 문서 사이트에 오신 것을 환영합니다!

문서 사이트에 대한 의견을 모을 수 있는 피드백 시스템을 포함해서 여러가지 새로운 기능을 준비하고 있습니다. 아래 Documentation Feedback 포럼(영문) 또는 언리얼 엔진 네이버 공식 카페(한글) 중 편하신 곳에 의견이나 문제점을 알려 주세요.

새 시스템이 준비되면 알려 드리겠습니다.

네이버 카페
공식 포럼