Point Cloud Plugin

Hey,

I have a feature request: the plugin currently only imports the RGB channels for the vertex colours. Would it be possible to get the 4th channel too (alpha)?

It would be really useful to be able to have a fourth data channel in there, because it could be used to drive certain effects in the material. Just a thought.

Thanks!

Hi and thanks for the feedback!

I’m experimenting with something that might end up using the alpha channel for other purpose but if not, then It’s certainly possible and I will add it to the next release :slight_smile:

Awesome!

Or perhaps there is an alternative / better way to get different amounts of rotation for each point that you can think of?

Depends on what you’re trying to achieve. How many axes of rotation? Random or specific rotation?
For random you can use things like world position / color component etc.

Ah, you’re right, I can actually achieve what I want by just using/combining the RGB colour channels - oops! Thanks!

No problem :slight_smile: Glad I could help.

Hey guys just out of curiosity, what would you use to export a point cloud that has information stored in an alpha channel? This is in regard to @anonymous_user_a786c057 earlier question for @.

Hey guys just out of curiosity, what would you use to export a point cloud that has information stored in an alpha channel? This is in regard to @anonymous_user_07ba773b earlier question for @.
[/QUOTE]

I’m producing my point clouds with Houdini, so it’s just a case of adding an alpha channel manually with whatever data I want. If you wanted to add an alpha channel to a point cloud you had in CSV, that would be pretty easy to do in Houdini too.

@ I’m occasionally getting errors when trying to build a project using this plugin. Here is the relevant bit from the log:


