- 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 / cascacaded 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 = truenow 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)
- Add Geodesic and Goldberg Polyhedra (JohnK)
- Added
getTextureByNametoScene(BlakeOne) - Added
getControlsByTypetoAdvancedDynamicTexture(BlakeOne) - Added
zoomToMouseLocationonArcRotateCamera(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
ArcRotateCamerazoom on multiTouch event (NicolasBuecher) - Moving button to shared uI folder.(msDestiny14)
- Added
collisionRetryCountto 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
encapsulateandencapsulateBoundingInfomethods toBoundingInfo. (Tolo789) - Added
onLoadObservableto theTextureDomeclass(es) (RaananW) - Modified
InputManagerto useDeviceSourceManager(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.FromLookDirectionandMatrix.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
PointerDragBehaviorenable state (cedricguillemet) - Added
targetHostto query and set targeted mesh withArcRotateCamera(cedricguillemet) - Added optional
preserveScalingSigntoaddChildandsetParentto keep scaling sign (cedricguillemet) - Spelling of function/variables
xxxByIDrenamed toxxxByIdto be consistent over the project. OldxxxByIDreamain as deprecated that forward to the correspondingxxxById(barroij) - Added new reflector tool that enable remote inspection of scenes. (bghgary)
- Update
createPickingRayandcreatePickingRayToRefmatrix parameter to be nullable. (jlivak) - Improved scene picking precision with huge values in world matrices when
Mesh.EnableDistantPickingflag is true (CedricGuillemet - Added
applyVerticalCorrectionandprojectionPlaneTiltto 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
ArcThru3PointstoCurve3(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.FromPromiseutility 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
mapPanningonArcRotateCamera(Hypnosss) - Added resetLastInteractionTime() to the auto rotate behavior (RaananW)
- Update
addContainerTaskandaddMeshTasksignatures onAssetsManagerto allow receiving a File as the sceneFilename argument. (carolhmj) - Added
onCreateCustomMeshImpostorhandler for creating custom mesh impostors to support Ammo.btSmoothTriangleMesh. (MackeyK24) - Added
onCreateCustomMeshImpostorhandler for creating mesh impostors with custom vertex data. (MackeyK24) - Added
onCreateCustomConvexHullImpostorhandler for creating convex hull imposters with custom vertex data. (MackeyK24) - Modified touch in
WebDeviceInputSystemto no longer delete touch points after pointer up. (PolygonalSun) - Added support for DualSense controllers to DeviceInputSystem. (PolygonalSun)
- Added
getCreationOptionsonThinEngine. (carolhmj) - Added
CompatibilityOptions.UseOpenGLOrientationForUVto 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
AutoReleaseWorkerPoolwhich will automatically terminate idle workers after a specified amount of time and use them in KTX2 and Draco decoders. (bghgary)
- Moved all instance data from
GeometrytoMeshsuch that the sameGeometryobject can be used by many meshes with instancing. Reduces memory consumption on CPU/GPU. (breakin - Added
NativeEngineconfiguration object parameter. (drigax) - Added
NativeEnginesupport 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_sRGBextension in WebGL1. There's a new parameter to theTextureconstructor that enables this feature (Popov72) - Added
IAudioEngineOptionsinterface 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 methodremove(). (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)
- Added support for
EXT_meshopt_compressionfor glTF loader. (zeux) - Increased
KHR_materials_transmissionrender 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_ldfor glTF loader. (Sebavan, bghgary) - Added a
OptimizeNormalsoption to the OBJ loader to smooth lighting (Popov72) - Added a
Prefilteredoption to theCubeTextureAssetTask(MackeyK24) - Added support for more uv sets to glTF loader. (bghgary)
- Added support for
KHR_materials_volumefor 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_COORDINATESflag 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_strengthfor 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
--bmbump multiplier to OBJ loader (brianzinn)
- Added support for thin instances in navigation mesh creation (CedricGuillemet)
- Added recast.d.ts definition file for recast.js (CedricGuillemet)
- Added obstacle support (CedricGuillemet)
- Added
onReachTargetObservableobserver to notify when agent reaches destination (CedricGuillemet)
- Added property
useMaxLinetoGridMaterial, which affects the brightness of line intersections. (BlakeOne) - Added an
OcclusionMaterialto simplify depth-only rendering of geometry (rgerd) - PrePass can now be used in
RenderTargetsspeeding 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
cullBackFacesproperty toMaterial(Popov72) - Added the
stencilobject property toMaterial(Popov72) - Set the
metadataproperty onMaterialto be serializable, so that it can be properly loaded from .babylon files (jlivak) - Add
mesh.visibilitysupport to grid material (bghgary) - Transform
getAlphaFromRGBin a property and dirty the materials that use it when it's changed (carolhmj) - When
scene.markAllMaterialsAsDirtyis called onBaseTexture, only dirty the materials related to that specific texture. (carolhmj)
- Added public version of
AbstractMeshfunction _getPositionData. (BlakeOne) - Added default options parameter to Create functions. (BlakeOne)
LineMeshnow allows assigning custom material viamaterialsetter. (FullStackForgerInstancedMeshcan now be sorted from back to front before rendering if the material is transparent (Popov72)- Add option to decompose the
newWorldMatrixwhen passed intoTransformNode.freezeWorldMatrix. (bghgary) - Added
mesh.onMeshReadyObservableto get notified when a mesh is ready (RaananW) - Added support for morph targets to the mesh
BoundingInforefresh. (EricBeetsOfficial-Opuscope) - Added support for screen coverage in addition to distance for LOds. (CraigFeldspar)
- Decreased memory usage and improved performance of
Mesh.MergeMeshes. (ryantrem)
- 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
getAlphaFromRGBcheckbox on Texture view (carolhmj) - Make sure popups are closed when page refreshes (RaananW)
- 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)
- Added a
MaterialAlphablock to read material's alpha value (Deltakosh) - Added a
CloudBLockblock to create noise based cloud data (Deltakosh) - Updated the VectorMerger and ColorMerger blocks to support swizzling (Deltakosh)
- Added a
ImageSourceblock 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
PerturbNormalblock (Popov72) - Added a
SceneDepthblock to access the scene depth buffer (Popov72) - Added support for custom blocks (BlakeOne, Popov72)
- Added a
ClipPlanesblock to support scene clip planes (Popov72) - Added
ElbowBlockto let users control the graph organization (Deltakosh)
- Added moving GUI controls to a non-overlapping position function called
moveToNonOverlappedPositioninAdvancedDynamicTexture(RolandCsibrei) - Allow Chrome to copy the GUI snippet id to the clipboard (BlakeOne)
- Added a
FocusableButtongui control to simplify creating menus with keyboard navigation (Flux159) - Added
focus()andblur()functions for controls that implementIFocusableControl(Flux159) - Added
ToggleButtonGUI control (kintz09) - Added shorthand methods which set all padding values at once, named
setPaddingandsetPaddingInPixels, to the control class (kintz09) - Added two touch-enabled GUI controls,
TouchMeshButton3DandTouchHolographicButton.TouchMeshButton3D's near interaction mesh can be customized with thecollisionMeshproperty (rickfromwork, satyapoojasama) - Added
imageWidth()andimageHeight()to access the source image dimensions ofImage(Queatz) - Added a
FluentButtonMaterialto give theTouchHolographicButtonthe same look and feel as the HoloLens 2 shell (rgerd) - Added property
renderToIntermediateTexturetoContainerwhich when set to true, will render children to an intermediate texture rather than direct to host allowing for DOM style alpha blending (BlindingHues) - Added
HolographicSlateGUI control (CraigFeldspar) - Added
HolographicBackplateto serve as a flexible panel in GUI controls using the MRTK design language (rgerd) - Added
NearMenuGUI control (CraigFeldspar) - Added
HandMenu, a simple menu that usesHandConstraintBehavior(CraigFeldspar) VolumeBasedPanel's constructor now accepts a name parameter, similar to other controls (rickfromwork)- Added
loadLayoutAsyncin theXmlLoader. 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
closeShapeandclosePathas extra options parameters inExtrudeShapeandExtrudeShapeCustom(JohnK) - Added
markAsDirtyandmarkAllAsDirtypublic functions onControl(carolhmj)
- Added
onTargetFramingAnimationEndObservabletoFramingBehavior(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, orchestratingSixDoFDragBehavior,FollowBehaviorandSurfaceMagnetismBehavior(CraigFeldspar) - Added
draggableMeshesproperty inSixDoFDragBehaviorlist in order to have only a subset of descendant meshes take pointer events into account (CraigFeldspar) SixDoFDragBehaviorcan 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 theHandTrackingfeature activated. (CraigFeldspar) - Updated
SixDofDragBehaviorandPointerDragBehaviorto respond to grabs made with theWebXRNearInteractionfeature (rickfromwork) - Updated
SixDofDragBehaviorto support XR motion controller specific rotation options when one is used, allowing for 1:1 mesh rotation with controllers (rickfromwork) - Added
TextWrapping.WordWrapEllipsismode to textblock (mysunnytime)
- 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
WebXRControllerPointerSelectionfeature as part of the WebXR Default Experience (rgerd) - Added two touch-enabled GUI controls,
TouchMeshButton3DandTouchHolographicButton, added option on the WebXR hand tracking feature for enabling touch collisions (rickfromwork, satyapoojasama) - Added initial support for the
sessiongrantedevent (#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
WebXRNearInteractionand 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
SixDofDragBehaviorto 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
WebXRLayersfeature to support rendering to anXRProjectionLayer(#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
NativeXRPluginandNativeXRFrameto improve XR performance on BabylonNative (rgerd) - Reset XR Camera's orientation when entering an AR session for consistent experience (RaananW)
- Enable multiview rendering to
XRProjectionLayerwith texture type "texture-array" (#10767) (rgerd)
- Exposed
scaleDragSpeedand addedaxisFactorforBoundingBoxGizmo(CedricGuillemet) - Provide additional attribute
customRotationQuaternionto customize the posture of the gizmo (ecojust) - Exposed
scaleRatioforGizmoManager(CedricGuillemet) - Added constructor parameters to customize colors for rotation gizmos on
RotationGizmo(jekelija) - Added constructor parameters to allow turning off
updateScaleon RotationGizmo (jekelija) - Dispose
_dragPlanewhen detaching inPointerDragBehavior(CedricGuillemet) - Log warning when trying to attach a node to a
LightGizmo(CedricGuillemet) - Inspector autopicking is in sync with
GimoManagerautopicking (CedricGuillemet) - Fixed wrong matrix with nodes having pivot point (CedricGuillemet)
validateDragsupport added toAxisDragGizmo(CedricGuillemet)- Gizmos that have draggable components now support near interactions via
WebXRNearInteraction(rickfromwork)
- Faster scalar's WithinEpsilon with Math.abs (nekochanoide)
- Added
decomposeToTransformNode(RaananW)
- Serialize and parse isEnabled property for lights and cameras (andreasplesch)
- Added the
exportUnusedUVsproperty to theIExportOptionsinterface 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)
- Fix
WaterMaterial’s constructor to usethis.getScene()instead ofsceneparameter (BlakeOne) - Add missing param
pointto the callback function's type for the methodsregisterOnPhysicsCollideandunregisterOnPhysicsCollideof thePhysicsImpostorclass. (BlakeOne) - Fix serialization and parsing of
textBlockandimageforButtonclass (BlakeOne) - Fix for
AdvancedTimerignoringtimeoutoption (BlakeOne) - Fix issue when
AssetContaineris added toScenemultiple times (BlakeOne) - Fix issue when
ParticleSystemis disposed before_subEmittersis 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
deltaPositionwith 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
GetAngleBetweenVectorswhen 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.instantiateModelsToScenewhen 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
PointerDragBehaviorand 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
PerturbNormalblock 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
NormalBlendblock (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
targetandvisibleInInspectorproperties (Popov72) - Fix transmission mask being accidently used in glTF volume materials (MiiBond)
- Fix
Scene.getPointerOverMeshreturning disposed mesh (Popov72) - Fix NME
TextureBlockto 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 namepsace 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
ParticleSystemandGPUParticleSystemwhen using the cylinder emitter. Also addedWebGL2ParticleSystem(for WebGL2 support) andComputeShaderParticleSystem(for WebGPU support) (Popov72) - Fix the
StandardMaterialnot 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
UtilityLayerRendereris 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
useReverseDepthBufferthroughout the engine (Popov72) - Fix issue with handling of negative Pointer IDs in DeviceInputSystem (PolygonalSun)
- Fix
WebXRNearInteractionfeature's cursor positioning on meshes (rickfromwork) - Fix scaling discrepancy between
TouchHolographicButtonand 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
bakeTransformIntoVerticesnot working when usingrotationQuaternion+ 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
imageSrcon 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.Ellipsisis used (carolhmj) - Fix caching of parented node (carolhmj)
- Fix glTF exporter when exporting meshes with no material specified. (bghgary)
- Fix InputPassword serialization (carolhmj)
- 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.visibilityandmaterial.alphavalues to compute the global alpha value used by the soft transparent shadow rendering code. Formerly was only usingmesh.visibility(Popov72) - Depth renderer: don't render mesh if
infiniteDistance = trueor ifmaterial.disableDepthWrite = true(Popov72) Mesh.createInstanceno longer make a uniqueGeometryfor the Mesh so updating oneGeometrycan affect more meshes than before. UseMesh.makeUniqueGeometryfor 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
instanceColorinstead ofcolorso mesh vertex colors can be used with instancing. (CedricGuillemet) - Fixed spelling of
EventState.initialize(seritools) SkeletonVieweris now enabled by default (Deltakosh)BindEyePositionhas been moved fromMaterialtoSceneto 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.tshas been moved fromMeshes/toBuffers/(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.useSRGBBufferstofalse(Popov72) - 4th (
isAnimationSheetEnabled) and 5th (customEffect) parameters ofGPUParticleSystemconstructor have been inverted to matchParticleSystemconstructor (Popov72) PBRSubSurfaceConfiguration.useGltfStyleThicknessTexturehas been renamed toPBRSubSurfaceConfiguration.useGltfStyleTextures(Popov72)- Properties in
IWebXRHandTrackingOptionsrelated to hand and joint meshes have been moved intojointMeshesandhandMeshesmembers, respectively (rgerd) IWebXRHandTrackingOptions.jointMeshes.onHandJointMeshGenerated()provides ahandinstead of acontrollerIdin the parameters, since the tracked joint meshes are pre-generated (rgerd)- You should now access joint meshes from
WebXRHandthrough thegetJointMesh()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
PostProcessclass is now dealing withRenderTargetWrapperinstead ofInternalTextureobjects. So, if you are directly updating theinputTextureproperty with a render target texture that you previously rendered, you will need to pass aRenderTargetWrapperinstead of anInternalTexture: you will get it by doingrtt.renderTarget, whererttis the instance of yourRenderTargetTexture. (Popov72) ShaderMaterialis now storing the effect on submeshes by default. It may be a breaking change in some special cases where one creates aShaderMaterialnot to be used as the material property of a mesh but instead to handle it "by hand" by callingShaderMaterial.isReady/ShaderMaterial.binddirectly. If you are doing that, you may want to passfalseas the 5th parameter of theShaderMaterialconstructor to disable storing the effect on submeshes.- The
glTFLoader.rootBabylonMeshgetter now has a nullable return type (glTF files without mesh data) (simonihmig) - When updating the
marray of theMatrixclass directly, you must callmarkAsUpdated()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
overrideMeshof theSkeletonclass has been removed. (bghgary) - Cloning a mesh now assigns the
skeletonproperty to the source skeleton. (bghgary) - Cloning and creating instances of a mesh now refreshes the bounding box applying skins and morph targets. (bghgary)
KeyboardInfoPre.skipOnPointerObservableis now correctly renamed toKeyboardInfoPre.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;
}
});
currentStateandpreviousStatehave been removed from use inonInputChangedObservablein theDeviceSourceManager(PolygonalSun)PointerInputmovement enums are no longer being used in any movement event handling in theDeviceInputSystemandInputManager(PolygonalSun)- Shadow generators now use the
Material.alphaCutOffvalue instead of a hard-coded 0.4 value. (Popov72)