Hacker Newsnew | past | comments | ask | show | jobs | submit | slimbuck's commentslogin

I had no idea SOG was being used this way, so cool! I'm busy working on V3 if there's anything you think we should include.

https://github.com/playcanvas/splat-transform/issues/362


Hey Donovan, keep up the great work :)

That reminds we, we had really weird results with splat-transform .sog output, when measuring the references for KISS-GS a couple months back. Why is the .sog curve dipping in quality when adding more primitives?

It's the "POPSpa + .sog" curve here, in the first Figure: https://arxiv.org/html/2608.26948v1

Always wanted to go back and measure with the latest splat-transform and find whats going on there.


Hi Wieland and congrats on your paper!

The issue you saw had been addressed in 1.7.0. We were generating codebooks for color and scale using k-means, which would result in bad values sometimes for the extremes. In 1.7.0 we switched to an optimal quantiser with outlier handling. It was actually surprisingly hard to get this right.

I just got opus to valid this now and it found another issue with our scale codebook gen, which I will fix now. Huzzzah!


The biggest update is adding alpha compensation (alpha > 1). With this in place we can addresses the gaps that appear after performing many rounds of decimation.

Perhaps niche compared to the entire web, but we use lossless webp for gaussian splat data delivery for realtime rendering. (https://developer.playcanvas.com/user-manual/gaussian-splatt...).

Scenes often comprise gigabytes of lossless webp, some of which you can see at https://superspl.at.


We could get better compression using a custom encoder, however with webp the browser decodes off the main thread, copies the resulting data to GPU memory and caches the images for us. All very useful on the web!


The two challenges with something like this are:

1. Capturing the entire scene with photos or video and converting ("training") these into a 3d Gaussian splat. This is what Vincent did so well with Grace. Open source tools for training are Brush and Lichtfeld Studio.

2. Creating a user experience with the resulting capture. In the case of Grace it involved adding the peek effect, camera controls, moving cars etc. This was all done using PlayCanvas as the article describes, which is also open source.

There is still some art to doing 1 well, but with a capable LLM agent and our (PlayCanvas') awesome community on Discord, you could probably manage both.


(And if that doesn't work for you, please let me know!)


Hello, I'm wondering whatever you mean? You can absolutely walk around the church indoors on mobile. Just tap to walk.


If you can, please check any output/errors on the developer console?


https://pastebin.com/gyzQDstw

Last lines:

  HTTPS-First Mode: Upgrading insecure speculative TCP connection “http://superspl.at/” to use “https”.
  HTTPS-First Mode: Upgrading insecure request “http://superspl.at/” to use “https”.
  Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://sentry.sc-prod.net/api/302/envelope/?sentry_version=7&sentry_key=d107d06d48c2e0f20554f721048e3faa&sentry_client=sentry.javascript.react-router%2F10.50.0. (Reason: CORS request did not succeed). Status code: (null). 2
  can't access property "messageManager", target is null ExtensionParent.sys.mjs:75:42
      verifyActorForContext resource://gre/modules/ExtensionParent.sys.mjs:75
      recvAPICall resource://gre/modules/ExtensionParent.sys.mjs:1186
      _recv resource://gre/modules/ConduitsChild.sys.mjs:90
      receiveMessage resource://gre/modules/ConduitsParent.sys.mjs:474
  Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://sentry.sc-prod.net/api/302/envelope/?sentry_version=7&sentry_key=d107d06d48c2e0f20554f721048e3faa&sentry_client=sentry.javascript.react-router%2F10.50.0. (Reason: CORS request did not succeed). Status code: (null). 2
  Missing resource in locale fr: devtools/client/toolbox.ftl
  can't access property "messageManager", target is null 3 ExtensionParent.sys.mjs:75:42
  Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://sentry.sc-prod.net/api/302/envelope/?sentry_version=7&sentry_key=d107d06d48c2e0f20554f721048e3faa&sentry_client=sentry.javascript.react-router%2F10.50.0. (Reason: CORS request did not succeed). Status code: (null).
  TypeError: Response constructor: Response body is given with a null body status. Utils.sys.mjs:279:17


We (playcanvas) use k-means clustering to generate a 64k entry palette of coefficients in our SOG compressed GS format.

The data savings are huge, but the compression step is slow and requires a GPU.

It would be awesome if we could find a better/faster method of compressing these 45 dimensional monsters.


Hello, playcanvas developer here. May I ask what phone/device you're on? Might be a bug. (No pun intended).


I experience the same thing on Fennec F-Droid 143.0.3 (Firefox) on Android 14.


Right, thanks for confirming. It seems firefox related. We'll get this patched asap!


Also experiencing this issue in Fennec F-Droid


Hey I'm on Firefox too so I can't see how it's supposed to work without the bug.

But I just wanted to say the best way to interact with Gaussian Splats on mobile I've seen is with the Scaniverse app. Really, the UX is great there.


No issues here on iPhone 12 running iOS 18.6.2 and Firefox 143.2 (62218)


The orbiting sensitivity is a bit high when zoomed in a lot, which can lead to the model spinning out of control, as the other user mentioned.

Still manageable though, just very sensitive.


Have you tested the shader's runtime performance penalty after minification?

Also wondering how you handle named uniforms?


Most transformations don't change the code that's executed.

  const float x = sin(2);
  const float y = 2;
If you define these two consts, we can inline y everywhere it's used. But by default, we don't inline x as it would lead to more work at runtime (maybe it doesn't matter for sin, but other function calls can be expensive). If you notice performance issues, please file a bug.

Renaming uniforms is optional (there's a flag). If you use C++, you can generate a .h header file that contains both the minified shader and macros that tell you how they've been renamed.

So Shader Minifier will generate macros like:

  # define VAR_time "f"
to tell you that "time" is now called "f" and you can use VAR_time in your C++ code.


I cannot answer this for him, but I can speculate on the answer to your first question. The transformations he described his minifier applying do not change the code from the perspective of the compiler in any meaningful way, so the end result should have no performance difference. The only possible exception is the inlining, but the compiler likely would have done that anyway, so the end result should still have no difference.

To state that more precisely, everything is going to be translated into a SSA syntax in a compiler pass at some point. At that point, much of what he described should be either something the toolchain would have done (such as comment removal by the preprocessor) or effectively undone (such as the variable name reuse since by definition SSA makes each variable name be used exactly once). The rest should converge to the same result after subsequent optimization passes (such as an inlining pass). If you find a performance difference from using his tool, file a bug report with your compiler’s authors.


Some of these would be better converted to 3dgs.


Consider applying for YC's Winter 2027 batch! Applications are open till November 2.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: