레벨 지오레퍼런싱

Georeferencing 플러그인을 사용하여 UE4 레벨 맵의 위치를 물리 공간의 위치와 연결하는 방법입니다.

Choose your operating system:

Windows

macOS

Linux

목차

지오레퍼런싱(Georeference) 이란 환경을 물리적 공간의 위치와 연결하는 것입니다. 이 용어는 보통 지리 정보 시스템 분야에서 물리적 맵이나 맵의 래스터 이미지를 공간 위치와 연결하는 프로세스를 설명하는 데 사용됩니다. 일단 환경이 지오레퍼런싱되면, 언리얼 엔진은 위도/경도 또는 UTM 좌표와 같은 실제 지리적 좌표를 표현할 수 있습니다.

전제조건

  • 이 문서에서 설명하는 기능을 사용하려면 Georeferencing 플러그인이 활성화되어 있어야 합니다.

이론적 배경

좌표 기준계(CRS) 및 타원체

행성에서 물체를 찾을 때는 위치를 표현하기 위해 좌표 기준계(CRS)를 선택해야 합니다.

이때 복잡한 부분은 행성은 평면이나 구체가 아니라 타원이라는 것입니다. 데이텀이라고 하는 다양한 타원체 모델이 있으며, 가장 잘 알려진 것은 지구용 모델인 WGS84입니다.

타원체 3D 모델, 축 관계도 및 공식

예를 들어, WGS84 타원체의 경우, 축 길이 간 차이가 약 22km입니다.

  • a = 6 378 137.0m

  • b = 6 356 752.314 245m

  • 1/f = 298.257 223 563

각 좌표 기준계는 기반이 되는 타원체 모델을 사용하여 위치를 정의합니다. 하지만, 여러 종류의 CRS가 있으며, 이러한 CRS에는 각각 추가 프로퍼티가 있습니다.

지리 CRS

지리 CRS는 극좌표를 사용하여 행성의 한 지점에 대한 위치를 표현합니다.

지리 CRS 표현

  • 위도 = 적도에 대한 고도(도)

  • 경도 = 본초자오선(그리니치)까지의 방위각(도)

  • 고도 = 레퍼런스 타원체까지의 높이(미터).

각도는 십진법의 도 단위나 DMS(도, 분 초) 단위로 표현됩니다.

실제로는 두 가지 위도 정의가 있습니다. 데이텀이 구체가 아닌 경우 타원체 모델에 대한 로컬 노멀이 관련되지만, 그 내용은 이 문서를 벗어나는 내용입니다.

지구 중심 CRS

지구 중심 CRS는 데카르트 좌표를 사용하여 행성 중심에 있는 원점을 통해 행성의 어떤 지점에 대한 위치를 정의합니다.

다음 이미지는 DIS/HLA와 같은 분산 시뮬레이션 프로토콜에 사용되는 표준 레퍼런스 CRS인 지구 중심 지구 고정(Earth-Centered, Earth-Fixed, ECEF) CRS를 보여줍니다.

지구 중심 CRS 표현

  • 원점 = 지구 중심

  • X축은 적도/본초자오선(그리니치) 교차점을 가리킵니다.

  • Z축은 지구의 회전축에 맞춰 정렬됩니다.

  • Y축은 앞의 두 축과 직각이 되는 축입니다.

좌표는 미터로 표시됩니다.

투영 CRS

투영 좌표계는 맵 프로젝션을 사용하여 행성을 '평평하게' 투영한 지리 좌표계입니다. 종이 맵에서 사용하는 방식입니다. 구체를 평면으로 투영하는 방법은 여러 가지며, 따라서 수많은 맵 프로젝션이 존재할 수 있고, 매핑에 따라 이런저런 디포메이션이 있을 수 있습니다.

가장 기본적인 프로젝션은 평면형, 원추형 또는 원통형 셰이프를 사용합니다.

planar-projection-1.png

cone-projection-1.png

cylinder-projection-1.png

planar-projection-2.png

cone-projection-2.png

cylinder-projection-2.png

가장 자주 사용되는 프로젝션은 메르카토르 프로젝션으로, 여기에는 몇 가지 변형이 있습니다.

예를 들어, 시뮬레이션 산업에서 널리 사용하는 국제횡메르카토르(Universal Transverse Mercator, UTM) 프로젝션이 있습니다. 이 CRS는 지구를 60 부분, 즉 영역 으로 나누고, 각 영역의 중앙자오선에 접하는 원통 투영법을 사용하여 북쪽 및 남쪽 방향 영역을 각각 투영합니다.

