World Machine

Heightmap을 사용한 지형제작

redjoker 2017. 2. 20. 15:20

출처 멋진 월드를 위해.............^^b | spikezang
원문 http://blog.naver.com/spikezang/150186565568

이번 튜토리얼은 예전에 올렸던 Heightmap을 사용한 지형제작의

수정버젼입니다. 예전 튜토리얼에서 빠트린 부분을 추가한 버젼입니다.

P.S. 2년전에 만들어진 튜토리얼인 점을 참고해주세요.

3-1.   Heightmap을 사용한 지형제작

이번 Chapter에서는 Heightmap을 사용한 지형제작은 어떤 방식으로 만들어지는지 그 과정을 간략하게 설명하고 워밍업을 하는 단계입니다.

 

지형 편집에 들어가기에 앞서 Landscape의 기능에 대해 간략하게 설명하도록 하겠습니다.

Landscape Edit는 아래 [P03_Ch01그림08_04]과 같이 기능들을 순서대로 나열하고 있습니다.

[P03_Ch01그림08_04]

 

1.     Tools

지형의 편집에 필요한 도구로 에디팅이 가능한 Paint ToolsComponent 선택, 생성, 삭제, 이동이 가능한 Component Tools가 있으며 Gizmo를 사용하여 지형을 부분적 선택하여 복사 편집이 가능한 Region Tools가 있습니다.

2.     Brushes

편집에 사용되는 브러쉬의 크기, 알파 브러쉬, Component, Gizmo등을 선택 할 수 있습니다.

3.     Target Layer

Edit Mode를 선택하는 창으로 Edit, DebugView, LayerDensity, LOD등이 있습니다.

(이 기능은 차후 실전 예제에서 사용법을 자세히 설명하도록 하겠습니다.)

4.     Landscape Info

Landscape의 정보를 나타내주는 창입니다. 지형의 크기, 컴퍼넌트 사이즈 등을 볼 수 있습니다.

5.     Create New

새로운 생성을 할 수 있도록 해주는 창입니다.

6.     Heightmap Import

Heightmap을 불러오는 창입니다.

7.     Heightmap Size

최초 지형 생성할 때 지형의 크기를 지정해주는 창입니다.

컴퍼넌트 사이즈 정보도 함께 볼 수 있습니다.

8.     Layers

웨이트 맵을 불러오거나 레이어를 새로 생성해주는 창입니다.

9.     Create

생성될 지형의 정보를 모두 입력 후 최종 생성할 때  사용하는 기능입니다.

10.   Export

생성된 지형의 고도데이터와 웨이트 정보를 출력해주는 기능입니다.

11.   More

기존 터레인 엑터를 Landscape컨버팅해주는 기능입니다.

 


 

3-1-1. Landscape 생성

Landscape Heightmap 기반 시스템으로 언리얼 엔진3콘텐츠 스트리밍 기능을 활용하여 자원을 효율적으로 사용, 기존의 터레인 시스템에 비해 기능이 많이 향상된 지형제작 툴입니다.

[P03_Ch01그림01]

 

1.     왼쪽 상단 메뉴에서 Landscape를 선택합니다.

2.     사이즈를 2033*2033 맵으로 셋팅을 합니다.

3.     Create Landscape를 눌러 지형을 생성합니다.

 

사이즈를 2033*2033으로 지정한 이유는 Component 사이즈에 따라 그 크기와 디테일에 차이가

나기 때문입니다. 실제 게임 제작에서는 게임 스펙에 맞게 지형의 크기와 디테일을 정하는데요

이번 예제에서는 지형제작의 과정을 익히는데 목적이 있으므로 지형 생성의 편리성 또는 편집의 편리성, 디테일 유지 등의 이유로 2033*2033 사이즈로 지형을 제작해 보도록 하겠습니다.

 

 

 

지형을 생성완료 하면 아래 [P03_Ch01그림02]과 같이 커다란 지형이 생성됩니다.

이 상태로 지형을 에디팅하게 되면 지형의 쿼드 크기가 너무 커서 Player의 움직임에 문제가 생깁니다. 또한 지형의 디테일이 떨어지므로 렌더링 될 지형크기를 조절 할 필요가 있습니다.

[P03_Ch01그림02]

1.     지형을 선택한 후 F4번을 눌러 랜드스케이프 Properties를 엽니다.

2.     디스플레이탭에서 X 20, Y 20, Z 128 으로 설정하여 지형의 크기를 줄여 줍니다.

여기에서 X, Y는 지형의 넓이와, 폭을 지정해주며 Z는 지형의 최대 생성될 고도를 지정해 줍니다.

 

