대규모 월드 좌표

대규모 월드 좌표의 개념과 언리얼 엔진 5에서 사용하는 방법에 관한 개요입니다.

Choose your operating system:

Windows

macOS

Linux

대규모 월드 좌표(Large World Coordinates, LWC) 는**언리얼 엔진 5(UE5) 에서 더블 정밀도 데이터 베리언트 타입을 지원합니다. 부동 소수점 정밀도를 향상하기 위해 UE5의 모든 엔진 시스템 전반에서 커다란 변화가 이루어졌습니다. 이러한 시스템에는 건축 시각화, 시뮬레이션, 렌더링 (나이아가라HLSL** 코드), 대규모 월드 스케일 프로젝트 등이 있습니다.

언리얼 엔진 4(UE4) 에서는 32비트 플로트 정밀도 타입으로 인해 월드의 크기가 제한되었습니다. LWC는 코어 데이터 타입으로 64비트 더블을 제공하여 프로젝트 크기를 크게 개선합니다. 이 변화로 대규모 월드를 구축할 수 있게 되었으며, 액터 배치 정확도 및 오리엔테이션 정밀도가 크게 향상되었습니다. 대규모 월드 좌표는 UE5에서 새 프로젝트를 시작할 때 사용할 수 있습니다.

언리얼 엔진 5로 프로젝트 업그레이드하기

UE4 프로젝트를 UE5로 업그레이드할 때는 코드 베이스에 정밀도 손실이 발생하는 엣지 케이스를 경험할 수 있기 때문에, 일반적으로 마이그레이션 가이드를 참고하는 것이 좋습니다. 대규모 월드 좌표를 사용하지 않는 프로젝트에서는 이런 문제를 우려할 필요가 별로 없습니다. 그러나 월드의 스케일을 키우기 위해 더블 타입을 사용하려는 프로젝트에서는 대규모 월드 좌표 프로젝트 변환 가이드라인에 따르는 것이 좋습니다.

대규모 월드 실험하기

UE5의 대규모 월드 좌표 기능은 베타 상태이기 때문에, WORLD_MAX 의 디폴트 크기가 UE4의 WORLD_MAX 사이즈인 21km로 설정되어 있고 엔진의 월드 바운드 체크가 활성화되어 있습니다. 대규모 월드의 스케일을 실험하는 방법에는 두 가지가 있습니다.

하나는 WorldSettings 클래스에 액세스하고 bEnableLargeWorlds 부울을 true로 설정하여 바운드 체크를 비활성화하는 것입니다.

AWorldSettings::bEnableLargeWorlds = true

이렇게 하면 WORLD_MAX 값이 약 21km로 유지되므로 언리얼 엔진 5.0 초기 릴리즈 버전에서 실험할 때 더 안정적입니다.

다른 방법은 UE_USE_UE4_WORLD_MAX의 글로벌 값을 설정하여 더 큰 월드 바운드를 활성화하는 것입니다.

UE_USE_UE4_WORLD_MAX=0 

이렇게 하면 WORLD_MAX 값이 약 8,800만 km로 설정됩니다.

이 값은 향후 출시될 언리얼 엔진 버전에서 변경될 수 있으며, 언리얼 엔진 5의 개발 과정 전반에 걸쳐 계속해서 최적화되어야 할 안정성 문제가 나타날 수 있습니다.

언리얼 엔진 5로 프로젝트 업그레이드하기

UE4 프로젝트를 UE5로 업그레이드할 때는 코드 베이스에서 정밀도 손실이 발생하는 엣지 케이스를 경험할 수 있기 때문에, 일반적으로 마이그레이션 가이드를 참고하는 것이 좋습니다. 대규모 월드 좌표를 사용하지 않는 프로젝트에서는 이런 문제를 우려할 필요가 별로 없습니다. 그러나 월드의 스케일을 키우기 위해 더블 타입을 사용하려는 프로젝트에서는 대규모 월드 좌표 변환 가이드라인에 따르는 것이 좋습니다.

블루프린트

이제 블루프린트에서 플로트는 적절한 싱글 또는 더블 정밀도 서브 타입으로 표시됩니다. 이 새로운 타입은 플로트와 더블의 기능을 모두 지원합니다. 기존의 모든 블루프린트 및 블루프린트 타입(UMG, 컨트롤 릭, 애니메이션 블루프린트 )은 이전 작업을 업데이트할 필요 없이 두 정밀도 타입 중 하나를 사용하도록 묵시적으로 변환되었습니다.

소스 코드 인터페이스

소스 코드는 이제 플로트와 더블 타입을 모두 노출할 수 있습니다. 언리얼 헤더 툴(Unreal Header Tool, UHT) 은 코드에서 블루프린트로 액세스 가능한 부동 소수점 타입을 적절한 싱글(C++ float) 또는 더블(C++ 더블) 정밀도 서브 타입의 블루프린트 플로트로 해석하므로, 모든 블루프린트 노드가 지원하는 싱글 또는 더블 플로트값을 자동으로 변환할 수 있습니다.

float 값이 예상되는 UFUNCTION 프로퍼티 지정자 노출

UFUNCTION 프로퍼티 지정자(Property Specifier)로 표시되고 float 데이터값이 포함된 모든 메서드는 부정확할 위험이 있습니다. 블루프린트 플로트값이 낮은 정밀도 플로트로 형변환되기 때문입니다. 기존의 UFUNCTION 프로퍼티를 모두 검사해야 합니다. 그러면 향후 정밀도 문제를 방지하기 위해 파라미터 또는 반환 값을 더블로 전환해야 할지 여부를 결정하는 데 도움이 됩니다. 플로트와 더블 타입 간에는 언제 어느 쪽으로 전환해도 안전합니다.

이는 생성되거나 코드에 노출된 모든 K2 노드에 적용됩니다.

렌더링

언리얼 엔진에서는 다양한 좌표 공간과 트랜스폼을 통해 오브젝트가 월드에 존재할 수 있는 방식을 설명합니다. 레벨/월드의 좌표인 월드 스페이스(World space) 및 특정 오브젝트를 기준으로 하는 로컬 스페이스(Local space) 에 관한 자세한 정보는 좌표계 용어집을 참고하세요.

프로젝트의 월드에 배치할 수 있는 각 오브젝트에는 좌표축 3가지, 오리엔테이션, 원점이 있습니다. 자세한 내용은 액터 트랜스폼을 참고하세요.

셰이더

대규모 월드 좌표와 함께 도입된 새로운 HLSL 타입은 LargeWorldCoordinates.ush 파일에서 찾을 수 있습니다. 셰이더 코드를 UE5로 변환하는 방법에 관한 자세한 정보는 대규모 월드 좌표 렌더링 개요를 참고하세요.

나이아가라

나이아가라에서의 구현은 메인 엔진에서의 구현과 다릅니다. 파티클 이펙트의 퍼포먼스를 유지하기 위해 데이터가 더블이 아닌 float 세트로 저장됩니다. 일정 규모 이상의 월드는 그리드 셀로 나뉩니다. 첫 번째 플로트는 해당 그리드 셀의 나이아가라 시스템을 정의하고, 두 번째 플로트는 시스템이 어떤 그리드 셀에 있는지 나타냅니다.

이런 추가 정보를 수용하기 위하여 데이터 타입인 위치(Position)가 있습니다. 위치에는 Particles.Position에 참조된 벡터가 저장됩니다. 자세한 내용은 나이아가라의 대규모 월드 좌표 문서를 참고하세요.

카오스

카오스 디스트럭션 피직스는 더블 타입을 사용하여 삭제되는 부분 없이 그대로 작동합니다. 엔진의 묵시적 형변환은 다음과 같이 쌍방입니다

    FVector3f -> Chaos::FVec3!

    그러나 명시적 형변환은 다음과 같이 일방입니다.

    Chaos::FVec3 -> FVector3f
    //플로트를 다운그레이드할 때 발생하는 정밀도 손실을 잡기 위해서입니다

언리얼 엔진 5의 향후 출시 버전에서도 플로트를 더블로 묵시적으로 업그레이드하는 FVector 형변환은 계속될 예정입니다. 더블을 플로트로 형변환하려면 명시적으로 변환해야 합니다. 자세한 내용은 대규모 월드 좌표 프로젝트 변환 가이드라인을 참고하세요.

태그