v2.12.0

playcanvas/enginev2.12.0Oct 9, 2025by mvaligursky

AI Summary

Significant release adding XR support, GSplat streaming, Multi-draw capabilities, and Gizmo improvements.

Key Highlights

  • XR session support
  • GSplat streaming LOD unloading
  • CameraFrame shader chunk overwriting
  • Public API for unified gsplat behavior
  • Multi-draw support for WebGL & WebGPU
  • GPU-based SOG centers buffer generation

New Features

  • XR session script (.mjs)
  • .sog deflate support
  • GSplat streaming LOD
  • CameraFrame shader override
  • Gizmo API and style changes
  • Mesh instance multi-indirect drawing
  • Multi-draw support
  • GPU SOG centers generation
  • Radial sorting for splats

Full Release Notes

## Changes
* Add xr-session.mjs script by @willeastcott in https://github.com/playcanvas/engine/pull/7942
* Support .sog files generated with deflate by @slimbuck in https://github.com/playcanvas/engine/pull/7943
* Publish workflow update by @kpal81xd in https://github.com/playcanvas/engine/pull/7949
* README format update by @kpal81xd in https://github.com/playcanvas/engine/pull/7952
* chore(deps): update actions/setup-node action to v5 by @renovate[bot] in https://github.com/playcanvas/engine/pull/7944
* chore(deps): update actions/download-artifact action to v5 by @renovate[bot] in https://github.com/playcanvas/engine/pull/7950
* GSplat using streaming LOD supports unloading files no longer needed by @mvaligursky in https://github.com/playcanvas/engine/pull/7955
* CameraFrame shader chunks can be overwritten by @mvaligursky in https://github.com/playcanvas/engine/pull/7958
* Public API to control unified gsplat behavior by @mvaligursky in https://github.com/playcanvas/engine/pull/7959
* Gizmo changes by @kpal81xd in https://github.com/playcanvas/engine/pull/7963
* Camera controls entity enabled check by @kpal81xd in https://github.com/playcanvas/engine/pull/7966
* Gizmo API and style changes by @kpal81xd in https://github.com/playcanvas/engine/pull/7967
* Exposed additional parameters for gsplat LOD by @mvaligursky in https://github.com/playcanvas/engine/pull/7962
* SOG focus by @slimbuck in https://github.com/playcanvas/engine/pull/7978
* Support for progressive LOD loading for unified splats by @mvaligursky in https://github.com/playcanvas/engine/pull/7980
* Remove allocations in camera controls by @LeXXik in https://github.com/playcanvas/engine/pull/7973
* Gizmo render update cleanup by @kpal81xd in https://github.com/playcanvas/engine/pull/7983
* Log an error if orthographic camera uses cascades shadows, which are not supported by @mvaligursky in https://github.com/playcanvas/engine/pull/7988
* Expose compose shader customization along with the example by @mvaligursky in https://github.com/playcanvas/engine/pull/7989
* Add joystick movement to xr-navigation script by @willeastcott in https://github.com/playcanvas/engine/pull/7996
* Mesh instance can use more than one indirect drawing call by @mvaligursky in https://github.com/playcanvas/engine/pull/7995
* Generate SOG centers buffer on GPU instead of CPU by @mvaligursky in https://github.com/playcanvas/engine/pull/7999
* Multi-draw support, WebGL & WebGPU by @mvaligursky in https://github.com/playcanvas/engine/pull/8004
* Add caps multi draw by @AlexAPPi in https://github.com/playcanvas/engine/pull/8007
* Add custom feedback varyings for WebGL Shader with useTransformFeedback by @AlexAPPi in https://github.com/playcanvas/engine/pull/7992
* Avoid gl_DrawID related warning during shader setup by @mvaligursky in https://github.com/playcanvas/engine/pull/8008
* Debug rendering of AABBs of individual gsplat octree nodes by @mvaligursky in https://github.com/playcanvas/engine/pull/8009
* Expose CameraComponent.depthValue and fix issue when that is zero by @mvaligursky in https://github.com/playcanvas/engine/pull/8011
* Small optimization in the way the number of rendered splats is rendered by @mvaligursky in https://github.com/playcanvas/engine/pull/8022
* Batch LOD updates to avoid overloading on slower devices by @mvaligursky in https://github.com/playcanvas/engine/pull/8027
* Improved sorting precision of unified splats by @mvaligursky in https://github.com/playcanvas/engine/pull/8029
* Unified splats support radial sorting by @mvaligursky in https://github.com/playcanvas/engine/pull/8031
* Support loading bundled sog from request by @slimbuck in https://github.com/playcanvas/engine/pull/8017
* Update NPM dependencies by @willeastcott in https://github.com/playcanvas/engine/pull/8036

