v2.24.0
- Introduce CameraFrameEffect and convert the vignette and grading effects by @mvaligursky in #9666
- Add SMAA anti-aliasing as an opt-in CameraFrame effect by @mvaligursky in #9747
- Add auto exposure as an opt-in CameraFrame effect by @mvaligursky in #9757
- Add a lens flare effect to CameraFrame by @mvaligursky in #9734
- Add temporal upscaling to the TAA of CameraFrame by @mvaligursky in #9739
- Add a channel mixer to the CameraFrame color grading by @mvaligursky in #9939
- Add DynamicSkyEffect, a camera frame effect rendering a dynamic sky by @mvaligursky in #9765
- Add haze to DynamicSkyEffect by @mvaligursky in #9897
- Add an Editor script for the DynamicSkyEffect by @mvaligursky in #9859
- Add Sky#enabled and let the sky be hidden per camera by @mvaligursky in #9760
- Make the CameraFrameEffect pass hooks public by @mvaligursky in #9841
- Add frame passes which execute after a camera renders by @mvaligursky in #9707
- Add onBefore and onAfter callbacks to all frame passes by @mvaligursky in #9788
- Make the frame pass classes public by @mvaligursky in #9822
- Make RenderPassForward and CameraComponent#framePasses public by @mvaligursky in #9839
- Add ComputePass, which dispatches computes at a position in the frame by @mvaligursky in #9710
- Add XR view selection and before/after callbacks to ComputePass by @mvaligursky in #9722
- Add Compute#setupDispatchThreads to dispatch for a number of threads by @mvaligursky in #9733
- Add scene depth and color map access to compute shaders by @mvaligursky in #9680
- Add per-camera scene depth and color map handles by @mvaligursky in #9667
- Add the size of the scene map to its handle by @mvaligursky in #9844
- Add planar reflections to StandardMaterial by @mvaligursky in #9902
- Add a Gaussian mipmap filter, and smoother planar reflections by @mvaligursky in #9932
- Add AgX and AgX Punchy tonemapping by @mvaligursky in #9874
- Support the KHR_materials_diffuse_transmission glTF extension by @willeastcott in #9558
- Decode EXT_meshopt_compression and KHR_meshopt_compression glTF buffer views by @willeastcott in #9738
- Add clipping planes to cameras, mesh instances and render components by @willeastcott in #9755
- Add shadowBounds to fit the shadow of a directional light to a box by @mvaligursky in #9791
- Add RoundedBoxGeometry by @mvaligursky in #9849
- Render to a layer of a 2D texture array by @mvaligursky in #9689
- Create and upload volume textures on WebGPU by @mvaligursky in #9695
- Read and copy the depth slices of volume textures by @mvaligursky in #9696
- Render to the depth slices of volume textures by @mvaligursky in #9697
- Add SOG v3 loading and over-unity opacity rendering by @slimbuck in #9873
- Load SPZ version 3 files, enabling SPZ based LCC2 scenes by @mvaligursky in #9980
- Load XGRIDS LCC2 gsplat scenes by @mvaligursky in #9885
- Add SH band 4 support for PLY gaussian splats by @mvaligursky in #9796
- Add VoxelOccupancy and a gaussian splat particle blast example by @mvaligursky in #9907
- Add camera, light, shape and icon gizmos with snapping handles by @kpal81xd in #9809
- Add BoundingBoxGizmo to outline a selection's bounds with corner brackets by @kpal81xd in #9804
- Add gizmo transform readout and Blender-style rotate angle sector by @kpal81xd in #9801
- Add Grid extra and rebuild the Grid script on it by @kpal81xd in #9808
- Add letterSpacing to text elements by @mvaligursky in #9728
- Load TexturePacker and Aseprite sprite sheets as texture atlases by @willeastcott in #9923
- Add per-button mouse mapping and ground pan to CameraControls by @mvaligursky in #9944
- Add an optional screen size to CameraComponent worldToScreen and screenToWorld by @mvaligursky in #9911
- Hold the light mask and all uv sets as shader define flags by @mvaligursky in #9659
- Remove the legacy LIT_OLD_AMBIENT combine and LIT_DIFFUSE_MAP by @mvaligursky in #9681
- Deprecate the legacy post effects by @mvaligursky in #9905
- Rename inconsistent public API names behind deprecated aliases by @willeastcott in #9937
- Let a Script base class declare a null scriptName to stay unregistered by @mvaligursky in #9860
- Use setupDispatchThreads in the gsplat compute passes and the compute examples by @mvaligursky in #9735
- Filter distant waves in the water script by @mvaligursky in #9762
- Publish the debug bundles without inline sourcemaps by @willeastcott in #9882
- Convert sharpening, fringing, color enhance and color LUT to effects by @mvaligursky in #9679
- Convert bloom to an effect owning its passes and add high quality bloom by @mvaligursky in #9700
- Convert SSAO to an effect and provide the scene depth to effects by @mvaligursky in #9702
- Convert depth of field to a CameraFrame effect by @mvaligursky in #9718
- Convert volumetric fog to a CameraFrame effect by @mvaligursky in #9720
- Convert TAA to a CameraFrame effect at a new resolve stage by @mvaligursky in #9741
- Configure CameraFrame effects when the camera frame is updated by @mvaligursky in #9686
- Add the postOpaque stage and scene color grab to CameraFrame effects by @mvaligursky in #9731
- Provide the scene depth to effects running after the opaque geometry by @mvaligursky in #9732
- Hand CameraFrame effects the time of the frame by @mvaligursky in #9761
- Let CameraFrame effect scripts select their debug views by @mvaligursky in #9742
- Move each CameraFrame effect into its own folder under src/extras/effects by @mvaligursky in #9736
- Move the SMAA and volumetric fog render passes to their own files by @mvaligursky in #9828
- Improve TAA blending on bright edges and under camera motion by @mvaligursky in #9744
- Fix the TAA history drifting with the jitter and losing precision by @mvaligursky in #9737
- Default the auto exposure metering to the 10-90% band by @mvaligursky in #9764
- Replace DynamicSkyEffect clouds and cloudTechnique with cloudType by @mvaligursky in #9772
- Let other materials and the CPU evaluate the DynamicSkyEffect sky by @mvaligursky in #9889
- Scale a LensFlare by the intensity of its light by @mvaligursky in #9773
- Fade the lens flare occlusion with the application time by @mvaligursky in #9858
- Apply the CameraFrame fringing before the sharpening by @mvaligursky in #9855
- Destroy the bloom render target when FramePassBloom is destroyed while disabled by @mvaligursky in #9774
- Stream gsplat LOD levels coarsest first across the whole view by @mvaligursky in #9694
- Choose streamed gsplat LOD by walking a node hierarchy by @mvaligursky in #9883
- Fall back to CPU sorting when gsplats exceed GPU storage limits by @mvaligursky in #9854
- Stop allocating the gsplat order buffer when sorting on the GPU by @slimbuck in #9763
- Space gsplat sort keys by log distance so stray far splats keep near precision by @slimbuck in #9899
- Cull splats faded out by modifySplatColor before the GPU sort by @mvaligursky in #9962
- Apply gsplat anti-aliasing per splat, detected from the file by @mvaligursky in #9921
- Add GSplatParams#antiAliasFilterSize by @mvaligursky in #9928
- Default GSplatParams.antiAliasFilterSize to 0.1 by @mvaligursky in #9964
- Use the 3DGS 0.3 px² low-pass filter for gaussian splats by @mvaligursky in #9916
- Lower the default gsplat minContribution from 3 to 2 by @mvaligursky in #9927
- Support any number of typed blind fields in SOG v3 by @mvaligursky in #9960
- Read true gaussian splat opacity from the PLY opacity_linear property by @slimbuck in #9972
- Read Postshot's real anti-aliasing PLY comment by @slimbuck in #9971
- Document the gsplat resource classes and make their aabb read-only by @mvaligursky in #9917
- Distinct gsplat LOD debug colors and billions LOD falloff by @mvaligursky in #9673
- Rebuild gsplat work buffer render targets for runtime-added streams by @mvaligursky in #9876
- Fix GSplatBoxShaderEffect edge tint left behind after the sweep by @mvaligursky in #9758
- Skip a disabled frame pass together with its before and after passes by @mvaligursky in #9776
- Do not merge a frame pass which does not execute with its neighbour by @mvaligursky in #9784
- Run camera before-passes and render events for hand-built passes by @mvaligursky in #9780
- Keep the before-passes added to a RenderPassForward by @mvaligursky in #9781
- Render a RenderPassForward with a single camera by @mvaligursky in #9783
- CameraFrame and clustered lighting manage only their own passes by @mvaligursky in #9786
- Document frame pass ownership and flag destroyed pass reuse by @mvaligursky in #9787
- Remove the dead cubemap mipmap skip from the frame graph by @mvaligursky in #9777
- Rename FrameGraph addRenderPass and renderPasses to addPass and passes by @mvaligursky in #9835
- Add RenderPass#resizeSource and copy the resize options of init by @mvaligursky in #9830
- Add RenderPassShaderQuad#numInstances by @mvaligursky in #9832
- Set render pass clears and stores through the setters by @mvaligursky in #9829
- Resolve render pass uniforms once instead of every frame by @mvaligursky in #9833
- Reuse quad render passes in per-frame engine rendering by @mvaligursky in #9827
- Draw drawQuadWithShader with a RenderPassShaderQuad by @mvaligursky in #9825
- Use each camera's own cascade split distances for directional shadows by @mvaligursky in #9831
- Share the VSM depth warp exponents between the shadow chunks by @mvaligursky in #9866
- Shadow the volumetric fog correctly with VSM shadow maps by @mvaligursky in #9865
- Fix area light clear coat specular using the base layer's LTC matrix by @mvaligursky in #9973
- Fix clear coat strength being ignored with area lights by @mvaligursky in #9975
- Do not tone map the minimal passes of the standard material by @mvaligursky in #9645
- Let the front end of a LitMaterial provide the dispersion by @mvaligursky in #9682
- Declare the dynamic refraction resources in the lit shader by @mvaligursky in #9691
- Give material copies the textures that load after they are copied by @mvaligursky in #9717
- Fix duplicate standard material shader in depth and shadow passes by @mvaligursky in #9778
- Compile iridescence thickness maps on WebGL2, and fix WebGPU iridescence colors by @willeastcott in #9752
- Correct the inverted sheen roughness by @willeastcott in #9836
- Default a missing glTF sheen color factor to black by @willeastcott in #9852
- Honour the clearcoat and sheen gloss invert flags in the glTF exporter by @willeastcott in #9837
- Support compressed textures not aligned to the block size on WebGPU by @mvaligursky in #9708
- Fix WebGPU upload of compressed mip levels that are not a multiple of the block size by @mvaligursky in #9701
- Fix the size of compressed volume textures by @mvaligursky in #9706
- Sample only the base level for non-mipmap texture filters on WebGPU by @mvaligursky in #9709
- Update the mip count when Texture.setSource changes the size by @mvaligursky in #9821
- Render to a single face of a cubemap depth buffer on WebGPU by @mvaligursky in #9665
- Fix gizmo picking, stuck drags, scale snapping, parentless local translate and ViewCube colorNeg by @kpal81xd in #9799
- Harden gizmos: shared layers, layer setter, enabled state, theme hover, multi-touch, arc mesh leak, uniform plane scaling and picking order by @kpal81xd in #9800
- Keep the gizmo readout generic and let each gizmo place it by @kpal81xd in #9803
- Gizmo fixes for editor integration: disabled components, centered icons and flat boxes by @kpal81xd in #9817
- Gizmo fixes for far icons, picking, frustum fill, flat box corners, lines and handle redraws by @kpal81xd in #9818
- Render directional shadows once for all views in WebGPU XR by @mvaligursky in #9698
- Clear the WebGPU XR projection layer's depth to the far plane by @slimbuck in #9748
- XrNavigation and XrControllers fixes found on Apple Vision Pro by @slimbuck in #9750
- Recover the WebGPU XR projection layer when its texture can no longer be acquired by @slimbuck in #9878
- Skip a screen's touch in XrControllers, which has no model to draw by @slimbuck in #9881
- Resolve the picker's meshInstanceId scope id once, not per draw by @mvaligursky in #9657
- Sort opaque draw calls and shadow casters with a radix sort by @mvaligursky in #9662
- Remove per-draw WebGPU error scopes in debug builds by @mvaligursky in #9725
- Always apply the metalness constant, so metalness never selects a shader by @mvaligursky in #9945
- Apply occludeDirect with a uniform, so it never selects a shader by @mvaligursky in #9946
- Apply twoSidedLighting with a uniform, so it never selects a shader by @mvaligursky in #9947
- Stop compiling StandardMaterial shader variants for neutral values by @mvaligursky in #9977
- Invalidate StandardMaterial shaders only when a value changes the shader by @mvaligursky in #9978
- Speed up compilation of clustered area light shaders by @mvaligursky in #9974
- Display cubemaps in TextureRenderer as a cross of their faces by @mvaligursky in #9664
- Add compute dispatch and compute pass counters to the stats and MiniStats by @mvaligursky in #9740
- Report buffer operations needing a usage the buffer was not created with by @mvaligursky in #9746
- Report which frame the GPU profiler timings belong to by @mvaligursky in #9838
- Keep GPU pass timings apart, and add scripts for profiling to the inspector example by @mvaligursky in #9842
- Keep MiniStats sized to the canvas when it resizes without a resizecanvas event by @slimbuck in #9661
- Skip the MiniStats draw when it has nothing to render by @mvaligursky in #9672
- Keep the canvas resolution when its client size is zero by @mvaligursky in #9671
- Fire devicerestorefailed when WebGPU device recovery fails by @mvaligursky in #9678
- Announce apps to the devtools hook from every build by @mvaligursky in #9646
- Keep the Node worker_threads require out of bundled worker code by @mvaligursky in #9656
- Do not fire tween events that have no name by @mvaligursky in #9650
- Accept the alignment array and cookie asset options in Entity#addComponent by @mvaligursky in #9683
- Grab the scene color on the null device without WebGL calls by @mvaligursky in #9684
- Dispatch each Compute instance at most once per frame by @mvaligursky in #9690
- Issue radix sort workgroup atomics from every invocation by @MotivaCG in #9756
- Correct ComputeRadixSort scan growth and destructiveKeys switching by @mvaligursky in #9759
- Delete WebGL vertex array objects with their vertex buffers by @mvaligursky in #9726
- Delete cached WebGL vertex array objects with their vertex buffers by @mvaligursky in #9727
- Destroy old batches when BatchManager.generate() is given no ids by @mvaligursky in #9730
- Preserve event listeners during nested dispatch by @MokiMeow in #9723
- Report a failed loadFromUrl again when its URL is requested again by @slimbuck in #9751
- End a MultiTouchSource touch that leaves without an up or a cancel by @slimbuck in #9749
- Warn about unregistered render containers only when preload starts by @mvaligursky in #9771
- Keep a disabled render or model component out of its batch group by @willeastcott in #9779
- Release held keys when the window loses focus by @kpal81xd in #9811
- Fix WebGPU creation for cross-document canvases by @GibsDev in #9814
- Destroy the WebGPU indirect buffers when the device is destroyed by @mvaligursky in #9823
- Fix math.smoothstep and smootherstep when min is greater than max by @zzoraemon043 in #9798
- Support the HTML-in-Canvas API names shipping in Chrome 157 by @mvaligursky in #9824
- Draw nothing for zero instances on WebGL, matching WebGPU by @mvaligursky in #9834
- Stop passing the graphics device as BoxGeometry options for the infinite sky by @mvaligursky in #9846
- Destroy the application at once while the graphics context is lost by @mvaligursky in #9862
- Skip parsing a GLB or PLY that finishes downloading after the application is destroyed by @mvaligursky in #9864
- Keep another application's registry entry when destroying one with the same canvas id by @mvaligursky in #9869
- Read the right mesh instance matrices on Firefox on Windows by @mvaligursky in #9870
- Default a new sprite component's type to SPRITETYPE_SIMPLE when none is given by @willeastcott in #9890
- Convert colors with the exact sRGB transfer function by @willeastcott in #9892
- Report rays starting inside a box when a hit point is requested by @mmporong in #9915
- Return the exit point for rays starting inside a BoundingSphere by @mvaligursky in #9930
- Stop applying the anim state speed twice to exit time and progress by @mvaligursky in #9931
- Ignore exit times on anim transitions out of START and END by @mvaligursky in #9935
- Enable scene color map on both BlurredPlanarReflection cameras by @mvaligursky in #9951
- Add a welcome demo as the default example by @mvaligursky in #9914
- Add an integrations category to the examples, with a Spine physics example by @mvaligursky in #9721
- Add standalone RenderPass and RenderPassShaderQuad examples by @mvaligursky in #9775
- Add a sky rendering test example by @mvaligursky in #9903
- Add a gaussian splatting black hole example by @mvaligursky in #9929
- Add a glyph rain gaussian splat shader effect and example by @mvaligursky in #9982
- Add a villa sales demo on a gaussian splat capture by @mvaligursky in #9965
- Add a car showcase configurator example by @mvaligursky in #9938
- Add a Mars 3D Tiles example using 3DTilesRendererJS by @mvaligursky in #9942
- Add a Helsinki 3D Tiles example streaming the city's photogrammetry model by @mvaligursky in #9948
- Add an impact effects particle example by @mvaligursky in #9958
- Rebuild the area lights example with a modelled room and controls by @mvaligursky in #9894
- Rebuild the reflection box example in the area lights room by @mvaligursky in #9895
- Rebuild the post-processing example in the area lights room with every CameraFrame effect by @mvaligursky in #9896
- Rebuild the clustered area lights example as floating lights above a metallic floor by @mvaligursky in #9898
- Rebuild the dynamic batching example as a kinetic sculpture by @mvaligursky in #9901
- Rebuild the render to texture example in the area lights room by @mvaligursky in #9900
- Redesign the video texture example by @mvaligursky in #9913
- Redesign the tween example by @mvaligursky in #9918
- Redesign the area picker example by @mvaligursky in #9919
- Redesign four of the compute examples by @mvaligursky in #9926
- Restyle the mesh particles example by @mvaligursky in #9956
- Reskin the mesh-deformation example by @mvaligursky in #9967
- Reskin the snow example by @mvaligursky in #9969
- Reskin the light-physical-units example by @mvaligursky in #9970
- Reskin the dithered transparency example and decorrelate dither between meshes by @mvaligursky in #9981
- Use Gaussian scene color mipmaps in the transmission-roughness example by @mvaligursky in #9968
- Update the Spineboy example to Spine 4.3 by @mvaligursky in #9713
- Update the Spine 4.3 plugin to the latest playcanvas-spine release by @mvaligursky in #9716 #9719
- Compress the car showcase assets, and drop its unused shadow code by @mvaligursky in #9953
- Declare the shader chunk API version of the car showcase sweeps by @mvaligursky in #9954
- Share one shader across the car-showcase paints by @mvaligursky in #9976
- Reconvert the SOG v3 logo with the merged splat-transform writer by @mvaligursky in #9979
- Show the raw blind fields in the blind-data example by @mvaligursky in #9963
- Remove the legacy Gaussian splatting picking example by @mvaligursky in #9966
- Remove unused scifi-platform.glb example asset by @mvaligursky in #9949
- Fix examples applying settings before the initial values are set by @mvaligursky in #9640
- Apply settings once the depth of field data is set by @mvaligursky in #9685
- Declare the msaa-depth-fog resolved depth as unfilterable by @mvaligursky in #9668
- Destroy the material of each debris crate in the entity inspector example by @mvaligursky in #9692
- Draw the lines of the compute histogram example every frame by @mvaligursky in #9711
- Stop orthographic example views clipping at the camera near plane by @kpal81xd in #9840
- Preview the shot camera view in the editor example while it is selected by @kpal81xd in #9884
- Default the shape gizmo example to the capsule by @kpal81xd in #9847
- Migrate the remaining examples from orbitCamera to CameraControls by @kpal81xd in #9843
- Work around stuck mouse buttons in the particle blast example by @mvaligursky in #9909
- Remove the Function.prototype.call override from the examples by @mvaligursky in #9910
- Move each example into its own folder, with its thumbnails by @mvaligursky in #9886
- Move CameraFrame examples to a camera-frame category by @mvaligursky in #9676
- Move render target examples into the render-targets category by @mvaligursky in #9693
- Move light and shadow examples to lights-and-shadows by @mvaligursky in #9792
- Move the grid example to the debug category by @mvaligursky in #9950
- Move seven examples to the graphics-advanced category by @mvaligursky in #9952
- Move the particle system examples to a particles category by @mvaligursky in #9955
- Split Gaussian splatting examples into a new gaussian-splatting-fx category by @mvaligursky in #9959
- Highlight controls panel section headers like the sidebar categories by @mvaligursky in #9699
- Show the start of the example's category when opening the examples browser by @mvaligursky in #9922
- Show imported scripts as read-only code editor tabs by @mvaligursky in #9934
- Show the code editor download as an icon, with quicker tooltips by @mvaligursky in #9936
- Type check the examples and resolve multi-file example imports by @kpal81xd in #9812
- Fail CI when an example is missing a thumbnail by @mvaligursky in #9908
- Resolve the inspector's engine peer to the linked engine by @mvaligursky in #9641
- Rename the inspector example and let it profile from the start by @mvaligursky in #9856
- Update @playcanvas/inspector to 0.2.0 by @mvaligursky in #9642
- Update @playcanvas/inspector to 0.3.0 by @mvaligursky in #9766
- Update the examples to @playcanvas/inspector 0.5.0 by @mvaligursky in #9957
- Correct types reported by RuntimeTypeInspector by @mvaligursky in #9643
- Make createScript types inherit the static members of ScriptType by @mvaligursky in #9644
- Declare LitMaterial#dirLightMap, read by its shader options by @mvaligursky in #9652
- Widen JSDoc types to the values the engine accepts by @mvaligursky in #9653
- Clarify that AppBase#timeScale does not pause scripts by @willeastcott in #9807
- Make CameraFrame#createRenderPass internal by @mvaligursky in #9845
- Describe the DynamicSkyEffect in XR by @mvaligursky in #9857
- Describe the ACES tonemapping fits and the screen space units of the camera conversions by @mvaligursky in #9872
- Describe releasing the WebGL context after AppBase#destroy by @mvaligursky in #9912
- Document the resource handlers that AppBase apps register by @mvaligursky in #9920
- Use American spelling across the engine, scripts, tests and examples by @willeastcott in #9940
- Update dependency sharp to v0.35.5 [security] in #9687
- Update dependency vite to v8.3.3 [security] in #9805
- Update dependency node to v26 in #9850
- @GibsDev
- @kpal81xd
- @mmporong
- @MokiMeow
- @MotivaCG
- @mvaligursky
- @slimbuck
- @willeastcott
- @zzoraemon043
- @MokiMeow made their first contribution in #9723
- @GibsDev made their first contribution in #9814
- @zzoraemon043 made their first contribution in #9798
- @mmporong made their first contribution in #9915
Full Changelog: https://github.com/playcanvas/engine/compare/v2.23.3...v2.24.0
rrweb-player@2.2.2
- Updated dependencies [
756765f]:- @rrweb/packer@2.2.2
- @rrweb/replay@2.2.2