Skip to content

Latest commit

 

History

History
469 lines (429 loc) · 52.9 KB

what's new.md

File metadata and controls

469 lines (429 loc) · 52.9 KB

5.0.0

Major updates

  • Infinite Morph Targets: When supported (WebGL2+) you are no more limited to 4 morph targets per mesh (Deltakosh)
  • Added Animation Curve Editor to allow easy animation creation and update (Deltakosh)
  • Added support for ConditionalBlock for NodeMaterial (Deltakosh)
  • Improved performance when using the shadow / cascaded shadow generator (Popov72)
  • Add support for up to 6 uv sets in the standard, PBR and node materials (Popov72)
  • Added GUI Editor to easily build GUI controls (msDestiny14) (darraghjburke)
  • Added support for Order Independent Transparency on simple scenes. scene.useOrderIndependentTransparency = true now makes transparent meshes shade correctly when stacked onto each other. (CraigFeldspar)
  • Added vertex animation textures with BakedVertexAnimationManager (brunobg, Popov72, raggar)
  • Added MaterialPluginManager (brunobg, Popov72)
  • Official support of WebGPU (Popov72)
  • Added Performance Profiler to allow tracking of Performance metrics (carolhmj)

Updates

  • Add Geodesic and Goldberg Polyhedra (JohnK)

