v2.16.0

playcanvas/enginev2.16.0Feb 3, 2026by mvaligursky

AI Summary

Introduces procedural GSplat Container API, 2D Gaussian Splatting support, and WGSL extensions.

Key Highlights

  • Adds procedural GSplat Container API
  • Supports 2D Gaussian Splatting rendering
  • Adds WGSL subgroup_uniformity and subgroup_id support
  • Improves shader preprocessor with numeric literals

New Features

  • Procedural GSplat Container API
  • 2D Gaussian Splatting support
  • WGSL subgroup support

Full Release Notes

## Changes
* Procedural GSplat Container API by @mvaligursky in https://github.com/playcanvas/engine/pull/8352
* GSplat Extra Streams and Work Buffer Customization by @mvaligursky in https://github.com/playcanvas/engine/pull/8383
* GsplatProcessor and extra data streams for gaussian splats by @mvaligursky in https://github.com/playcanvas/engine/pull/8395
* GSplat Work Buffer Custom Streams Support by @mvaligursky in https://github.com/playcanvas/engine/pull/8396
* Unify GSplat format shader architecture by @mvaligursky in https://github.com/playcanvas/engine/pull/8377
* GSplat: Centralize texture management with GSplatStreams class by @mvaligursky in https://github.com/playcanvas/engine/pull/8379
* Clarify gamma correction docs by @mvaligursky in https://github.com/playcanvas/engine/pull/8386
* Modernize legacy posteffect scripts to ES6 classes and fix FXAA offset bug by @mvaligursky in https://github.com/playcanvas/engine/pull/8397
* Update jsdocs of QuadRender by @mvaligursky in https://github.com/playcanvas/engine/pull/8398
* Add BatchManager.getGroupById method by @mvaligursky in https://github.com/playcanvas/engine/pull/8399
* Destroy WebGPU texture immediately instead of letting garbage collection do it by @mvaligursky in https://github.com/playcanvas/engine/pull/8401
* Add numeric literal support to shader preprocessor by @mvaligursky in https://github.com/playcanvas/engine/pull/8402
* Implement deferred destruction for WebGPU textures by @mvaligursky in https://github.com/playcanvas/engine/pull/8403
* Add 2D Gaussian Splatting (2DGS) Rendering Support by @slimbuck in https://github.com/playcanvas/engine/pull/8416
* Improve XrSession script documentation and consistency by @willeastcott in https://github.com/playcanvas/engine/pull/8417
* feat: add snap vertical movement to XrNavigation script by @willeastcott in https://github.com/playcanvas/engine/pull/8420
* Unified GSplat Picking Support by @mvaligursky in https://github.com/playcanvas/engine/pull/8421
* Document ColorLUT texture format in CameraFrame JSDoc by @mvaligursky in https://github.com/playcanvas/engine/pull/8424
* Remove deprecated gsplatCustomizeVS shader chunk by @mvaligursky in https://github.com/playcanvas/engine/pull/8422
* Rename GSplatParams.id to enableIds by @mvaligursky in https://github.com/playcanvas/engine/pull/8423
* Add support for WGSL subgroup_uniformity and subgroup_id language extensions by @mvaligursky in https://github.com/playcanvas/engine/pull/8426
* GSplatProcessor: Add numSplats uniforms and automatic padding skip by @mvaligursky in https://github.com/playcanvas/engine/pull/8430

## Fixes
* ES2020 compatibility for GSplatSortBinWeights worker injection by @mvaligursky in https://github.com/playcanvas/engine/pull/8373
* Fix preprocessor numeric literal parsing to avoid incorrect partial matches by @mvaligursky in https://github.com/playcanvas/engine/pull/8404
* Fix unified gsplat work buffer extra streams for octrees and color-only updates by @mvaligursky in https://github.com/playcanvas/engine/pull/8405
* Fix WebGL texture.read() for R8/RG8/RGB8 formats and add UNPACK_ALIGNMENT state caching  by @mvaligursky in https://github.com/playcanvas/engine/pull/8406
* Revert "[FIX] Fix ElementComponent 'mousemove' event firing outside element" by @willeastcott in https://github.com/playcanvas/engine/pull/8413
* [Fix] ClusteredOmniShadows example - avoid debug render texture when destroyed by @mvaligursky in https://github.com/playcanvas/engine/pull/8433
* Fix material-refraction example to use correct IOR value by @mvaligursky in https://github.com/playcanvas/engine/pull/8434
* [Fix] GSplatComponent.customAabb to fall back to resource AABB by @mvaligursky in https://github.com/playcanvas/engine/pull/8435
* Fix WebGPU uniform warnings in RenderPassPicker by @mvaligursky in https://github.com/playcanvas/engine/pull/8436

## Examples
* Flipbook engine example by @mvaligursky in https://github.com/playcanvas/engine/pull/8384
* GSplat Editor Example and Gsplat Shader / GsplatProcessor API Refactoring by @mvaligursky in https://github.com/playcanvas/engine/pull/8412
* Exposed the color band width parameter for radial reveal effect by @mvaligursky in https://github.com/playcanvas/engine/pull/8414
* Add GSplat procedural shape scripts and example, other fixes and imrovements by @mvaligursky in https://github.com/playcanvas/engine/pull/8415
* Add GsplatMesh script and example for converting meshes to gaussian splats by @mvaligursky in https://github.com/playcanvas/engine/pull/8419
* Add LOD Instances Gaussian Splat example by @mvaligursky in https://github.com/playcanvas/engine/pull/8429

**Full Changelog**: https://github.com/playcanvas/engine/compare/v2.15.3...v2.16.0