Point Cloud Plugin

Very much deserved - congratulations!

Congratulations and very much deserved.

Thatā€™s great news with the Unreal Dev Grant. Iā€™m looking forward to the direct E57 import in the next version.

Congrats!! :wink:

Hi! Thank you very much for this amazing pointcloud.

I have a question about the aspect of the sprite. Is there a way to display it like Multipoint mode in Maya ?

I mean, in Maya you can display sprite as a standard square but you have Multi points mode where one point is multiplied and scale X times, so you can have some good results.

I made a graphic to be more explicitā€¦

Thanks a lot!

I have another question : is that possible to specify the points count during the import ?
Iā€™m not used with the realtime and LOD specifications. Can anyone help me to reduce the global number of points?

Thanks ! :slight_smile:

Hi and thanks for the interest!

First, let me apologize for the delay in the answer - I stopped receiving notifications again.

Iā€™m not familiar with the multipoint in Maya - is it producing randomly scattered points around the original location? If so, this is definitely something I can look into.

Yes, there is! :slight_smile:
Use the last two fields to specify first and last lines of the file to import.

UniversalImporter.png

Thanks guys! Really appreciate the support! :slight_smile:

Progress update time!

The development of new rendering approach is going well, with almost all functionality of the original re-implemented. Some bug fixes and performance improvements are still on the to do list, but itā€™s nearly complete :slight_smile:

Sprites are now fully supported using LOD Coloration view

New LOD system allows for smooth and precise adjustment of quality:

Hey @ Iā€™m getting a lot of crashes trying to use the plugin at the moment.

My setup is I have an Actor with a Point Cloud attached as a Child Actor Component. Sometimes the Point Clouds disappear, and the only way to get them back is to rebuild them, but simply pressing ā€˜Rebuildā€™ on the PointCloudActor isnā€™t enough, I have to switch the Render Method to something else (eg. Point Unlit), build it, and then switch it back to the Render Method I want (which is Sprite Unlit RGB) and then it comes back ā€¦ sometimes.

But a lot of the times this just crashes the editor. Here is the stack trace when that happens:


UE4Editor-CoreUObject.dll!UObjectBase::IsValidLowLevel() Line 296    C++
UE4Editor-PointCloudRuntime-Win64-DebugGame.dll!UPointCloudComponent::GetMaterial(int ElementIndex) Line 137    C++
UE4Editor-PointCloudRuntime-Win64-DebugGame.dll!UPointCloudComponent::AddReferencedObjects(UObject * InThis, FReferenceCollector & Collector) Line 156    C++
UE4Editor-CoreUObject.dll!TFastReferenceCollector<1,FGCReferenceProcessor<1>,FGCCollector<1>,FGCArrayPool,0>::ProcessObjectArray(FGCArrayStruct & InObjectsToSerializeStruct, const TRefCountPtr<FGraphEvent> & MyCompletionGraphEvent) Line 775    C++
UE4Editor-CoreUObject.dll!TFastReferenceCollector<1,FGCReferenceProcessor<1>,FGCCollector<1>,FGCArrayPool,0>::FCollectorTaskQueue::DoTask() Line 381    C++
[Inline Frame] UE4Editor-CoreUObject.dll!TFastReferenceCollector<1,FGCReferenceProcessor<1>,FGCCollector<1>,FGCArrayPool,0>::FCollectorTaskProcessorTask::DoTask(ENamedThreads::Type) Line 412    C++
UE4Editor-CoreUObject.dll!TGraphTask<TFastReferenceCollector<1,FGCReferenceProcessor<1>,FGCCollector<1>,FGCArrayPool,0>::FCollectorTaskProcessorTask>::ExecuteTask(TArray<FBaseGraphTask *,FDefaultAllocator> & NewTasks, ENamedThreads::Type CurrentThread) Line 829    C++
[Inline Frame] UE4Editor-Core.dll!FBaseGraphTask::Execute(TArray<FBaseGraphTask *,FDefaultAllocator> &) Line 498    C++
UE4Editor-Core.dll!FTaskThreadAnyThread::ProcessTasks() Line 934    C++
UE4Editor-Core.dll!FTaskThreadAnyThread::ProcessTasksUntilQuit(int QueueIndex) Line 800    C++
UE4Editor-Core.dll!FTaskThreadBase::Run() Line 516    C++
UE4Editor-Core.dll!FRunnableThreadWin::Run() Line 76    C++
UE4Editor-Core.dll!FRunnableThreadWin::GuardedRun() Line 25    C++
[External Code]    