자오선이 표시된 지구 원통 매핑을 통한 지구 투영

이는 데카르트 좌표계이지만, XYZ 좌표 위에 원점을 정의하기 위한 영역 및 반구 식별자가 필요합니다. 모든 좌표가 양수가 되도록 하려면 특정 가정이 필요합니다.

각 6° 너비의 UTM 영역에는 정의에 따라 X=500,000m에 위치한 중앙자오선이 있습니다. 이 중앙자오선은 음의 좌표를 피하기 위한 임의의 값입니다. 동향거리 값은 모두 이 중심 값보다 크고 서향거리 값은 모두 작지만, 모든 값은 양수입니다.

북반구에 있다면 적도의 북향거리 값은 0m입니다. 남반구에서는 적도가 10,000,000m에서 시작됩니다. 그 이유는 이 값에서 빼야 모든 적도 남쪽의 값이 양수가 되기 때문입니다. 그래야 남반구의 Y 좌표가 음수가 되지 않기 때문에 이를 가짜 북향이라고 합니다.

이 시스템에서 파생된 시스템으로 군사 좌표 참조 시스템(Military Grid Reference System, MGRS) 등이 있습니다.

CRS 설명 방법

타원체, 단위, 자오선, 투영 등의 특정 세팅을 선언하기 위해 규칙이 정의된 프로젝션 시스템이 매우 많을 수 있습니다. 이 데이터는 다양한 형식으로 저장될 수 있으며, 가장 많이 사용되는 형식은 WKT(Well-Known-Text) 및 EPSG(European Petroleum Survey Group) 코드입니다.

http://epsg.io/와 같은 여러 웹사이트에서 각 CRS에 대한 정보를 확인할 수 있지만, 자세한 내용은 이 문서를 벗어납니다.

좌표를 올바른 값으로 변환하는 데 사용할 CRS에 대해 꼭 알아둬야 합니다.

레퍼런스

지구의 모양과 영역을 다루는 수학 분야인 측지학 에 대한 자세한 정보는 다음 링크에서 살펴볼 수 있습니다.

Georeferencing 플러그인

언리얼 엔진에는 하나의 특정 CRS에서 레벨 원점 좌표를 정의할 수 있는 Georeferencing 플러그인 및 서로 다른 CRS 간에 좌표를 변환하는 함수가 포함되어 있습니다. 언리얼에서 각 액터 는 이 레벨 원점을 기준으로 정의된 좌표를 가지고 있으므로 임의의 지오레퍼런싱된 위치를 알려면 지구에서의 엔진 원점을 찾아야 합니다.

여기서는 다음 두 가지 경우를 고려할 것입니다.

  • 평평한 행성 : 언리얼 엔진 환경이 평평한 지면으로 표현할 수 있을 만큼 작은 경우입니다(수백 킬로미터보다 작음). 이러한 경우, 지면이 투영 모드 로 모델링되고 모든 좌표를 하나의 간단한 이동 오프셋으로 투영 CRS에서 정의할 수 있다고 간주합니다.

  • 둥근 행성 : 언리얼 엔진 환경이 행성의 곡률을 고려해야 할 만큼 큰 경우입니다. 이러한 경우, 지오메트리가 구형이나 타원형 모양으로 행성 전체를 덮을 것으로 예상합니다. 이 경우에는 두 가지 방법으로 원점을 배치할 수 있습니다. 행성 모양 중앙에 배치하거나 표면에 있는 임의의 지점에 배치하는 것입니다. 후자의 경우, Z축이 위를 가리키고 이 지점에서 타원체에 대해 노멀이라고 가정합니다.

이러한 경우는 아래 이미지로 설명할 수 있습니다.

  • 평평한 행성에서 해당 환경은 녹색 사각형입니다. 레벨의 선택한 모델링 원점은 P점입니다. 행성에서 임의의 위치이며 지리 좌표(위도 및 경도)를 사용하거나 데카르트 좌표를 사용하여 정의할 수 있지만, 특정한 투영 CRS에서 정의해야 합니다. 그러면 XYZ 좌표는 그 CRS 내에서 동쪽/북쪽/위쪽 방향으로 표현됩니다.

  • 둥근 행성에서는 두 가지 선택을 할 수 있습니다.

    • 레벨 원점이 행성 중심에 위치합니다. 이는 ECEF의 경우이며, 지오메트리가 원점에 없는 대신 행성 반경에 따라 큰 값을 가진 좌표에 있습니다. ECEF CRS는 데카르트 좌표계이며 축은 엔진의 축에 맞춰 정렬됩니다.

    • 레벨 원점이 행성 표면의 임의 지점에 배치됩니다. 평평한 행성의 경우와 마찬가지로 이러한 좌표는 지리 또는 투영 CRS에서 표현될 수 있습니다. 레벨의 위 방향을 이 위치의 타원체 노멀과 정렬되도록 유지하는 것이 더 편리하며, 전면(Front) 및 오른쪽(Right) 벡터가 북쪽(North) 및 동쪽(East) 벡터와 일치하는 방식으로 평면 지오메트리 방향이 향하도록 해야 합니다.

