3DGS Gaussian Splatting

Hello guys
I would like to leave the pointclouds behind and move one to Gaussian Splatting
Not sure if anyone did something similar… I would like share the idea first

Compressing Gaussian Splats | PlayCanvas Blog.

I imagine to reuse the ply reader, and work on the 3d engine to ( as first step ) render splat resuing the ply logic, and applying the transformation(rot/size) / color(alpha)

Btw try out https://www.jawset.com/
@Takuma I’m sure you will like this idea

2 Likes

Was also looking for this topic!!
Sadly couldn’t understand how to make Splats happen in vvvv, but would definetly love to see this happening!!

I understood that the PLY have the data of each “splat” like a particle, x y z r g b
in adition to that, there is a size of the particle, not sure if as a volume or as a plane
and a transformation vector for scale and rotation
also there are more parameters, but not sure how to implement those, but with the ones I described I guess it could be relatively easy to make a spread of quads , instance them, or maybe play around the fuse way

I will post any update on this project, I will start with the parsing of the PLY file taking as a “base” the ply reader

I am also interested into splatting… This Unity implementation could be a starting point.

“bicycle” scene from the paper, with 6.1M splats and first camera in there, rendering at 1200x797 resolution, at “Medium” asset quality level (282MB asset file):
Unity, DX12 or Vulkan: 6.8ms (147FPS) - 4.5ms rendering, 1.1ms sorting, 0.8ms splat view calc. 1.3GB VRAM usage.

@motzi, @texone and @gegenlicht were talking about it in the Fuse chat.

1 Like

HowTo Parse a Splat file in a custom way.vl (69.9 KB)
I thought I might make a start
Here is a splat I made in luma last night
https://www.dropbox.com/scl/fi/ke6mn9jjrz6fi81ehihzr/gs_Titterstone_sunset1.ply?rlkey=3bzfz8cxpvdgbnndfam4qb2wb&dl=1

I’m trying to parse the file using the how to parse a custom ply in the vl.io.ply nuget. The header doesn’t seem to label the RGB which is odd, nxx is I guess the normal (luma does some normal mapping in their renderer) dc could be rgb?
Anyway, I’m not really sure how/where to us the custom parser after making it, so can’t check it out.
From Introduction to 3D Gaussian Splatting
The concept looks pretty straight forward, point sprites with scale and rotation added, the only complex thing is depth sorting them before drawing. But step one is to parse the file and render as a point cloud, then work out the RGB, the transform, then sort… I think

1 Like

it is automatically being picked up by the PLYReader node internally. in your howto you can see it already “working” in that the “Vertices” pad connected to the PLYReader does have values. so the parser does something. being not familiar with the format nor its application though, i cannot comment this any further.

I can’t see where or how Binary Vertices (Custom) is called, it doesn’t seem to be inside the PLYreader node. It just works by magic? I’ll take it as supernatural for now and try and carry…

yes, by the magic of adaptive nodes.