Releases: playcanvas/engine
Releases · playcanvas/engine
v2.19.7
Fixes
- Temporarily disable WebGPU on Imagination PowerVR GPUs (Pixel 10) by @mvaligursky in #8875
- Remove inline {@link} from camera-frame LUT attribute description by @mvaligursky in #8849
- Fix XrNavigation NaN rig corruption on gamepads without thumbstick axes by @mvaligursky in #8850
- Select scene depth decode via CAPS_TEXTURE_FLOAT_RENDERABLE by @mvaligursky in #8856
- Ensure DOF effect is resolution independent by @MAG-AdrianMeredith in #8834
Contributors
@MAG-AdrianMeredith
@mvaligursky
Full Changelog: v2.19.6...v2.19.7
v2.19.6
Changes
- Add a GSplat streaming test example, PREFERRED_DEVICE flag, and numSplats accessor by @mvaligursky in #8847
Contributors
Full Changelog: v2.19.5...v2.19.6
v2.19.5
Fixes
- Tile gsplat interval-scatter dispatch over workgroup limit by @mvaligursky in #8841
- Register nameless scripts under their verbatim class name by @mvaligursky in #8844
Contributors
Full Changelog: v2.19.4...v2.19.5
v2.19.4
Fixes
- Keep UMD exports overridable while preserving live bindings by @mvaligursky in #8839
Contributors
Full Changelog: v2.19.3...v2.19.4
v2.19.3
Fixes
- Fix ESM script registration by name and subclass name collision by @mvaligursky in #8831
- Use a Map for the script registry and guard reserved names in add() by @mvaligursky in #8835
- Preserve live bindings of mutable UMD exports (pc.app) by @mvaligursky in #8837
Contributors
Full Changelog: v2.19.2...v2.19.3
v2.19.2
Fixes
- Support HTML-in-Canvas textures via copyElementImageToTexture (WebGPU) by @mvaligursky in #8810
- Replace opaque any/* types with real types in public API reference by @willeastcott in #8811
- Elevate the Entity class reference to peak quality by @willeastcott in #8814
- Null particle module-scope vars after construction to prevent memory leak by @Skullheadx in #8809
- Update HTML-in-Canvas texture upload to new API by @mvaligursky in #8828
- Fix @param names/types that contradict the function signatures by @willeastcott in #8813
- Apply gsplat material changes made in frame:ready the same frame by @mvaligursky in #8830
Examples
Contributors
New Contributors
- @Skullheadx made their first contribution in #8809
Full Changelog: v2.19.1...v2.19.2
v2.19.1
Fixes
- Sort worker ReferenceError after esbuild migration by @mvaligursky in #8808
- Support GSPLAT_AA in the hybrid renderer by @mvaligursky in #8807
- Drop "unified" framing now that it's the default by @mvaligursky in #8805
Contributors
Full Changelog: v2.19.0...v2.19.1
v2.19.0
Breaking changes
- [BREAKING] Remove HTMLAudioElement fallback from sound system by @willeastcott in #8636
- [BREAKING] Deprecate GSplatComponent#unified and default it to true by @mvaligursky in #8802
Changes
- JSDoc whitespace cleanup by @willeastcott in #8616
- Standardize JSDoc class overviews across components by @willeastcott in #8617
- Unlink SHADER_ constants in Material.update by @willeastcott in #8621
- Unlink renderPasses note in CameraComponent by @willeastcott in #8622
- GSplat local rasterize early-out via precomputed power cutoff by @mvaligursky in #8623
- Simplify self-referential JSDoc @link tags by @willeastcott in #8624
- Remove redundant JSDoc @type tags from inferable fields by @willeastcott in #8625
- Clean up 'Other' category on API reference index by @willeastcott in #8627
- Read SOG gsplat data directly from source textures by @mvaligursky in #8628
- Calculate camera aspect ratio in CameraComponent onEnable by @lucaheft in #8632
- Document both halves of accessor pairs in public API by @willeastcott in #8634
- Hoist constructor-assigned properties to class fields in src/core and src/platform/input by @willeastcott in #8635
- Make camera aspect ratio auto-refresh in Camera class by @mvaligursky in #8633
- Fold gsplat debug AABB flags into debug enum by @mvaligursky in #8637
- Drop vendor-prefixed Page Visibility API support by @willeastcott in #8638
- Include GPU vendor/architecture in WebGPU feature log by @mvaligursky in #8642
- Inline AppBase tick as a class-field arrow by @willeastcott in #8639
- Move per-frame stats collection from AppBase to ApplicationStats by @willeastcott in #8643
- Remove dead
this.controllerreferences from AppBase and hide Controller class by @willeastcott in #8644 - Expose device.minSubgroupSize and device.maxSubgroupSize on GraphicsDevice by @mvaligursky in #8645
- Add WebGPU compute radix sort (4-bit portable + OneSweep NVIDIA) by @mvaligursky in #8620
- Add WGSL linear_indexing and CAPS_STORAGE_TEXTURE_READ by @mvaligursky in #8648
- Radix sort facade, indirect mode, and WebGPU subgroup sizing by @mvaligursky in #8647
- Standardize Layer on class fields with grouped ordering by @willeastcott in #8649
- Defer WebGPU buffer destruction until submit by @slimbuck in #8652
- Use texImage2D for gsplat splat-order uploads by @slimbuck in #8656
- Hybrid raster renderer with compute projector by @mvaligursky in #8658
- Clarify spotlight cone angles are half-angles by @willeastcott in #8665
- Align LightComponent with CameraComponent architecture by @willeastcott in #8666
- Tighten LightComponent JSDoc by @willeastcott in #8667
- Migrate ComponentData classes to class fields by @willeastcott in #8668
- Remove redundant constructor assignments in ButtonComponent by @willeastcott in #8669
- Remove redundant get data() overrides by @willeastcott in #8670
- Migrate ZoneComponent and ScreenComponent to class fields by @willeastcott in #8671
- Migrate SpriteComponent state to class fields by @willeastcott in #8672
- Remove unused _batchGroup field from batched components by @willeastcott in #8673
- Clean up vestigial Model plumbing on SpriteComponent by @willeastcott in #8674
- Remove unused JSDoc @import lines by @willeastcott in #8677
- SpriteAnimationClip class fields, layer typings, and docs by @willeastcott in #8679
- SpriteAnimationClip name, fps, loop property JSDoc by @willeastcott in #8680
- Remove unused WebGPU compute perf benchmark by @mvaligursky in #8681
- Speed up GSplat octree evaluateNodeLods by @mvaligursky in #8683
- Fuse GSplat budget bucket indices into LOD evaluation by @mvaligursky in #8684
- Remove raster GPU sort path and sort-key compute by @mvaligursky in #8685
- Rename GSPLAT_RENDERER_RASTER_HYBRID to RASTER_GPU_SORT by @mvaligursky in #8686
- Respect gsplat alphaCull on CPU raster and compute paths by @mvaligursky in #8687
- Remove unused gsplat-material module by @mvaligursky in #8688
- Exclude StorageBuffer from device.buffers tracking by @slimbuck in #8690
- Add Scene#gsplatCentersEnabled opt-out for gsplat CPU centers by @mvaligursky in #8691
- Align ScrollbarComponent with CameraComponent architecture by @willeastcott in #8693
- Tighten ScrollbarComponent internals by @willeastcott in #8694
- Handle lostpointercapture as well by @slimbuck in #8696
- Expose parsed manifest on GSplatOctreeResource by @MattiasVik in #8699
- TRACEID_BUFFERS trace, example control, and storage buffer debug names by @mvaligursky in #8705
- Reduce radix sort GPU buffer footprint by @mvaligursky in #8706
- Add XrBridge for backend-specific WebXR presentation by @mvaligursky in #8712
- Route XR framebuffer through XrBridge; refresh VR LOD example by @mvaligursky in #8713
- WebGPU immersive XR presentation by @mvaligursky in #8717
- WebGPU XR device loss, devicelost events, and graphics binding typings by @mvaligursky in #8719
- WebGPU AR camera color and syncCameraColorTexture bridge by @mvaligursky in #8720
- Parallelize engine builds with turbo by @kpal81xd in #8716
- WebGPU XR depth bridge, examples, and XR camera sync fixes by @mvaligursky in #8721
- WebGPU multiview frame pass, XR bridge, and clustered lights by @mvaligursky in #8723
- WebGPU texture-array projection and vr-basic gallery refresh by @mvaligursky in #8724
- Migrate js builds to esbuild by @kpal81xd in #8722
- WebGPU fragment shader optimization by @cabanier in #8733
- Data-driven gating for WGSL built-in inputs by @mvaligursky in #8739
- Align WGSL and GLSL clustered-light chunks by @mvaligursky in #8740
- Support for exporting aoMaps and the second UV channels by @tanaydimri in #8728
- Omit default texCoord in glTF exporter texture info by @mvaligursky in #8741
- Enable asset load retries by default by @mvaligursky in #8744
- Tidy ResourceLoader.enableRetry defaults and input handling by @mvaligursky in #8745
- Dual Color LUT crossfade and lut-grading example by @mvaligursky in #8749
- Warn when WebGPU or WebXR is used in an insecure context by @mvaligursky in #8752
- Log uncaptured WebGPU errors by @mvaligursky in #8757
- Mark platform.visionos as @ignore in JSDoc by @mvaligursky in #8765
- XrMenu label items, ray picking, always-visible HUD mode by @mvaligursky in #8770
- Add smooth turn mode to XrNavigation by @mvaligursky in #8771
- Update examples URL in READMEs to playcanvas.com/examples by @willeastcott in #8772
- Reuse clear options object in Renderer.clear by @willeastcott in #8776
- Replace pow(x, 5.0) with multiplies in Schlick Fresnel by @willeastcott in #8774
- Avoid iterator allocations in Frustum.setFromMat4 by @willeastcott in #8775
- Avoid per-frame clearVariants in unified material sync by @mvaligursky in #8778
- Align ScrollViewComponent with CameraComponent architecture by @willeastcott in #8777
- Add alphaDither property for independent dither strength by @mvaligursky in #8782
- Expose WGSL unrestricted_pointer_parameters as a device cap by @mvaligursky in #8785
- Expose WGSL pointer_composite_access as a device cap by @mvaligursky in #8786
- Expose WGSL packed_4x8_integer_dot_product as a device cap by @mvaligursky in #8787
- Expose WGSL texture_and_sampler_let as a device cap by @mvaligursky in #8790
- Make getGuid() part of the public API by @mvaligursky in #8795
- OneSweep on NVIDIA, indirect bind fix, GSplat bit alignment by @mvaligursky in #8657
- Expose guid as a public getter by @mvaligursky in #8797
- WebGPU XR rendering on Apple Vision Pro by @mvaligursky in #8756
- Release ImageBitmap memory after streamed SOG texture upload by @mvaligursky in #8758
Fixes
- Fix incorrect JSDoc in public APIs by @willeastcott in #8612
- Fix more incorrect JSDoc in public APIs by @willeastcott in #8613
- Fix more incorrect JSDoc in public APIs by @willeastcott in #8614
- Fix more incorrect JSDoc in public APIs by @willeastcott in #8615
- Fix JSDoc link warnings for ShaderUtils and GSplatComponent by @willeastcott in #8618
- Fix url param JSDoc in ResourceHandler and ContainerHandler by @willeastcott in #8619
- Avoid camera_params redefinition in pickPS by @gameatp in #8640
- Avoid camera_params redefinition in pickPS (WGSL) by @mvaligursky in #8641
- Split batches by castShadow and shadowCascadeMask by @mvaligursky in #8650
- Fix Picker depth clear decoding by @slimbuck in #8651
- Defer GPU resource destruction for pending commands by @mvaligursky in #8655
- Fix executeCallback JSDoc type in gsplat-resolve-sh by @willeastcott in #8682
- Register StorageBuffer for WebGPU device lose/restore by @mvaligursky in #8692
- Texture#lock allocates when mip level slot is missing by @mvaligursky in #8695
- Default xrCompatible for WebGL and WebGPU paths by @mvaligursky in #8714
- TAA resolve premultiplied alpha for transparent clears by @mvaligursky in #8726
- visionOS MSAA resolve into XR framebuffer by @mvaligursky in #8730
- Avoid GLSL ES reserved word 'packed' in compact format shader by @mvaligursky in #8737
- Apply specular factor/color when map is present by @mvaligursky in #8742
- Include error message context in load failure logs by @mvaligursky in #8743
- Align projector projection with WebGPU shader uniforms by @mvaligursky in #8662
- Stereo XR viewport width for hybrid projector by @mvaligursky in #8664
- Fix renderSceneColorMap/renderSceneDepthMap toggling to false when already set by @MAG-AdrianMeredith in #8731
- Apply Color LUT in correct sRGB color space by @mvaligursky in #8747
- Resolve sog texture urls from document base by @kpal81xd in #8754
- Gate ImageBitmap release on opt-in flag, make it one-shot by @mvaligursky in #8760
- Fix WebGPU XR stereo viewport and harden vr-lod example by @mvaligursky in #8761
- Ensure opacity dither fully hides at alpha 0 and fully shows at alpha 1 by @lucaheft in #8767
- Make writeSortIndirectArgs WGSL helper portable for Firefox WebGPU by @mvaligursky in #8784
- Fire EVENT_PRECULL after f...
v2.18.1
Fixes
- Split batches by
castShadowandshadowCascadeMaskby @mvaligursky in #8650 - Use unsigned 32-bit depth bits when reconstructing pick depth from RGBA8 by @slimbuck in #8651
- Defer WebGPU buffer destruction until after pending command buffers are submitted by @slimbuck in #8652
Contributors
Full Changelog: v2.18.0...v2.18.1
v2.18.0
Changes
- Remove per-resource instance vertex buffer from GSplat rendering by @mvaligursky in #8513
- Expose GSplat rendering properties on GSplatParams by @mvaligursky in #8518
- Add HTML-in-Canvas support with texElementImage2D and interactive hit testing by @mvaligursky in #8519
- Refactor GSplatRenderer into base class with GSplatQuadRenderer derived class by @mvaligursky in #8520
- Refine GSplatRenderer API: rename methods for clarity by @mvaligursky in #8522
- Extract FramePass base class from RenderPass by @mvaligursky in #8523
- Add WebGPU subgroup operations support by @mvaligursky in #8528
- Optimize GPU radix sort with bitmask ranking and multi-element processing by @mvaligursky in #8529
- Add compute-based tiled GSplat renderer (WebGPU) by @mvaligursky in #8531
- Add local compute GSplat renderer and dynamic buffer sizing (WebGPU) by @mvaligursky in #8536
- Replace full-screen quad composite with tile-based indirect draw in local compute GSplat renderer by @mvaligursky in #8544
- Add orthographic camera support to compute GSplat renderers by @mvaligursky in #8545
- Improve compute GSplat rendering and add tonemapping support by @mvaligursky in #8546
- Support dynamic work buffer formats in compute GSplat renderers by @mvaligursky in #8547
- Remove redundant shader includes from ShaderUtils.createShader callers by @slimbuck in #8551
- Add WebGPU Bare device type for testing without optional features by @mvaligursky in #8555
- Add picking support and fix color pipeline in local compute GSplat renderer by @mvaligursky in #8556
- Remove global compute GSplat renderer by @mvaligursky in #8558
- Remove per-splat GPU compaction for CPU sort path by @mvaligursky in #8559
- Extract GSplatFrustumCuller from GSplatWorkBuffer by @mvaligursky in #8560
- Merge frustum culling into compute, convert to storage buffers, fix >16M splat dispatch by @mvaligursky in #8561
- Make frustum culling always-on and remove dead pcNodeIndex pipeline by @mvaligursky in #8562
- Reduce register pressure in compute GSplat TileCount projection by @mvaligursky in #8563
- Store conic form in projection cache to avoid per-tile conversion by @mvaligursky in #8565
- Add GSplatParams.renderer enum for runtime renderer selection by @mvaligursky in #8567
- Remove centers array dependency from GSplatInfo interval check by @mvaligursky in #8568
- Add minContribution property for compute GSplat contribution culling by @mvaligursky in #8571
- Increase default minContribution from 2 to 3 by @mvaligursky in #8575
- Add fisheye projection for Gaussian splats by @mvaligursky in #8576
- Add fisheye projection support for skybox by @mvaligursky in #8577
- Refactor rasterize variant management and beforePasses scheduling by @mvaligursky in #8579
- Add depth testing for compute GSplat renderer when CameraFrame depth prepass is enabled by @mvaligursky in #8581
- Simplify Camera.beforePasses to a plain FramePass array by @mvaligursky in #8582
- Add fog support for Gaussian splat rendering by @mvaligursky in #8583
- Replace atomic scatter with pair-buffer tile binning and cooperative large-splat processing by @mvaligursky in #8586
- Split viewDepth into separate depthBuffer for sort cache locality by @mvaligursky in #8587
- Move FisheyeProjection to scene/graphics for shared use by @mvaligursky in #8588
- Modernize README and improve npm discoverability by @willeastcott in #8591
- Remove Bundlephobia badge from READMEs by @willeastcott in #8592
- Per-node granular SH color updates with angle-based threshold by @mvaligursky in #8593
- Optimize tile-count pass with multi-splat threads and extract dispatch prep shaders by @mvaligursky in #8594
- Remove workgroup-level early-out atomics from rasterize pass by @mvaligursky in #8596
- Vectorize Gaussian evaluation across 2x2 pixel quad in rasterize pass by @mvaligursky in #8597
- Unify GSplat debug rendering into a single enum-based API by @mvaligursky in #8598
- Add heatmap debug mode for compute GSplat rasterizer by @mvaligursky in #8599
- Revert tile-count pass to single-splat-per-thread by @mvaligursky in #8603
- Decouple compute GSplat renderer from work buffer via setDataSource by @mvaligursky in #8605
- Add shader defines for prepass to support alpha test and dithered opacity by @slimbuck in #8606
- Improve GSplat compute renderer cold-start buffer capacities by @mvaligursky in #8610
Fixes
- Reset render pass merge flags each frame in FrameGraph.compile() by @mvaligursky in #8516
- Fix TAA ghosting artifacts on WebGPU by @mvaligursky in #8517
- Prevent division by zero in CAS sharpening shader by @slimbuck in #8532
- Preserve blend state in drawQuadWithShader / RenderPassQuad by @mvaligursky in #8535
- Fix double decrement of octree file ref counts on entity disable by @mvaligursky in #8537
- Use y-first approach in Compute.calcDispatchSize to minimize wasted workgroups by @mvaligursky in #8538
- Round up compressed texture dimensions to block size on WebGPU by @mvaligursky in #8540
- Replace StopThePop tile intersection with exact FlashGS method in compute GSplat by @mvaligursky in #8548
- Smooth Gaussian falloff for capped splat radii in compute renderer by @mvaligursky in #8549
- Avoid workgroupUniformLoad on atomic type for iOS WGSL compatibility by @mvaligursky in #8552
- Use unfilterable-float sample type for RGBA32F textures in node culling shader by @mvaligursky in #8553
- Use unfilterable-float sample type for RGBA32F GSplat textures on WebGPU by @mvaligursky in #8554
- Pass alphaClip to scatter pass instead of hardcoding 1/255 by @mvaligursky in #8564
- Match quad renderer near-plane behavior in compute GSplat renderer by @mvaligursky in #8566
- Match raster minPixelSize culling threshold in compute GSplat renderer by @mvaligursky in #8569
- Use logarithmic depth quantization in compute GSplat bitonic sort by @mvaligursky in #8570
- Match raster Gaussian radius cap in compute GSplat renderer by @mvaligursky in #8573
- Improve compute GSplat tile entry buffer scaling to reduce overflow artifacts by @mvaligursky in #8574
- Preserve layerPlacementsDirty flag when octree placements are removed by @mvaligursky in #8584
- Include fresnelSchlick chunk when refraction is enabled without specular by @willeastcott in #8595
- Suppress frame:ready until full LOD update after param changes by @mvaligursky in #8602
Examples
- Fix FOV slider default value in LOD streaming example by @mvaligursky in #8510
- Hide test two-sided lighting example thumbnails by @mvaligursky in #8511
- Add radial sorting toggle to LodStreaming example by @mvaligursky in #8515
- Add clear button to examples sidebar filter input by @mvaligursky in #8541
- Limit examples sidebar to left half of screen on mobile by @mvaligursky in #8542
- Use consistent XR session check for viewport sizing and add stereo GSplat test example by @mvaligursky in #8557
- Add URL input and orientation controls to LOD streaming example by @mvaligursky in #8572
- Add procedural weather particle system example using Gaussian splats by @mvaligursky in #8580
- Add renderer selection UI to all Gaussian splat examples by @mvaligursky in #8585
- Add environment map and metallic reflections to html-texture example by @mvaligursky in #8589
- Add URL parameter support to LOD streaming example by @mvaligursky in #8590
- Add GPU compute benchmark and GSplat benchmark example by @mvaligursky in #8600
- Add cloud shadows shader chunk override example by @mvaligursky in #8604
- Replace share buttons with save buttons in GSplat benchmark example by @mvaligursky in #8608
Engine Dependencies
- Update rollup to v4.59.0 (security) in #8483
Contributors
Full Changelog: v2.17.2...v2.18.0