이제 대규모 월드 좌표 (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만 킬로미터로 설정됩니다.
이 값은 언리얼 엔진의 향후 출시에서 변경될 수 있고 안정성 문제가 나타날 수 있습니다. 안정성 문제는 언리얼 엔진 5 개발 과정 전반에서 지속적으로 최적화될 예정입니다.
블루프린트
이제 블루프린트에서 플로트가 적절한 싱글 또는 더블 정밀도 서브타입과 함께 표시됩니다. 이 새로운 타입은 플로트 및 더블의 피처 패리티를 모두 지원합니다. 모든 기존 블루프린트 및 블루프린트 타입(UMG, 컨트롤 릭, 애니메이션 블루프린트 )은 이전 작업을 업데이트할 필요 없이 둘 중 하나의 정밀도 타입을 사용하도록 묵시적으로 변환되었습니다.
소스 코드 인터페이스
이제 소스 코드가 플로트 및 더블 타입을 모두 노출할 수 있습니다. 언리얼 헤더 툴 (UHT )은 코드로 이루어진 블루프린트 액세스 가능 부동 소수점 타입을 적절한 싱글(C++ 플로트) 또는 더블(C++ 더블) 정밀도 서브타입의 블루프린트 플로트로 해석하므로, 모든 블루프린트 노드가 제공하는 싱글 또는 더블 정밀도의 플로트 값을 자동으로 변환할 수 있습니다.
플로트 값으로 예상되는 UFUNCTION 프로퍼티 지정자 노출하기
UFUNCTION 프로퍼티 지정자로 표시되고 플로트 데이터 값을 포함한 모든 메서드의 경우 낮은 정밀도 플로트로 블루프린트 플로트 값이 형변환되므로 부정확할 위험이 있습니다. 기존 UFUNCTION 프로퍼티는 모두 검사해야 합니다. 이는 이후 정밀도 문제를 방지하기 위해 파라미터 또는 반환 값을 더블로 전환하는 게 필요한지 여부를 결정하는 데 도움이 됩니다. 플로트 및 더블 타입 간의 전환은 언제든, 어느 방향으로든 안전합니다.
이는 코드로 생성하거나 노출한 모든 K2 노드에 적용됩니다.
렌더링
언리얼 엔진에는 오브젝트가 월드에 존재할 수 있는 방식을 설명하는 다양한 좌표 공간과 트랜스포메이션이 있습니다. 월드 스페이스 (레벨/월드의 좌표) 및 로컬 스페이스 (특정 오브젝트 기준) 그리고 추가 정보는 좌표계 용어집 문서를 참조하세요.
프로젝트의 월드에 배치할 수 있는 각 오브젝트에는 3개의 좌표 축, 오리엔테이션, 원점이 있습니다. 추가 정보는 액터 트랜스폼하기를 참조하세요.
셰이더
대규모 월드 좌표와 함께 도입된 새로운 HLSL 타입은 LargeWorldCoordinates.ush
파일에서 찾을 수 있습니다. 셰이더 코드를 UE5로 변환하는 방법에 대한 자세한 정보는 LWC 렌더링 문서를 참조하세요.
나이아가라
나이아가라의 구현 방식은 메인 엔진의 구현 방식과 다릅니다. 파티클 이펙트의 퍼포먼스를 유지하기 위해 데이터는 더블을 사용하는 대신 플로트 세트로 저장됩니다. 충분히 규모가 큰 월드는 그리드 셀로 나누어집니다. 그러면 첫 번째 플로트는 해당 그리드 셀에서 나이아가라 시스템을 정의하고, 두 번째 플로트는 시스템이 어떤 그리드 셀에 있는지 나타냅니다.
이러한 추가 정보를 수용하기 위해 Particles.Position에 참조된 벡터를 저장하는 새로운 데이터 타입, 위치(Position)가 존재합니다. 추가 정보는 나이아가라의 대규모 월드 좌표 문서를 참조하세요.
카오스
카오스 디스트럭션 피직스는 더블 타입을 사용하여 삭제된 부분 없이 그대로 작동합니다. 엔진은 다음 예시처럼 두 방향으로 묵시적으로 형변환합니다.
FVector3f -> Chaos::FVec3!
그러나 명시적인 형변환은 오직 다음에서만 이루어집니다.
Chaos::FVec3 -> FVector3f
//이는 플로트로 다운그레이드할 때 발생하는 정밀도 손실을 잡아냅니다.
언리얼 엔진 5의 향후 출시 버전에서는 FVector 형변환을 통해 계속 플로트를 더블로 묵시적으로 업그레이드할 예정입니다. 더블을 플로트로 형변환하고 싶다면 명시적인 변환을 수행해야 합니다. 추가 정보는 대규모 월드 좌표 변환 가이드라인을 참조하세요.