이제 생성된 지형 데이터를 서브레벨로 저장을해 보도록 하겠습니다.

[P03_Ch01그림03]

1.     생성된 지형 레벨을 저장하기 위해 컨텐츠 브라우져를 엽니다.

2.     Levels -> 3. New Level -> 4. 저장 경로를 선택한 후 저장을 합니다

 

원래는 최상위 퍼시스턴트 레벨을 생성하고 지형데이터가 속해있는 서브레벨을 생성해야 하지만

이번 예제에서는 배치작업을 따로 하지 않으므로 기본 퍼시스턴트 레벨에 지형을 저장 합니다.

여기까지가 지형생성 단계입니다. 다음 단계에는 지형에 매핑될 Material을 생성하고 적용해 보도록 하겠습니다.

 

3-1-2. Landscape Material 생성

지형 편집에 편리성을 위해 가상의 Material을 생성합니다.

매핑되지 않은 지형의 기본 형태는 체크박스 형태로 렌더링 되어 편집에 불편함을 줍니다.

또한 지오메트리 노멀이 잘 보이지 않기 때문에 가상의 색상을 만들어 매핑해주는 것이 좋습니다.

[P03_Ch01그림04]

 

1.     Material을 생성하기 위해 컨텐츠 브라우져를 선택합니다.

2.     컨텐츠 브라우져 왼쪽 하단의 New 버튼을 누릅니다.

3.     생성될 패키지와 네이밍을 지정합니다.

4.     Factory : Material을 선택하고 OK버튼을 누릅니다.

OK버튼을 눌러 Material생성이 완료되면 Material Editor창이 자동으로 열립니다.

이번 예제에서는 Texture를 제작하여 적용하지 않습니다.

그러므로 지형편집에 필요한 색상 정보만 생성하도록 합니다.

[P03_Ch01그림05]

 

1.     Material 에디터에서 마우스 오른쪽 버튼을 누른 뒤 Terrain탭 에서

2.     New TerrainLayerWeight 를 선택합니다.
(
이는 WeightMap적용하기위해 레이어를 만들어주는 과정입니다.)

[P03_Ch01그림06]

 

1.     마우스 오른쪽 버튼을 누른 뒤 파라미터 에서 벡터 파라미터를 선택합니다.

(지형에 간단하게 색을 매핑하기 위해 색 정보를 생성하는 단계입니다.)

최초 Vector Parameter를 생성하면 아래 [P03_Ch01그림06_01]과 같이 생성됩니다.

[P03_Ch01그림06_01]

 

이제 색을 지정해 보도록 하겠습니다.

[P03_Ch01그림06_02]

 

1.     Param Function을 더블 클릭하여 Select a Color을 엽니다.

2.     Select a Color 창이 나오면 색상을 회색으로 지정하고 OK버튼을 누릅니다.

색상 정보가 생성이 되었다면 이제 좀 전에 생성하였던 레이어 웨이트에 색상 정보를 입력합니다.

[P03_Ch01그림07]

 

1.     노드를 순서대로 연결합니다.

2.     왼쪽 상단 체크 버튼을 눌러 Material 제작을 결정합니다.

 

이제 생성된 Material 패키지를 저장하도록 하겠습니다.

[P03_Ch01그림08]

 

1.     왼쪽 하단 Packages에서 좀 전 생성한 패키지를 선택하고 마우스 오른쪽 버튼을 눌러 저장을 선택합니다.

2.     저장할 경로를 선택하고 파일명을 지정한 다음 저장 버튼을 누릅니다

생성된 Material Landscape에 적용하도록 하겠습니다.

[P03_Ch01그림08_01]

 

1.     Landscape를 선택하고 F4번을 눌러 Landscape Properties창을 엽니다.

2.     좀 전에 생성된 Material을 선택하고  Landscape Material탭에서을 눌러 적용합니다.

 

아래 [P03_Ch01그림08_03] Landscape Material이 적용된 모습입니다.

[P03_Ch01그림08_03]

  

 

Material을 적용하였다면 이제 Landscape Layer정보를 생성합니다.

[P03_Ch01그림08_03_01]

 

1.     Target Layer에서 Edit Mode > Edit 선택


[P03_Ch01그림08_03_02]

 

1.     Layer Name에 좀 전에 생성한 Material 이름을 작성 합니다.

2.     +버튼을 눌러 Layer를 생성합니다.

경우에 따라 NoBlend Hardness값을 조정합니다.

[P03_Ch01그림08_03_03] Layer생성이 완료된 모습

 

3-1-3. Landscape Mock up 제작

그럼 이제부터 지형의 Mock up 작업을 시작해 보도록 하겠습니다.

[P03_Ch01그림09]

 

1.     Paint 툴을 선택합니다.

2.     지형을 편집해야 하므로 Edit Mode에서 Height map을 선택합니다.

3.     Paint 툴을 사용하여 기본 Mock up이 되는 지형의 형태를 에디팅 합니다.

 

Mock up 작업이 어느 정도 완료 되었다면 지형 데이터를 출력해 보도록 하겠습니다.

[P03_Ch01그림10]

 

1.     Export 버튼을 눌러 저장할 경로를 선택 후 저장합니다.

3-1-4. World Machine 활용

지형 데이터에 자연적인 침식효과를 주기 위해 World Machine을 실행합니다.

[P03_Ch01그림11]

 

작업에 들어가기에 앞서 World Machine의 기본적인 세팅을합니다.

[P03_Ch01그림12]

 

1.     Project Settings를 눌러줍니다.

2.     작업의 편리성을 위해 지형 생성 거리를 16Km*16Km셋팅합니다.

3.     랜드스케이프에서 생성한 지형의 크기와 맞춰줍니다. Custom 버튼을 눌러 2033*2033으로 세팅합니다.

4.     지형의 최대 높이를 세팅합니다. 32832m세팅하고 확인 버튼을 눌러줍니다. (이는 추후 Heightmap Min, Max값에 영향을 줍니다.)

5.     Generator 탭에서 File Input을 선택합니다.

6.     Device View File Input을 생성합니다.

 

생성된 File Input을 더블 클릭하여 셋팅창을 엽니다. 좀 전에 셋팅한 월드 값과 지형의 넓이를 맞춰 주는 작업을 진행합니다.


[P03_Ch01그림13]

 

1.     File Input Device를 더블 클릭하여 설정 창을 띄웁니다.

2.     Load 버튼을 눌러 UDK에서 추출한 하이트맵을 선택합니다.

3.     넓이와 폭을 16Km*16Km세팅합니다.

4.     Altitude Scaling Natural elevations세팅합니다.

5.     파일의 모든 세팅이 끝났다면 OK버튼을 누릅니다.

 

  

Heightmap이 잘 들어왔는지 확인해 보도록 합니다

1.     3D View(단축키 F8)을 눌러 확인합니다.

2.     Build버튼(단축키 Ctrl + B)을 눌러 지형을 Build하여 결과물을 확인합니다.

 

이제부터는 지형에 효과를 주도록 하겠습니다.

[P03_Ch01그림15]

 

1.     Generator탭 선택

2.     Advanced Perlin을 선택합니다. (맨 바닥에 렌덤한 느낌을 주기 위한 것 입니다.

3.     Work ViewAdvanced Perlin을 생성합니다.

4.     Filter탭 선택

5.     Terrace효과를 선택합니다.

6.     Work View Terrace Device를 생성합니다.

7.     Terrace더블클릭하여 속성 창을 열고 효과의 값을 지정한 뒤 Ok버튼을 눌러줍니다.


[P03_Ch01그림16]

 

1~3. 침식효과를 넣어주기 위해 Natural탭 에서 Erosion을 선택하여 Device View에 생성합니다.
4. Erosion
세팅값을 조정한 뒤 OK버튼을 눌러줍니다.(아주 중요한 효과입니다. 자연스러운 침식효과를 위해 시행착오를 많이 겪어야 합니다. 만들고자 하는 지형을 만들기 전에 그 지형의 생성되는 원리를 이해하고 침식, 퇴적, 풍식 등의 효과를 고려한 뒤 Erosion세팅한다면 좀더 자연스러운 지형을 제작 할 수 있습니다.) 

3D View에서 Build를 건 다음 침식효과가 잘 적용되었는지 결과를 확인합니다.

[P03_Ch01그림17]

 

이제 지형에 간단하게 색을 입혀보도록 하겠습니다.

[P03_Ch01그림18]

1.     Macros탭을 선택합니다.

2.     Open버튼을 눌러줍니다.

3.     Macro 라이브러리가 나오면 Basic Coverage(Macro 노드 입니다.)를 선택합니다.

4.     Load버튼을 눌러 Macro를 불러 옵니다.

5.     Work ViewBasic Coverage Device를 생성합니다.

6.     Basic Coverage의 속성 창에서 Height, Slope Cutoff 색 정보를 입력 후 OK버튼을 눌러줍니다.

7.     OutPut탭에서 Overlay View를 생성하여 최종 노드를 연결 합니다.

8.      

3D View에서 Build를 건 다음 색 정보가 정확히 잘 들어갔는지 확인합니다.

[P03_Ch01그림19]

 

Weightmap Node 생성

아래 [P03_Ch01그림21_01] Weightmap을 생성하기 위한 노드 구성입니다.

1 Layer에 적용될 Weight영역 선택

Selector > Select Height선택 > Work View에 배치 > Erosion에서 HeightField출력값 가져와 입력 > Select Height 속성 창 열어서 HeightField높이값 지정 후 OK

[P03_Ch01그림21_01]

 

2 Layer에 적용될 Weight영역 선택

Selector > Select Slope > Work View에 배치 > Erosion에서 HeightField출력값 가져와 입력 > Select Slope 속성 창 열어서 HeightField의 경사도 설정 후 OK

[P03_Ch01그림21_02]

3 Layer에 적용될 Weight영역 선택

Filter > Equalizer > Work View에 배치 > Erosion에서 Flow Map출력값 가져와 입력 >

Equalizer 속성 창 열어서 Flow Map영역 설정 후 OK

[P03_Ch01그림21_03]

 

Heightmap 출력

[P03_Ch01그림20]

 

1.     Output 선택

2.     Height Output Device 선택

3.     Work View Height Output 배치 후 Erosion에서 HightField 출력값을 가져와 입력합니다.

4.     Height Output 속성 창을 열어 High Precision RAW16으로 지정합니다.

5.     Set 버튼을 누릅니다.

6.     데이터가 저장될 경로 지정하고 파일 이름 지정한 다음에 저장 버튼을 누릅니다.

7.     Write Output to disk! 버튼을 눌러 줍니다. (Build가 안되어 있다면 Build를 할 것인지 물어봅니다.)

8.     데이터 출력이 모두 완료되었다면 OK버튼을 누르고 창을 닫습니다.

 

Weightmap 출력

[P03_Ch01그림21]

 

1.     Heightmap출력용으로 사용했던 Height OutPut Copy and Paste하여 가져 옵니다.

2.     Low Precision에서 RAW로 설정합니다.

3.     Set 버튼을 누릅니다.

4.     데이터가 저장될 경로 지정하고 파일 이름 지정한 다음에 저장 버튼을 누릅니다.

5.     Write Output to disk! 버튼을 눌러 줍니다. (Build가 안되어 있다면 Build를 할 것인지 물어봅니다.)

6.     데이터 출력이 모두 완료되었다면 OK버튼을 누르고 창을 닫습니다.

 (Heightmap 16bit  Weightmap 8bit입니다)

 

3-1-5.  Heightmap, Weightmap 입력

 

이제 출력된 Heightmap, Weightmap Landscape에 적용해 보도록 하겠습니다.

[P03_Ch01그림22]

 

1.     이제 UDk로 넘어와서 좀전에 생성한 Heightmap Weightmap을 등록해 보겠습니다. Target Layer에서 Edit Mode Edit로 설정한 후 버튼을 선택합니다.

2.     조금전 생성한 Heightmap지정한뒤 아이콘을 눌러 Heightmap을 갱신합니다.

 

작업이 완료되면 아래 [P03_Ch01그림23]처럼 Heightmap이 제대로 들어온 것을 확인 하실 수 있습니다

[P03_Ch01그림23]

      [P03_Ch01그림24]

 

1.     이제 Worldmachine에서 생성한 Weightmap을 적용하기 위해 Material 노드를 만들어 줍니다. Layer를 총 3개로 만들었고 설명하기 쉽게 일부러 색만 지정 하였습니다. 나중에 색 대신에 타일 텍스쳐를 넣어주시면 텍스쳐가 적용됩니다. ( Normalmap도 똑같은 Layer구조로 만들어서 적용해 줘야합니다.

            [P03_Ch01그림25]

 

1~3. 좀전 Heightmap 갱신과 똑같은 순서로 Weightmap을 선택하여 갱신해 줍니다.

[P03_Ch01그림26]

 

1 Layer에 적용된 Weightmap입니다.

[P03_Ch01그림27]

 

2 Layer에 적용된 Weightmap입니다.

[P03_Ch01그림28]

 

3 Layer에 적용된 Weightmap입니다.

[P03_Ch01그림29]

1~3. 브러쉬를 선택하고 원하는 Layer를 선택한 뒤 드로잉하면 Layer 별로 색이 칠해지는 것을 확인 하실 수 있습니다

 

LightmassImportanceVolume을 지형 크기에 맞게 생성합니다.




1~2. Lightmass Build하여 봅니다

3. Play버튼을 눌러 Map을 확인합니다.

[P03_Ch01그림32]

최종 완성된 이미지 입니다.

지금까지 Heightmap을 사용한 기초 지형제작 방법을 알아 보았습니다.