Beta 2025.3.4.1407

From Resonite Wiki
Revision as of 00:00, 5 March 2025 by J4 (talk | contribs) (add version)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Beta 2025.3.4.1407 is a Resonite version released on 2025/03/04.

The following notes were sent by Frooxius:

Hello everyone!
I'm happy to finally release initial native support for Gaussian Splats in Resonite! This is a pet project I've been working on and off for a while, that it got pushed off by PhotonDust, Stripe and a bunch of other things, but now it's finally here!
You can import Gaussian Splats into Resonite, render them (even in VR), do basic editing (bounding box/sphere clipping) and export them back out!
For those of you who don't know, Gaussian Splats are (relatively) novel way of representing and rendering scenes. It's often produced by 3D scanning real world and it can achieve very high amount of fidelity - often the 3D scanned scenes will look very real life like - you could say this is the "real life update"! 😄
Also important note - they are pretty heavy on the HW - especially GPU and VRAM usage, so be careful with them! The bigger the splat, the heavier it gets! Treat them as a very high poly mesh - if you wouldn't spawn that into a populated session, don't spawn a splat!
I am still working on VRAM compression, which should come in the following days and will significantly reduce their VRAM usage, so keep tuned for more improvements to this and report any issues you find (but read the details below first please).
There is also a setting in Graphics setting for the rate at which the splats are sorted - lowering the value will lower the GPU usage, but result in more graphical artifacts when you change the viewpoint rapidly. We expect this to get much better once we switch away from Unity fully in the future and can use more modern GPU features.
There's also some other fixes and optimizations as well! Notably a fix that sometimes makes headless lock up on some worlds.

New Features:

  • Added initial support for Gaussian Splat importing & rendering (requested by @MR-Alex, @Martn D., issue #2199)
    • Desktop & VR rendering is both supported
    • PLY & SPZ file formats are supported
      • When importing from PLY, 3D model import dialog will be shown. You need to select "Gaussian Splat" if the PLY is Gaussian Splat (the system is not able to auto-detect this currently)
      • If you find a file that doesn't import properly make a bug report!
    • IMPORTANT: Please note that gaussian splats can be quite heavy on GPU & VRAM usage. Be responsible when bringing them to worlds - treat them same as you'd a very high poly mesh
    • I'm working on porting VRAM compression for the splats, which will reduce their VRAM impact significantly, this will be release soon!
    • Due to limitations of our Unity version, less efficient sorting algorithm is currently used. Sorting speed can be adjusted in Graphic settings to improve GPU load or speed up sorting. When the sorting speed is low, changing viewpoint quickly will lead to temporary graphical artifacts
    • When importing splats from PLY format, option to recompress them to SPZ is offered - this will significantly save on storage space
    • Simple point cloud based collider + shape around origin is added on import
    • Rendering implementation is based on: https://github.com/aras-p/UnityGaussianSplatting
    • C# port of SPZ library implemented by @Cyro and available at: https://github.com/Yellow-Dog-Man/Spz.NET
    • Blending between two gaussian splat renderers is not supported
  • Added GaussianSplatRenderer component, responsible for rendering the splats
    • SizeScale & OpacityScale can be used to adjust the size/opacity of the rendered splats - this is mostly for diagnostic purposes
    • MaxSHOrder allows you to restrict the order of spherical harmonics used to compute the color - lowering this number will make the splats not change color based on the direction you look at them from correctly
    • SphericalHarmonicsOnly - this will only use the higher order spherical harmonics exclude the base color - this is mostly for diagnostic purposes to visualize contribution of the spherical harmonics
  • Added StaticGaussianSplat component
    • This provides a static gaussian splat asset
    • It supports a number of simple processing methods for basic gaussian splat editing that can be called with ProtoFlux
      • ClipWithBoundingBox - clips any splats outside of a bounding box (with optional orientation)
      • ClipWithSphere - clips any splats outside of a sphere
  • Added GaussianSplatExportable to allow exporting gaussian splats from Resonite
    • You can use this to export edited gaussian splats
    • Exporting both in PLY & SPZ is supported
  • Added DiagnosticGaussianSplat
    • This is a procedural gaussian splat, where you can specify individual splats
    • This is mostly meant for diagnostic purposes as well for learning about gaussian splats and how they work
  • Added NullParticleRenderer which doesn't render the particles themselves (requested by @Baxter, issue #3847)
    • This is useful if you want to render only the trails/ribbons/lights, without the billboards for each particle
    • It's more efficient than setting billboard sizes to zero or making them fully transparent, as it completely skips processing & generating geometry for particle billboards
  • Added admin commands for diagnosing Stripe supporter information to help with support tickets (implemented by @Dante)
    • This is internal feature, but will help improve responses at support.resonite.com

Optimizations:

  • Optimize memory usage when encoding meshes with Plain/LZ4 encoding
    • This also fixes running out of memory with those encodings for extremely large meshes

Locale:

  • Merged Korean locale update @MirPASEC
  • Merged Polish locale update by @FoxoBread
  • Merged French locale update by @Jae “awa” J4
  • Merged German locale update by @Muppeq
  • Merged English locale fixes by @Muppeq
  • Merged Chinese locale update by modimobeikete
  • Merged Japanese locale update by @Aesc

Fixes:

  • Fixed user credit type not being assigned properly (based on report by @Carson)
  • Fixed race condition in LocalMeshProvider, which could result in the engine hanging indefinitely, notably on headless (based on report by @Foxbox, @bWGi with recent event)
  • Fixed SignalR not getting properly initialized at startup when auto-login isn't enabled