v2.13.0

playcanvas/enginev2.13.0Nov 10, 2025by mvaligursky

AI Summary

Major update focused on Unified GSplat rendering with new modes, optimizations, and API improvements.

Key Highlights

  • New ColorRamp rendering mode for GSplats
  • SH re-evaluation when camera moves
  • GSplat LOD format supports environment tag
  • Optimized asset streaming and sorting
  • New shader customization API (modifyCovariance)

New Features

  • ColorRamp rendering mode
  • Spherical Harmonics re-evaluation
  • GSplat LOD environment tag support
  • Simplified shader chunk override API
  • modifyCovariance API
  • UploadStream API

Full Release Notes

## Changes
* ColorRamp rendering mode for unified gsplats by @mvaligursky in https://github.com/playcanvas/engine/pull/8060
* Unified gsplats re-evaluate their Spherical Harmonics when camera moves by @mvaligursky in https://github.com/playcanvas/engine/pull/8098
* GSplat LOD format supports environment tag by @mvaligursky in https://github.com/playcanvas/engine/pull/8110
* Improvements to unified gsplat asset streaming by @mvaligursky in https://github.com/playcanvas/engine/pull/8062
* Exposed simpler shader chunk override way to customize gsplat vertex shaders by @mvaligursky in https://github.com/playcanvas/engine/pull/8063
* Expose modifyCovariance and unify gsplat shader customization API by @mvaligursky in https://github.com/playcanvas/engine/pull/8064
* Few improvements to unified gsplat rendering by @mvaligursky in https://github.com/playcanvas/engine/pull/8065
* Optimize sqrt calls by @willeastcott in https://github.com/playcanvas/engine/pull/8070
* Optimize Gaussian splat sorting to skip unnecessary updates by @mvaligursky in https://github.com/playcanvas/engine/pull/8104
* Optimize 16-bit unpacking in gsplat chunks by @willeastcott in https://github.com/playcanvas/engine/pull/8071
* Cache RenderTarget dimensions and optimize resize by @mvaligursky in https://github.com/playcanvas/engine/pull/8097
* Sync GLSL gsplat chunks with WGSL by @willeastcott in https://github.com/playcanvas/engine/pull/8072
* Order change in jsdocs block for consistency by @mvaligursky in https://github.com/playcanvas/engine/pull/8073
* Small refactor to work buffer refactor for unified gsplats by @mvaligursky in https://github.com/playcanvas/engine/pull/8091
* Fallback texture format for work buffer for unified gsplat rendering by @mvaligursky in https://github.com/playcanvas/engine/pull/8093
* Add debug label to WebGPU compute passes by @samw-improbable in https://github.com/playcanvas/engine/pull/8094
* Optimization wireframe index generation by @AlexAPPi in https://github.com/playcanvas/engine/pull/8025
* chore(deps): update dependency node to v24 by @renovate[bot] in https://github.com/playcanvas/engine/pull/8078
* chore(deps): update github artifact actions (major) by @renovate[bot] in https://github.com/playcanvas/engine/pull/8074
* Update gsplat work buffer to use 2 uint textures instead of 3 half-float textures by @mvaligursky in https://github.com/playcanvas/engine/pull/8055
* Update jsdocs for Material.update() by @mvaligursky in https://github.com/playcanvas/engine/pull/8103
* Refactor gsplat shader chunks for tree-shaking by @mvaligursky in https://github.com/playcanvas/engine/pull/8115
* Add UploadStream API and optimize GSplat order data uploads with non-blocking transfers by @mvaligursky in https://github.com/playcanvas/engine/pull/8053
* Update actions/setup-node action to v6 by @renovate[bot] in https://github.com/playcanvas/engine/pull/8052
* [DOCS] add documentation for ComponentSystem.id by @aidinabedi in https://github.com/playcanvas/engine/pull/8087
* Use math.DEG_TO_RAD uinstead of PI / 180 internally by @mvaligursky in https://github.com/playcanvas/engine/pull/8111
* Revert unintended change by @slimbuck in https://github.com/playcanvas/engine/pull/8047

## Fixes
* [Fix] Unified splat rendering was leaking centers array in the worker by @mvaligursky in https://github.com/playcanvas/engine/pull/8061
* Fix exp perf regression by @slimbuck in https://github.com/playcanvas/engine/pull/8046
* [Fix] Fix to particle exmaple not setting up shader correctly by @mvaligursky in https://github.com/playcanvas/engine/pull/8045
* [Fix] Make sure node aabb debug rendering executes every frame by @mvaligursky in https://github.com/playcanvas/engine/pull/8044
* Patch null SOG entry by @slimbuck in https://github.com/playcanvas/engine/pull/8056
* InputSource pointer move fix on Firefox by @kpal81xd in https://github.com/playcanvas/engine/pull/8057
* Fix spotlight rendering issues with small cone angles in clustered lighting by @mvaligursky in https://github.com/playcanvas/engine/pull/8108
* Fix spotlight shadow leaks in clustered lighting by @mvaligursky in https://github.com/playcanvas/engine/pull/8109
* Fix canvas texture dimension mismatch causing texture upload to not work on WebGPU by @mvaligursky in https://github.com/playcanvas/engine/pull/8113
* [Fix] Reordered bindings when using a StorageBuffer  by @samw-improbable in https://github.com/playcanvas/engine/pull/7886
* [Fix] Mark splatDistances as property in gsplat component by @mvaligursky in https://github.com/playcanvas/engine/pull/8059
* [Fix] restore mouse movement in pointer lock mode by @mvaligursky in https://github.com/playcanvas/engine/pull/8116
* Remove MiniStats div from DOM on destroy by @willeastcott in https://github.com/playcanvas/engine/pull/8069
* Gizmo regression fixes by @kpal81xd in https://github.com/playcanvas/engine/pull/8079
* Remove no longer used test splat lod data by @mvaligursky in https://github.com/playcanvas/engine/pull/8082
* Unified gsplat does not use material, avoid warning when cloning by @mvaligursky in https://github.com/playcanvas/engine/pull/8100
* [Fix] make all gsplat engine examples compatible wtih a Null GraphicsDevice by @mvaligursky in https://github.com/playcanvas/engine/pull/8101
* [Fix] varying bug when using `@interpolate` by @samw-improbable in https://github.com/playcanvas/engine/pull/8075
* [DOCS] fix possible null in ModelComponent.model by @aidinabedi in https://github.com/playcanvas/engine/pull/8092
* [DOCS] Fix types and documentation for applySceneSettings by @aidinabedi in https://github.com/playcanvas/engine/pull/8085
* [Fix] Updates jsdocs to use SKYTYPE_ instead of SKYMESH_ by @mvaligursky in https://github.com/playcanvas/engine/pull/8102

## Examples
* Example to show gsplat reveal shader effects by @mvaligursky in https://github.com/playcanvas/engine/pull/8084
* GSplats LOD-streaming example by @mvaligursky in https://github.com/playcanvas/engine/pull/8083
* Shader Effects framework + example for gaussian splatting by @mvaligursky in https://github.com/playcanvas/engine/pull/8105

## New Contributors
* @samw-improbable made their first contribution in https://github.com/playcanvas/engine/pull/7886

**Full Changelog**: https://github.com/playcanvas/engine/compare/v2.12.4...v2.13.0