ply gaussian splats rendering behavior questions

a new week, a new question
(a few to be exact)

I’m doing some tests with gaussian splats of objects right now.
And with the help of a nice script written by Stefan Hähnlein (kudos!)

Link here: 3ds Max Exporter to Postshot Exporter for Gaussian Splatting - 3D-Visualisierungen + 3D-Animationen - Deepframes 3D-Agentur

and after a bid of fiddling, i was able to create a pretty accurate gaussian splat of a pretty heavy clients cad machinery system.
(therefore i’m so sorry, i can’t show you the full system but only little snippets of it)

It has 3 million splats in postshot and 600mb when exported to ply.
When viewed in postshot and also supersplat, the file looks quite awesome, render quality wise.

BUT when i load it in 3ds max via the vray gaussian object, it turns out quite differently.
So here are a few questions i can’t wrap my head around, hope you can help:

1: The viewport representation of my ply seems pretty thin.
Why is there only a few point to see there?

2. What’s the deal with these primitives numbers?
Do they point to question 1? What are they telling me and how i could i even tune that, if those numbers are off?

3. So, that’s actually my main question:
Render quality of splats in 3ds max/vray

When i started rendering, the result was quite different then what i see in postshot and supersplat.
Looks like if there would be some off AO on top of it.
Turning off AA mode in postshot while training made it a little bit better.
But the thing is, when i go close with the camera, the details seems to be okeyish.

As soon as go further away from the object, it starts to behave weirdly. (4.)
It feels like the splats won’t size down correctly or the shading is changing.
(See the little air grid in the screenshots and it’s even worse on little Logos or Typos.)
Like really bad AA or something.
Is that just the nature of splats?

Seems in the videos around, when placing 3d files in splat environments (the usual case i guess)
it seems to me this problem doesn’t occur. Or i just can’t see it on youtube…

As always, thx in advance for any feedback!​​

I tried to test the workflow, only to find out you need a full PostShot license to export the .plys.
Anyway, here’s what I noticed:
1. and 2. - The splats are not very visible because most of them are low-opacity primitives, which do not seem to have a viewport preview at all. Why they are like so surely depends on the way PostShot exported/calculated them. I need to ask Vlado if their preview is something that we can (at least optionally) add.
3. 4. and 5. It seems to me that this depends on the scene render settings (filtering and resolution for one). Try testing with a larger resolution for starters.

Hi Aleksandar,
have a great start into the week.
Thx for investigating on it!

1. and 2. I found out, ironically, the less splats the file has, the more splats gonna be shown in the container.

Still wondering what a “low pacity primitive” is. Would it mean, those splats are lost in the sauce and the file is way “oversplattet” i.e. too much splats?
I tried it too with a file less detailed. But it doesn’t have any advantages in those critical areas. But loosing details and getting holes overall.
Supersplat has an optimize option while exporting, but then it’s not loading in the container at all.

What do i try to achieve here anyway?
For those particular shots, i do rework a heavy cad microscope with endless parts etc.
I’m looking for a neat way to export those prepped machines to send it out to other agencies working with it then.
To overcome sending vray/max files or fbx and save all the hassle for different apps, i thought maybe the GSplat way could be something.

Looking at the results in postshot, it looks pretty awesome. So, i was like, yeah man, that’s working!
But now going back to 3ds max, it’s a bit sobering and i’m wondering why is such a difference between the GSplat viewers and what we render.

Will have a look with filtering and resolution.
I need another tesrtmodel which i can show in here too

Here’s what the devs told me:
The low opacity primitives are Gaussian primitives (a Gaussian splat consists of such primitives, which have certain properties like color, opacity, size, etc.), which are nearly transparent (not sure what the threshold is atm, but will find out). These are not drawn in the viewport as already observed. I am not sure why they are exported like that from PostShot. Sounds like a question for them.

Regarding the blurriness: there are actually settings to control the filtering of the GaussianSplat; however, currently they are hidden (but will be implemented into the 3ds Max UI soon). If you have access to the nightly builds, you can try them out (they are under V-Ray > Gaussian splat options). If not, use the following MaxScript line to reduce the filtering value (default = 1). This way, you’ll most likely get results more in tune with PostShot.

renderers.current.options_gaussiansFiltering = 0.1

Note: the name of this parameter is different in the nightly builds, so it will probably not work in the next update.

Quoting the docs: Low opacity primitives – Displays primitives that were hidden and excluded from the bounding box calculation due to their low opacity. Most of the time these are primitives that are not directly forming a solid shape.

In your case, maybe the majority of your splats are floating somewhere in the space. Otherwise, the opacity threshold is 0.15. There’s actually another hidden parameter for this in the VRayGaussianGeom called .viewportOpacityFilter. Run the following line after selecting the VRayGaussianGeom to change it to 0, which will reveal all splats:

$.viewportOpacityFilter=0
$.viewportPrimitivesPercent=99
$.viewportPrimitivesPercent=100

The viewportPrimitivesPercent lines are there due to a bug I just found (you need to touch it so that the opacity threshold gets accepted). It’s probably a good idea for this parameter to also be revealed.

Hi Aleksandar!
Thx so much for the updates! Somehow i didn’t get a mail update this time that you wrote something. Sorry for my late reply.

Your quote: “maybe the majority of your splats are floating somewhere in the space” got me thinking,
i actually do create the Splat in Postshot with a “mask”. That means, the png sequence used for Postshot has an alpha and Postshot is able to use it.
So could it be, while creating the splat, you don’t see a single floating splat around (because of the “mask”),
but maybe they’re actually still there, but just hidden and that’s the ominous low opacity primitives?

Will have a play with the filtering too! Thx for that!

In the meantime, i also did another test.
So for everybody interested. I just downloaded a model from GrabCad (a mean one, with a lot of details and holes!)
and created another highly accurate splat which i can now share with you.
So you don’t need Postshot for this and you can join testing 3DGS in Vray with us.
I also did a comparison which you can see in the attached pics.

https://we.tl/t-TYixxrnfBD

I’m positively surprised how good this one comes out.
Interestingly it seems it almost doesn’t have the little issues i had with the client machinery.
Could that be related to colors too? I.e. like sampling challenges when white pixels are next to black.
Which was the case in my clients usecase.

If you look very closely, you can see some differences in the highlights,
but i’m stoked how it manages to get most of the holes and small details right.
Left Original, right side is splat

Any Chance the container will be able to read those compressed spz splat files too in the future?
Seems they’re quite smaller in size.

Made a little video bout the workflow on linkedin:

https://www.linkedin.com/posts/olika3d\_gsplat-rnd-gaussiansplatting-activity-7403357367477768192-noCS?utm\_source=share&utm\_medium=member\_desktop&rcm=ACoAABkBEf0BAn-RDUisQiqUVpqWLLLoPlpBOfo

Glad if you want connect there!

They’re probably with opacity=0.

It’s possible.

Well, the splat is constructed from “baked” render views that were output (in the tutorial) as JPG/PNGs; maybe having more bit-depth (TIFF, EXR, etc.) may yield a more precise result; however, I’m not certain if PostShot supports other formats.

I need to ask the team about this.

EDIT: Vlado said it could be done. Log it in the Ideas Portal.