둥근 행성에 매핑된 평평한 평면

지리 공간 산업에서 대부분의 좌표는 오른손 프레임으로 표현되지만, 언리얼 엔진에서는 왼손 좌표계를 사용합니다. 지리 공간 사용과의 일관성을 유지하기 위해, Georeferencing 플러그인은 오른손 로직을 사용하여 좌표를 표시합니다. 즉, 좌표를 변환할 때 특정 지점에서 Y 좌표가 반전된다는 뜻이며, 이는 최종 사용자에게 투명하게 보입니다.

언리얼 엔진에서는 다음과 같은 축 규칙을 사용합니다.

평면 좌표축 규칙

ECEF 좌표축 규칙

언리얼 프레임이 탄젠트 프레임과 일치하는 경우

언리얼 프레임이 ECEF 프레임과 일치하는 경우

다른 규칙을 사용하려면, 지오레퍼런싱 함수를 호출하기 전에 좌표를 교체해야 합니다.

시스템은 월드 컴포지션을 사용할 때나 수동 리베이싱을 수행할 때 활성화되는 월드 원점 오프셋 이동을 자동으로 처리합니다.

지오레퍼런싱 시스템 구성하기

메인 메뉴에서 편집(Edit) > 플러그인(Plugins) 으로 이동한 다음 Georeferencing 플러그인을 활성화합니다.

Georeferencing 플러그인

활성화한 다음에는 이 플러그인을 사용하여 다음 4가지 좌표계 간에 좌표를 변환할 수 있습니다.

  • 언리얼 엔진 좌표계

  • 선택한 투영 CRS

  • 선택한 지리 CRS

  • 표준 ECEF CRS

액터 배치(Place Actors) 패널에서 지오레퍼런싱 시스템 액터(Geo Referencing System Actor) 를 찾아 레벨로 드래그한 다음, 그 액터를 선택하여 디테일(Details) 패널에서 해당 프로퍼티를 확인합니다.

지오레퍼런싱 시스템 액터

프로퍼티

설명

Geo Referencing

행성 모양(Planet Shape)

평평한 모양(Flat) 또는 둥근 모양(Round)입니다. 이 모양은 프로젝트 지오메트리의 셰이프/스케일에 따라서만 달라집니다.

투영 CRS(Projected CRS)

문자열로 식별됩니다. PROJ 라이브러리에서 지원하는 모든 CRS가 될 수 있습니다. 적절한 CRS 정의는 https://epsg.io/ 웹사이트에서 확인할 수 있습니다.

지리 CRS(Geographic CRS)

문자열로 식별됩니다. PROJ 라이브러리에서 지원하는 모든 CRS가 될 수 있습니다. 적절한 CRS 정의는 https://epsg.io/ 웹사이트에서 확인할 수 있습니다.

Origin Location

투영 CRS의 원점 위치(Origin Location in Projected CRS)

원점 정의에 투영 CRS 좌표를 사용할지 지리 CRS 좌표를 사용할지 결정합니다.

행성 중심 원점(Origin at Planet Center)

둥근 행성 전용입니다. 행성 중심으로 원점을 정의할지 여부를 결정합니다.

원점 투영 좌표 동향축(Origin Projected Coordinates Easting)

투영 CRS 좌표를 사용할 때 원점 동-서 좌표입니다.

원점 투영 좌표 북향축(Origin Projected Coordinates Northing)

투영 CRS 좌표를 사용할 때 원점 북-남 좌표입니다.

원점 투영 좌표 상향 축(Origin Projected Coordinates Easting)

투영 CRS 좌표를 사용할 때 원점 상-하 좌표입니다.

원점 위도(Origin Latitude)

지리 CRS 좌표를 사용할 때 원점 북-남 좌표입니다.

원점 경도(Origin Longitude)

지리 CRS 좌표를 사용할 때 원점 동-서 좌표입니다.

원점 고도(Origin Altitude)

지리 CRS 좌표를 사용할 때 원점 상-하 좌표입니다.

