You’re on the right track. What Cesium for Unreal calls the “ellipsoid centered” frame is ECEF / ITRF. However, the “Unreal World” might be surprising. It’s not relative to the normal UE world coordinates, but rather to UE’s absolute origin. The location of the local UE world in the absolute coordinate frame is specified by the OriginLocation property of UWorld. By default, as the camera moves, the CesiumGeoreference moves the OriginLocation to stay near the camera. This helps preserve precision and avoid jittering artifacts.
So if you have a position vector expressed in ECI, and you want to find its position in the normal UE world coordinates, you need to apply the following transformations in order:
- ECI → ECF
- ECF → UE absolute world (GetEllipsoidCenteredToUnrealWorldTransform)
- UE absolute world → UE local world (subtract UWorld::OriginLocation)
As a quick way to confirm that the local/absolute UE world coordinates are causing the drift you’re seeing, you can disable the “KeepWorldOriginNearCamera” property of the CesiumGeoreference. If you do that, the OriginLocation property should always be a zero vector (as long as nothing else in your level is changing the origin).