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?
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.
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!
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.
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
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.
https://github.com/playcanvas/splat-transform/issues/362
reply