CRS 투영 식별에 유효하지 않은 문자열을 사용하면 오류 메시지가 생성됩니다. https://epsg.io/에 정의된 정확한 CRS 정의를 사용해야 합니다.

에디터 오류 메시지

로그 오류 메시지

아래의 스크린샷에서는 지오메트리가 평평하므로 투영 CRS에서 모델링됩니다. EPSG Code 32617은 UTM North Zone 17에 대한 코드이며, 좌표는 에픽게임즈 본사 근처 위치에 해당합니다. EPSG:4326은 WGS84 타원체로서, 위도와 경도, 고도의 모든 지리 좌표가 타원체에 맞춰 정의된다는 뜻입니다.

투영 CRS의 원점 위치 활성화 투영 CRS의 원점 위치 비활성화

부동 소수점 정확도 때문에 이러한 원점 값은 정수로 하여 잘못된 반올림이 없도록 해야 합니다. 환경을 모델링할 때는 이러한 제약을 고려해야 합니다. 내부적으로 Georeferencing 플러그인은 모든 행성 위치의 정확도를 유지하기 위해 배정밀도로 모든 계산을 수행합니다.

둥근 행성 을 선택한 경우, 원점 위치를 구성할 수 있는 추가 체크박스가 표시됩니다.

  • 행성 중심 원점 에 체크한 경우, ECEF 좌표계를 사용한다는 뜻입니다. 이 원점은 앞서 설명된 대로 명시적으로 정의되며 추가 정보는 필요 없습니다.

  • 아니면 선택한 CRS를 사용하여 타원체에서 임의의 위치에 레벨 원점(Level Origin) 을 설정할 수 있습니다.

행성 중심 원점 활성화 행성 중심 원점 비활성화

좌표 변환하기

좌표를 변환하려면 지오레퍼런싱 시스템에 액세스한 다음, 지오레퍼런싱 카테고리의 함수 중 하나를 호출해야 합니다.

지오레퍼런싱 블루프린트 노드 찾기

지오레퍼런싱 출력 함수 노드 1 지오레퍼런싱 출력 함수 노드 2

가능한 좌표 변환은 아래 그림에 설명되어 있습니다.

지오레퍼런싱 시스템은 배정밀도로 작동하며 단정밀도 부동 소수점 값만 지원하는 블루프린트 시스템에서 좌표를 직접 노출할 수는 없다는 점에 유의해야 합니다. 이 시스템은 특정 구조(FCartesianCoordinates , FGeographicCoordinates )를 출력합니다. 모든 계산에 이러한 구조를 사용한 다음, 마지막 단계에서 부동 소수점 근사치를 얻는 것이 좋습니다.

변환 경로

언리얼 엔진 CRS 는 레벨 좌표계입니다. 모든 액터는 FVector 변수에 좌표를 갖습니다. 첫 번째 단계는 이러한 좌표를 지오레퍼런싱된 CRS로 변환하는 것이지만, 경우에 따라 여전히 ECEF 또는 투영 좌표와 같은 데카르트 좌표를 사용합니다. 그런 다음, 이 위치를 지리 좌표로 변환할 수 있게 됩니다.

언리얼 엔진 좌표를 투영 또는 ECEF 좌표로 변환할 때, 계산 경로는 Flat Planet/Round Planet 프로퍼티에 따라 달라집니다.

예를 들어, Round Planet에 있고 Engine to Projected 변환을 요청한 경우, 먼저 좌표를 ECEF(기본 변환)로 변환한 다음, Projected(복합 투영)로 변환합니다. 이러한 중간 단계는 녹색 및 빨간색 원형 화살표로 표시됩니다. 즉, 지리 좌표만 얻고 싶다면, 퍼포먼스에 최적의 경로는 Round Planet의 경우 UE > ECEF > Geographic , 평평한 행성에 있는 경우에는 UE > Projected > Geographic 가 될 것입니다.

변환을 위한 최적 블루프린트 경로

값 얻기

FCartesianCoordinates 또는 FGeographicCoordinates 가 있다면, 다음과 같은 다양한 방법으로 값을 얻을 수 있습니다.

  • 블루프린트에서는 ToFloatApproximation을 호출합니다. 이 근사치는 배정밀도에서 블루프린트 단정밀도로의 변환에 해당합니다.

  • 커스텀 C++ 코드를 사용하여 자체 프로세싱을 수행합니다. 전체 배정밀도를 유지하려면, FCartesianCoordinates 또는 FgeographicCoordinates 구조체 중 하나를 직접 취하는 함수를 작성하여 이러한 값을 얻는 것이 좋습니다.

  • 가능한 반올림 옵션을 사용하여 디스플레이 텍스트로 변환합니다.

