- 유니티에서는 최대 4K까지 지원하는 듯
1. 지형 elevation파일(.tif)과 텍스쳐 이미지 파일(.tif)을 받는다.
2. 유니티 새로운 씬 생성
3. Hierarchy에서 Terrain 생성
4. 스크립트 작성(높이값을 반전)
using UnityEngine;
public class SetTerrainHeight : MonoBehaviour
{
public Texture2D HeightMap;
[ContextMenu("SetHeight")]
public void SetHeight()
{
TerrainData terrainData = GetComponent<Terrain>().terrainData;
int terrainWidth = terrainData.heightmapResolution;
int terrainHeight = terrainData.heightmapResolution;
float[,] heightValues = terrainData.GetHeights(0, 0, terrainWidth, terrainHeight);
for (int terrainY = 0; terrainY < terrainHeight; terrainY++)
{
if (terrainY >= HeightMap.height)
{
break;
}
for (int terrainX = 0; terrainX < terrainWidth; terrainX++)
{
if (terrainX >= HeightMap.width)
{
break;
}
Color heightColor = HeightMap.GetPixel(terrainY, terrainX);
heightValues[terrainX, terrainY] = heightColor.r;
}
}
terrainData.SetHeights(0, 0, heightValues);
}
}
5. Terrain 오브젝트에 스크립트 삽입
- Add Component 클릭 -> 스크립트 이름 검색 후 선택
- 또는 스크립트를 드래그 앤 드랍으로 인스펙터 창에 끌어다 놓음
6. 스크립트의 Height Map 컴포넌트에 지형 Elevation 데이터 넣기(동글버튼 클릭 후 검색 또는 드래그 앤 드랍)
7. Mesh Resolution 설정 및 해상도에 맞는 Heightmap Resolution 설정
- 4kmx4km 크기이므로 실제 크기와 맞게 Terrain의 높이와 너비를 각각 4000으로 설정
- elevation 데이터에서 가장 높은 위치는 202m, 가장 낮은 위치는 2m이므로 두 값의 차이값인 200으로 Terrain의 깊이값 설정
- 현재 elevation 데이터의 해상도는 1024x1024 이므로 Heightmap 데이터는 1025x1025로 설정
8. 작성한 스크립트 Set Terrain Height의 상단바(?)에서 우클릭 후 Set Height 클릭
9. 텍스쳐를 입히기 위해 두번째 메뉴 Paint Terrain으로 이동 후 Paint Texture로 변경 후 중간에 Edit Terrain Layers... 클릭
10. Create Layer 클릭 후 해당 텍스쳐 이미지 선택
11. 생성된 Layer를 선택하여 나오는 설정창에서 Tiling Settings의 Size를 조절하여 텍스쳐의 실제 크기를 맞춤