github playcanvas/engine v2.24.0

one hour ago

New Features

Changes

CameraFrame Effects

  • 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

Gaussian Splatting

  • 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

Frame Graph & Render Passes

Lighting & Shadows

  • 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

Materials

Textures & Render Targets

  • 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

Gizmos

  • 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

XR

  • 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

Performance

  • 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

Profiling & Debugging

  • 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

Fixes

  • 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

Examples

Examples Browser

Documentation & Types

Engine Dependencies

  • 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

Contributors

New Contributors

Full Changelog: v2.23.3...v2.24.0

Don't miss a new engine release

NewReleases is sending notifications on new releases.