값을 얻기 위한 블루프린트 노드 옵션

형식

FCartesianCoordinates

FGeographicCoordinates

To Compact Text

({X}, {Y}, {Z})

({Latitude}, {Longitude}) {Altitude}m

위도와 함께 경도는 {Degree}° {Minutes}' {Seconds}"로 표기할 수 있습니다.

To Full Text

X={X}, Y={Y}, Z={Z}

위도={Latitude} 경도={Longitude} 고도={Altitude}m

위도와 함께 경도는 {Degree}° {Minutes}' {Seconds}"로 표기할 수 있습니다.

To Separate Texts

{X}

{Y}

{Z}

{Latitude}

{Longitude}

{Altitude}

탄젠트 벡터 및 트랜스폼

지오레퍼런싱 시스템을 사용하면 Get ENUVectors at Geographic Location 노드를 사용하여 언리얼 엔진 CRS로 표시된 탄젠트(Tangent) 벡터(East, North, Up)를 얻을 수 있습니다. 예를 들어 이러한 벡터를 사용하여 행성 표면을 따라갈 폰을 이동할 수 있습니다.

Get ENUVectors at Geographic Location 블루프린트 노드

또한, 행성의 어느 위치에서든 Get Tangent Transform at Geographic Location 노드를 사용하여 탄젠트 트랜스폼 을 얻을 수도 있습니다. 이러한 변환을 로컬 오브젝트 변환과 결합하면 오브젝트의 월드 스페이스 변환을 언리얼 엔진 CRS로 가져올 수 있습니다.

Get Tangent Transform at Geographic Location 블루프린트 노드

Get Planet Center Transform 이라는 매우 특정한 함수 노드도 제공합니다. 지오레퍼런싱 세팅에서 선언한 원점에 접하는 방식으로 배치하려는 고유한 타원체 행성 메시가 있는 경우, 이 함수를 호출하여 이 액터 변환을 설정하면 정의한 위치로 향하게 됩니다.

Get Planet Center Transform 블루프린트 노드

추가 툴 및 콘텐츠

지오레퍼런싱 시스템은 콘텐츠 브라우저(Content Browser)Georeferencing Content 폴더에 있는 추가 툴과 함께 제공됩니다. 뷰 옵션(View Options) 드롭다운 메뉴에서 플러그인 콘텐츠 표시(Show Plugin Content) 를 선택하면 이러한 툴을 표시할 수 있습니다.

지오레퍼런싱 상태 표시줄

/GeoReferencing/UI/UMG_GeoStatusBar 에 있는 샘플 UMG 위젯 을 뷰포트에 추가하면, 현재 뷰 위치가 Projected, Geographic 및 ECEF 같은 다양한 CRS로 표시됩니다.

지오레퍼런싱 위젯

이를 복제하여 원하는 대로 커스터마이징할 수 있습니다.

뷰포트에서 작동 중인 지오레퍼런싱 위젯

좌표 인스펙터 유틸리티 위젯

이 특별한 에디터 유틸리티 위젯/GeoReferencing/UtilityWidgets/EUW_CoordinatesInspector 에 있습니다. 에디터 내에서 이 위젯을 실행하면, 뷰와 마우스 아래 위치한 지점의 지오레퍼런싱된 좌표를 제어할 수 있는 패널이 표시됩니다.

좌표 인스펙터 위젯

뷰포트에서 작동 중인 좌표 인스펙터 위젯

위치 프로브 및 리베이싱 액터

GeoReferencing/Models/LocationProbe/BP_LocationProbe 폴더에 있는 BP_Location Probe 블루프린트를 사용하여 게임 내 좌표를 측정할 수 있습니다.

레벨에 드롭하고 원하는 위치에 추가하면, 각 CRS에 해당 좌표가 표시됩니다.

제공된 스포너 블루프린트 중 하나를 사용하여 프로브 그리드를 생성해서 이 프로브를 자동화할 수도 있습니다.

위치 프로브 및 리베이싱 액터 위치 프로브 블루프린트

뷰포트에서 작동 중인 위치 프로브

큰 좌표를 처리하기 위해 언리얼 엔진은 원점을 이동하여 정확도를 보장할 수 있습니다.

이 리베이싱 시스템은 월드 컴포지션 중에 자동으로 사용되지만, 직접 제어할 수도 있습니다. 이를 위해 BP_Rebasing 액터가 이 시스템을 제어하는 방법을 보여주는 예시로 제공됩니다.

지오레퍼런싱 시스템은 계산 시 항상 현재 원점 오프셋을 고려합니다.