Point Cloud Plugin

Are the tiles already imported and streamed in with another level, or do you start the import process when getting close?

A sample project would be great - thanks!

I just create new empty map, drag and drop point cloud into, save map and that is one tile. Then is positioned in world map tiles. And that tile/map is automatically loaded when I will getting close.

Hmm, so I was created the new project in a UE 4.27 (my project is in 4.26) and there is everything smooth. So problem will be in old UE or some settings or in my project. I will try to upgrade to 4.27 and investigate further possible problems.

Well, my project is smooth in the 4.27, so its everything ok :slight_smile:

One more question: is there any way how to change pointcloud settings in the blueprints in runtime (point size, shape etc.)?

@ BTW, how do you imported that hundred example files? Somewhat automatically? When I will import two point clouds into two tile maps then each tile is on different height and I have to manually position them. How you did it?

Function for align point clouds will move their pivot outside of their center but that will cause harder management (if will be moved by few kilometers away from the centre, then I will not even find it in the viewport) and I think there will be problem when the pivot will be very far from the center of level tile (maximum level size?). Also is impossible to align new tile to the already aligned tiles. I would like to have function that will align only Z axis, so the point clouds would be always on the center of level tile. Is that possible?

Hi

Glad you got it working under 4.27 :slight_smile:

Yes, you can change all those parameters via BP at runtime.

Re aligning
In the Content Browser, select all cloud tiles you want aligned, then right-click and just hit align. This will use their original pivot points to shift the locations, but maintain the overall center around point 0,0,0 so that the offset isn’t too far, causing issues.
Alternatively, if you’re working with assets at runtime, there is an AlignClouds function in C++ and BP, where you can pass a list of assets you want aligned

@ And how I can change that parameters (point size etc.) via BP? I can’t found it anywhere.

That aligning function is not suitable for me. Could be added possibility to get/set coords X, Y, Z in blueprints? That would solved everything for me. I need to set X and Y to 0 and keep original Z.

The parameter is found on Lidar Point Cloud Component - when you have the Actor’s reference, simply drag a pin from it and search for GetPointCloudComponent node. From there, you should be able to manipulate all parameters.

You could align them the way you mentioned, but you’d need to do that from C++. BP in UE4 do not work with the variable types, which are used to store the original coordinates.

@ Thanks, it is needed to uncheck “context sensitive”, that is reason why I did not found it.

And is there any way how to automatically position mesh to the center of aligned cloud in BP?

Not quite sure what you mean.
You can get the location of the point cloud actor (and bounds of the asset itself, if not centered), and simply use it to position your mesh

Hi there,

I’m using the built-in LiDAR plugin in UE 4.27, but somehow when importing a point cloud, the Y-coordinates get a negative value. This happens with .las .pts and .e57 files. When viewing the point cloud in Recap, the coordinates are correct (see attached file).

Did I miss something while importing?

Hi @Lionhouse_NL
Can’t remember now if Recap has the XYZ axes pointing in the same directions as the ones in UE - could you please confirm that? I assume they may have the Y axis flipped, hence the plugin is compensating by flipping the sign on the coordinate

@ Thanks, it works.

BTW, I have problems in the packaged game, it crashing when loading streaming levels is slow. The crash messages are various, for example this:

Fatal error: [File:D:/Build/++UE4/Sync/Engine/Source/Runtime/PakFile/Private/IPlatformFilePak.cpp] [Line: 3846] LiveRequests.Num or NumLiveRawReqeusts was > 0 in ~FPakAsyncReadFileHandle!

UtrzenyVejfuky!FPakAsyncReadFileHandle::~FPakAsyncReadFileHandle()
UtrzenyVejfuky!FPakAsyncReadFileHandle::`vector deleting destructor'()
UtrzenyVejfuky!FLidarPointCloudOctree::~FLidarPointCloudOctree()
UtrzenyVejfuky!ULidarPointCloud::`vector deleting destructor'()
UtrzenyVejfuky!FAsyncPurge::TickPurge()
UtrzenyVejfuky!FProperty::ImportText_Internal()
UtrzenyVejfuky!IncrementalPurgeGarbage()
UtrzenyVejfuky!CollectGarbageInternal()
UtrzenyVejfuky!TryCollectGarbage()
UtrzenyVejfuky!UEngine::ConditionalCollectGarbage()
UtrzenyVejfuky!UWorld::Tick()
UtrzenyVejfuky!UGameEngine::Tick()
UtrzenyVejfuky!FEngineLoop::Tick()
UtrzenyVejfuky!GuardedMain()
UtrzenyVejfuky!GuardedMainWrapper()
UtrzenyVejfuky!LaunchWindowsStartup()
UtrzenyVejfuky!WinMain()
UtrzenyVejfuky!__scrt_common_main_seh() [d:\agent\_work\2\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:288]
kernel32
ntdll

Do you know how to fix that (some settings somewhere)? Because in the editor it is ok, only problem is in the packaged game. If I walking slowly through the levels, then it will not crash, because harddisk is not busy.

Hard to say, we’ve done some fixes to how the data is being streamed when we were porting the plugin to Twinmotion, but a majority of those will not be eligible for a hotfix update.

In that case, I can try to put together a custom version with those fixes for you at some point. Keep in mind this would not be an officially supported build, however :wink:

@ Yes please, make that custom version. Currently I cannot release the game because it will crash soon or later. Only on SSD with low point bucked settings is possible to play a while.

BTW, I tried that setting point size etc. in blueprints and ended with this solution: I have to add this code into level blueprint of the all levels.


Need to send pointcloud reference of currently loaded level into gamemode where I will set the point settings. Isn’t there any better way how to do it instead to manually add this code into 1000 levels? I want to give players possibility to change these values in the game (not to hardcode it). Would be nice to have some global settings for all pointclouds, like “r.LidarPointBudget”.

My time is currently very limited, so the custom version may take a while.

Re point size - Maybe try something like GetAllActorsOfType when the user changes the setting and apply it there.

It looks like Recap is pointing up correctly. I don’t think Recap is the problem, it is showing the coordinates correctly (with positive y-values, which is correct according to the location of the project) for the original .las file (this file comes straight from a lidar scanner). The y-values get a negative value when importing the *.las file into Unreal. I’ve also tried to import a .pts and .e57 file into Unreal, same result, negative y-values.

What to do now? I’m pretty sure the lidar files are correct.

edit I’ve converted the .las file to .txt. All y-values are positive, but when I import this .txt file into Unreal, all y-values are negative. What’s the place to report a bug for this plugin?
lidar-txt

I think you misunderstood me regarding the Y axis - I’m not suggesting it’s incorrect in Recap.

Different software packages may handle the direction of the axis differently. See this link for more info: https://www.techarthub.com/a-practical-guide-to-unreal-engine-4s-coordinate-system/

It seems Recap’s Y axis is pointing the opposite way of UE’s, hence why the plugin is flipping the coordinate.

As for the bug reporting, the plugin is maintained as part of the engine so you can use the normal bug reporting here: Report a Bug - Unreal Engine

Thanks for clarifying, this helps a lot :slight_smile:
So if I’m correct, I have to convert the pointcloud from right-handed to left-handed, which means multiplying all Y values by -1?