Pointcloud from VL.PLY in Fuse

Hello guys
I would like to make some crazy pointcloud deformations using the Fuse tools
This is what I have done so far ( nothing really )
I am using the PLY reader with some tiny mods to get the spread of xyz and rgb data out, and I am feeding that into buffers that I found on the Fuse examples patchs
I am not sure if this makes sense, but I can tell this is not effective at all…
This is a 100k pointcloud, and we can call this “small one”

Is there a better way of doing this?

I am using a “emitter” but I would like to have all the points present at all times and be able to play around with curl noise, or attractors

also, is there a way to read a file in chunks ? like the ReadFilePartial of vvvv beta ?

And is there a way to feed fuse with a… lets say spread of 1000 rgb and xzy data, and give it a lifetime of a few seconds, and “free” the memory in order to feed another chunk ?

I found that the app SiteScape ( ios iphone with lidar ) saves the pointcloud in the same order it was recorded, I need to upload a video to explain what I was doing in beta… but if this is possible, some cool animations will be super easy to make

any tip will be appreciated

PlyReader.zip (2.6 MB)

Ok I just realize that the ply reader from gamma its super slow compared to

On small pointcloud, seems fine, but when opening 100mb files, its a huge performance difference

On the beta version the file its read in chunks and stored in a buffer ( I guess is gpu memory ) but on this other gamma version, the whole point cloud will be “ram” stored

I am correct on this ?
Any idea on how to build a similar pipeline in gamma ?

@andresc4 Hi, I’m working right now on point cloud loader for Fuse. I’m not sure that PLY reader can have any performance impact since it’s loads data to memory, that data is passed to GPU buffer. Can you please share your file so i can check the performance as edge case?

@alg great! Open any of this 2 files with this patch and check out the framerate

http://mystechlinode.ddns.net:81/LargePly2023.zip patch, open villaolimpica.v4p
http://mystechlinode.ddns.net:81/CalesitaRecortada.zip 11millon points
http://mystechlinode.ddns.net:81/villaolimipica.zip 10.4 millons

I have bigger ones, but this are enogh to show a huge difference between opening this pointlcouds with beta vs PLYreader in fuse

@andresc4 At which resolution you did a calesita shot? For me speed depends on resolution, for 2560x1600 i’m getting 25 FPS in Stride/Fuse version. For small screen around 50 FPS. 3060 mobile GPU.

Size of the window, no texture render used in Gamma, the windows size was about 1280x720
and on vvvv beta is a dx11 preview at 1920x1080 + spout sender and I am getting 90 fps with all that
( Alienware notebook I7 11th + rtx3060 )
Also on the beta If I pass that 11m buffer through noodles + an atractor I get around 80fps

Try out the beta patch that I uploaded to see if you notice a difference. If there is any node missing let me know, I think I clean it up to avoid any external patch

@andresc4 Got 50 FPS on Villa Olimpica

You can check the patch here:
HowTo Display PointCloud.vl (30.6 KB)

Despite @tonfilm suggestion not sure that ImmutableBuffer doing anything here, maybe i got it wrong. For me sprite rendering is the bottle neck, so camera movement and angle affects the FPS.

1 Like

I’m pretty sure that regular vvvv one uses special type of dynamic buffer internally that is specifically designed to have large and fast static buffers. Don’t remember how it called tho… But it should be like 5 times faster then regular one… I’m not sure if stride has it, as I understood that’s kinda in dx but not that much widely used, since usecase not that common…

@alg great! I will check it out on the same computer latter.
I was able to open your example and apply the sprite render, it feels much faster than the draw method from the reader example.

I am not getting how to manipulate the point cloud position/rotation/scale , on your patch did you rotate the camera, or did you manage to change the pointcloud transformation ?

Still, I can flag your post as a solution! thanks!!

@andresc4 I also still looking for applying transforms over point cloud, didn’t find a solution yet. As a workaround, you can apply transform in Cloud Compare software.

I need to get deeper into Fuse, I am sure many cool things can be done, so far I am trying to recrate this 2 things done in beta http://mystechlinode.ddns.net:81/rendewr.mp4 here I load the pointcloud adding a randomspread in position, and is passing trough a 3dbuffer damper
After is loaded, I remove the noise from the input and I re load the point cloud so it comes back to the original state

And this other one its crazy, the app sitescape saves the pointcloud in a sequential order how it was recorded, so a cool effect can be done super easy

But I did not found a secuential reader equivalente in gamma, I think this will be a good reason to star playing with C# nodes and to make it myself

Ok some tests…
I did open villaolimpica with gamma, this are the results

Same file in beta using a sprite texture, with blending and passing trough nodles 3d buffer

Same file without the sprite

TLDR for this ( And so far seems the only case scenario for me ) I will keep playing around with beta, maybe there is a more effective pipeline to do it in Gamma, not sure how yet
thanks @alg for your help, for sure I will keep digging into this, and @antokhio you were rights

@andresc4 From my understanding, the bottleneck is the sprite rendering and (maybe) compute pipeline. I will try to look into in further, but for now for me 30/60 FPS is quite acceptable performance (depending on the use case).

1 Like

the fuse node ImmutableBuffer is not a immutable buffer, apparently. @dottore @texone

Better use the original one from VL.Stride or switch it to immutable:

@tonfilm I tried to set buffer mode to immutable, didn’t get any performance benefits. Will try with standard Stride buffer. Do you have any example on how to convert it to the Fuse compatible types?

From what I understand, you don’t need any conversion anymore, the latest fuse in gamma 2022.5 uses the GPU type as well.

Correct me if I’m wrong @texone.

OK I was able to prevent the error of the empty buffers with a try region, and I´m not sure if this cache region makes sense, I really don´t see much improvement, but I wonder, if this wont change, does it make sense to use it like this ?

Also I was able to export and run the app without any errors!

HowTo Display PointCloud 2.vl (43.5 KB)

But I think I have a problem with the particle render orders, this group should be on the back

I have just checked you files in the new fuse for the big pointclouds rendering gets really slow I get 3 frames not sure why it gets so slow. Will investigate. Regarding your drawing issue particles are not depth sorted.

One of the things that I am not sure how to measure,
on betta the amount of particles rendered at one frame is “fix”, here with the emmiters and with the lifetime, they can be much much more, not sure if there is a workaround on this, or if this how emmiters works and a new node needs to born in order to keep a “fix” amout of particles
also, is there a way to “count” how many they are at a given time ?

Because the pointcloud witth particles of a different lifetime is could be 10x more particles rendered at the same time

@andresc4 to manipulate the position/scale/rotation of the pointcloud you can use this workaround, not sure if it’s the correct way because i discovered it by myself, but it’s working
Transform PointCloud

1 Like