Here is a screen grab of the crash in VS2017, in case thatā€™s helpful:

https://i.imgur.com/uzmjaYP.png

Any thoughts what might be causing this? Itā€™s making the plugin unusable at the moment.

Hey @, another thing: I canā€™t actually package a project that uses the plugin at the moment either. Same project builds fine without the point clouds. Here is the packaging output for the failure:


UATHelper: Packaging (Windows (64-bit)):   LogOutputDevice: Error: begin: stack for UAT
UATHelper: Packaging (Windows (64-bit)):   LogOutputDevice: Error: === Handled ensure: ===
UATHelper: Packaging (Windows (64-bit)):   LogOutputDevice: Error:
UATHelper: Packaging (Windows (64-bit)):   LogOutputDevice: Error: Ensure condition failed: MyOwnerWorld [File:D:\Build\++UE4+Release-4.19+Compile\Sync\Engine\Source\Runtime\Engine\Private\Components\ActorComponent.cpp] [Line: 1031]
UATHelper: Packaging (Windows (64-bit)):   LogOutputDevice: Error:
UATHelper: Packaging (Windows (64-bit)):   LogOutputDevice: Error: Stack:
UATHelper: Packaging (Windows (64-bit)):   LogOutputDevice: Error: [Callstack] 0x000000009FB5B706 UE4Editor-Core.dll!FWindowsPlatformStackWalk::StackWalkAndDump() [d:\build\++ue4+release-4.19+compile\sync\engine\source\runtime\core\private\windows\windowsplatformstackwalk.cpp:234]
UATHelper: Packaging (Windows (64-bit)):   LogOutputDevice: Error: [Callstack] 0x000000009F8BAE3A UE4Editor-Core.dll!FDebug::EnsureFailed() [d:\build\++ue4+release-4.19+compile\sync\engine\source\runtime\core\private\misc\assertionmacros.cpp:299]
PackagingResults: Error: begin: stack for UAT
UATHelper: Packaging (Windows (64-bit)):   LogOutputDevice: Error: [Callstack] 0x000000009F8CECD6 UE4Editor-Core.dll!FDebug::OptionallyLogFormattedEnsureMessageReturningFalse() [d:\build\++ue4+release-4.19+compile\sync\engine\source\runtime\core\private\misc\assertionmacros.cpp:430]
PackagingResults: Error: === Handled ensure: ===
PackagingResults: Error: Ensure condition failed: MyOwnerWorld [File:D:\Build\++UE4+Release-4.19+Compile\Sync\Engine\Source\Runtime\Engine\Private\Components\ActorComponent.cpp] [Line: 1031]
PackagingResults: Error: Stack:
PackagingResults: Error: [Callstack] 0x000000009FB5B706 UE4Editor-Core.dll!FWindowsPlatformStackWalk::StackWalkAndDump() [d:\build\++ue4+release-4.19+compile\sync\engine\source\runtime\core\private\windows\windowsplatformstackwalk.cpp:234]
PackagingResults: Error: [Callstack] 0x000000009F8BAE3A UE4Editor-Core.dll!FDebug::EnsureFailed() [d:\build\++ue4+release-4.19+compile\sync\engine\source\runtime\core\private\misc\assertionmacros.cpp:299]
PackagingResults: Error: [Callstack] 0x000000009F8CECD6 UE4Editor-Core.dll!FDebug::OptionallyLogFormattedEnsureMessageReturningFalse() [d:\build\++ue4+release-4.19+compile\sync\engine\source\runtime\core\private\misc\assertionmacros.cpp:430]
UATHelper: Packaging (Windows (64-bit)):   LogOutputDevice: Error: [Callstack] 0x000000009CF20F18 UE4Editor-Engine.dll!UActorComponent::RegisterComponent() [d:\build\++ue4+release-4.19+compile\sync\engine\source\runtime\engine\private\components\actorcomponent.cpp:1031]
UATHelper: Packaging (Windows (64-bit)):   LogOutputDevice: Error: [Callstack] 0x000000008C55A30A UE4Editor-PointCloudRuntime.dll!APointCloudActor::RebuildComponents() [f:\perforce\cosmosisvr\plugins\pointcloudplugin\source\pointcloudruntime\private\pointcloudactor.cpp:143]
UATHelper: Packaging (Windows (64-bit)):   LogOutputDevice: Error: [Callstack] 0x000000008C54FD0F UE4Editor-PointCloudRuntime.dll!TBaseUObjectMethodDelegateInstance<0,APointCloudActor,void __cdecl(void)>::ExecuteIfSafe() [c:\program files\epic games\ue_4.19\engine\source\runtime\core\public\delegates\delegateinstancesimpl.h:659]
UATHelper: Packaging (Windows (64-bit)):   LogOutputDevice: Error: [Callstack] 0x000000008C54B45C UE4Editor-PointCloudRuntime.dll!TBaseMulticastDelegate<void>::Broadcast() [c:\program files\epic games\ue_4.19\engine\source\runtime\core\public\delegates\delegatesignatureimpl.inl:937]
UATHelper: Packaging (Windows (64-bit)):   LogOutputDevice: Error: [Callstack] 0x000000008C559E40 UE4Editor-PointCloudRuntime.dll!UPointCloud::Rebuild() [f:\perforce\cosmosisvr\plugins\pointcloudplugin\source\pointcloudruntime\private\pointcloud.cpp:516]
UATHelper: Packaging (Windows (64-bit)):   LogOutputDevice: Error: [Callstack] 0x00000000A387024D UE4Editor-CoreUObject.dll!UObject::ConditionalPostLoad() [d:\build\++ue4+release-4.19+compile\sync\engine\source\runtime\coreuobject\private\uobject\obj.cpp:994]
UATHelper: Packaging (Windows (64-bit)):   LogOutputDevice: Error: [Callstack] 0x00000000A393AFAC UE4Editor-CoreUObject.dll!EndLoad() [d:\build\++ue4+release-4.19+compile\sync\engine\source\runtime\coreuobject\private\uobject\uobjectglobals.cpp:1595]
UATHelper: Packaging (Windows (64-bit)):   LogOutputDevice: Error: [Callstack] 0x00000000A395312B UE4Editor-CoreUObject.dll!LoadPackageInternal() [d:\build\++ue4+release-4.19+compile\sync\engine\source\runtime\coreuobject\private\uobject\uobjectglobals.cpp:1339]
UATHelper: Packaging (Windows (64-bit)):   LogOutputDevice: Error: [Callstack] 0x00000000A3952544 UE4Editor-CoreUObject.dll!LoadPackage() [d:\build\++ue4+release-4.19+compile\sync\engine\source\runtime\coreuobject\private\uobject\uobjectglobals.cpp:1436]
UATHelper: Packaging (Windows (64-bit)):   LogOutputDevice: Error: [Callstack] 0x000000009D447DF9 UE4Editor-Engine.dll!UWorld::LoadSecondaryLevels() [d:\build\++ue4+release-4.19+compile\sync\engine\source\runtime\engine\private\levelactor.cpp:1168]
PackagingResults: Error: [Callstack] 0x000000009CF20F18 UE4Editor-Engine.dll!UActorComponent::RegisterComponent() [d:\build\++ue4+release-4.19+compile\sync\engine\source\runtime\engine\private\components\actorcomponent.cpp:1031]
UATHelper: Packaging (Windows (64-bit)):   LogOutputDevice: Error: [Callstack] 0x000000009AF5C5FC UE4Editor-UnrealEd.dll!UCookOnTheFlyServer::PostLoadPackageFixup() [d:\build\++ue4+release-4.19+compile\sync\engine\source\editor\unrealed\private\cookontheflyserver.cpp:2434]
UATHelper: Packaging (Windows (64-bit)):   LogOutputDevice: Error: [Callstack] 0x000000009AF30C88 UE4Editor-UnrealEd.dll!UCookOnTheFlyServer::GetAllUnsolicitedPackages() [d:\build\++ue4+release-4.19+compile\sync\engine\source\editor\unrealed\private\cookontheflyserver.cpp:2064]
UATHelper: Packaging (Windows (64-bit)):   LogOutputDevice: Error: [Callstack] 0x000000009AF7BB4A UE4Editor-UnrealEd.dll!UCookOnTheFlyServer::TickCookOnTheSide() [d:\build\++ue4+release-4.19+compile\sync\engine\source\editor\unrealed\private\cookontheflyserver.cpp:1746]
UATHelper: Packaging (Windows (64-bit)):   LogOutputDevice: Error: [Callstack] 0x000000009AE2A580 UE4Editor-UnrealEd.dll!UCookCommandlet::CookByTheBook() [d:\build\++ue4+release-4.19+compile\sync\engine\source\editor\unrealed\private\commandlets\cookcommandlet.cpp:904]
UATHelper: Packaging (Windows (64-bit)):   LogOutputDevice: Error: [Callstack] 0x000000009AE51CB0 UE4Editor-UnrealEd.dll!UCookCommandlet::Main() [d:\build\++ue4+release-4.19+compile\sync\engine\source\editor\unrealed\private\commandlets\cookcommandlet.cpp:584]
UATHelper: Packaging (Windows (64-bit)):   LogOutputDevice: Error: [Callstack] 0x0000000004DCEB20 UE4Editor-Cmd.exe!FEngineLoop::PreInit() [d:\build\++ue4+release-4.19+compile\sync\engine\source\runtime\launch\private\launchengineloop.cpp:2195]
UATHelper: Packaging (Windows (64-bit)):   LogOutputDevice: Error: [Callstack] 0x0000000004DC69FA UE4Editor-Cmd.exe!GuardedMain() [d:\build\++ue4+release-4.19+compile\sync\engine\source\runtime\launch\private\launch.cpp:127]
PackagingResults: Error: [Callstack] 0x000000008C55A30A UE4Editor-PointCloudRuntime.dll!APointCloudActor::RebuildComponents() [f:\perforce\cosmosisvr\plugins\pointcloudplugin\source\pointcloudruntime\private\pointcloudactor.cpp:143]
UATHelper: Packaging (Windows (64-bit)):   LogOutputDevice: Error: [Callstack] 0x0000000004DC6C4A UE4Editor-Cmd.exe!GuardedMainWrapper() [d:\build\++ue4+release-4.19+compile\sync\engine\source\runtime\launch\private\windows\launchwindows.cpp:144]
UATHelper: Packaging (Windows (64-bit)):   LogOutputDevice: Error: [Callstack] 0x0000000004DD4177 UE4Editor-Cmd.exe!WinMain() [d:\build\++ue4+release-4.19+compile\sync\engine\source\runtime\launch\private\windows\launchwindows.cpp:223]
UATHelper: Packaging (Windows (64-bit)):   LogOutputDevice: Error: [Callstack] 0x0000000004DD4FBF UE4Editor-Cmd.exe!__scrt_common_main_seh() [f:\dd\vctools\crt\vcstartup\src\startup\exe_common.inl:253]
PackagingResults: Error: [Callstack] 0x000000008C54FD0F UE4Editor-PointCloudRuntime.dll!TBaseUObjectMethodDelegateInstance<0,APointCloudActor,void __cdecl(void)>::ExecuteIfSafe() [c:\program files\epic games\ue_4.19\engine\source\runtime\core\public\delegates\delegateinstancesimpl.h:659]
UATHelper: Packaging (Windows (64-bit)):   LogOutputDevice: Error: [Callstack] 0x000000000F7D3034 KERNEL32.DLL!UnknownFunction ]
UATHelper: Packaging (Windows (64-bit)):   LogOutputDevice: Error: [Callstack] 0x0000000010B21431 ntdll.dll!UnknownFunction ]
UATHelper: Packaging (Windows (64-bit)):   LogOutputDevice: Error:
UATHelper: Packaging (Windows (64-bit)):   LogOutputDevice: Error: end: stack for UAT
PackagingResults: Error: [Callstack] 0x000000008C54B45C UE4Editor-PointCloudRuntime.dll!TBaseMulticastDelegate<void>::Broadcast() [c:\program files\epic games\ue_4.19\engine\source\runtime\core\public\delegates\delegatesignatureimpl.inl:937]
PackagingResults: Error: [Callstack] 0x000000008C559E40 UE4Editor-PointCloudRuntime.dll!UPointCloud::Rebuild() [f:\perforce\cosmosisvr\plugins\pointcloudplugin\source\pointcloudruntime\private\pointcloud.cpp:516]
PackagingResults: Error: [Callstack] 0x00000000A387024D UE4Editor-CoreUObject.dll!UObject::ConditionalPostLoad() [d:\build\++ue4+release-4.19+compile\sync\engine\source\runtime\coreuobject\private\uobject\obj.cpp:994]
PackagingResults: Error: [Callstack] 0x00000000A393AFAC UE4Editor-CoreUObject.dll!EndLoad() [d:\build\++ue4+release-4.19+compile\sync\engine\source\runtime\coreuobject\private\uobject\uobjectglobals.cpp:1595]
PackagingResults: Error: [Callstack] 0x00000000A395312B UE4Editor-CoreUObject.dll!LoadPackageInternal() [d:\build\++ue4+release-4.19+compile\sync\engine\source\runtime\coreuobject\private\uobject\uobjectglobals.cpp:1339]
PackagingResults: Error: [Callstack] 0x00000000A3952544 UE4Editor-CoreUObject.dll!LoadPackage() [d:\build\++ue4+release-4.19+compile\sync\engine\source\runtime\coreuobject\private\uobject\uobjectglobals.cpp:1436]
PackagingResults: Error: [Callstack] 0x000000009D447DF9 UE4Editor-Engine.dll!UWorld::LoadSecondaryLevels() [d:\build\++ue4+release-4.19+compile\sync\engine\source\runtime\engine\private\levelactor.cpp:1168]
PackagingResults: Error: [Callstack] 0x000000009AF5C5FC UE4Editor-UnrealEd.dll!UCookOnTheFlyServer::PostLoadPackageFixup() [d:\build\++ue4+release-4.19+compile\sync\engine\source\editor\unrealed\private\cookontheflyserver.cpp:2434]
PackagingResults: Error: [Callstack] 0x000000009AF30C88 UE4Editor-UnrealEd.dll!UCookOnTheFlyServer::GetAllUnsolicitedPackages() [d:\build\++ue4+release-4.19+compile\sync\engine\source\editor\unrealed\private\cookontheflyserver.cpp:2064]
PackagingResults: Error: [Callstack] 0x000000009AF7BB4A UE4Editor-UnrealEd.dll!UCookOnTheFlyServer::TickCookOnTheSide() [d:\build\++ue4+release-4.19+compile\sync\engine\source\editor\unrealed\private\cookontheflyserver.cpp:1746]
PackagingResults: Error: [Callstack] 0x000000009AE2A580 UE4Editor-UnrealEd.dll!UCookCommandlet::CookByTheBook() [d:\build\++ue4+release-4.19+compile\sync\engine\source\editor\unrealed\private\commandlets\cookcommandlet.cpp:904]
PackagingResults: Error: [Callstack] 0x000000009AE51CB0 UE4Editor-UnrealEd.dll!UCookCommandlet::Main() [d:\build\++ue4+release-4.19+compile\sync\engine\source\editor\unrealed\private\commandlets\cookcommandlet.cpp:584]
PackagingResults: Error: [Callstack] 0x0000000004DCEB20 UE4Editor-Cmd.exe!FEngineLoop::PreInit() [d:\build\++ue4+release-4.19+compile\sync\engine\source\runtime\launch\private\launchengineloop.cpp:2195]
PackagingResults: Error: [Callstack] 0x0000000004DC69FA UE4Editor-Cmd.exe!GuardedMain() [d:\build\++ue4+release-4.19+compile\sync\engine\source\runtime\launch\private\launch.cpp:127]
PackagingResults: Error: [Callstack] 0x0000000004DC6C4A UE4Editor-Cmd.exe!GuardedMainWrapper() [d:\build\++ue4+release-4.19+compile\sync\engine\source\runtime\launch\private\windows\launchwindows.cpp:144]
PackagingResults: Error: [Callstack] 0x0000000004DD4177 UE4Editor-Cmd.exe!WinMain() [d:\build\++ue4+release-4.19+compile\sync\engine\source\runtime\launch\private\windows\launchwindows.cpp:223]
PackagingResults: Error: [Callstack] 0x0000000004DD4FBF UE4Editor-Cmd.exe!__scrt_common_main_seh() [f:\dd\vctools\crt\vcstartup\src\startup\exe_common.inl:253]
PackagingResults: Error: [Callstack] 0x000000000F7D3034 KERNEL32.DLL!UnknownFunction ]
PackagingResults: Error: [Callstack] 0x0000000010B21431 ntdll.dll!UnknownFunction ]

