v4
⚠️ v4 is not compatible with v3. All splats must be re-imported, and the new example scenes must be used. The runtime rendering path, prefab format, materials, and importer output have all changed.
v4 is effectively a rewrite of the rendering core and tooling.
Combined runtime rendering (new architecture)
- All active splat objects are now transformed into world space and sorted together as a single combined render, instead of each splat being its own self-sorting object.
- Any dynamic number of splats in one world: move, rotate, scale, and toggle them at runtime.
- Instancing — render as many copies of an object as you want without extra memory.
- Splats correctly intersect with scene geometry.
- Depth-sorted every frame for both the main player view and the VRChat photo camera (fixes a photo-camera crash).
LOD system (new) — huge scenes
- Import-time LOD hierarchy generation; the runtime selects per-chunk detail against a scene-wide, per-platform splat budget.
- Render up to ~100M splats in a world (limited mainly by VRChat world size), with a user-selected quality (max splats rendered at once).
- Streaming import for large PLY files (no longer capped at 16M).
View-dependent color / Spherical Harmonics (new)
- Spherical harmonics up to SH3 for view-dependent color.
- Optional SH texture compression (RGB565 / BC1 / BC7) and BC7 color compression to cut memory.
VRC Light Volumes integration (new)
- Splats can pick up your world's baked lighting (bright emissive parts preserved), with a runtime toggle and intensity control.
Importer (rewritten)
- Now imports .spz (Niantic format) in addition to .ply — scans from Postshot, Scaniverse, and other standard 3DGS tools.
- Interactive import preview: crop box, horizon/wall alignment by picking points, and size normalization to a target extent.
- Two import modes:
- LOD — a combined splat object with a level-of-detail hierarchy, rendered through the sorted runtime path (recommended).
- Standalone — the previous self-rendering mesh with precomputed direction-based sorting; still works on avatars or outside VRChat.
- Re-import tools — re-import a splat exactly, or reopen it in the wizard with its stored import settings.
Auto-generated in-world UI (new)
- Drop a splat prefab into the scene and the scene renderer + world-space control UI build themselves.
- Gallery mode: list splats, show one at a time, selection synced across the instance, optional master lock, per-splat names and descriptions.
- Quality presets (Very Low / Low / Medium / High), SH band, Light Volumes toggle + intensity, Gaussian scale, alpha cutoff / cull, antialiasing, LOD splat cap, and an Advanced panel.
- Bilingual — every control in English and Japanese.
- Only the gallery selection is networked; all other controls are per-user local.
Terrain colliders (new)
- Rasterize a splat into a GPU heightmap and generate a Unity TerrainCollider so visitors can walk on your scan (2.5D top-down: good for ground and terrain; overhangs and interiors are not represented).
Android / Quest support (new)
- A pre-build pass converts renderers to no-geometry shaders (zero-sized quad meshes) and swaps in a fake-sRGB path, so splats run on standalone Quest and Android (VRChat mobile). Converted automatically at build time. iOS is currently untested.
Editor tooling
- Automatic, editor-only depth sorting of every splat object in the Scene view (owns its own transient resources; does not reuse the runtime ones).
- Grouped/cleaner renderer inspector, scene-local editor state, and render targets moved to per-world temp assets.
Rendering quality & projection
- Exact analytic ellipse projection — each Gaussian's quadric is projected into clip space and its screen-space ellipse solved analytically (no affine Jacobian approximation): sharper splats up close at VR fields of view, fewer jitter / popping / missing-splat artifacts, and less overdraw.
Removed / changed
- Removed the stochastic transparency path.
- Removed manual sorting controls from the in-game UI (handled automatically now).
- Prefab format, materials, and sorting textures changed — hence the re-import requirement.
Performance
- General performance improvements across the sort and render path.