Unity

[Unity] DEM 파일 올리는 방법

kjun.kr 2022. 11. 30. 21:40
728x90
728x170

Unity 에서 Terrain 을 이용해 DEM 파일을 올리는 방법입니다.

DEM 파일은  https://earthexplorer.usgs.gov (SRTM) 사이트 가입후 원하는 지역을 다운받거나

QGIS 에서 SRTM 플러그인을 설치 한 후에 원하는 지역의 DEM 파일(확장자 tif)을 다운로드하면됩니다.
테스트한 DEM 파일은 아래 첨부합니다.
(수치표고 img 를 tif 로 변환해서 해봤는데 잘 안됨)

srtm.zip
12.46MB

Unity 를 실행하고 새로운 3D 프로젝트를 생성한 후에
GameObject > 3D Object > Terrain 을 선택합니다.

추가된 Terrain 에 Script 를 추가해야하는데 Inspector 에서 가장 아래 Add Component 버튼을 클릭해 만들어질 Script 명을 넣고 New Script 를 선택 후 Create and Add 버튼을 클릭해 Component 를 추가합니다.

추가된 Script 를 더블 클릭하면 코딩입력 창이 뜨고 아래 처럼 코딩합니다.

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);
    }
}

처음 다운 받았던 DEM 파일(srtm)을 프로젝트에 추가하고 

DEM 파일의 Insepctor 에서 아래 처럼 변경합니다.

다시 Treeain Component 를 선택한 후 Inspector 에서 추가된 Script 를 보면 Height Map 부분이 비어있는데 여기세 DEM 파일을 드래그하여 놓습니다.

Script 의 우클릭메뉴의 SetHeight 라는 메뉴를 클릭합니다.

Terrain 에서 아래 값들을 자신에게 맞게 조정합니다.


결과

728x90
그리드형