General

  • Added getTextureByName to Scene (BlakeOne)
  • Added getControlsByType to AdvancedDynamicTexture (BlakeOne)
  • Added zoomToMouseLocation on ArcRotateCamera (lovettchris)
  • Added static CenterToRef for vectors 2/3/4 (aWeirdo)
  • Added ability to view images (ktx2, png, jpg) to the sandbox. (bghgary)
  • Added optional smoothed normals for extruded procedural polygons. (snagy)
  • Added support for infinite perspective cameras (Deltakosh)
  • Added ability to enable/disable ArcRotateCamera zoom on multiTouch event (NicolasBuecher)
  • Moving button to shared uI folder.(msDestiny14)
  • Added collisionRetryCount to improved collision detection (CedricGuillemet)
  • Added color/instance color differenciation in shaders for thin instances (CedricGuillemet)
  • Added sleepBody support for ammojs (CedricGuillemet
  • Moved sharedUI component to shared UI folder. (msDestiny14)
  • Added encapsulate and encapsulateBoundingInfo methods to BoundingInfo. (Tolo789)
  • Added onLoadObservable to the TextureDome class(es) (RaananW)
  • Modified InputManager to use DeviceSourceManager (PolygonalSun)
  • Added a helper class to display the frustum of a directional light (Popov72)
  • Improved collision detection performance (ottoville)
  • Added new helper functions for Quaternion.FromLookDirection and Matrix.LookDirection (Alex-MSFT)
  • Added support for clip planes to the edge renderer (#10053) (Popov72)
  • Added support for cannon-es to the cannonJSPlugin. (frankieali)
  • Added check for duplicates in ShadowGenerator.addShadowCaster (ivankoleda)
  • Added observable for PointerDragBehavior enable state (cedricguillemet)
  • Added targetHost to query and set targeted mesh with ArcRotateCamera (cedricguillemet)
  • Added optional preserveScalingSign to addChild and setParent to keep scaling sign (cedricguillemet)
  • Spelling of function/variables xxxByID renamed to xxxById to be consistent over the project. Old xxxByID reamain as deprecated that forward to the corresponding xxxById (barroij)
  • Added new reflector tool that enable remote inspection of scenes. (bghgary)
  • Update createPickingRay and createPickingRayToRef matrix parameter to be nullable. (jlivak)
  • Improved scene picking precision with huge values in world matrices when Mesh.EnableDistantPicking flag is true (CedricGuillemet
  • Added applyVerticalCorrection and projectionPlaneTilt to perspective cameras to correct perspective projections (CraigFeldspar)
  • Support rotation keys in universal camera (Sebavan)
  • Added flag to allow users to swap between rotation and movement for single touch on FreeCameraTouchInput (PolygonalSun)
  • Added the ability to load a fullscreen GUI from the snippet server (PirateJC)
  • Added ArcThru3Points to Curve3 (JohnK)
  • Updated the gravity parameter in Scene.enablePhysics() as optional to fit the current behaviour (Faber)
  • Allow the possibility to override the radius delta calculation for mouse wheel event (RaananW)
  • Modified behavior for FreeCamera and ArcRotateCamera so that default mouse dragging movements now account for what button was used to initiate it (PolygonalSun)
  • Added coroutine capabilities to Observables (syntheticmagus)
  • Added an Observable.FromPromise utility method (Symbitic)
  • Added a global OnTextureLoadErrorObservable to handle texture loading errors during model load (RaananW)
  • Add support to encode and decode .env environment textures using WebP instead of PNG (simonihmig)
  • Added a new stereoscopic screen rig camera (RaananW)
  • Extended functionality for pointer move with scene pointerMoveTrianglePredicate (phaselock)
  • Added the ability to load a GUI from the snippet server and project it onto a mesh (PirateJC)
  • Added mapPanning on ArcRotateCamera (Hypnosss)
  • Added resetLastInteractionTime() to the auto rotate behavior (RaananW)
  • Update addContainerTask and addMeshTask signatures on AssetsManager to allow receiving a File as the sceneFilename argument. (carolhmj)
  • Added onCreateCustomMeshImpostor handler for creating custom mesh impostors to support Ammo.btSmoothTriangleMesh. (MackeyK24)
  • Added onCreateCustomMeshImpostor handler for creating mesh impostors with custom vertex data. (MackeyK24)
  • Added onCreateCustomConvexHullImpostor handler for creating convex hull imposters with custom vertex data. (MackeyK24)
  • Modified touch in WebDeviceInputSystem to no longer delete touch points after pointer up. (PolygonalSun)
  • Added support for DualSense controllers to DeviceInputSystem. (PolygonalSun)
  • Added getCreationOptions on ThinEngine. (carolhmj)
  • Added CompatibilityOptions.UseOpenGLOrientationForUV to define if the system should use OpenGL convention for UVs when creating geometry or loading .babylon files (false by default) (Deltakosh)
  • Added RuntimeError and errorCodes for runtime errors. (jp833)
  • Added AutoReleaseWorkerPool which will automatically terminate idle workers after a specified amount of time and use them in KTX2 and Draco decoders. (bghgary)
  • Added metadata support to ReflectionProbe class. (julien-moreau)

Engine

  • Moved all instance data from Geometry to Mesh such that the same Geometry object can be used by many meshes with instancing. Reduces memory consumption on CPU/GPU. (breakin
  • Added NativeEngine configuration object parameter. (drigax)
  • Added NativeEngine support for signed byte and unsigned short vertex buffer attribute types (Alex-MSFT)
  • Added support for sRGB buffers, native in WebGL2 / WebGPU and through the EXT_sRGB extension in WebGL1. There's a new parameter to the Texture constructor that enables this feature (Popov72)
  • Added IAudioEngineOptions interface to provide the audio engine with a pre-defined Audio Context and audio destination node. (Vandy)
  • Added support for cannon-es method world.removeBody(). Falls back to cannon method remove(). (Faber)
  • Added support for ZOffset Unit as we currently only supported factor. (Sebavan
  • Added the option to force the state of sRGB Buffer support (RaananW)

Loaders

  • Added support for EXT_meshopt_compression for glTF loader. (zeux)
  • Increased KHR_materials_transmission render target texture default size. (Drigax)
  • Changed glTF loader to remove empty animation groups if there are no animation channels loaded with the given options. (bghgary)
  • Update glTF validator to 2.0.0-dev.3.3. (bghgary)
  • Added support for KHR_xmp_json_ld for glTF loader. (Sebavan, bghgary)
  • Added a OptimizeNormals option to the OBJ loader to smooth lighting (Popov72)
  • Added a Prefiltered option to the CubeTextureAssetTask (MackeyK24)
  • Added support for more uv sets to glTF loader. (bghgary)
  • Added support for KHR_materials_volume for glTF loader. (MiiBond)
  • Added support for custom timeout in WebRequest. (jamidwyer)
  • Added support for direct loading base64 data URLs for all loader (CoPrez)
  • Added DO_NOT_ALTER_FILE_COORDINATES flag to STL loader (AlbertoPa)
  • Added support for pure geometry files to OBJ loader (Deltakosh)
  • Added an observable for when loader state changed. (bghgary)
  • Fixed an issue where errors for loading certain assets (e.g. <20-byte GLBs) are not catchable. (bghgary)
  • Added support for KHR_materials_emissive_strength for glTF loader. (sebavan)
  • Added support for normalized attributes (#11685) (RaananW)
  • Added fallback error logging on mesh loading tasks if no error handler is defined. (carolhmj)
  • Updated the glTF loader to place the skinned mesh as a sibling of the skeleton root node instead of using skeleton.overrideMesh. (bghgary)
  • Added support for --bm bump multiplier to OBJ loader (brianzinn)

Navigation

Materials

  • Added property useMaxLine to GridMaterial, which affects the brightness of line intersections. (BlakeOne)
  • Added an OcclusionMaterial to simplify depth-only rendering of geometry (rgerd)
  • PrePass can now be used in RenderTargets speeding up effects like SSAO2 or MotionBlur (CraigFeldspar)
  • Added support for morph targets to ShaderMaterial (Popov72)
  • Added support for clip planes to the ShaderMaterial (Popov72)
  • Added support for local cube map to refraction cube texture (Popov72)
  • Added the cullBackFaces property to Material (Popov72)
  • Added the stencil object property to Material (Popov72)
  • Set the metadata property on Material to be serializable, so that it can be properly loaded from .babylon files (jlivak)
  • Add mesh.visibility support to grid material (bghgary)
  • Transform getAlphaFromRGB in a property and dirty the materials that use it when it's changed (carolhmj)
  • When scene.markAllMaterialsAsDirty is called on BaseTexture, only dirty the materials related to that specific texture. (carolhmj)

Meshes

  • Added public version of AbstractMesh function _getPositionData. (BlakeOne)
  • Added default options parameter to Create functions. (BlakeOne)
  • LineMesh now allows assigning custom material via material setter. (FullStackForger
  • InstancedMesh can now be sorted from back to front before rendering if the material is transparent (Popov72)
  • Add option to decompose the newWorldMatrix when passed into TransformNode.freezeWorldMatrix. (bghgary)
  • Added mesh.onMeshReadyObservable to get notified when a mesh is ready (RaananW)
  • Added support for morph targets to the mesh BoundingInfo refresh. (EricBeetsOfficial-Opuscope)
  • Added support for screen coverage in addition to distance for LOds. (CraigFeldspar)
  • Decreased memory usage and improved performance of Mesh.MergeMeshes. (ryantrem)

Inspector

  • Added support for parsing files saved from ACE to Animation.ParseFromFileAsync (BlakeOne)
  • Increased float precision to 4 (msDestiny14)
  • Added support for sounds in the inspector (Deltakosh)
  • Added a debug option to show the frustum of a directional light (Popov72)
  • Added support for the material stencil properties (Popov72)
  • Added space + LMB panning to texture inspector to improve accessibility (darraghjburke)
  • Add support to export .env environment textures using WebP (simonihmig)
  • ACE usability improvements and addition of new Step Tangent interpolation. (carolhmj)
  • When user hits the "New Key" button on ACE but a key already exists on that frame, update existing frame's values instead of creating a new one. (carolhmj)
  • Added live connection to GUI editor (darraghjburke)
  • Add getAlphaFromRGB checkbox on Texture view (carolhmj)
  • Make sure popups are closed when page refreshes (RaananW)

Playground

  • Start render loop before creating scene to make stopping it more convenient (BlakeOne)
  • Added tooltips for menubar buttons (darraghjburke)
  • Fixed squiggles not working for deprecated members (sailro)
  • Removed legacy code for formatting deprecated members display (sailro)
  • Fixed deprecated members info display (sailro)
  • Added support for experimental/beta members (sailro)

NME

  • Added a MaterialAlpha block to read material's alpha value (Deltakosh)
  • Added a CloudBLock block to create noise based cloud data (Deltakosh)
  • Updated the VectorMerger and ColorMerger blocks to support swizzling (Deltakosh)
  • Added a ImageSource block to factorize access to texture data (Deltakosh)
  • Increased float precision to 4 (msDestiny14)
  • Added ability to make input node's properties visible in the properties of a custom frame (msDestiny14)
  • NME TextureBlock: add an output for the texture level and a switch to disable the internal multiplication (level * texture) (#10192) (rassie)
  • Added support for parallax / parallax occlusion to the PerturbNormal block (Popov72)
  • Added a SceneDepth block to access the scene depth buffer (Popov72)
  • Added support for custom blocks (BlakeOne, Popov72)
  • Added a ClipPlanes block to support scene clip planes (Popov72)
  • Added ElbowBlock to let users control the graph organization (Deltakosh)

GUI

  • Added moving GUI controls to a non-overlapping position function called moveToNonOverlappedPosition in AdvancedDynamicTexture(RolandCsibrei)
  • Allow Chrome to copy the GUI snippet id to the clipboard (BlakeOne)
  • Added a FocusableButton gui control to simplify creating menus with keyboard navigation (Flux159)
  • Added focus() and blur() functions for controls that implement IFocusableControl (Flux159)
  • Added ToggleButton GUI control (kintz09)
  • Added shorthand methods which set all padding values at once, named setPadding and setPaddingInPixels, to the control class (kintz09)
  • Added two touch-enabled GUI controls, TouchMeshButton3D and TouchHolographicButton. TouchMeshButton3D's near interaction mesh can be customized with the collisionMesh property (rickfromwork, satyapoojasama)
  • Added imageWidth() and imageHeight() to access the source image dimensions of Image (Queatz)
  • Added a FluentButtonMaterial to give the TouchHolographicButton the same look and feel as the HoloLens 2 shell (rgerd)
  • Added property renderToIntermediateTexture to Container which when set to true, will render children to an intermediate texture rather than direct to host allowing for DOM style alpha blending (BlindingHues)
  • Added HolographicSlate GUI control (CraigFeldspar)
  • Added HolographicBackplate to serve as a flexible panel in GUI controls using the MRTK design language (rgerd)
  • Added NearMenu GUI control (CraigFeldspar)
  • Added HandMenu, a simple menu that uses HandConstraintBehavior (CraigFeldspar)
  • VolumeBasedPanel's constructor now accepts a name parameter, similar to other controls (rickfromwork)
  • Added loadLayoutAsync in the XmlLoader. Now the layouts can be loaded asynchronously rather than providing a callback.
  • Introduced a new opt-in property to Gui3DManager, useRealisticScaling, that will automatically scale 3D GUI components like buttons to MRTK standards for better sizing in XR experiences. (rickfromwork)
  • Added support for full screen UI and rig cameras (#11544) (RaananW)
  • Added ValueAndUnit change observable and Grid to listen for changes (brianzinn)
  • Added closeShape and closePath as extra options parameters in ExtrudeShape and ExtrudeShapeCustom (JohnK)
  • Added markAsDirty and markAllAsDirty public functions on Control (carolhmj)

Behaviors

  • Added onTargetFramingAnimationEndObservable to FramingBehavior (BlakeOne)
  • Added FollowBehavior, a behavior that makes the assigned mesh hover around a camera, while facing it (CraigFeldspar)
  • Added SurfaceMagnetismBehavior, a behavior that makes the assigned mesh stick on surfaces of other meshes (CraigFeldspar)
  • Added DefaultBehavior, a behavior that will be common to several 3D GUI controls, orchestrating SixDoFDragBehavior, FollowBehavior and SurfaceMagnetismBehavior (CraigFeldspar)
  • Added draggableMeshes property in SixDoFDragBehavior list in order to have only a subset of descendant meshes take pointer events into account (CraigFeldspar)
  • SixDoFDragBehavior can now handle multiple pointers at the same time to scale/rotate the owner mesh (CraigFeldspar)
  • Added HandConstraintBehavior, to make the assigned mesh follow the hand pose. This behavior requires to be linked to a XR experience with the HandTracking feature activated. (CraigFeldspar)
  • Updated SixDofDragBehavior and PointerDragBehavior to respond to grabs made with the WebXRNearInteraction feature (rickfromwork)
  • Updated SixDofDragBehavior to support XR motion controller specific rotation options when one is used, allowing for 1:1 mesh rotation with controllers (rickfromwork)
  • Added TextWrapping.WordWrapEllipsis mode to textblock (mysunnytime)

WebXR

  • A browser error preventing the emulator to render scene is now correctly dealt with (RaananW)
  • Added a way to extend the XRSessionInit Object from inside of a feature (RaananW)
  • Added image tracking feature (RaananW)
  • Pointer Events of WebXR controllers have pointerType xr (RaananW)
  • better support for custom hand meshes (RaananW)
  • Allow disabling of the WebXRControllerPointerSelection feature as part of the WebXR Default Experience (rgerd)
  • Added two touch-enabled GUI controls, TouchMeshButton3D and TouchHolographicButton, added option on the WebXR hand tracking feature for enabling touch collisions (rickfromwork, satyapoojasama)
  • Added initial support for the sessiongranted event (#9860) (RaananW)
  • Remove the warning for input source not found when in (touch)screen mode (#9938) (RaananW)
  • Fixed an issue with resources disposal when exiting XR (#10012) (RaananW)
  • Added observable to target mesh position update for teleportation (#9402) (RaananW)
  • Prevent the XR render target texture from rescaling when using the scene optimizer (#10135) (RaananW)
  • Force https when using WebXR except for when hostname is localhost (#10154) (RaananW)
  • Use the newly-introduced physics velocities of controllers/headset where available (#10118) (RaananW)
  • Added support for xr-dom-overlay (#8996) (brianzinn)
  • Added near interaction events (hover, grab, and near-pick) (satyapoojasama)
  • Added XR Movement Controller feature for (#7442) (brianzinn)
  • Added initial support for light-estimation (#8904) (brianzinn) (RaananW)
  • Fixed an issue with superfluous reloading of the hand tracking models (#10453) (rgerd)
  • Added support for XRFrame.fillPoses and XRFrame.fillJointRadii (#10454) (rgerd)
  • Improved functionality of WebXRNearInteraction and updated coverage to be enabled on Behaviors and Gizmos (rickfromwork)
  • Introduced framework support for XR-based eye tracking. XR eye tracking is not yet supported in webXR, but is supported in BabylonNative using OpenXR. (rickfromwork)
  • Introduced spectator mode for desktop VR experiences and fixed an issue with XR camera in the activeCameras array (#10560) (RaananW)
  • Initial support for WebXR camera parenting (#10593) (RaananW)
  • Fix ReflectionProbe for WebXR (#10390) (RaananW)
  • Fix error on XR dispose due to undefined sepectator camera (Alex-MSFT)
  • Support for WebXR Foveated rendering (#8920) (RaananW)
  • Support WebXR framerate update (#10912) (RaananW)
  • Detach the non-vr camera from the canvas when entering XR and re-attach when leaving (RaananW)
  • New experimental walking locomotion feature for VR sessions (syntheticmagus)
  • Updated SixDofDragBehavior to support XR motion controller specific rotation options when one is used, allowing for 1:1 mesh rotation with controllers (rickfromwork)
  • Allow customizing the selection and laser point meshes of the pointer selection feature (#11487) (RaananW)
  • Add the WebXRLayers feature to support rendering to an XRProjectionLayer (#10588) (rgerd)
  • Introduced a new opt-in property to Gui3DManager, useRealisticScaling, that will automatically scale 3D GUI components like buttons to MRTK standards for better sizing in XR experiences. (rickfromwork)
  • Add NativeXRPlugin and NativeXRFrame to improve XR performance on BabylonNative (rgerd)
  • Reset XR Camera's orientation when entering an AR session for consistent experience (RaananW)
  • Enable multiview rendering to XRProjectionLayer with texture type "texture-array" (#10767) (rgerd)

Gizmos

  • Exposed scaleDragSpeed and added axisFactor for BoundingBoxGizmo (CedricGuillemet)
  • Provide additional attribute customRotationQuaternion to customize the posture of the gizmo (ecojust)
  • Exposed scaleRatio for GizmoManager (CedricGuillemet)
  • Added constructor parameters to customize colors for rotation gizmos on RotationGizmo (jekelija)
  • Added constructor parameters to allow turning off updateScale on RotationGizmo (jekelija)
  • Dispose _dragPlane when detaching in PointerDragBehavior (CedricGuillemet)
  • Log warning when trying to attach a node to a LightGizmo (CedricGuillemet)
  • Inspector autopicking is in sync with GimoManager autopicking (CedricGuillemet)
  • Fixed wrong matrix with nodes having pivot point (CedricGuillemet)
  • validateDrag support added to AxisDragGizmo (CedricGuillemet)
  • Gizmos that have draggable components now support near interactions via WebXRNearInteraction (rickfromwork)

Viewer

  • Fixed an issue with dual callback binding in case of a forced redraw (#9608) (RaananW)

Math

  • Faster scalar's WithinEpsilon with Math.abs (nekochanoide)
  • Added decomposeToTransformNode (RaananW)

Serializers

  • Serialize and parse isEnabled property for lights and cameras (andreasplesch)
  • Added the exportUnusedUVs property to the IExportOptions interface that will prevent any unused vertex uv attributes from being stripped during the glTF export. (ericbroberic)
  • glTF serializer now supports KHR_materials_clearcoat (drigax)
  • Fixed bug where characters that didn't fit into a single UTF-16 code point were not correctly encoded in .glb exports (darraghjburke)
  • Serialize and parse now use unique IDs for materials, so duplicate names won't cause problems. Still supports parsing id for back compat (darraghjburke)
  • glTF exporter now supports camera export (daoshengmu)

Bugs

  • Fix WaterMaterial’s constructor to use this.getScene() instead of scene parameter (BlakeOne)
  • Add missing param point to the callback function's type for the methods registerOnPhysicsCollide and unregisterOnPhysicsCollide of the PhysicsImpostor class. (BlakeOne)
  • Fix serialization and parsing of textBlock and image for Button class (BlakeOne)
  • Fix for AdvancedTimer ignoring timeout option (BlakeOne)
  • Fix issue when AssetContainer is added to Scene multiple times (BlakeOne)
  • Fix issue when ParticleSystem is disposed before _subEmitters is created (BlakeOne)
  • Fix incorrect GUI.TextBlock width when resizeToFit is true & fontStyle is italic (Kalkut)
  • Fix CubeTexture extension detection when rootUrl has a query string (civa86)
  • Fix issue with the Promise polyfill where a return value was expected from resolve() (Deltakosh)
  • Fix ArcRotateCamera panning with axis decomposition (CedricGuillemet)
  • Fix negative scale support for physics impostors (CedricGuillemet)
  • Fix deltaPosition with ammoJS (CedricGuillemet)
  • Fix an issue with keyboard control (re)attachment. (#9411) (RaananW)
  • Fix issue when scaling is reapplied with BoundingBoxGizmo and GizmoManager (CedricGuillemet
  • Fix direct loading of a glTF string that has base64-encoded URI. (bghgary)
  • Fix capsule impostor size computation for ammojs (CedricGuillemet
  • Fix passing rootUrl when loading NodeMaterial and nested asset URL (CedricGuillemet
  • Fix compound shapes for CannonJS plugin (cedricguillemet)
  • Fix crash of some node materials using instances on iOS (Popov72)
  • Fix the code generated for the NME gradient block (Popov72)
  • Fix ssao2RenderingPipeline for orthographic cameras (Kesshi)
  • Fix mipmaps creation in the KTX2 decoder for non square textures (Popov72)
  • Fix detail map not working in WebGL1 (Popov72)
  • Fix ArcRotateCamera behaviour when panning is disabled on multiTouch event (NicolasBuecher)
  • Fix vertically interlaced stereoscopic rendering (RIG_MODE_STEREOSCOPIC_INTERLACED) not working (follow-up #7425, #8000) (foxxyz)
  • Fix accessibility of BaseCameraMouseWheelInput and BaseCameraPointersInput. They appear in documentation but were not available for include. (mrdunk)
  • Fix function creation inside regularly called freeCameraMouseWheelInput method leading to excessive GC load. (mrdunk)
  • Fix clip plane not reset to the rigth value when using mirrors (Popov72)
  • Fix lens flares not working in right handed system (Popov72)
  • Fix canvas not resized correctly in a multi-canvas scenario (Popov72)
  • Fix NaN values returned by GetAngleBetweenVectors when vectors are the same or directly opposite (Popov72)
  • Fix 404 occurring on some pictures in some cases when using particle systems (Popov72)
  • Fix PrePass bugs with transparency (CraigFeldspar)
  • Fix PrePass bugs with layers (CraigFeldspar)
  • Fix SSAO2 with PrePass sometimes causing colors brighter than they should be (CraigFeldspar)
  • Fix PostProcess sharing between cameras/renderTargets, that would create/destroy a texture on every frame (CraigFeldspar)
  • Fix for DualSense gamepads being incorrectly read as DualShock gamepads (PolygonalSun)
  • Fix for warning in chrome about passive wheel events (#9777) (kaliatech)
  • Fix crash when cloning material in AssetContainer.instantiateModelsToScene when mesh is an instanced mesh (Popov72)
  • Fix Normalized quaternion when updating the node components (CedricGuillemet)
  • Fix update absolute position before use in PointerDragBehavior (CedricGuillemet)
  • Fix issue with NinePatch displaying half pixel gaps between slices on Firefox browsers. (Pryme8)
  • Fix issue when canvas loses focus while holding a pointer button (PolygonalSun)
  • Fix issue where camera controls stay detached if PointerDragBehavior is disabled prematurely (PolygonalSun)
  • Fix uncatchable exception that could be thrown when initializing the environment textures (CoPrez)
  • Fix the triplanar material when the position of the mesh it is applied to is not (0,0,0) (Popov72)
  • Fix bones serialization to include their ids. This allows to retrieve bones (animation groups, etc.) once the scene has been re-serialized (julien-moreau)
  • Fix an issue with hand-detachment when using hand tracking in WebXR (#9882) (RaananW)
  • Fix issue with cursor and 'doNotHandleCursors' on GUI (msDestiny14)
  • Fix issue with multi-views when using a transparent scene clear color (Popov72)
  • Fix issue with multi-views when using a hardware scaling level different from 1 (Popov72)
  • Fix matrix update for PointerDragBehavior and mesh with pivot (cedricguillemet)
  • Fix thin instances + animated bones not rendered in the depth renderer (Popov72)
  • Fix issue with WebXR teleportation logic which would cause positional headlocking on teleporation frames (syntheticmagus)
  • Fix for GUI renderAtIdealSize (msDestiny14)
  • Fix the strength input parameter of the NME PerturbNormal block that was handled as a 1/strength value (Popov72)
  • Fix an issue with audio engine not being garbage-collected when engine is disposed (RaananW)
  • Fix deprecated audio methods setPosition/setOrientation with new position/orientation values (CedricGuillemet)
  • Fix the NME NormalBlend block (Popov72)
  • Fix Compatibility with NPM 7 (Sebavan)
  • Fix for cloning meshes for 3D GUIs (msDestiny14)
  • Fix computation of min/max values in glTF loader when using normalized integers (#10112) (Popov72)
  • Fix instance picking when in billboard mode (Popov72)
  • Fix NME generation code missing target and visibleInInspector properties (Popov72)
  • Fix transmission mask being accidently used in glTF volume materials (MiiBond)
  • Fix Scene.getPointerOverMesh returning disposed mesh (Popov72)
  • Fix NME TextureBlock to use correct transformed UV coordinates when reading from the texture (#10176) (Popov72)
  • Fix context lost handling (#10163) (Popov72)
  • Fix for GUI slider step values greater than one (msDestiny14)
  • Fix Instances wrongly rendered with motion blur (CraigFeldspar)
  • Fix for wrongly rendered GUI rectangle on resize with adaptWidthToChildren (msDestiny14)
  • Fix glTF loader promise stuck when runs on non-json data (mrlika)
  • Fix for namespace sharing in .scss files; PropertyTab, SceneExplorer (msDestiny14)
  • Fix sprites not displayed in certain cases (Popov72)
  • Fix undefined camera pose in WebXR in Babylon Native (CraigFeldspar)
  • Fix some different behaviours between ParticleSystem and GPUParticleSystem when using the cylinder emitter. Also added WebGL2ParticleSystem (for WebGL2 support) and ComputeShaderParticleSystem (for WebGPU support) (Popov72)
  • Fix the StandardMaterial not using the tangent attribute when available (Popov72)
  • Fix code for handling getting DeviceType/DeviceSlot in DeviceInputSystem to work better with MouseEvents (PolygonalSun)
  • Fix vector2/3/4 and quaternion toString formatting (rgerd)
  • Fix non initialized matrix when setting orientation for bones (CedricGuillemet)
  • Fix cloning skeleton when mesh is an instanced mesh (Popov72)
  • Fix a bug where pointer up/move events were not sent to 3D controls when no mesh in the UtilityLayerRenderer is hit by the picking ray. (CraigFeldspar)
  • Fix issue with DeviceInputSystem where Mouse was being deregistered on Safari/MacOS (PolygonalSun)
  • Fix for disabledColor not working for Button (msDestiny14)
  • Fix NativeEngine not setting default depth test function to LEQUAL (rgerd)
  • Fix an exception where loading a very small STL file could result in attempting to read outside the files range (CoPrez)
  • Fix support of useReverseDepthBuffer throughout the engine (Popov72)
  • Fix issue with handling of negative Pointer IDs in DeviceInputSystem (PolygonalSun)
  • Fix WebXRNearInteraction feature's cursor positioning on meshes (rickfromwork)
  • Fix scaling discrepancy between TouchHolographicButton and other 3D controls (rickfromwork)
  • Fix for triggering interactions on nearby meshes when performing a near interaction grab (rickfromwork)
  • Fix for near interaction failing when multiple utility layers are present (rickfromwork)
  • Fix handling of events to support multiple canvas scenarios DeviceInputSystem (PolygonalSun)
  • Fix undisposed textures in PrePass effects that would cause the scene to have more textures than expected (CraigFeldspar)
  • Fix postprocess autoclear when enabling/disabling an effect in PrePass (CraigFeldspar)
  • Fix ThinEngine isMobile to detect changes when window is resized to allow for proper emulator evaluation (PolygonalSun)
  • Fix discrete animation not looping correctly (#10694) (Popov72)
  • Fix support for camera output render targets (Popov72) and (RaananW)
  • Fix bakeTransformIntoVertices not working when using rotationQuaternion + sometimes inverting winding (Popov72)
  • Fix error handling in basis texture loading (RaananW)
  • Fix issue with deadzones for gamepads being negatively affected by sensibility values (PolygonalSun)
  • Fix parsing of particle systems sub emitters (#10882) (Popov72)
  • Fix bug in NME where a link could not be recreated after being deleted (Popov72)
  • Fix small typo in transformNode getDirectionToRef method definition. (PirateJC)
  • Fix textures not properly inverting along the vertical axis when using ImageBitmaps (nmrugg)
  • Fix for SkyMaterial sun position not working with non-default azimuth (AdversInc)
  • Fix issue where default free camera rotation didn't work during pointer lock (PolygonalSun)
  • Fix issue with wrong definition of a returned BASIS format (RaananW)
  • Fix glTF exporter exports unused materials from excluded meshes (daoshengmu)
  • Fix glTFLoader 2.0 when dealing with glTF files that contain no meshes (simonihmig)
  • Fix issue with setParent and meshes with a pivot (RaananW)
  • Fix Button3D, HolographicButton, TouchHolographicButton and HolographicSlate content when scene is right-handed (carolhmj)
  • Fix get attachedNode always return null for PositionGizmo (jtcheng)
  • Fix Screen Space Reflections for right-handed scenes (carolhmj)
  • Fix camera collisions for right-handed scenes (carolhmj)
  • Add a null check when setting imageSrc on HolographicSlate(carolhmj)
  • Fix issue with physics impostors'unique ID not set correctly if an impostor was disposed (RaananW)
  • Fix memory leak and incorrect data copy in KTX2 (bghgary)
  • Fix keypoint selection in ACE (carolhmj)
  • Fix keypoint drag in ACE (carolhmj)
  • Fix spherical harmonics computation (Meakk)
  • Fix KTX and DDS loading with baked mipmaps (Meakk)
  • Fix text rendering speed when TextWrapping.Ellipsis is used (carolhmj)
  • Fix caching of parented node (carolhmj)
  • Fix glTF exporter when exporting meshes with no material specified. (bghgary)
  • Fix InputPassword serialization (carolhmj)

Breaking changes

  • When a seven character hex string is passed to Color4.FromHexString, the alpha component will default to 1 instead of defaulting all components (r, g, b, and a) to 0. (BlakeOne)
  • List of breaking changes introduced by our compatibility with WebGPU
  • Use both mesh.visibility and material.alpha values to compute the global alpha value used by the soft transparent shadow rendering code. Formerly was only using mesh.visibility (Popov72)
  • Depth renderer: don't render mesh if infiniteDistance = true or if material.disableDepthWrite = true (Popov72)
  • Mesh.createInstance no longer make a unique Geometry for the Mesh so updating one Geometry can affect more meshes than before. Use Mesh.makeUniqueGeometry for old behaviour. (breakin)
  • Ammo.js needs to be initialized before creating the plugin with await Ammo(); since Ammo introduced an async init in their library. (sebavan)
  • Recast.js needs to be initialized before creating the plugin with await Recast(); since Recast introduced an async init in their library. (CedricGuillemet)
  • Custom shaders using instancing must use instanceColor instead of color so mesh vertex colors can be used with instancing. (CedricGuillemet)
  • Fixed spelling of EventState.initialize (seritools)
  • SkeletonViewer is now enabled by default (Deltakosh)
  • BindEyePosition has been moved from Material to Scene to avoid a circular dependency problem and is now a non-static method (bindEyePosition) (Popov72)
  • The depth renderer was not generating correct values for orthographic cameras when storeNonLinearDepth = false (Popov72)
  • dataBuffer.ts has been moved from Meshes/ to Buffers/ (Popov72)
  • By default, the glTF loader now uses sRGB buffers for gamma encoded textures (when supported by the GPU), which is more accurate than using regular buffers. However, it can lead to small visual differences. You can disable usage of sRGB buffers by setting glTFFileLoader.useSRGBBuffers to false (Popov72)
  • 4th (isAnimationSheetEnabled) and 5th (customEffect) parameters of GPUParticleSystem constructor have been inverted to match ParticleSystem constructor (Popov72)
  • PBRSubSurfaceConfiguration.useGltfStyleThicknessTexture has been renamed to PBRSubSurfaceConfiguration.useGltfStyleTextures (Popov72)
  • Properties in IWebXRHandTrackingOptions related to hand and joint meshes have been moved into jointMeshes and handMeshes members, respectively (rgerd)
  • IWebXRHandTrackingOptions.jointMeshes.onHandJointMeshGenerated() provides a hand instead of a controllerId in the parameters, since the tracked joint meshes are pre-generated (rgerd)
  • You should now access joint meshes from WebXRHand through the getJointMesh() function (rgerd)
  • Rework of the inner working of render targets. Those are mostly internal changes. From the end user standpoint, the most visible change is that the PostProcess class is now dealing with RenderTargetWrapper instead of InternalTexture objects. So, if you are directly updating the inputTexture property with a render target texture that you previously rendered, you will need to pass a RenderTargetWrapper instead of an InternalTexture: you will get it by doing rtt.renderTarget, where rtt is the instance of your RenderTargetTexture. (Popov72)
  • ShaderMaterial is now storing the effect on submeshes by default. It may be a breaking change in some special cases where one creates a ShaderMaterial not to be used as the material property of a mesh but instead to handle it "by hand" by calling ShaderMaterial.isReady / ShaderMaterial.bind directly. If you are doing that, you may want to pass false as the 5th parameter of the ShaderMaterial constructor to disable storing the effect on submeshes.
  • The glTFLoader.rootBabylonMesh getter now has a nullable return type (glTF files without mesh data) (simonihmig)
  • When updating the m array of the Matrix class directly, you must call markAsUpdated() explicitly or the matrix changes may not take effect (Popov72, Deltakosh, bghgary, Sebavan)
  • Loading glTF assets with skins now places skinned meshes as siblings of the corresponding skeleton root nodes instead of using skeleton.overrideMesh. (bghgary)
  • The overrideMesh of the Skeleton class has been removed. (bghgary)
  • Cloning a mesh now assigns the skeleton property to the source skeleton. (bghgary)
  • Cloning and creating instances of a mesh now refreshes the bounding box applying skins and morph targets. (bghgary)
  • KeyboardInfoPre.skipOnPointerObservable is now correctly renamed to KeyboardInfoPre.skipOnKeyboardObservable. (bghgary)
  • GLTF Animations are loaded at 60 FPS by default, instead of the previous 1 FPS. (carolhmj). If you'd like to keep your existing animation ranges, you can use this workaround:
BABYLON.SceneLoader.OnPluginActivatedObservable.add(function(plugin) {
  if (plugin.name === "gltf") {
    plugin.targetFps = 1;
  }
});
  • currentState and previousState have been removed from use in onInputChangedObservable in the DeviceSourceManager (PolygonalSun)
  • PointerInput movement enums are no longer being used in any movement event handling in the DeviceInputSystem and InputManager (PolygonalSun)
  • Shadow generators now use the Material.alphaCutOff value instead of a hard-coded 0.4 value. (Popov72)