The Future of GS in BBL

wow. faster than lightning :slight_smile: .

We will look into that tomorrow!

Cant wait. Best.

@Cedric thank you, we appreciate your dedication in this, this is great news.

1 Like

So. We looked at it, it works first of all.
Visually there is a differenz between ply spz and sog.

At low splat number, the color differences are visible.
The spz file shows clearly color differences and a general more pink/magenta/green appearance.
The sog seems to show a more dimmed color difference and tends more towards green, the strong magenta as in the spz is not visible.

At high splat count, the sog comes much closer to the ply file as the spz does still have a compressed feeling.

I guess that is expected. The filesizes are good, spz and sog almost matches in filesize.

Overall first impression is, to favor sog over spz as is feels more natural.

Phantastic. We will keep on working with sog and will implement the new version of bbl as soon as available, into our project.

Hope that other ppl will have similar results.

This is so great! Thank you so much for that swift implementation, amazing!

Best. Werner

on a test I did, I have a 180Mb PLY that gives a 17.3Mb spz and 10.7Mb sog. It contains SH.

sog features paletted SH with more bits per component than spz. From a code perspective, difficult to have a clear winner.

jep.

How would you compare filesize.
Does this depend on the type of content? Like more similar colors, higher vs lower splatcount?

Just interesting to know :slight_smile:

I checked the sample on Babylon.js Playground.
It appears to be rotated 180 degrees, but is this expected?

scene.meshes[0].rotation.x = Math.PI;

The sample playground is working well for me across PC and mobile (Android). Thank you for the quick work on this, next week I’ll start experimenting with my own splats :smiley:

For larger GS scenes I still get quite bad performance sometimes compared to e.g. SuperSplat. I wonder if there’s more gains that could be achieved in this area :thinking: FPS is especially important for WebXR for example… I’ll let you know if I come across any info/research in this area that could be useful!

Progressive splat loading could also be interesting…

Hi. In our experience, there are some factors which influence the FPS behavior of a scene.

It starts with the generation and distribution of the GS, so it also is connected to your sources like how the images are captured.
The overdraw of splats is costly. If you have e.g. a lot of big splats with low alpha or a lot behind each other. So cleaning can improve that. (I think the transform tool to create SOG has also cleaning/optimize options). Choosing the right images and method (e.g. in Postshot MCMC or splat3) makes a difference in the distribution and sizes.
Image overlaps as well for creating the cameras and the sparse point cloud.
Then the camera parameters can influence, how many splats you render on screen.
The render resolution has a big influence which is also connected to the device pixel ratio especially on mobile devices. There is also the GS antialiasing which also has a performance impact. The PC player (when you publish from SS) has a quality option which I think does turn off AA and sets a different DPR so you get performance boost.
So imo probably not so easy to compare just the player/viewer without looking at all the other parameters.
Best. Werner

2 Likes

Progressive splat loading could also be interesting…

This is something almost ready in the engine but because splats might not be sorted properly by default in the file, it results in a progressive loaded mess that pops up being sorted at the end. I didn’t quite like the effect. I’m curious if you can find a GS that display faster in any other engine than Babylon.

Just in case somebody missed the conversion tool ( .. cedric posted already) >

best. w.

Can this be done by now?
We are just talking about that, would be great to stream larger splats in somehow?

Best. w.

r.e. progressive loading + large Gaussian Splat LOD / streaming, see the demo of the new PlayCanvas Engine (open source) LOD streaming updates https://playcanv.as/p/ZoUBrC6e/ - when first loading in it seems to have some sort of progressive directional loading

Yes, I’ve seen the demo! it’s pretty great and needs sorting of splats + serialization.

Is that something which could come?
Or can we do that?
Need to show that to our programmer :slight_smile:

best.w.

that’s something you can do. there is this example in the documentation:

Reorder positions and enable progressive loading. Babylon.js docs

I’m curious if you can find a GS that display faster in any other engine than Babylon.

I’ve been playing around with some GS scenes and noticed a few things r.e. performance:

  • SOG support is amazing, thank you for getting that added! It compressed one of my scenes (1.5mil gaussians) from ~350MB down to ~20MB…
  • Supersplat Engine seems to give me consistently better performance (fps) on these scenes than BabylonJS does - specifically on laptops / mobile devices. Haven’t seen much difference on a more powerful PC. Not sure why… although their whole thing is that they’ve been investing in improving GS in their engine so I guess it makes sense! It’s open source so maybe there’d be some parts that could be useful to borrow inspiration from? :wink:
  • I’ve been trying to get these splats working in WebXR (Meta Quest 3) but anything over aprox 100k splats starts becoming unusable - 400k splats is down to 10-18fps (with massive controller movement lag), 1.5mil splats it gives up with the screen just turning into a flickering mess. I’ve gone through all the normal BJS optimisation recommendations but they seemed to barely change anything, so presumably it’s just rendering the gaussians that’s the issue. There’s also a lot more ā€œflickerā€ of the gaussians than in other GS rendering engines I’ve seen, especially noticeable in VR. Repository with my test code here if of interest!
  • Have not yet had time to fully read through this but saw it and thought there was a vague chance it could be interesting in the context of GS rendering in mobile VR HMDs such as the Quests - there’s quite a lot of research currently on GS rendering optimisations: arxiv - Optimizing 3D Gaussian Splattering for Mobile GPUs

If you have any specific ideas / tips on optimising for GS in WebXR (or just GS on lower-powered hardware in general) I’d love to hear it! Thanks for your great work on BJS as always :smiley:

Supersplat added LOD recently, that could explain the perf difference maybe :thinking:

I’ve changed the instancing batch size. from 1 splat per instance to 16. This might improve perf on lower end devices. Let me know. GS Splat batch size by CedricGuillemet Ā· Pull Request #17442 Ā· BabylonJS/Babylon.js Ā· GitHub

Do you have some number of the perf difference?

GS is GPU intensive so a small improvement on memory fetching can be beneficial. Just a few bytes less per splat can make a difference.

1 Like

I’ve changed the instancing batch size. from 1 splat per instance to 16. This might improve perf on lower end devices. Let me know.

Unfortunately I was presumably already using that perf improvement, as I’ve been using the CDN and tested over the weekend, and it looks like that was merged before the version bump last week.

Do you have some number of the perf difference?

I’ll see if I can do some proper profiling tonight/tomorrow but off the top of my head I think I was getting 5-15fps more in SuperSplat.

Thanks as always for being so active here on the forums!