On, https://pointcloudplugin.com/downloads the download for 0.7.1-4.22 links to 0.7.1-4.21 version. Is this intended behaviour?
Oops, must have missed it, thanks!
Fixed now.
Apologies for the inconveniences but I have another question. Some of the point clouds I import are a little bit offset in terms of its position (this is the issue of the imported point clouds themselves, their origin point is different from where the point cloud begins). Is there a way to get the position of the actual point cloud and set it to the origin to accommodate for any offsets? Thanks.
No need to apologize!
I hope I understood you correctly - in this case, you can either turn the centering off (which will shift the cloud to its original position) or use the OriginalCoordinates property from C++ to get the offset used for centering of the cloud.
Is there an option to change the position of point cloud points in realtime and fast?
Iām thinking about gathering image data from a depth sensor and display it as a point cloud via this plugin.
The simplest way would be to run Empty + Insert Points on each update, however, this wonāt be applicable to a larger set of data.
If the data location doesnāt change too much between updates, simply modifying the Location parameter of points will result in their update on the screen. Look into ExecuteActionOnā¦ series of functions to apply modifications (see https://pointcloudplugin.com/using-point-selection for examples). I strongly suggest performing all such data modifications from C++, due to it being performance-critical. Keep in mind, however, that this may produce LOD artifacts if the updated locations vary too much from the original.
If this approach doesnāt work for you, let me know, and Iāll explain a bit more hackish solution
Can I acces individual points directly via a point index?
From the depth sensor I will be getting an array of depth values (index calculated from x,y cooridnate), and using point selection or Empty+Insert seems it will be too slow for running in realtime. I need to update the locations of all the points (640x480 or more of them) several times per second and lookinf for the best FPS I can get.
Hereās an example of what Iām trying to achieve:
This one is implemented via StaticMesh objects (each for one depth point) and the point cloud implementation Iām looking for doesnāt necesarilly need to have collision and interaction with other objects (although it would be a bonus if it could).
As a slight spin off from handling point cloud data, I assume as this tool is efficient at handling large amounts of point data, would there be a way to leverage its functionality for working with voxel data? Possibly using HISM to help manage performance for voxel elements that could be instantiated per point.
Basically using the point cloud data structure for voxels. Does this sound feasible or even implementable with the current plugin?
Due to how the data is stored internally, unfortunately, no. But you could get the next best thing doing the following:
- Get the first frame of data
- Generate the initial cloud from it
- Get pointers to all points
- Update locations of those pointers with the new data
Overall, something like this:
// You would only do it once after the cloud has been initially created
// Get an array of pointers to all points in the cloud
TArray<FPointCloudPoint*> Points = MyCloud->GetPoints();
// Below you would do per frame
{
// Grab the pointer to the data - to speed up iteration
FPointCloudPoint** DataPtr = Points.GetData();
for(int32 x = 0; x < 640; ++x)
{
for(int32 y = 0; y < 480; ++y)
{
// Here, you would update the location data
(*DataPtr)->Location = GetNewLocation(x, y);
// Iterate to the next point;
++DataPtr;
}
}
}
Hi !
If you need to work with large data sets, I would concentrate on optimizing for memory and performance as much as possible. As such I would rather use a dedicated solution to leverage all available advantages of different properties of voxels (uniform size, grid-based location, solid surfaces, etc.). While there might be some overlap in terms of a high-level approach, the implementations would be tailored.
Have you seen the Voxel Plugin (https://voxelplugin.com/)? I havenāt used it personally, but if you want to kickstart your project or make some initial prototypes, that could be a good starting point
Thanks for the suggestion. Am aware of the plugin but not yet tested it out. Will have a look at that in the first instance for what Iām looking to do.
āāāāā
Hey, First of all, thanks a lot for this great plugin! It opens so many possibilities.
I have two questions: I want to create a runtime point cloud loader. The point clouds are located in an absolute coordinate system as I also introduce overlapping vector data. The problem I have to solve is, how to spawn the camera at the location of the loaded point cloud. Is there a possibility to extract e.g. the center point of a cloud / the first row of the file to set the actor location according to these coordinate? Using something like ācenter massā did not work as the origin of the point cloud is always 0,0,0.
The second question is about creating a measurement tool for the user. For this I need to build collisions. But even when setting an accuracy of 10 cm, the collision shows an offset to the points, is that intended? Further, is there a tutorial how to create a measurement function or is it planned to be included in a future release?
Thank you already and many greetings,
Hi , thanks for the feedback!
Try using the GetBounds function of the Point Cloud object.
Very possible. This parameter determines the maximum deviation distance of the collision mesh from the actual point.
I think a better approach here would be to use the dedicated point cloud LineTrace function (there are single and multi variants).
UPointCloudBlueprintLibrary::LineTraceXXXXXX - will consider all point cloud components in the level (Blueprint equivalent - Line Trace (Multi) For Point Cloud)
UPointCloud::LineTraceXXXXXX - will only consider that one point cloud object (for Blueprint equivalent, drag a wire from the Point Cloud object and use Line Trace XXXX)
Iām afraid there is no dedicated measuring tool at this time - Iāll add it as a feature request to the list, thanks!
Thank you for the very quick reply! āGet Component Boundsā resolved the issue very easily
Regarding the measurement advises, I am gonna try to implement that, thank you for the hints!
The plugin has now been moved to the Marketplace:
For further documentation, visit the official website:
Looks awesome, do you have any plans for a version 4.22 release?
Not for the Marketplace release. The last version supporting 4.22 is the 0.7.1 - available only upon request at this point
Hi @ ,
I have seen it on the marketplace under the name of Epic Games, so I suppose you are now working with them! Congratulations!
In addition I would want to ask you for a question: is it compatible with other point clouds generated with photogrammetry softwares? (not laser scans, but photography based, like Reality Capture, Agisoft Photoscan/Metashape, etc).
Thank you and best regards!
Hi @Miguel1900, and thanks!
Yes, the plugin has been acquired by Epic and we have now combined efforts to make it the best it can be!
As long as it generates a list of points in one of the supported formats (currently LAS, XYZ, PTS, and TXT) you should be able to import it just fine
Great to hear, thanks for your work on the development of the plugin ā it has proven to be incredibly useful.