## Fixes
* SOG fix on mobile by @slimbuck in https://github.com/playcanvas/engine/pull/7947
* Gizmo fixes and updates by @kpal81xd in https://github.com/playcanvas/engine/pull/7946
* Gizmo fixes by @kpal81xd in https://github.com/playcanvas/engine/pull/7954
* Gizmo fixes by @kpal81xd in https://github.com/playcanvas/engine/pull/7956
* Fixes to SOGS data unloading by @mvaligursky in https://github.com/playcanvas/engine/pull/7951
* Gizmo fixes by @kpal81xd in https://github.com/playcanvas/engine/pull/7960
* Gizmo theme fix by @kpal81xd in https://github.com/playcanvas/engine/pull/7961
* Gizmos render update patch  by @kpal81xd in https://github.com/playcanvas/engine/pull/7969
* Camera controls enable/disabled input deltas fix by @kpal81xd in https://github.com/playcanvas/engine/pull/7970
* Fix SH bug on SOG import by @slimbuck in https://github.com/playcanvas/engine/pull/7972
* Fixed rotation from negatively scaled transform  by @kpal81xd in https://github.com/playcanvas/engine/pull/7976
* Gizmo fixes  by @kpal81xd in https://github.com/playcanvas/engine/pull/7971
* Camera controls fixes by @kpal81xd in https://github.com/playcanvas/engine/pull/7977
* Fix for bundled SOG loading by @slimbuck in https://github.com/playcanvas/engine/pull/7982
* Gizmo angle guide fix by @kpal81xd in https://github.com/playcanvas/engine/pull/7984
* (fix) Debug.assert raising react error by @marklundin in https://github.com/playcanvas/engine/pull/7985
* Doc fix by @slimbuck in https://github.com/playcanvas/engine/pull/7987
* [Fix] Fixed texture VRAM tracking then Texture.resize is used by @mvaligursky in https://github.com/playcanvas/engine/pull/7997
* Unified gsplat rendering fixes and optimizations by @mvaligursky in https://github.com/playcanvas/engine/pull/7981
* fix(template-asset): invalidate cached _previewRoot upon receiving new data by @abstrakt8 in https://github.com/playcanvas/engine/pull/8003
* Fixed min and mag filter for matrices texture by @AlexAPPi in https://github.com/playcanvas/engine/pull/8013
* Destroy orderTexture by @fimbox in https://github.com/playcanvas/engine/pull/8016
* Fix GS artifacts by @slimbuck in https://github.com/playcanvas/engine/pull/8030
* [Fix] Small changes to avoid unset uniform warnings when particle systems are rendered by @mvaligursky in https://github.com/playcanvas/engine/pull/8028
* Remove obsolete parts of JSDocs on an internal function in ShaderDefinition by @mvaligursky in https://github.com/playcanvas/engine/pull/8032
* [Fix] Grid (script) is no longer pickable by @mvaligursky in https://github.com/playcanvas/engine/pull/8033
* Fix: Morph weights now respect animation layer weights by @mvaligursky in https://github.com/playcanvas/engine/pull/8034
* Unload sog dependent assets by @slimbuck in https://github.com/playcanvas/engine/pull/8037
* [Fix] WebGPU: Use textureLoad for data textures instead of textureSample by @mvaligursky in https://github.com/playcanvas/engine/pull/8038
* Use exp table for gs by @slimbuck in https://github.com/playcanvas/engine/pull/8040

## New Contributors
* @abstrakt8 made their first contribution in https://github.com/playcanvas/engine/pull/8003
* @fimbox made their first contribution in https://github.com/playcanvas/engine/pull/8016

**Full Changelog**: https://github.com/playcanvas/engine/compare/v2.11.8...v2.12.0