Creating best quality LODs / export

Hi All!

Very excited at the work being done here… I am working on some R&D for a large scale GSplats (think city scale) so have been very excited by the advancements in LOD streaming capability of PlayCanvas.

In my testing I have done the following:

Train LOD0 at highest quality in PostShot
Copy PSHT project and retrain at lower quality (LOD1-4)
Use splat-transform to pack everything into lod-meta.json format

This is generally working quite well and was able to get an example working, however the quality loss is currently a bit of a show stopper for me.

I tried SOG which was quite a bit worse, so sticking with the JSON/Folder format for now.

My LOD0 PLY is acceptable quality, but when I transform it into streaming format, there is degradation of hard edges and also some color shifts (might have been due to the spherical dims flag)

My question is what levers do I have access to with the splat-transform CLI and what will get me the absolute best (as close to lossless) quality as possible?

I just tried to re-package with --lod-chunk-count 1024 but this seems worse, as I ended up with 11mb 2k WebPs :slight_smile:

Any tips on LOD creation or splat-transform workflows are appreciated!

1 Like

This is really not expected. What quality issues are you seeing?

We’d be very keen to see this. Is there any chance you can zip up and send us the data?

1 Like

Hi @slimbuck thanks for the response…

I will see about sending you data.

For now here is what I am seeing:

LOD0 from lod-meta.json streaming (entire data ~141MB)

This was the command I used to train:

splat-transform D11_12-12_LOD0.ply -l 0 D11_12-12_LOD1.ply -l 1 D11_12-12_LOD2.ply -l 2 D11_12-12_LOD3.ply -l 3 D11_12-12_LOD4.ply -l 4 --filter-nan D11_12_12_v1.2/lod-meta.json

I am rendering in custom code just like the LOD streaming example:

  // Create gsplat entity first so we can reference it in callbacks
  const entity = new pc.Entity( "splat");
  entity.addComponent("gsplat", {
    asset: assets.splat,
    unified: true,
  });

Is there a way to view a meta packaged LOD splat in supersplat or in some other editor to confirm it’s not my code?

Only let me put one media item in there…

This is the LOD0 in SuperSplat Editor (1.5GB PLY)

image

You can try here: PlayCanvas Examples

  • this assumes you have your streaming format hosted somewhere already
  • you can change the url the example uses (line 64)
  • and possibly eulerAngles just below
  • and then reload using small button on the top of code editor

but from the screenshot it seems it uses lower LOD there perhaps.
enable colorization - see how that example does it. If using level 0 (best quality) it would colorize it to red.

@mvaligursky

This is using LOD0. I have a dropdown to force it and also colorized it shows up red… This is using my code though… I will try to make my assets public so I can test in the example you provided.

It does indeed look like a lower LOD so it is possible my code is just wrong :thinking:


image

is D11_12-12_LOD0.ply the best quality and this the worst D11_12-12_LOD4.ply ? just making sure you don’t have it wrong way around here.

Yes correct!

I tried with a different pack I had done and did get some slightly better results… This is out of the example link you posted above.

My eyes are not super well trained for splats yet, it may match the quality of the PLY pretty well, but the colors seem off…

I believe I did have the spherical bands flag set on this one… Can you share what would provide the most accurate output? No flags, just each LOD? Maybe best if I start there…

And on that note, is my approach of copying postshot files and retraining with lower settings a fair approach for creating these LODs or is there a better way?

That example uses toneMapping: pc.TONEMAP_ACES on line 198, change that to toneMapping: pc.TONEMAP_LINEAR to preserve colors better.

I’d suggest you to join our discord PlayCanvas as there are people experienced with training, to discuss how to get a better quality for lods.

1 Like

Will do thank you!!