Something which I think is related is that when I run the editor in debug mode, I quite often get this break point occurring:

https://i.imgur.com/HmCmDIG.png

It allows me to continue, so it doesnā€™t totally crash the editor, but it seems related to the packaging error above.

EDIT:

I thought I should mention, in case itā€™s relevant, that Iā€™m using the Point Cloud in a streaming level. So I have an Actor, with a Child Actor containing the Point Cloud, in a streaming level which I am loading into my persistent level. Not sure if thatā€™s relevant, but it might be.

@anonymous_user_a786c057

Regarding the issue of Child Actor

It looks like the materials are losing references. This would explain why changing RenderMode fixes it (sometimes), as that will force the PC to recreate and redistribute new materials.
Iā€™m guessing itā€™s because building it via Child Actor doesnā€™t link those references automatically.

Good news is 0.5 is immune to this :slight_smile:
Bad news is, 0.4 isnā€™t :smiley:

Regarding Packaging

I havenā€™t tested streaming levels and currently have no idea how that affects things.
At first glance it looks like there is a problem with PC issuing a rebuild broadcast to the actors, as they cannot register new components. My best guess is the PC tries to rebuild itself before the actorā€™s world is actually initialized.

Try placing a world guard in the APointCloudActor::RebuildComponents:

replace


if (PointCloud && !PointCloud->IsDirty())

with


if (PointCloud && !PointCloud->IsDirty() && GetWorld())

Thanks for responding so quickly, as always.

Adding the world guard means the project packages now - thanks!

So when is v0.5 coming out? :smiley:

No problem :slight_smile:

I know, it takes absolutely forever! So many changes :slight_smile:
Estimated release is early August, but I might end up moving some of the functionality to later version and release it earlier, as quite a lot of people ask for it

For those who donā€™t know yet, there is an** Early Access **available for the plugin.
For more information consult Trello

Thanks for the share. Will defiantly play around with this.

Thanks for making this! I am a beginner in with UE, with no prior knowledge about game development / virtual reality. My background is actually in producing point clouds, and Iā€™d like to view them in virtual reality (using UE and HTC vive set). I managed to import the point cloud to Viewport and have a look - it looks great! The process is also very straight forward, so thanks for making it so easy. It would be great to be able to scale the point cloud and to add other functionality. Is that possible? I see that there are plenty of tutorials on how to deal with meshes, but Iā€™m not sure how they apply to point clouds. What are the main steps to make a scalable point cloud (scaling would happen with controllers)? If somebody has relevant links, or could explain that here, I would appreciate it very much. Thanks in advance!

Hi there!

Sorry for the delay, I donā€™t know whatā€™s going on with the notifications they seem to be very random.

What do you mean by scaling the cloud?
If size, then itā€™s certainly possible: use the cloudā€™s scale setting (requires cloud rebuilding, so probably not a real-time solutions) or the actorā€™s scale.
If you mean density, then sadly no. In itā€™s current version, the plugin doesnā€™t allow for a forced LOD selection

Sorry for being unspecific. I meant resizing with motion controllers in real-time, similar to what this video demonstrates with a static mesh (a cube): https://www.youtube.com/watch?v=JCIwz9s_WTw (see 20min 40s ->)

Could this same approach be applied to point clouds? In the end Iā€™d like to scale and rotate the point clouds with motion controllers.

It might actually work :slight_smile:
If you apply actor transformations, they should come through to the point cloud.

Let me know if it works, Iā€™m curious myself now :slight_smile: