Transforming existing assets to real world coordinates

We have an existing model of 10,000+ real world assets built on world coordinates in Unreal 5.3. We are gathering actual real world coordinates for the buildings and equipment locations and are looking for a method to transform these assets into the real world coordinate locations. Does anyone have any ideas on how to create user coordinate systems that would transform the coordinate system to be in alignment with the existing assets or a way to move all existing assets into their actual real world coordinate locations as a single entity? We’re trying to not to have to reimport all these assets with real world coordinates already attached. Let me know if anyone has any ideas on how to do this or have questions if I’m not explaining myself well enough.

Makes 0 sense.
To move the objects in the level you would either have to iterate through all of them or re-import them.

There is no “transforming” since Abra Kadabra isn’t a real thing and neither is Okety Pokety. Trust me. I wish it were… particularly when packing things.

Anyway, I guess you can try some Salgadula + Bibidi Bobidi… put them together and what have you left?

A ton of work that’s what…

Export the location of each object as a transform (location, rotation scale) as a CSV (but include the mesh name).

Modify the CSV in excel to compute an accurate value.

Save a new table with the right transforms for the engine to use.

Make a bluetility script that will iterate the rows, find the correct mesh (which if you have multiple of the same has already become impossible), assign the new location…

And very likely the end result is still going to be wrong since the Z values on earth are not the same across different spots in the globe like they are for Unreal.

If taking in Lidar data you either keep it the same (so you do get what the real world looks like and things will be far below/above the engine’s definition of 0) - Or you have to rebase and solve the altitude to remove it’s recorded accuracy in liew of a flat world standard.

Essentially there is no “real world coordinate” because you cannot make a real 1:1 copy (in this engine, in other engines and in DCC, yes, you could far more accurate than unreal would permit) in an engine that uses a completely different coordinate system than earth.

What you get is approximations that can either be great (done in excel and imported in, or taking lidar point clouds directly) or very poor (when just made in engine without considering the fact that the engine’s coordinate system is incompatible with real world data.

Btw, if you are doing anything scientific you really have to look for better engines. Even for archeology.

Im 99% certain that with things as they stand and a 100% accurate model of the Pantheon the engine would utterly fail to render in the details that comprise the whole while giving you the effect which the temple was built to provide.
Sure, for the avarage person who doesn’t know what to look at its probably no big deal… but for someone running a study, it is…

Thanks for your suggestions on this. I’ll file all the incantations and spells away for possible future use.
Fortunately, our area is only a few kilometers square and using plane projections so all assets will have the same ground plane. As you can see, I’m new to Unreal Engine and its capabilities so I didn’t know if one were able to create additional coordinate systems similar to CAD programs. A new coordinate system located and rotated to the correct position would also provide usable location information for the assets without actually moving them. It seems you suggest this isn’t possible though, so I’ll have to look into how to export the asset locations, correct the coordinates, and then reimport them into the model. Any suggestions on where I might look for explanations on how to do that?
Thanks

I would just use python and belender.

Or even the engine if you have the scene setup.

You can just make a script that prints string of what you need, and then take that information from fhe log file where it gets written via print string.

I dont think anyone wrote tutorials on doing stuff like this.

There is no way that i know of to get the objects to read a different location/rotation other than to move them.
World origin rebasing does this for location, but it won’t help your use case and does not offer rotation changes afaik.

I do have to ask - if the objects are in the correct place - what is the difference between what the engine tells you their location is, and what you know their location to be?
Since you are dealing with planar, things are easier overall.
You may be able to just make a little widget that converts the value for you to read internally what that value is without having to move stuff.
Not sure thats worth anything though since im not exaclty sure what you expect as the end result (and i would assume you have to move things for they do not match the data you have).

Thanks for the response, MostHost_LA. Since I am new to UE I’m trying discover what its capabilities are. If it had the ability to create User Coordinate Systems that would be the easiest solution since nothing would need to be moved and the coordinates could be directly read from the UCS which would have been created at the proper location and rotation.
Moving the thousands of assets to correct positions seems extremely tedious and, in some cases, impossible as you stated in your first response.
It is beginning to look like the best solution would be to leave the assets where they are and build a widget that would provide the corresponding real-world coordinates translated from the existing world coordinates in UE.
I’ll do some research into that suggestion. Thanks.

Sorry, I forgot to answer your question. The objects are in their approximately correct positions in relation to each other. They were placed there using lidar scans. We have also taken surveyed positions of these objects and want to use these higher precision points to correct the layout and eliminate the accumulation errors from the lidar scans. The surveyed positions are real world coordinates, and the model is just centered on the UE world coordinate origin.

I really think you need to ignore what Unreal says and just assume your values are correct.

Though I’m at a bit of a loss myself on how you would go about simple stuff like:
“adjust this wall by moving it by one meter to the east” - when you don’t really know what that means within the coordinates that Unreal uses.

Even with the widget reading out the conversion value for you, its pretty darn difficult to achieve the end goal of moving something to where it is accurate.
The widget will definitely help, and you’ll definitely get used to just knowing what direction etc, but the millimetric presion you’d get by re-importing Lidar defined objects will be near impossible to achieve by moving stuff by hand…

Really, I think you would be better off just re-importing the scene from the external DCC.

I would suggest you try doing so in a new project after you make the materials that the other project uses avaliable to it (copy and paste).

With the correct import settings your materials will be auto selected while each mesh imports.

I have a couple of temples built specifically to pass into different engines; the shaders in each engine are the hardest part to import just because there really is no standard (unless you evolve to HLSL and unreal isn’t friendly to custom USFs / still requires material instances and all that jazz).

Appreciate the feedback. I was able to create a parent static mesh, make all 10,000+ assets children of the parent and then rotate and transform everything as required. Once the parent is deleted the children remain in position. The biggest drawback to this is the assets had been grouped into category folders to make them easily invisible or visible and when made children to the new parent they lost their placement in the folders. They are now all root assets under the parent, so I’ll have recategorize them.

I’d suggest pulling that finalized list so you can iterate through things and add them back to folders.

You can levarage the engine’s Python scripting to do this. Essentially its what its meant for.

Do the script once, run it to extract folder names/linkage, do whatver, run it again to restore the linkage…