Point Cloud Plugin

Hello, I am unable to get the plugin working on the Linux version of Unreal Engine and was wondering if anyone else had any ideas/advice for me?

Following the instructions on the official website:

  • I close the editor
  • I create a plugins folder in my project and copied in the PointCloudPlugin folder
  • I then reopen my project. When the project opens I am greeted by a pop up “Project file is out of date. would you like to update it?” and I click udpate

From this point I am able to view the PointCloudPlugin entry in the plugin list inside of the editor, however I am only able to view the “PointCloudPlugin Content” folder in the content browser. I have ensured that I have the “Show C++ Classes” viewing option enabled. I am also unable to create any variables defined in the plugin.

Digging into the PointCloudPlugin.uproject file I find that the plugins “SupportedTargetPlatforms” is win64, and that the two modules included in the plugin are whitelisted for win64. I then tried to remove the whitelisting of the modules (figured it was worth a try). and when I open the project once more a popup informs me that it PointCloudRuntime and PointCloudEditor need to be rebuilt. The following compile errors then appear:


/home/vr-pc/Documents/Unreal Projects/PCLtest/Plugins/PointCloudPlugin/Source/PointCloudRuntime/Public/IO/PointCloudFileIO_LAS.h:280:22: error: ISO C++11 does not allow conversion from string literal to 'char *' -Werror,-Wwritable-strings]
                SystemIdentifier = "Unreal Engine 4";
                                   ^
/home/vr-pc/Documents/Unreal Projects/PCLtest/Plugins/PointCloudPlugin/Source/PointCloudRuntime/Public/IO/PointCloudFileIO_LAS.h:283:24: error: ISO C++11 does not allow conversion from string literal to 'char *' -Werror,-Wwritable-strings]
                GeneratingSoftware = "Point Cloud Plugin";
                                     ^
In file included from /home/vr-pc/Documents/Unreal Projects/PCLtest/Plugins/PointCloudPlugin/Intermediate/Build/Linux/B4D820EA/UE4Editor/Development/PointCloudRuntime/Module.PointCloudRuntime.cpp:5:
In file included from /home/vr-pc/Documents/Unreal Projects/PCLtest/Plugins/PointCloudPlugin/Source/PointCloudRuntime/Private/IO/PointCloudFileIO_LAS.cpp:3:
/home/vr-pc/Documents/Unreal Projects/PCLtest/Plugins/PointCloudPlugin/Source/PointCloudRuntime/Public/IO/PointCloudFileIO_LAS.h:280:22: error: ISO C++11 does not allow conversion from string literal to 'char *' -Werror,-Wwritable-strings]
                SystemIdentifier = "Unreal Engine 4";
                                   ^
/home/vr-pc/Documents/Unreal Projects/PCLtest/Plugins/PointCloudPlugin/Source/PointCloudRuntime/Public/IO/PointCloudFileIO_LAS.h:283:24: error: ISO C++11 does not allow conversion from string literal to 'char *' -Werror,-Wwritable-strings]
                GeneratingSoftware = "Point Cloud Plugin";
                                     ^
In file included from /home/vr-pc/Documents/Unreal Projects/PCLtest/Plugins/PointCloudPlugin/Intermediate/Build/Linux/B4D820EA/UE4Editor/Development/PointCloudRuntime/Module.PointCloudRuntime.cpp:14:
/home/vr-pc/Documents/Unreal Projects/PCLtest/Plugins/PointCloudPlugin/Source/PointCloudRuntime/Private/Rendering/PointCloudRendering.cpp:72:34: warning: declaration shadows a field of 'FPointCloudCollisionRendering' -Wshadow]
                void Initialize(FVertexBuffer* VertexBuffer)
                                               ^
/home/vr-pc/Documents/Unreal Projects/PCLtest/Plugins/PointCloudPlugin/Source/PointCloudRuntime/Private/Rendering/PointCloudRendering.cpp:133:4: note: previous declaration is here
        } VertexBuffer;
          ^

I am able to fix the errors that occur in PointCloudFileIO_LAS.h and can ignore the warning about PointCloudRendering.cpp. When I attempt to recompile I now reach these errors:


