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