New Features
- Unified GSplat support for rendering to shadow map + Example by @mvaligursky in #8228
- Updated
GsplatShaderEffectscript to use simpler material API by @mvaligursky in #8229 - Improved
splatBudgetbehavior to allow both increase and decrease LOD by @mvaligursky in #8230 - Moved the
splatBudgetAPI to gsplat component by @mvaligursky in #8231 - Updated
Ministatswith additional timings by @mvaligursky in #8241 - Workbuffer for gsplat uniform no longer stores covariance, but directly the components by @mvaligursky in #8244
- Removed workaround related to workbuffer storing covariants on android by @mvaligursky in #8245
- Add
gsplatModifyVSshader customization chunk for gaussian splats by @mvaligursky in #8246 - Update GitHub Artifact Actions (major) by @renovate[bot] in #8247
- Add simple render pipeline cache for mipmap renderer (WebGPU) by @mvaligursky in #8253
- Add viewport / scissor support to
RenderPassShaderQuadby @mvaligursky in #8254 - Adds a GPU-based radix sort implementation using fragment shaders with mipmap-based prefix sums by @mvaligursky in #8255
- Adds support for specifying a custom entry point function name when creating compute shaders by @mvaligursky in #8258
- Increase quad buffer size for ministats to allow more stats to render by @mvaligursky in #8259
- NPM Publish by @kpal81xd in #8261
- Add
KHR_materials_emissive_strengthexport support by @willeastcott in #8268 - Add
KHR_materials_specularexport support by @willeastcott in #8269 - Add
KHR_materials_unlitexport support by @willeastcott in #8270 - Add
KHR_materials_iorexport support by @willeastcott in #8272 - Add
KHR_materials_dispersionexport support by @willeastcott in #8274 - Defines map can be specified when creating compute shader by @mvaligursky in #8273
- Add
KHR_materials_clearcoatexport support by @willeastcott in #8275 - Add
KHR_materials_transmissionexport support by @willeastcott in #8277 - Add
KHR_materials_volumeexport support by @willeastcott in #8278 - Add WebGPU compute shader radix sort + changes / fixes to render pass based radix sort by @mvaligursky in #8276
- Add
KHR_materials_sheenexport support by @willeastcott in #8279 - Add compute pipeline creation caching for WebGPU by @mvaligursky in #8281
- Use Set instead of array for buffer tracking by @mvaligursky in #8283
- Add
KHR_materials_iridescenceexport support by @willeastcott in #8280 - Add
KHR_materials_anisotropyexport support by @willeastcott in #8284 - Improve docs for
get/setFromEulerAnglesby @willeastcott in #8289 - Clustered lighting integer arithmetic optimization by @mvaligursky in #8303
- Make
Texture.read()a public API by @mvaligursky in #8306 - GPU-based sorting using compute shaders for unified gsplat (optional) on WebGPU by @mvaligursky in #8310
- Clean up camera shader parameter setup by @mvaligursky in #8314
- Add WebGPU texture-format-tier1, texture-format-tier2, and primitive-index features by @mvaligursky in #8316
- Add
TextureViewfor mip level and array layer access in compute shaders by @mvaligursky in #8308 - Optimize texture tracking with Set-based dirty texture management by @mvaligursky in #8309
- Adds a configurable color property to the vignette post-effect by @mvaligursky in #8318
- Add new texture formats:
RG32F,RGB9E5,RG8S,RGBA8S,RGB10A2,RGB10A2Uby @mvaligursky in #8319 - Added node name to batch insertion/removal assert message by @yaustar in #8322
- Refactor Annotation System with AnnotationManager by @willeastcott in #8323
- Updates the
LICENSEcopyright year to 2026 by @mvaligursky in #8333 - Allow changing unified property without disabling component by @mvaligursky in #8334
- Add indirect compute dispatch support for WebGPU by @mvaligursky in #8332
- WebGPU now supports omni/spot shadows baking using Lightmapper by @mvaligursky in #8335
- Improve JSDoc for the core layer by @willeastcott in #8358
- Add 'worker' to reserved script names by @mvaligursky in #8368
Fixes
- [FIX] Specify anonymous cross origin for gsplat assets to avoid security issues on iOS by @mvaligursky in #8235
- Fix uninitialized
SplatCentermembers in GLSL gsplat shader by @mvaligursky in #8237 - Internal cursor file is ignored by git by @mvaligursky in #8242
- [FIX] Fix metalness and roughness handling in
UsdzExporterby @willeastcott in #8248 - [FIX] Return correct typed array from texture.read() on WebGPU platform by @mvaligursky in #8251
- [FIX] Notify existing element descendants when a screen is added by @willeastcott in #8252
- [FIX] Fix particle emission rate when looping by @willeastcott in #8263
- [FIX] Convert sRGB colors to linear when writing glTF by @willeastcott in #8267
- Fix SOG SH decompression by @slimbuck in #8271
- ScopeSpace.removeValue not clearing destroyed textures from scope by @mvaligursky in #8282
- [FIX] Fix glTF export for
KHR_materials_pbrSpecularGlossinessmaterials by @willeastcott in #8285 - [FIX] Fix black specular map still showing reflections by @willeastcott in #8287
- [FIX] Fix
ElementComponentmousemoveevent firing outside element by @willeastcott in #8288 - [FIX] Fix
ElementComponentnot rendering when entity already in hierarchy by @willeastcott in #8290 - Tighten up typing for
RigidBodyComponent#typeby @willeastcott in #8292 - [FIX] Fix
KHR_materials_specularincorrectly affecting metals and diffuse by @willeastcott in #8293 - [FIX] Add Dedicated Isotropic GGX Specular Implementation by @willeastcott in #8299
- [FIX] Enforce WGSL syntax highlighting in all WGSL chunks by @willeastcott in #8300
- [FIX] Fix clustered lighting artifacts caused by UV precision by @willeastcott in #8302
- [FIX] Fix screen space particles when CPU simulation is used by @willeastcott in #8301
- [FIX] Add setter for
Script.scriptNamefor TypeScript compatibility by @willeastcott in #8291 - [FIX] Fix orthographic camera loading from glTF by @willeastcott in #8304
- [FIX] Fix glTF spot light default cone angle by @willeastcott in #8305
- [FIX] Fix glTF spot light luminance calculation by @willeastcott in #8307
- Fix IOR/refractionIndex being ignored in materials by @mvaligursky in #8311
- Rename
GSplatComponentSystem#getGSplatMaterialto getMaterial by @mvaligursky in #8339 - Better support blended pickers by @slimbuck in #8340
- WebGPU lightmapper support for shadow casting local lights and omni shadow shader cleanup by @mvaligursky in #8338
- Lazy mesh creation for GSplat resources by @mvaligursky in #8343
- Remove unnecessary polyfills by @willeastcott in #8347
- Modernize build target to ES2020 by @willeastcott in #8348
- annotation.mjs to annotations.mjs by @willeastcott in #8349
- Move treeshake-ignore plugin to examples by @willeastcott in #8351
- Small updates to the
BlurredPlanarReflectionscript by @mvaligursky in #8353 - [FIX] Add mip level for WebGPU device
copyRenderTargetby @AlexAPPi in #8320 - [FIX] Fixed incorrect uv1 (unwrapped uvs for lightmapping) for box and cone geometry by @mvaligursky in #8336
- [FIX] Fix
EventHandlecleanup in annotation script by @willeastcott in #8337 - [FIX] Fix glTF node matrix decomposition with negative scale by @willeastcott in #8329
- Replace
Debug.assertwitherrorOnceand early return in GSplatComponent by @mvaligursky in #8355 - [FIX] Hide
__initializeAttributesfrom the API reference by @willeastcott in #8359 - [FIX] Restore annotations for misc/annotations example by @willeastcott in #8369
- Fix WebGL array texture crash when created without levels data by @mvaligursky in #8371
- Fix memory leak in WebGPU multi-draw allocation by @mvaligursky in #8367
Examples
- Simple gsplat viewer engine example with HDR controls by @mvaligursky in #8232
- Added bloom and other tweeks to Gsplat viewer example by @mvaligursky in #8234
- Add Gaussian Splat AABB Crop Example with Edge Clipping by @mvaligursky in #8236
- Examples that create custom ministats hide the default one by @mvaligursky in #8239
- Update examples/src/examples/gaussian-splatting/crop.example.mjs by @JaclynCodes in #8266
- [Example] Added basic glb loading support to the Viewer example for HDR testing by @mvaligursky in #8312
- Add gaussian splatting annotations example with opacity controls by @mvaligursky in #8313
- Add
BlurredPlanarReflectionscript with distance-based blur effect by @mvaligursky in #8342 - Improve examples sidebar category panel styling by @mvaligursky in #8356
- [Example] Update camera positions in the anotations example to see all annotations on start by @mvaligursky in #8372
New Contributors
- @JaclynCodes made their first contribution in #8266
Full Changelog: v2.14.4...v2.15.0