/home/vr-pc/UnrealEngine/Engine/Extras/ThirdPartyNotUE/SDKs/HostLinux/Linux_x64/v14_clang-8.0.1-centos7/x86_64-unknown-linux-gnu/bin/x86_64-unknown-linux-gnu-ld: /home/vr-pc/Documents/Unreal Projects/PCLtest/Plugins/PointCloudPlugin/Intermediate/Build/Linux/B4D820EA/UE4Editor/Development/PointCloudEditor/Module.PointCloudEditor.cpp.o: in function `FPointCloudEditor::SelectPointsByFrustum(FConvexVolume const&, bool)':
/home/vr-pc/Documents/Unreal Projects/PCLtest/Plugins/PointCloudPlugin/Source/PointCloudRuntime/Public/PointCloud.h:204: undefined reference to `FPointCloudOctree::GetPointsInFrustum(TArray<FPointCloudPoint*, TSizedDefaultAllocator<32> >&, FConvexVolume const&, bool const&) const'
/home/vr-pc/UnrealEngine/Engine/Extras/ThirdPartyNotUE/SDKs/HostLinux/Linux_x64/v14_clang-8.0.1-centos7/x86_64-unknown-linux-gnu/bin/x86_64-unknown-linux-gnu-ld: /home/vr-pc/Documents/Unreal Projects/PCLtest/Plugins/PointCloudPlugin/Source/PointCloudRuntime/Public/PointCloud.h:204: undefined reference to `FPointCloudOctree::GetPointsInFrustum(TArray&lt;FPointCloudPoint*, TSizedDefaultAllocator&lt;32&gt; &gt;&, FConvexVolume const&, bool const&) const'
/home/vr-pc/UnrealEngine/Engine/Extras/ThirdPartyNotUE/SDKs/HostLinux/Linux_x64/v14_clang-8.0.1-centos7/x86_64-unknown-linux-gnu/bin/x86_64-unknown-linux-gnu-ld: /home/vr-pc/Documents/Unreal Projects/PCLtest/Plugins/PointCloudPlugin/Intermediate/Build/Linux/B4D820EA/UE4Editor/Development/PointCloudEditor/Module.PointCloudEditor.cpp.o: in function `FPointCloudEditor::DeselectPointsByFrustum(FConvexVolume const&)':
/home/vr-pc/Documents/Unreal Projects/PCLtest/Plugins/PointCloudPlugin/Source/PointCloudRuntime/Public/PointCloud.h:204: undefined reference to `FPointCloudOctree::GetPointsInFrustum(TArray&lt;FPointCloudPoint*, TSizedDefaultAllocator&lt;32&gt; &gt;&, FConvexVolume const&, bool const&) const'
/home/vr-pc/UnrealEngine/Engine/Extras/ThirdPartyNotUE/SDKs/HostLinux/Linux_x64/v14_clang-8.0.1-centos7/x86_64-unknown-linux-gnu/bin/x86_64-unknown-linux-gnu-ld: /home/vr-pc/Documents/Unreal Projects/PCLtest/Plugins/PointCloudPlugin/Intermediate/Build/Linux/B4D820EA/UE4Editor/Development/PointCloudEditor/Module.PointCloudEditor.cpp.o: in function `FPointCloudEditor::DeletePoints()':
/home/vr-pc/Documents/Unreal Projects/PCLtest/Plugins/PointCloudPlugin/Source/PointCloudRuntime/Public/PointCloud.h:436: undefined reference to `FPointCloudOctree::RemovePoints(TArray&lt;FPointCloudPoint*, TSizedDefaultAllocator&lt;32&gt; &gt;&)'
/home/vr-pc/UnrealEngine/Engine/Extras/ThirdPartyNotUE/SDKs/HostLinux/Linux_x64/v14_clang-8.0.1-centos7/x86_64-unknown-linux-gnu/bin/x86_64-unknown-linux-gnu-ld: /home/vr-pc/Documents/Unreal Projects/PCLtest/Plugins/PointCloudPlugin/Intermediate/Build/Linux/B4D820EA/UE4Editor/Development/PointCloudEditor/Module.PointCloudEditor.cpp.o: in function `FPointCloudEditor::HidePoints()':
/home/vr-pc/Documents/Unreal Projects/PCLtest/Plugins/PointCloudPlugin/Source/PointCloudRuntime/Public/PointCloud.h:338: undefined reference to `FPointCloudOctree::MarkPointVisibilityDirty()'
/home/vr-pc/UnrealEngine/Engine/Extras/ThirdPartyNotUE/SDKs/HostLinux/Linux_x64/v14_clang-8.0.1-centos7/x86_64-unknown-linux-gnu/bin/x86_64-unknown-linux-gnu-ld: /home/vr-pc/Documents/Unreal Projects/PCLtest/Plugins/PointCloudPlugin/Intermediate/Build/Linux/B4D820EA/UE4Editor/Development/PointCloudEditor/Module.PointCloudEditor.cpp.o: in function `FPointCloudEditor::UnhideAll()':
/home/vr-pc/Documents/Unreal Projects/PCLtest/Plugins/PointCloudPlugin/Source/PointCloudRuntime/Public/PointCloud.h:277: undefined reference to `FPointCloudOctree::UnhideAll()'
/home/vr-pc/UnrealEngine/Engine/Extras/ThirdPartyNotUE/SDKs/HostLinux/Linux_x64/v14_clang-8.0.1-centos7/x86_64-unknown-linux-gnu/bin/x86_64-unknown-linux-gnu-ld: /home/vr-pc/Documents/Unreal Projects/PCLtest/Plugins/PointCloudPlugin/Intermediate/Build/Linux/B4D820EA/UE4Editor/Development/PointCloudEditor/Module.PointCloudEditor.cpp.o: in function `FPointCloudEditorViewportClient::InputKey(FViewport*, int, FKey, EInputEvent, float, bool)':
/home/vr-pc/Documents/Unreal Projects/PCLtest/Plugins/PointCloudPlugin/Source/PointCloudRuntime/Public/PointCloud.h:338: undefined reference to `FPointCloudOctree::MarkPointVisibilityDirty()'
/home/vr-pc/UnrealEngine/Engine/Extras/ThirdPartyNotUE/SDKs/HostLinux/Linux_x64/v14_clang-8.0.1-centos7/x86_64-unknown-linux-gnu/bin/x86_64-unknown-linux-gnu-ld: /home/vr-pc/Documents/Unreal Projects/PCLtest/Plugins/PointCloudPlugin/Intermediate/Build/Linux/B4D820EA/UE4Editor/Development/PointCloudEditor/Module.PointCloudEditor.cpp.o: in function `UE4Function_Private::TFunctionRefCaller<FPointCloudEditor::BuildPointCloudStatistics()::$_0, FText ()>::Call(void*)':
/home/vr-pc/Documents/Unreal Projects/PCLtest/Plugins/PointCloudPlugin/Source/PointCloudRuntime/Public/PointCloud.h:170: undefined reference to `FPointCloudOctree::GetNumPoints() const'
/home/vr-pc/UnrealEngine/Engine/Extras/ThirdPartyNotUE/SDKs/HostLinux/Linux_x64/v14_clang-8.0.1-centos7/x86_64-unknown-linux-gnu/bin/x86_64-unknown-linux-gnu-ld: /home/vr-pc/Documents/Unreal Projects/PCLtest/Plugins/PointCloudPlugin/Intermediate/Build/Linux/B4D820EA/UE4Editor/Development/PointCloudEditor/Module.PointCloudEditor.cpp.o: in function `UE4Function_Private::TFunctionRefCaller<FPointCloudEditor::BuildPointCloudStatistics()::$_1, FText ()>::Call(void*)':
/home/vr-pc/Documents/Unreal Projects/PCLtest/Plugins/PointCloudPlugin/Source/PointCloudRuntime/Public/PointCloud.h:173: undefined reference to `FPointCloudOctree::GetNumNodes() const'
/home/vr-pc/UnrealEngine/Engine/Extras/ThirdPartyNotUE/SDKs/HostLinux/Linux_x64/v14_clang-8.0.1-centos7/x86_64-unknown-linux-gnu/bin/x86_64-unknown-linux-gnu-ld: /home/vr-pc/Documents/Unreal Projects/PCLtest/Plugins/PointCloudPlugin/Intermediate/Build/Linux/B4D820EA/UE4Editor/Development/PointCloudEditor/Module.PointCloudEditor.cpp.o: in function `UPointCloud::SetData(TArray<FPointCloudPoint*, TSizedDefaultAllocator<32> >&)':
/home/vr-pc/Documents/Unreal Projects/PCLtest/Plugins/PointCloudPlugin/Source/PointCloudRuntime/Public/PointCloud.h:457: undefined reference to `bool UPointCloud::SetData&lt;FPointCloudPoint**&gt;(FPointCloudPoint**, long long const&, TFunction&lt;void (float)&gt;)'



The official website says that the plugin has been tested on Linux by users so am I misunderstanding how to install the plugin? I am new to Unreal Engine so it is possible. Thanks in advance to anyone who can help me!

System info:
Linux Version: 16.04 *
UE4 Version: 4.23
PointCloudPlugin version:
0.7-4.23*

Hi @harveystedman

The latest version has not been tested with Linux yet and I have had few reports regarding it not compiling - it’s not just you :slight_smile:
I will be looking into the fix soon.

Apologies for the inconvenience and confusion!

Hello, after updating the plugin from 0.6 to 0.7. I’ve ran into a few issues with my existing blueprints. These following blueprint actions are now obsolete, what are the replacements for them? The bottom one used to be “Make PointCloudRender Method”.

Thanks.

Hi,

There is no explicit **Points **/ **Sprites **switch anymore. Use Point Size property instead - if set to 0 it will switch to what used to be a **Points **render mode.
There is no explicit **Unlit **mode either. Instead, use Gain property under Color Adjustment section - it directly controls the emissive component, and if set to 1, it will act like an old **Unlit **mode.

Hope this helps!

Hi @, thank you for getting back to me. Glad to hear I’m not going crazy. Looking forward to when I get the chance to use the plugin!

Are there any pre–requisites for packaging a scene with the plugin?

Receiving packaging errors on an empty scene with a handful of point clouds present, using v0.7b (4.23).

Not in the plugin, however, we have found that the packaging process of the engine doesn’t like large asset files - this starts showing up once the cloud gets to about 230-250M or more. Fix is in the works :slight_smile:

Does this fit your scenario?

Individually point cloud assets don’t reach that value, but they do in the total amount of points across all assets being packaged. Presumably this causes an issue too?

No, that should not cause an issue (at least as far as we tested it).
Any chance you could send me the project for testing?

Hi, I can’t seem to get color from my .XYZ point cloud from reality capture in Unreal 4.23. It only shows white point clouds.

Please kindly help me

Hi there.

What format are you using to import the cloud?
Does it contain RGB data?
If not, what color information do you want to use?

I’ll PM you the point cloud files.

Hi, thanks for taking a look.

Imported clouds using XYZ — E57 in future would be nice.
RGB data saved in point cloud.

Thanks, will take a look.
E57 is planned :slight_smile:

Point Cloud Plugin v0.7.1](http://pointcloudplugin.com)
Release Notes

Fixes

  • Fixed Viewport not showing, if upgrading from an earlier version
  • Fixed errors when packaging project with a larger collider
  • Fixed crash when trying to dynamically load PC in Standalone
  • Fixed Create from ASCII node missing async outputs
  • Fixed hidden points being included when building collision
  • Fixed missing option to remove collision
  • Fixed crash when deleting visible cloud with a collider enabled
  • Fixed collision mesh preview data not being stripped when cooking
  • Fixed errors when compiling for Linux
  • Fixed crash when the point budget is set too high
  • Fixed modifying collision not flagging assets as dirty
  • Fixed issues with cloud centering
  • Fixed a few UI issues

Love the plugin. Is the collision taking into account every point or some lower sampling distribution?

I have a need to compare each point to a collision object in the world, separate out those that penetrate it (it’s an inclined plane) and colorize them, and set them into their own cloud.

Can this be done through this plugin? I dont mind diving into the code but I thought I’d ask to see how much work it may be.

I also then have to export those points to file, but not with ue4 coordinates but rather those that correspond to the cloud geolocation originally assigned. Also would love to add another column to the export that represents metadata of some kind (property owner name, tax info…etc.).

Any insight would be appreciated!

Great job so far guys.

Thanks!

All of them

The closest thing I can think of, that’s already in, would be to use GetPointsInFrustum - using your plane as the near plane. However, if collision performance is crucial, implementing a simple plane intersection test may be a little faster.

Add a variant of GetPointsInFrustum, which returns the points as copies instead of pointers (look at FPointCloudOctree::GetPointsInBox and FPointCloudOctree::GetPointsAsCopyInBox for reference).

Once you have the array of points, just iterate over them and assign the desired color.

Finally, use UPointCloud::CreateFromData to generate the new cloud.

Set the OriginalCoordinates of the new cloud to the value of the original cloud. This will be automatically added to the data during export :slight_smile:

There is no built-in way to add custom columns at this point. You will need to have a look at UPointCloudFileIO_ASCII::HandleExport to add the extra columns.

Thanks again! :slight_smile:

If you need further help, find me on the Discord chat - will be faster that way :slight_smile:

Thanks for all your work with the plugin. I was wondering if you would know how to dynamically import point clouds based on its number of columns, as some contain only XYZ values, some contain RGB, normals, intensity, etc. Thanks.

By default, the importer assumes columns to be in XYZ RGB Intensity order, and if you use Create Point Cloud From File node or UPointCloud::CreateFromFile, this is how it will attempt to import the data.

However, you can override the default behavior by using Create Point Cloud From File (ASCII) node or, if using C++, setting up *ImportSettings *parameter for *UPointCloud::CreateFromFile *(look at how UPointCloudFileIO_ASCII::CreatePointCloudFromFile does it for reference).

In there, you can modify the default mapping by providing the desired order of data to use.
So if your data contains XYZ Normals RGB, you would have to specify the following:
LocationX = 0
LocationY = 1
LocationZ = 2
Red = 6
Green = 7
Blue = 8
Intensity = -1

Note the -1 for Intensity - this would instruct the Intensity to be skipped.

Also, if the index is larger than the number of available columns, it will be skipped. For example, if the cloud is only XYZ, but you use the default mapping (XYZ RGB I), it would still apply the XYZ data correctly, then skip RGB and Intensity sources (as their specified Indices will be unavailable).

I hope I understood the question correctly and this answers it :slight_smile:

Yes thank you this was very helpful.