UATHelper: Packaging (Windows (64-bit)):   LogInit: Display: LogOutputDevice: Error: begin: stack for UAT
UATHelper: Packaging (Windows (64-bit)):   LogInit: Display: LogOutputDevice: Error: === Handled ensure: ===
UATHelper: Packaging (Windows (64-bit)):   LogInit: Display: LogOutputDevice: Error:
UATHelper: Packaging (Windows (64-bit)):   LogInit: Display: LogOutputDevice: Error: Ensure condition failed: MyOwnerWorld [File:D:\Build\++UE4+Release-4.18+Compile\Sync\Engine\Source\Runtime\Engine\Private\Components\ActorComponent.cpp] [Line: 1030]
UATHelper: Packaging (Windows (64-bit)):   LogInit: Display: LogOutputDevice: Error: Stack:
UATHelper: Packaging (Windows (64-bit)):   LogInit: Display: LogOutputDevice: Error: [Callstack] 0x00000000D5A42786 UE4Editor-Core.dll!UnknownFunction ]
UATHelper: Packaging (Windows (64-bit)):   LogInit: Display: LogOutputDevice: Error: [Callstack] 0x00000000D57E123A UE4Editor-Core.dll!UnknownFunction ]
UATHelper: Packaging (Windows (64-bit)):   LogInit: Display: LogOutputDevice: Error: [Callstack] 0x00000000D57FB906 UE4Editor-Core.dll!UnknownFunction ]
UATHelper: Packaging (Windows (64-bit)):   LogInit: Display: LogOutputDevice: Error: [Callstack] 0x00000000BB0B0F58 UE4Editor-Engine.dll!UnknownFunction ]
UATHelper: Packaging (Windows (64-bit)):   LogInit: Display: LogOutputDevice: Error: [Callstack] 0x00000000AF2FA31A UE4Editor-PointCloudRuntime.dll!APointCloudActor::RebuildComponents() [c:\users\\documents\unreal projects\cosmosis\plugins\pointcloudplugin\source\pointcloudruntime\private\pointcloudactor.cpp:143]
UATHelper: Packaging (Windows (64-bit)):   LogInit: Display: LogOutputDevice: Error: [Callstack] 0x00000000AF2EFE2F UE4Editor-PointCloudRuntime.dll!TBaseUObjectMethodDelegateInstance<0,APointCloudActor,void __cdecl(void)>::ExecuteIfSafe() [c:\program files\epic games\ue_4.18\engine\source\runtime\core\public\delegates\delegateinstancesimpl.h:858]
UATHelper: Packaging (Windows (64-bit)):   LogInit: Display: LogOutputDevice: Error: [Callstack] 0x00000000AF2EB5BC UE4Editor-PointCloudRuntime.dll!TBaseMulticastDelegate<void>::Broadcast() [c:\program files\epic games\ue_4.18\engine\source\runtime\core\public\delegates\delegatesignatureimpl.inl:937]
UATHelper: Packaging (Windows (64-bit)):   LogInit: Display: LogOutputDevice: Error: [Callstack] 0x00000000AF2F9E4D UE4Editor-PointCloudRuntime.dll!UPointCloud::Rebuild() [c:\users\\documents\unreal projects\cosmosis\plugins\pointcloudplugin\source\pointcloudruntime\private\pointcloud.cpp:516]
UATHelper: Packaging (Windows (64-bit)):   LogInit: Display: LogOutputDevice: Error: [Callstack] 0x00000000BE32E8FD UE4Editor-CoreUObject.dll!UnknownFunction ]
UATHelper: Packaging (Windows (64-bit)):   LogInit: Display: LogOutputDevice: Error: [Callstack] 0x00000000BE3EDABC UE4Editor-CoreUObject.dll!UnknownFunction ]
UATHelper: Packaging (Windows (64-bit)):   LogInit: Display: LogOutputDevice: Error: [Callstack] 0x00000000BE405259 UE4Editor-CoreUObject.dll!UnknownFunction ]
UATHelper: Packaging (Windows (64-bit)):   LogInit: Display: LogOutputDevice: Error: [Callstack] 0x00000000BE404774 UE4Editor-CoreUObject.dll!UnknownFunction ]
UATHelper: Packaging (Windows (64-bit)):   LogInit: Display: LogOutputDevice: Error: [Callstack] 0x00000000B96568B3 UE4Editor-UnrealEd.dll!UnknownFunction ]
UATHelper: Packaging (Windows (64-bit)):   LogInit: Display: LogOutputDevice: Error: [Callstack] 0x00000000B968D7BB UE4Editor-UnrealEd.dll!UnknownFunction ]
UATHelper: Packaging (Windows (64-bit)):   LogInit: Display: LogOutputDevice: Error: [Callstack] 0x00000000B9527D61 UE4Editor-UnrealEd.dll!UnknownFunction ]
UATHelper: Packaging (Windows (64-bit)):   LogInit: Display: LogOutputDevice: Error: [Callstack] 0x00000000B954F391 UE4Editor-UnrealEd.dll!UnknownFunction ]
UATHelper: Packaging (Windows (64-bit)):   LogInit: Display: LogOutputDevice: Error: [Callstack] 0x000000008844D25F UE4Editor-Cmd.exe!UnknownFunction ]
UATHelper: Packaging (Windows (64-bit)):   LogInit: Display: LogOutputDevice: Error: [Callstack] 0x000000008844525A UE4Editor-Cmd.exe!UnknownFunction ]
UATHelper: Packaging (Windows (64-bit)):   LogInit: Display: LogOutputDevice: Error: [Callstack] 0x00000000884454AA UE4Editor-Cmd.exe!UnknownFunction ]
UATHelper: Packaging (Windows (64-bit)):   LogInit: Display: LogOutputDevice: Error: [Callstack] 0x0000000088452379 UE4Editor-Cmd.exe!UnknownFunction ]
UATHelper: Packaging (Windows (64-bit)):   LogInit: Display: LogOutputDevice: Error: [Callstack] 0x0000000088453193 UE4Editor-Cmd.exe!UnknownFunction ]
UATHelper: Packaging (Windows (64-bit)):   LogInit: Display: LogOutputDevice: Error: [Callstack] 0x0000000007823034 KERNEL32.DLL!UnknownFunction ]
UATHelper: Packaging (Windows (64-bit)):   LogInit: Display: LogOutputDevice: Error: [Callstack] 0x0000000008401551 ntdll.dll!UnknownFunction ]
UATHelper: Packaging (Windows (64-bit)):   LogInit: Display: LogOutputDevice: Error: end: stack for UAT

Any idea what’s going on here?

If I remove the point cloud plugin (and all point clouds from the project), I don’t get this error and the project packages fine.

I’ll have a look tonight and see what causes it.
You mentioned it only happening occasionally - as in, the same project will sometimes build without problems or that only some projects suffer from it?

Some control questions:

  • Are you using the v0.4.2?
  • Is the issue reproducible in fresh, empty project with just the PC in question?
  • Are you using binary version of 4.18?
  • Is it a code or content-only project?

Thanks for the feedback :slight_smile:

@

Awesome job on this plugin. It’s going to be a huge help to our project, so thank you for sharing.

I just thought I would share with you that I was actually able to compile and run 0.4.2 as an engine plugin by doing a clean build of the full UE 4.18.3 source using the Unreal Automation Tool. However, there was one compiler error that was resolved by changing the include on line 8 of PointCloudFactory.h from “PointCloudRuntime/Public/PointCloud.h” to just “PointCloud.h”.

Also, when using the non-unity build to compile our game (this time with the Point Cloud as a project plugin rather than an engine plugin), there are a few compiler errors due to missing #includes:

  • PointCloudStatics.cpp needs “FileHelper.h” and “Runtime/Core/Public/Misc/Paths.h”
  • PointCloudStatics.h needs “PointCloudShared.h”
  • PointCloudSection.h needs “PointCloud.h” and “Runtime/Core/Public/Math/UnrealMathUtility.h”

None of this is a big deal and probably won’t be noticed by many people, but I figured I would let you know what we found in our testing. Thanks again!

Glad you like it :slight_smile:

Some people reported compilers complaining about missing includes - not entirely sure why it only happens for some. Will add them just in case, as to avoid potential issues - thanks!
Interesting find with the engine compilation - was it a clean 4.18.3 source build?

Thanks again for the feedback :slight_smile:

Hey guys!

Just a quick update on the development progress.

Version 0.5 turned into a much bigger undertaking than originally anticipated. The internal data structure as well as how it’s send to the GPU have been completely redesigned to allow for much more scalable and flexible approach. These changes should also make the transition to full streaming and background rebuilding in the future much easier.

The clouds are no longer being split into individual sections, which use their own, self-contained render data and LODs. Instead, an adaptive octree division is applied and the LODs are partially constructed and handled at runtime. Gone are the section size setting and worrying about draw call count - the whole cloud will now use as little draw calls as there are LODs :slight_smile:

Current estimated release: late July.

My guess is Unreal isn’t always consistent with which source files it lumps together when generating the giant combined cpp files for the unity build, so most of the time the missing includes get included anyway, but occasionally they’re split between separate cpp files.

Yep. I just checked out a clean copy of the 4.18.3 engine source, put the Point Cloud code into Engine\Plugins, generated the project files, and then ran BuildGraph via the Unreal Automation Tool (RunUAT.bat).

Quick question for you - When rendering our point cloud as points, the points seem to get culled out of view rather quickly when you try to get close to them in both the editor and the game. I played around with the LOD settings a bit as well as some of the Unreal rendering console variables, but they didn’t seem to have any effect, and I haven’t seen anything in the code so far that would be causing it. It doesn’t appear to be an issue when using sprites as the render method though. Any ideas?

Thanks!

Sounds like you’re describing near clipping plane. Sprites would appear to be less susceptible to it simply because they cover bigger area of the screen and so you don’t just see them go all of a sudden.

That was my first thought as well. The near clipping plane is already set to 0 for our player camera, so I didn’t think there was much more I could do to adjust it.

Below is a small sample of what to expect from the new rendering approach.
Keep in mind that this is still very much work in progress and far from properly optimized.

I have 2 point clouds in the same coordinate system and would like them to line up when I bring them into UE with the plugin. But when I insert the point clouds it goes to the mouse coordinates, making it difficult to line them up perfectly. Is there a way to have them appear in the level according to their point coordinates?

Hi CIMS,

You could do it in few ways:

  1. Import both clouds with no transformation applied, drag them both to your level, then set their Location to 0, 0, 0. The downside to this approach is they may end up with a very large offset from the level’s origin (0, 0, 0) causing weird movement.
  2. Import the clouds as First Point or Center, then calculate what should be their relative offset in the chosen case and assign those offsets using the **Details **panel. For example:

Let’s assume that we have clouds PC1 and PC2 and that their respective first points are **519287.471, 195777.342, 97.635 **and 5****19213.366, 195981.924, 98.681. Assuming you import them using a scale of 100 their respective Origins will be: **51928747.1, 19577734.2, 9763.5 **and 5****1921336.6, 19598192.4, 9868.1. To calculate their relative offset you have to subtract PC1’s origin from PC2’s origin, like so:


(51921336.6, 19598192.4, 9868.1) - (51928747.1, 19577734.2, 9763.5) = (-7410.5, 20458.2, 104.6)

Finally you drag them both to your level, set PC1’s location as 0, 0, 0 and PC2’s location to the relative offset: -7410.5, 20458.2, 104.6

Hey guys,

I’m very pleased to announce that the plugin has been awarded the Unreal Dev Grant!

Thanks for all your feedback and support. I hope you’ll enjoy all upcoming releases :slight_smile: