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