What's New

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 / 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 = 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)

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)

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 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 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. (carolhmj)
  • 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)

4.2.0 (November 12th 2020)

Major updates

  • Added particle editor to the Inspector (Deltakosh)
  • Added sprite editor to the Inspector (Deltakosh)
  • Updated skeleton viewer in the Inspector (Pryme8)
  • Added texture inspection in the Inspector (DarraghBurkeMS)
  • Added PBR support in the node material editor (Popov72)
  • Added new node material editor modes: procedural textures, post processes, particle shaders (Popov72 and Deltakosh)
  • Added customizable frames in the node material editor (Pamela W)
  • Added support for code templates in the playground (sailro)
  • Added HDR texture filtering tools to the sandbox. Doc (Sebavan)
  • Revamped documentation (RaananW, John King, Patrick Ryan, PiratJC)
  • Added KTX + BasisU support (Popov72)
  • Updated WebXR Support (RaananW)
  • Added support for thin instances for faster mesh instances. Doc (Popov72)
  • Added support in ShadowGenerator for soft transparent shadows (Popov72)
  • Added PBR Next features: Reflection probes for accurate shading and Sub Surface Scattering (CraigFeldpsar and Sebavan)
  • Added support for latest glTF extensions: KHR_materials_clearcoat, KHR_materials_sheen, KHR_materials_transmission, KHR_texture_basisu (Sebavan and Popov72)
  • Added support for 3D Commerce glTF extension: KHR_materials_variants (Sebavan and Deltakosh)

Updates

General

  • Added the ShadowDepthWrapper class to support accurate shadow generation for custom as well as node material shaders. Doc (Popov72)
  • Added support for postproces serialization (Deltakosh)
  • Added support for querystrings on KTX file URLs (abogartz)
  • Refactored React refs from old string API to React.createRef() API (belfortk)
  • Scale on one axis for BoundingBoxGizmo (cedricguillemet)
  • Camera gizmo (cedricguillemet)
  • Upgraded gizmo meshes (davesauce14)
  • Gizmo isHovered boolean (cedricguillemet)
  • Node support (Transform, Bone) for gizmos (cedricguillemet)
  • Simplified code contributions by fully automating the dev setup with gitpod (nisarhassan12)
  • Added a CascadedShadowMap.IsSupported method and log an error instead of throwing an exception when CSM is not supported (Popov72)
  • Added initial code for DeviceInputSystem (PolygonalSun)
  • Added support for material.disableColorWrite (Deltakosh)
  • The Mesh Asset Task also accepts File as sceneInput (RaananW)
  • Gizmo axis thickness (cedricguillemet)
  • When no submesh can be picked(pointcloud), falls back to bbox intersection (cedricguillemet)
  • Added support preserving vert colors for CSG objects (PirateJC)
  • Added boundingBoxRenderer.onBeforeBoxRenderingObservable and boundingBoxRenderer.onAfterBoxRenderingObservable (Deltakosh)
  • Better plane handling for PointerDragBehavior when camera direction colinear to axis (cedricguillemet)
  • Added initial code for user facing DeviceSourceManager (PolygonalSun)
  • Added a Simple and advanced timer, based on observables (RaananW)
  • Don't log a message in CustomProceduralTexture if the texturePath is not a JSON path (Popov72)
  • Added an alternate option to the mesh edge renderer to generate edges faster / more accurately for unusual geometries (like the ones generated by CSG) (Popov72)
  • Added an option when creating the engine to switch matrix computation to 64 bits (Popov72)
  • Added support for the alpha component to the SSR post-process (Popov72)
  • Force compute world matrix of the newly-attached mesh of a ray helper (RaananW)
  • Allow 180 monoscopic videos on top of the video dome (#8575) (RaananW)
  • Added AssetContainerTask support to AssetsManager class (MackeyK24)
  • Added fixedDragMeshBoundsSize for boundingbox gizmo to size anchors from bounds size (cedricguillemet)
  • Changed DeviceSourceManager getInput contract to no longer return nullable values (Drigax)
  • Photo Dome and Video Dome now use the same abstract class and support the same parameters (#8771) (RaananW)
  • Added getTransformNodesByTags support to Scene class (MackeyK24)
  • Added support for multi-pointer mesh selection and pointer over/out triggers (#8820) (RaananW)
  • Changed DeviceSourceManager getInput contract to no longer return nullable values for reals this time. Also added proper cleanup for DeviceSourceManager observables (Drigax)
  • Default Loading screen supports any image size and ratio (#8845) (RaananW)
  • Added optional success and error callbacks for freezeActiveMeshes (RaananW)
  • Allow cross-eye mode in photo and video dome (#8897) (RaananW)
  • Added noMipMap option to the photo dome construction process (#8972) (RaananW)
  • Added a disableBoundingBoxesFromEffectLayer property to the EffectLayer class to render the bounding boxes unaffected by the effect (Popov72)
  • Removed all references to HTML element from cameras' attach and detach control functions (RaananW)
  • Added boundingBoxRenderer.onResourcesReadyObservable (aWeirdo)
  • Added copyTools.GenerateBase64StringFromTexture (aWeirdo)
  • Updated axisScaleGizmo to follow pointer on drag (aWeirdo)
  • Added manual input for sliders on NME and inspector (msDestiny14)

Engine

  • Improved world matrix caching engine by using dirty mechanism on vector3 and quaternion (Deltakosh)
  • Allow logging of shader code when a compilation error occurs (Popov72)
  • Added back support for selecting textures based on engine capabilities (bghgary)
  • Fixed Draco decoder when running on IE11 (bghgary)
  • Change default camera calculations to only include visible and enabled meshes (bghgary)
  • Optimized frozen instances (Deltakosh)
  • Added support for detail maps in both the standard and PBR materials (Popov72)
  • Added abstractMesh method to get all particle systems that use the mesh as an emitter (PirateJC)
  • Added customization options to VirtualJoystick (#7398) (Rockwell15)
  • Handle meshes with LODs in render target textures (meaning in glow/highlight layers, shadow generators, depth renderer, etc) (Popov72)

NME

  • Frames are now resizable from the corners (belfortk)
  • Can now rename and re-order frame inputs and outputs (belfortk)
  • Can now edit Node port names (belfortk)
  • Updated which node ports are shown on frames by default so that only node ports connected to outside nodes are by default exposed on the frame (belfortk)
  • Added a modulo block (ageneau)
  • Fix bug where frame port labels would be the names of incorrect nodes (belfortk)
  • Fix bug where long comments on collapsed frames broke port alignment (belfortk)
  • Add the FragCoord and ScreenSize blocks (Popov72)
  • Particle systems: add the ParticlePositionWorld block (Popov72)
  • Add isExposedOnFrame property to connection points (belfortk)
  • Add support for exporting frames (belfortk)
  • Add support for importing frames and their nodes (unconnected) and exposed frame ports (belfortk)
  • Add the rgba and a outputs to the ReflectionTexture block (Popov72)
  • Add custom frames to be uploaded into NME for reuse (msDestiny14)
  • Node ports are now serialized for custom frames (msDestiny14)
  • Deleting a collapsed frame will delete all nodes inside it (msDestiny14)

Inspector

  • Added support for follow cameras (Deltakosh)
  • New delta tool used to apply delta changes to a scene (Deltakosh)
  • Handle PBR colors as colors in linear space (Popov72)
  • Allow removing textures (Popov72)
  • Edit all textures (anisotropic, clear coat, sheen, ...) for the PBR materials (Popov72)
  • Added right click options to create PBR and Standard Materials (Deltakosh)
  • Added support for recording GIF (Deltakosh)
  • Popup Window available (To be used in Curve Editor) (pixelspace)
  • Added support to update inspector when switching to a new scene (belfortk)
  • Hex Component for Hex inputs on layer masks. (msDestiny14)
  • View & edit textures in pop out inspector using tools such as brush and floodfill. Supports region selection, individual channel editing, mipmap previews, and resizing. (DarraghBurkeMS)
  • Added mesh debug tools to display bone influence weights and bone indices maps. (Pryme8)
  • Added more functionality and options to the skeleton debug panel. (Pryme8)
  • Along with bone index it is now possible to select a bone using its name when viewing bone weights (#9117) (RaananW)
  • Gradient nodes from NME can now be set to be visible in the inspector (msDestiny14)

Cameras

  • Fixed up vector not correctly handled with stereoscopic rig (cedricguillemet)
  • Handle reattachment of panning button for ArcRotateCamera (cedricguillemet)
  • Unattach previous control in scene.InputManager when attaching a new one (cedricguillemet)
  • Added flag to TargetCamera to invert rotation direction and multiplier to adjust speed (Exolun)
  • Added upwards and downwards keyboard input to FreeCamera (Pheater)
  • Handle scales in camera matrices (Popov72)
  • Added mouse wheel controls to FreeCamera. (mrdunk)

Debug

  • Added new view modes to the SkeletonViewer class. (Pryme8)
  • Added static methods to create debug shaders materials for a mesh with a skeleton. (Pryme8)
  • Added ability to view local rotation axes of bones using new displayOptions: showLocalAxes and localAxesSize (reimund)

Sprites

  • Added support for 'sprite.useAlphaForPicking` to enable precise picking using sprite alpha (Deltakosh)
  • Improved rendering engine by using instancing when available (Deltakosh)

Physics

  • Fixed time steps or delta time with sub time step for Oimo.js and Cannon.js (cedricguillemet)
  • Ammo.js collision group and mask supported by impostor parameters (cedricguillemet)
  • Contact point parameter in registerOnPhysicsCollide callback (cedricguillemet)
  • collisionResponse flag to disable response but still get onCollide events (cedricguillemet)
  • Ammo.js IDL exposed property update and raycast vehicle stablization support (MackeyK24)
  • Recast.js plugin nav mesh and crowd agent to ref performance optimizations. (MackeyK24)
  • Added scene.physicsEnabled boolean (Deltakosh)
  • Fixed an issue with transformation set after physics body was created using Cannon.js (excluding height and plane) (#7928) (RaananW)
  • Fixed an issue with compound creation and scaling preset (#8888) (RaananW)

Loaders

  • Added support for glTF mesh instancing extension (#7521) (drigax)
  • Get the list of cameras retrieved from a gLTF file when loaded through the asset container (Popov72)
  • Fixed SceneLoader.ImportAnimations. Now targets nodes based on "targetProperty" (#7931) (phenry20)
  • Renamed KHR_mesh_instancing extension to EXT_mesh_gpu_instancing (#7945) (drigax)
  • Added support for KHR_materials_ior for glTF loader. (Sebavan)
  • Added support for KHR_materials_specular for glTF loader. (Sebavan)
  • Added support for KHR_materials_variants for glTF loader. (MiiBond)
  • Added support for KHR_materials_transmission for glTF loader. (MiiBond)
  • Improved progress handling in glTF loader. (bghgary)
  • Use min/max values from position accessors (when available) to set the bounding box of meshes (Popov72)
  • Added missing "pluginExtension" parameter to SceneLoader.ImportAnimations. (phenry20)
  • Added support for .glb file loading through a base64 encoded filename (Popov72)
  • Fixed issue with loading screen hiding too early when loading multiple assets concurrently. (bghgary)
  • Added the loadAllMaterials property to the gLTF loader to load materials even if not used by any mesh (Popov72)
  • Added transmission prerender pass when using KHR_materials_transmission (MiiBond)
  • Fixed a bug when loading glTF with interleaved animation data. (bghgary)
  • Added support for KHR_materials_translucency for glTF loader. (MiiBond)

Serializers

  • Added support for KHR_materials_unlit to glTF serializer (Popov72)
  • Added support for glTF Skins to glTF serializer (Drigax)
  • Added support for glTF Morph Target serialization (Drigax)
  • Fixed several bugs in stlSerializer (aWeirdo)
  • Added param doNotBakeTransform to stlSerializer.CreateSTL (aWeirdo)

Materials

  • Added the roughness and albedoScaling parameters to PBR sheen (Popov72)
  • Updated the energy conservation factor for the clear coat layer in PBR materials (Popov72)
  • Added the transparencyMode property to the StandardMaterial class (Popov72)
  • Added to FresnelParameters constructor options and equals method (brianzinn)
  • Added AddAttribute to CustomMaterial and PBRCustomMaterial (Popov72)
  • setTexture and setTextureArray from ShaderMaterial take now a BaseTexture as input instead of a Texture, allowing to pass a CubeTexture (Popov72)
  • Allow parenthesis usage in #if expressions in shader code (Popov72)
  • Added to StandardMaterial RGBD ReflectionTexture, RefractionTexture and LightmapTexture support. (MackeyK24)
  • Allow using the single comment syntax // comment in a #if construct in shader code (Popov72)
  • Added the possibility to update the shader code before being compiled (Popov72)
  • Added the shadowOnly property to the BackgroundMaterial class (Popov72)
  • Added support for lightmaps in unlit PBR materials (Popov72)
  • Added muted setting to VideoTexture, Fixed autoplay in Chrome (simonihmig)
  • Added waveCount to WaterMaterial used to adjust waves count according to the ground's size where the material is applied on (julien-moreau)
  • Alpha test transparencyMode no-longer requires a diffuse/albedo texture if opacityTexture is present (metaobjects)
  • Added hasTexture override in MultiMaterial (Vampiro)

Meshes

  • Added MeshBuilder.CreateCapsule and Mesh.CreateCapsule for creation of a capsule shape mesh and VertexBuffers. (Pryme8)

WebXR

  • Added optional ray and mesh selection predicates to WebXRControllerPointerSelection (Exolun)
  • Implemented the new WebXR HitTest API (#7364) (RaananW)
  • Playground doesn't update FPS when in XR in main and frame (#7875) (RaananW)
  • Added support for teleportation using pointer events (RaananW)
  • AR reference space type recommendation changed to 'unbounded' (#7959) (RaananW)
  • Teleportation plugin doesn't use the touched to finish teleportation (#7916) (RaananW)
  • Support for pointer selection and teleportation in right handed systems (#7967) (RaananW)
  • Pointer Selection feature now uses selectstart and selectend events when gamepad and motion controller are not present (#7989) (RaananW)
  • Removed forced autoClear = false settings (RaananW)
  • Added a warning that WebXR can only be served over HTTPS (RaananW)
  • Default (XR-global) rendering group ID can be defined when initializing a default experience (RaananW)
  • Added support for (experimental) haptic actuators (#8068) (RaananW)
  • It is now possible to enable experimental (AR) features using the options of the default xr helper (RaananW)
  • Full support for right handed scenes (#8132) (RaananW)
  • WebXR anchors feature implemented (#7917) (RaananW)
  • Canvas is being resized when entering XR (RaananW)
  • All camera view matrices are now calculated by Babylon to support left and right handed systems (RaananW)
  • WebXR Features Manager now has the ability to check if a feature can be enabled, and set native features optional or required (RaananW)
  • Optional camera gaze mode added to the pointer selection feature (RaananW)
  • Exposing feature points when running on top of BabylonNative (Alex-MSFT)
  • WebXR hit test can now define different entity type for the results (#8687) (RaananW)
  • Fixed an issue with stencil not enabled per default (#8720) (RaananW)
  • Expose the overlay to which the XR Enter/Exit buttons are added to (#8754) (RaananW)
  • WebXR hand-tracking module is available, able to track hand-joints on selected devices including optional physics interactions (RaananW)
  • Fixed an issue with moving backwards in XR (#8854) (RaananW)
  • Hit-Test results can be an empty array (#8887) (RaananW)
  • XR's main camera uses the first eye's projection matrix (#8944) (RaananW)
  • pointerX and pointerY of the scene are now updated when using the pointer selection feature (#8879) (RaananW)
  • XR tracking state was added to the camera (#9076) (RaananW)
  • Individual post processing can be applied to the XR rig cameras (#9038) (RaananW)
  • Pointer selection improvements - single/dual hand selection, max ray distance and more (#7974) (RaananW)
  • Updated Plane Detection API (RaananW)
  • Updated anchor system's promise resolution and API (#9258) (RaananW)
  • Fixed an issue with teleportation re-attachment (#9273) (RaananW)

Collisions

  • Added an option to optimize collision detection performance (jsdream) - PR
  • Added support for collisions with unindexed meshes (#9267)(Popov72)

Animation

  • Added support for Additive Animation Blending. Existing animations can be converted to additive using the new MakeAnimationAdditive method for Skeletons, AnimationGroups and Animations. Animations can be played additively using the new isAdditive input parameter to the begin animation methods. (c-morten)
  • Sort events by frame in ascending order in Animation#addEvent() (ycw)

Maths

  • Added Vector3.projectOnPlaneToRef (Deltakosh)

Particles

  • Added local space support for GPU particles (CraigFeldpsar)
  • Added ability to update also colors and uvs of solid particle vertices (jerome)

Textures

  • .HDR environment files will now give accurate PBR reflections (CraigFeldpsar)
  • Added a homogeneousRotationInUVTransform property in the Texture to avoid deformations when rotating the texture with non-uniform scaling (Popov72)
  • Added Texture.ForceSerializeBuffers (aWeirdo)

Audio

  • Added support of metadata in Sound class. (julien-moreau)
  • Added currentTime property to the Sound class. (jocravio)

Build

  • Fixed an issue with gulp webpack, webpack stream and the viewer (RaananW)

Playground

  • Added support for code templates in the playground (sailro)
  • If createEngine fails, a default engine will be created (#8084) (RaananW)

GUI

  • Added support for custom word splitting function for TextBlock (Popov72)
  • Added the fixedRatio property to the Control class (Popov72)
  • Clip multilines by camera near plane when point is attached to a mesh (cedricguillemet)

Post Processes

  • SSAO 2, motion blur and screen space reflections are now using the brand new PrePassRenderer to avoid rendering the scene twice (CraigFeldpsar
  • Added Screen Space Curvature post process: Doc (Popov72 and Sebavan)

Bugs

  • Fixed infinite loop in GlowLayer.unReferenceMeshFromUsingItsOwnMaterial (Popov72)
  • Fixed picking issue in the Solid Particle System when MultiMaterial is enabled (jerome)
  • Fixed picking issue in the Solid Particle System when expandable (jerome)
  • Fixed use of skeleton override matrix in mesh ray intersection (cedricguillemet)
  • QuadraticErrorSimplification was not exported (RaananW)
  • Fixed NME Frames bug where collapsing and moving a frame removed the nodes inside (belfortk)
  • Fixed moving / disappearing controls when freezing/unfreezing the ScrollViewer (Popov72)
  • Fix: when using instances, master mesh (if displayed) does not have correct instance buffer values (Popov72)
  • Exit XR will only trigger only if state is IN_XR (RaananW)
  • Fixed improper baking of transformed textures in KHR_texture_transform serializer. (drigax)
  • Fixed NME codegen: missing common properties for float-value input block. (ycw)
  • Fixed missing options for MeshBuilder.CreateBox. (ycw)
  • Fixed bug in Plane.transform when matrix passed in is not a pure rotation (Popov72)
  • Fixed bug in PBR when anisotropy is enabled and no bump texture is provided (Popov72)
  • Fixed horizon occlusion in PBR materials (Popov72)
  • Fixed wrong relative position in applyImpulse/applyForce for ammojs plugin (cedricguillemet)
  • Fixed delay calculation in Animatable.goToFrame when speedRatio != 1 (Reimund Järnfors)
  • Fixed bug in PBR when translucency is enabled and an irradiance texture is provided (Popov72)
  • Fixed bug in PBR with translucency when irradiance texture is 2D (Popov72)
  • Fixed parenting and enabled state of cloned lights (cedricguillemet)
  • Fixed bug in PBR when specific combinations of parameters are used (Popov72)
  • Fixed texture being inverted on the Y axis by default when using TextureAsset or AssetManager (broederj)
  • Fixed TexturePacker cross-origin image requests, Fixed falsy default options (ludevik)
  • Fixed freeze (infinite loop) when disposing a scene that loaded some specific gLTF files (Popov72)
  • Fixed submesh recreation when it should not (Popov72)
  • Fixed CustomMaterial and PBRCustomMaterial not setting uniforms / samplers / attributes (Popov72)
  • Fixed bug in NME where deleting a node from a frame would not remove its ports on the outside of a frame
  • Fixed mesh winding order inversion when merging meshes with overridden side orientation (drigax)
  • Fixed a rendering issue with GearVR in WebXR mode (RaananW)
  • Fixed error when downloading async createScene function in playground (#7926) (RaananW)
  • Fixed issue where ThinEngine.prototype.createDynamicEngine is undefined when using VideoTexture with es6 packages (rvadhavk)
  • Fixed issue that canvas for VirtualJoystick does not have touch-action: "none" set by default (joergplewe)
  • Fixed issue that prevented user from re-loading custom meshes (belfortk)
  • Fixed bug in NME where collapsed frames didn't redraw output links to outside nodes (belfortk)
  • Fixed bug in NME where links were not redrawn after moving frame port (belfortk)
  • Fixed bugs in NME that were causing inconsistent behavior displaying Move Node Up and Down buttons on frame ports (belfortk)
  • Fixed bug in ShaderMaterial when using morph targets (Popov72)
  • Fixed bug in playground where child NME windows would not close before page unload events (belfortk)
  • Fixed an issue with stereoscopic rendering (#8000) (RaananW)
  • Fixed bug with multiple scenes when resizing the screen and there's a glow or highlight layer active (Popov72)
  • Fixed an error when compiling with the closure compiler (ageneau)
  • Fixed an error in applying texture to sides of extrudePolygon using faceUV[1] (JohnK)
  • Playground didn't work if query params were added to the URL (RaananW)
  • Fixed Path3D _distances / length computation (Poolminer)
  • Make sure bone matrices are up to date when calling TransformNode.attachToBone (Popov72)
  • Fixed display problem with transparent objects and SSAO2 pipeline (bug in the GeometryBufferRenderer) (Popov72)
  • Fixed Sound not accepting a TransformNode as a source for spatial sound (Poolminer)
  • Fixed bug when using ShadowOnlyMaterial with Cascaded Shadow Map and autoCalcDepthBounds is true (Popov72)
  • Fixed OBJ serializer default scene scene handedness causing OBJ Mirror export
  • Fixed bug when using shadows + instances + transparent meshes + transparencyShadow = false (Popov72)
  • Incorrect initialization when reattaching XR pointer selection (#8227) (RaananW)
  • Fixed DracoCompression to not load empty data into attributes (bghgary)
  • Fixed Mesh.subdivide where one face could be lost depending on the number of subdivision (Popov72)
  • Fixed AssetContainer.instantiateModelsToScene with cloneMaterials=true and MultiMaterials to properly set the cloned submaterials (ghempton)
  • Fixed MSAA fail on MultiRenderTarget textures (CraigFeldpsar
  • Fixed wrong display when setting DefaultRenderingPipeline.imageProcessingEnabled to false (Popov72)
  • Fixed crash when loading a .obj file with vertex colors (Popov72)
  • Fixed skeleton viewer still visible when isEnabled = false (Popov72)
  • Fixed crash with CSG when no uvs defined (Popov72)
  • Fixed an issue causing views to render blank when scene rendering is skipped for a given iteration of the render loop (elInfidel)
  • Fixed docs Matrix.RotationYawPitchRoll and Matrix.RotationYawPitchRollToRef (VSerain)
  • Fixed issue in GLTFLoader._updateBoneMatrices() where bone rest position was not set. (drigax)
  • Fixed the bounding box of instances that does not match the instance position / rotation / scaling (Popov72)
  • Fixed an issue with sound updateOptions not updating the underlying sound buffer/html element (RaananW)
  • Fixed bug in sphereBuilder where top and bottom segments added 6 indices per triangle instead of 3. (use option dedupTopBottomIndices to enable it) (aWeirdo)
  • Fixed issue with Babylon scene export of loaded glTF meshes.([Drigax]/(https://github.com/drigax))
  • Fixed an issue with text block wrap and unicode strings (not working in IE11) (#8822) (RaananW)
  • Fixed an issue with input text and input password and unicode strings (not working in IE11) (#9242) (Popov72)
  • Fixed an issue with compound initialization that has rotation (#8744) (RaananW)
  • Fixed an issue in DeviceSourceManager.getDeviceSources() where null devices are returned (Drigax)
  • Fixed issue in glTF2 _Exporter.createSkinsAsync() that exported an incorrect joint indexing list (drigax)
  • Fixed gltf2 Morph Target export code style, Added additional test case for non-animation group created morph targets (drigax)
  • Fixed "Uncaught ReferenceError: name is not defined" (outermeasure)
  • Fixed wrong winding when applying a transform matrix on VertexData (Popov72)
  • Fixed exporting vertex color of mesh with StandardMaterial when exporting to glTF (Drigax)
  • Changed use of mousemove to pointermove in freeCameraMouseInput and flyCameraMouseInput to Fixed issue with Firefox (PolygonalSun)
  • Fixed TriPlanarMaterial to compute the right world normals (julien-moreau)
  • Fixed SkeletonViewer to use utillity layer with custom lighting to improve debug mesh visibility (Drigax)
  • Fixed same sub mesh being rendered multiple times in the shadow map (Popov72)
  • Fixed incorrect shadows on the master mesh when using a lod mesh (Popov72)
  • Take first gamepad connected when attaching camera (and not only XBOX gamepads) (#9136) (RaananW)
  • Fixed bug in Mesh.IncreaseVertices assuming null value if a property didn't exist. (aWeirdo)
  • Fixed issue when taking a screenshot with multi-cameras using method CreateScreenshotUsingRenderTarget (#9201) (gabrielheming)
  • Fixed inTangent in animationGroup (dad72)
  • Fixed bug in QuadraticErrorSimplification not correctly optimizing mesh. (aWeirdo)
  • Fixed bug in ArcRotateCamera where setting the position would recalculate the alpha value to a value outside the current limits. (nilss0n)

Breaking changes

  • FollowCamera.target was renamed to FollowCamera.meshTarget to not be in conflict with TargetCamera.target (Deltakosh)
  • EffectRenderer.render now takes a RenderTargetTexture or an InternalTexture as the output texture and only a single EffectWrapper for its first argument (Popov72)
  • Sound's updateOptions takes options.length and options.offset as seconds and not milliseconds (RaananW)
  • HDRCubeTexture default rotation is now similar to the industry one. You might need to Added a rotation on y of 90 degrees if you scene changes (Sebavan)
  • PBRMaterial index of refraction is now defined as index of refraction and not the inverse of it (Sebavan)
  • SceneLoaderProgress class is now ISceneLoaderProgress interface (bghgary)
  • Rendering of transparent meshes: stencil state is now set to the value registered in the engine (when calling engine.setStencilBuffer(value)) instead of being set to false unconditionally. This change may affect the highlight layer when using transparent meshes. If you are impacted, you may need to exclude the transparent mesh(es) from the layer (Popov72)
  • Fixed width/height GUI container computation to take into account paddings when adaptWithToChildren = true (Popov72)
  • smoothstep in NME is now taking any type of parameters for its value input. If you use generated code from the NME ("Generate code" button), you may have to move the smoothstep output connection AFTER the input connections (Popov72)
  • SoundTrack.RemoveSound and SoundTrack.AddSound were renamed to SoundTrack.removeSound and SoundTrack.addSound (Deltakosh)
  • PolygonPoints.add no longer filters out points that are close to the first point (bghgary)
  • Material created with matching names now have auto-incrementing IDs (Drigax)

4.1.0 (February 27th 2020)

Major updates

Updates

General

  • Add two new clip planes (5 and 6) to get a clip cube (MickPastor)
  • Added support for dual shock gamepads (Deltakosh)
  • Support Vive Focus 3Dof controller (TrevorDev)
  • Planar positioning support for GizmoManager (Balupg)
  • ScaleGizmo and AxisScaleGizmo sensitivity factor (CedricGuillemet)
  • Individual gizmos can now be enabled/disabled (Balupg)
  • Unify preparation of instance attributes. Added MaterialHelper.PushAttributesForInstances (MarkusBillharz)
  • Added support for PBR irradiance map
  • Added ability to set render camera on utility layer instead of using the latest active camera (TrevorDev)
  • Move normalizeToUnitCube to transformNode instead of abstract mesh and add predicate to exclude sub objects when scaling (TrevorDev)
  • Method to check if device orientation is available (TrevorDev)
  • Added support for sound sprites Doc (Deltakosh)
  • Display Oculus Quest controller when using a Quest in WebVR (TrevorDev)
  • Added startAndReleaseDragOnPointerEvents property to pointerDragBehavior which can be set to false for custom drag triggering (TrevorDev)
  • Added optional picking predicate to pointerDragBehavior for filtering affected meshes (Exolun)
  • Added accessor functions for PointerDragBehavior._options (Popov72)
  • Effect renderer to render one or multiple shader effects to a texture (TrevorDev)
  • Added url parameters to web request modifiers (PierreLeBlond)
  • Added VRExperienceHelper.exitVROnDoubleTap (Deltakosh)
  • Added Scene.getTextureByUniqueID (aWeirdo)
  • Added support for 180 VR videos in VideoDome (RaananW)
  • Added optional parameter to use Euler angles in planeRotationGizmo (CedricGuillemet)
  • Added AnimationGroup.onAnimationGroupLoopObservable (Deltakosh)
  • Supports custom materials to generate glow through referenceMeshToUseItsOwnMaterial in the GlowLayer (sebavan)
  • Added RawTexture2DArray to enable use of WebGL2 2D array textures by custom shaders (atg)
  • Added multiview support for the shader material (and the line-mesh class) (RaananW)
  • Added various (interpolation) functions to Path3D, also alignTangentsWithPath, slice, getClosestPositionTo (Poolminer)
  • Allow setting of BABYLON.Basis.JSModuleURL and BABYLON.Basis.WasmModuleURL, for hosting the Basis transcoder locally (JasonAyre)
  • PNG support for browsers not supporting SVG (RaananW)
  • Device orientation event permissions for iOS 13+ (RaananW)
  • Added DirectionalLight.autoCalcShadowZBounds to automatically compute the shadowMinZ and shadowMaxZ values (Popov72)
  • Added CascadedShadowGenerator.autoCalcDepthBounds to improve the shadow quality rendering (Popov72)
  • Improved cascade blending in CSM shadow technique (Popov72)
  • Speed optimization when cascade blending is not used in CSM shadow technique (Popov72)
  • Added RenderTargetTexture.getCustomRenderList to overload the render list at rendering time (and possibly for each layer (2DArray) / face (Cube)) (Popov72)
  • Make sure all properties of CascadedShadowMap class are serialized/parsed (Popov72)
  • Added textures/opacity.png file to the Playground (Popov72)
  • Refactored the shadow generators code (Popov72)
  • Supports clip planes with shadows (sebavan)
  • Added Workbench color scheme for VSCode (drigax & Patrick Ryan)
  • Playground switch buttons are more intuitive (#7601) (RaananW)
  • Added support of screen based motion blur in MotionBlurPostProcess (default mode is object based) to be used as a fallback to save performances on large scenes (julien-moreau)

Engine

  • Improved instanceMesh with user defined custom buffers Doc (Deltakosh)
  • Morph targets now can morph UV channel as well (Deltakosh)
  • Added MorphTarget support to the DepthRenderer, GeometryBufferRenderer and OutlineRenderer (MarkusBillharz)
  • Added preprocessors for shaders to improve how shaders are compiled for WebGL1/2 or WebGPU (Deltakosh)
  • Added enterPointerlock and exitPointerlock (Separated from enterFullscreen) (aWeirdo)
  • Added support for vertexSource and fragmentSource parameters to ShaderMaterial (Deltakosh)

Inspector

  • Added support for Euler edition only for angles (can be turned off in the new inspector settings) (Deltakosh)
  • Added an option to ignore backfaces for picking (can be turned on and off in the new inspector settings) (Deltakosh)
  • Added support for ShadowGenerator (Deltakosh)
  • Added support for scene normalization (Deltakosh)
  • Added support for morph targets (Deltakosh)
  • Added context menu to add SSAORenderingPipeline and SSAO2RenderingPipeline (Deltakosh)
  • Added support for texture creation and assignments per material (Deltakosh)
  • Added support for occlusion properties (Deltakosh)
  • Texture channels are now displayed in grayscale (Deltakosh)
  • Ambiant and metallic maps are displayed correctly on PBR material even when using ORM packed texture (Deltakosh)
  • Added support for inspectable strings (Deltakosh)
  • Added support for CreateScreenshotUsingRenderTarget (13djwright)
  • Added support for Material.depthFunction property (Popov72)
  • Added an optional config option initialTab (ycw)
  • Added support for ImportAnimations (noalak)
  • Added support for Cascaded Shadow Maps (Popov72)
  • Added context menu to add NodeMaterial (Deltakosh)
  • Added option to switch material per mesh (Deltakosh)

Tools

  • Added Tools.CreateScreenshotAsync and Tools.CreateScreenshotUsingRenderTargetAsync (mehmetoguzderin)
  • Added Color3.toHSV(), Color3.toHSVToRef() and Color3.HSVtoRGBToRef() (Deltakosh)
  • Added ShadowGenerator.onAfterShadowMapRenderObservable and ShadowGenerator.onAfterShadowMapMeshRenderObservable (Deltakosh)
  • Added support for side by side and top bottom images in the PhotoDome (Deltakosh)
  • Added playground ts-local (TypeScript support for local playground) (pjoe)
  • Added RGBD Texture tools Sebavan
  • Bumped Monaco Editor to 0.18.1 and improved TypeScript compilation pipeline in the playground (sailro)
  • Added support for clickable errors in the playground (sailro)
  • Added a color picker and previewer for BABYLON.ColorX invocations in the playground (sailro)
  • Added support for diffing snippets in the playground (sailro)
  • Added diff navigator in the playground (sailro)
  • Added custom filter to remove internals from the completion in the playground (sailro)
  • Added support for tagging deprecated members (both in editor and for completion) in the playground (sailro)
  • Added preview area pop up for NME (Kyle Belfort)
  • Added comments to frames in NME (Kyle Belfort)
  • Make frames resizable in NME (Kyle Belfort)
  • Implement NME Preview Area Redesign (Kyle Belfort)

Meshes

  • Added TransformNode.instantiateHierarchy() which try to instantiate (or clone) a node and its entire hiearchy (Deltakosh)
  • Added new CreateTiledPlane and CreateTiledBox (JohnK)
  • Added absolute scaling and rotation getters (haroldma)
  • Added BILLBOARDMODE_USE_POSITION flag to billboards allowing use of camera positioning instead of orientation for mesh rotation (delaneyj)
  • Added accessor functions for SubMesh._materialDefines (Popov72)
  • Generator type used in TrailMesh constructor is now TransformNode instead of AbstrachMesh (Popov72)
  • Added the useVertexAlpha options to MeshBuilder.CreateDashedLines (Popov72)

Physics

  • Update Ammo.js library to support global collision contact callbacks (MackeyK24)
  • Update Ammo.js library to allow native capsule shape impostors (MackeyK24)
  • Update Ammo.js library to allow your own broadphase overlapping pair cache (MackeyK24)
  • Update Ammo.js library for custom impostor shapes. PhysicsImpostor.CustomImposter type and AmmoJSPlugin.OnCreateCustomShape factoty function (MackeyK24)
  • Update Ammo.js library and AmmoJS plugin to support ellipsoid (CedricGuillemet)
  • Physics update substeps (CedricGuillemet)

Loaders

  • Added support for non-float accessors in animation data for glTF loader. (bghgary)
  • Support loading cube data in the .basis loader (TrevorDev)
  • Load glTF extras into BJS metadata (pjoe)
  • Added support for morph target names via mesh.extras.targetNames when loading a glTF (zeux)
  • Added support for using HTTP range requests when loading MSFT_lod extension from a glTF binary. (bghgary)
  • Added a flag to enable/disable creation of instances for glTF loader. (bghgary)
  • Added an order property to glTF loader extensions to support reordering. (bghgary)
  • Added support for GLTF clearcoat extension Sebavan
  • Added support for GLTF specular extension Sebavan
  • Added support for GLTF sheen extension Sebavan
  • Added support for GLTF mesh quantization extension (zeux)
  • Added support for 8 bone influences to glTF loader (zeux)
  • Added support for animations import from separate files (noalak)
  • Use web workers to validate glTF to avoid blocking the main thread. (bghgary)
  • Update glTF validator to 2.0.0-dev.3.1. (bghgary)
  • Fix an issue with disposing materials and textures too aggressively in MSFT_lod loader extension. (bghgary)
  • Added experimental support for loading KTX2 files and KHR_texture_basisu glTF extension. (bghgary)

Materials

  • Added ShaderMaterial.setColor4Array (JonathanTron)
  • Added ShaderMaterial.setArray4 (JonathanTron)
  • Added get/set accessors for ShaderMaterial._shaderPath (Popov72)
  • Added scene.environmentIntensity to control the IBL strength overall in a scene (Sebavan)
  • Added support of image processing for WaterMaterial (julien-moreau)
  • Added pbrBRDFConfiguration.useSpecularGlossinessInputEnergyConservation to allow Specular-Workflow energy conservation to be turned off (ColorDigital-PS).
  • Added support for the freeze / unfreeze functions in ShaderMaterial (Popov72)
  • Added depthFunction new property to Material base class (Popov72)
  • Added setCompressedTextureExclusions method to Engine to allow for skipping compressed textures on certain files (abogartz)

ScreenshotTools

  • Added interface for argument size of screenshot methods (Dok11)
  • Implementation usage of precision in combination height and width params (Dok11)
  • Added a parameter to CreateScreenshotUsingRenderTarget to render sprites (Popov72)

Sounds

  • Added ISoundOptions.skipCodecCheck to make Sound more flexible with URLs (nbduke)
  • Added Scene.audioListenerPositionProvider property, to enable setting custom position of audio listener (Foxhoundn)

Sprites

  • SpritePackedManager extends SpriteManager so that a sprite sheet with different size sprites can be used (JohnK)
  • MultiPickSprite and multiPickSpriteWithRay added to sprites (JohnK)
  • SpritePackedManager support for JSON Objects that where not stringified, of with the frames parameter accepting Objects and Arrays (Pryme8)
  • Added SpriteMap for creation of grid-based dynamically animated sprite atlas rendering (Beta) (Pryme8)
  • Add SpriteManager.disableDepthWrite property (Popov72)

WebXR / WebVR

  • WebXR webVR parity helpers (Vive, WMR, Oculus Rift) (TrevorDev)
  • Compliance with the mozilla WebXR emulator for chrome and firefox (RaananW)
  • Use the same icon as in VR (RaananW)
  • Gamepad object is now exposed in the WebXRController class (RaananW)
  • If canvas does not have WebXR support the scene will still render (mainly Firefox) (RaananW)
  • Added support for foveated rendering in Oculus Quest (Deltakosh)
  • Added option to configure the output canvas (RaananW)
  • Supporting multisampled multiview rendering using the oculus multiview extension (RaananW)
  • Preparing to deprecate supportsSession in favor of isSupportedSession (RaananW)
  • Added onControllerModelLoaded observable for WebXR (RaananW)
  • UI Button has options to set different session mode and reference type (RaananW)
  • Added option to change the teleportation duration in the VRExperienceHelper class (https://github.com/LeoRodz)
  • Added support to teleport the camera at constant speed in the VRExperienceHelper class (https://github.com/LeoRodz)
  • VRExperienceHelper has now an XR fallback to force XR usage (beta) (RaananW)
  • Added option to change the teleportation easing function in the VRExperienceHelper class (https://github.com/LeoRodz)
  • Windows motion controller mapping corrected to XR (xr-standard) (RaananW)
  • Pointer-Event simulation for screen target ray mode (RaananW)
  • New observable that triggers when a session was initialized (RaananW)
  • WebXR teleportation can now be disabled after initialized or before created (RaananW)
  • New Features Manager for WebXR features (RaananW)
  • New features - Plane detection, Hit test, Background remover (RaananW)
  • XR Camera's API is Babylon-conform (position, rotationQuaternion, world matrix, direction etc') (#7239) (RaananW)
  • XR Input now using standard profiles and completely separated from the gamepad class (#7348) (RaananW)
  • Teleportation and controller selection are now WebXR features. (#7290) (RaananW)
  • Teleportation allows selecting direction before teleporting when using thumbstick / touchpad. (#7290) (RaananW)
  • It is now possible to force a certain profile type for the controllers (#7348) (RaananW)
  • WebXR camera is initialized on the first frame, including copying transformation from native camera (except for in AR) (#7389) (RaananW)
  • Selection has gaze mode (which can be forced) and touch-screen support (#7395) (RaananW)
  • Laser pointers can be excluded from lighting influence so that they are always visible in WebXR / WebVR (#7323) (RaananW)
  • Full support for the online motion controller repository (#7323) (RaananW)
  • New XR feature - XR Controller physics impostor for motion controllers / XR Input sources (RaananW)
  • Teleportation between different ground levels in WebXR is enabled (RaananW)
  • Utility Meshes for XR (teleportation ring, selection rays) can now be rendered using a utility layer (#7563) (RaananW)
  • Teleportation supports snap-to (anchor) points (#7441) (RaananW)

Ray

  • Added Ray.intersectsAxis to translate screen to axis coordinates without checking collisions (horusscope)

GUI

  • Added xmlLoader to load GUI layouts from XML (null0924)
  • Added disableMobilePrompt option to InputText for OculusQuest(and other android base VR devices) (shinyoshiaki)
  • Added Button.delegatePickingToChildren to let buttons delegate hit testing to embedded controls (Deltakosh)
  • Added Container.maxLayoutCycle and Container.logLayoutCycleErrors to get more control over layout cycles (Deltakosh)
  • Added StackPanel.ignoreLayoutWarnings to disable console warnings when controls with percentage size are added to a StackPanel (Deltakosh)
  • Added _getSVGAttribs functionality for loading multiple svg icons from an external svg file via icon id. Fixed bug for Chrome. Strip icon id from image url for firefox. (lockphase)
  • Scroll Viewer extended to include the use of images in the scroll bars(JohnK)
  • Added ScrollViewer.freezeControls property to speed up rendering (Popov72)
  • Added ImageScrollBar.num90RotationInVerticalMode property to let the user rotate the pictures when in vertical mode (Popov72)
  • Modified isPointerBlocker to block mouse wheel scroll events. ScrollViewer mouse scroll no longer dependent on scene. (lockphase)

Particles

  • Added particleSystem.isLocal for CPU particles to let the particles live in emitter local space. Doc (Deltakosh)
  • Added the feature expandable to the Solid Particle System (jerome)
  • Added the feature removeParticles() to the Solid Particle System (jerome)
  • Added the feature "storable particles" and insertParticlesFromArray() to the Solid Particle System (jerome)
  • Added the support for MultiMaterials to the Solid Particle System (jerome)
  • Added support for CustomParticleEmitter. Doc (Deltakosh)
  • Added support for MeshParticleEmitter. Doc (Deltakosh)

Node Material

  • Added Light intensity output to LightInformationBlock (Drigax)

Serializers

  • Added support for AnimationGroup serialization (Drigax)
  • Expanded animation group serialization to include all targeted TransformNodes (Drigax)

Texture Packer

  • Added TexturePacker Class (Pryme8)
  • Added TexturePackerLoader Class (Pryme8)

Documentation

  • Added a note on shallow bounding of getBoundingInfo (tibotiber)
  • Added a typo fix to the ArcRotateCamera setPosition method description (schm-dt)

Bug fixes

  • Fixed Textblock line spacing evaluation when linespacing > 0 (Deltakosh)
  • Fixed Xbox One gamepad controller button schemes (MackeyK24)
  • Removing assetContainer from scene will also remove gui layers (TrevorDev)
  • A scene's input manager not adding key listeners when the canvas is already focused (Poolminer)
  • Runtime animation goToFrame when going back in time now correctly triggers future events when reached (zakhenry)
  • Fixed bug in Ray.intersectsTriangle where the barycentric coordinates bu and bv being returned is actually bv and bw. (bghgary)
  • Do not call onError when creating a texture when falling back to another loader (TrevorDev)
  • Context loss should not cause PBR materials to render black or instances to stop rendering (TrevorDev)
  • Only cast pointer ray input when pointer is locked in WebVR (TrevorDev)
  • Fix Right Hand coordinates with directional lights and shadows, hemispheric lights and spot lights (CedricGuillemet)
  • Avoid using default utility layer in gizmo manager to support multiple scenes (TrevorDev)
  • Fix bug when adding and removing observers in quick succession (sable)
  • Cannon and Ammo forceUpdate will no longer cause an unexpected exception (TrevorDev)
  • Loading the same multi-material twice and disposing one should not impact the other (TrevorDev)
  • GLTF exporter should no longer duplicate exported texture data (Drigax)
  • Avoid exception when disposing of Ammo cloth physics (TrevorDev)
  • Make planeDragGizmo usable on its own (TrevorDev)
  • Fix useObjectOrienationForDragging for pointerDragBehavior when using a single axis drag (TrevorDev)
  • Fix VR button not positioning correctly in canvas (haroldma)
  • Fix check for material needing alpha blending in OutlineRenderer (mkmc)
  • Fixed: scene's input manager's detachControl doesn't remove a wheel event listener (RamilKadyrov)
  • Fixed Solid Particle System particle's idx and idxInShape initialization (RamilKadyrov)
  • Added in ArcRotateCamera.storeState to save targetScreenOffset, in restoreState to restore it (RamilKadyrov)
  • Fixed CubeTexture to keep custom filesList when serializing/parsing (julien-moreau)
  • Fixed StandardRenderingPipeline to properly dispose post-processes from attached cameras (julien-moreau)
  • Fixed VolumetricLightScattering post-process to use a custom vertex shader instead of the depth vertex shader. (julien-moreau)
  • Fixed missing check in sceneTreeItemComponent resulting in gizmo to not end drag (CedricGuillemet)
  • Added missing callback triggers within texture loaders (PierreLeBlond)
  • Fixed TextureLinkLineComponent to no longer invert inspector-loaded textures (Drigax)
  • Fixed a single frame drop after leaving webxr on some devices (RaananW)
  • Fixed bug where vignette aspect ratio would be wrong when rendering direct to canvas
  • Fixed Path2 length computation (Poolminer)
  • Cloning of ShaderMaterial also clone shaderPath and options properties (Popov72)
  • Prevent an infinite loop when calling engine.dispose() in a scene with multiple SoundTracks defined (kirbysayshi)
  • Fixed missing properties in serialization / parsing of coneParticleEmitter (Popov72)
  • Fix a bug with exit VR and Edge (RaananW)
  • Fixed an issue with size of texture in multiview (RaananW)
  • Fixed Path3D (bi)normals computation for specific edge cases (Poolminer)
  • WebXR UI BUtton will only change to "In XR" after XR Session started (RaananW)
  • Fix bug when we call Mesh.render twice and the material is still not ready on the second call (barroij)
  • Fixed an issue with pose input in webxr (RaananW)
  • Fixed bug when parsing animation group without 'to' value (noalak)
  • isRightCamera and isLeftCamera were not set in WebXR (RaananW)
  • Sandbox will now load assets relatively path-ed to same folder (Kyle Belfort)
  • Playground will now render the returned scene from createScene() when there are multiple scenes added to engine (Kyle Belfort)
  • Fixed bug so Playground will now download .env texture files to ./textures in .zip (Kyle Belfort)
  • It was not possible to change the gaze and laser color in VR (#7323) (RaananW)
  • Fixed issue where textures exported using Safari web browser are Y mirrored. (#7352) (Drigax)
  • Fix a bug when resizing a MRT (Popov72)
  • Fixed an infinite clone recursion bug in InstancedMesh due to DeepCopier.DeepCopy cloning parent (Poolminer)
  • Fixed an issue with multiview textures (RaananW)
  • Screenshot height and width is now forced to be integers to prevent mismatch with openGL context (jekelija)
  • Fix shadow bound calculation in CSM shadow technique (Popov72)
  • Disposing of the depthReducer used in CSM (Popov72)
  • Fixed an issue with teleportation detach and attach (#7419) (RaananW)
  • Physics compound calculations were incorrect (#7407) (RaananW)
  • Fix bug NME bug where preview area crashes on pop up when NME is opened from playground (Kyle Belfort)
  • Fixed an issue with isSessionSupported return value being ignored (#7501) (RaananW)
  • Added isRigCamera to rig cameras so they can be detected. Used to fix a bug with utility layer and WebXR (#7517) (RaananW)
  • Fixed bug in the ScrollViewer GUI class when setting a idealWidth or idealHeight on the ADT (Popov72)
  • Fixed bug in the Image GUI class where some properties were lost after a rotation by n x 90° (Popov72)
  • Fixed bug in the Image GUI class when rotating a SVG picture (Popov72)
  • Fix for bug where NME would crash if frames did not have comments (Kyle Belfort)
  • Fix wrong import of _TimeToken (Sebavan
  • Fix shadows not rendered correctly when using point lights (Popov72)
  • Prevent depth buffer clear in shadow maps (Sebavan
  • Fix for bug where the light gizmo causes lights to flip orientation (#7603) (drigax)
  • Fix for bug where directional lights are inverted when using a right handed scene coordinate system. (drigax)
  • Fix subSurface parameters not copied in the PBR clone methods (Popov72)
  • Fix for bug where round-tripped glTF imported scenes are encapsulated in a second root node (#6349)(drigax & noalak)
  • Fix HDRCubeTexture construction, generateHarmonics was not properly taken into account (Popov72)
  • VideoTexture poster respects invertY (Sebavan
  • Fix for bug where round-tripped glTF imported scenes have incorrect light orientation, and duplicated parent nodes (#7377)(drigax)
  • Fix bug in PBR sheen where the sheen effect could be a little darker than expected when using direct lighting (Popov72
  • Fix bug in PBR shader when reflectionTexture.linearSpecularLOD is true (Popov72)
  • Fix for bug where resizing the bottom of a frame at times will not work for any frame in the graph (#7377)(Kyle Belfort)
  • Fix bug in PBR sheen when used with clear coat and no env texture provided (Popov72)
  • Fix for bug where Preview Area pop up does not change background color across windows (#7377)(Kyle Belfort)
  • Fix for bug where comments would break out of frames and break resizing of frames (Kyle Belfort)
  • Fix for bug where frames without comments would display undefined at the bottom right corner (Kyle Belfort)

Breaking changes

  • Setting mesh.scaling to a new vector will no longer automatically call forceUpdate (this should be done manually when needed) (TrevorDev)
  • Tools.ExtractMinAndMaxIndexed and Tools.ExtractMinAndMax are now ambiant functions (available on BABYLON.extractMinAndMaxIndexed and BABYLON.extractMinAndMax) (Deltakosh)
  • Tools.QueueNewFrame was removed in favor of Engine.QueueNewFrame (Deltakosh)
  • Removed external data from Engine (addExternalData, getExternalData, getOrAddExternalDataWithFactory, removeExternalData) (Deltakosh)
  • The glTF loader extensions that map to glTF 2.0 extensions will now be disabled if the extension is not present in extensionsUsed. (bghgary)
  • The STL loader does not create light or camera automatically, please use scene.createDefaultCameraOrLight(); in your code Sebavan
  • The glTF2 exporter extension no longer ignores childless empty nodes.(drigax)
  • Default culling strategy changed to CULLINGSTRATEGY_BOUNDINGSPHERE_ONLY (Deltakosh)
  • MaterialHelper.BindLight and MaterialHelper.BindLights do not need the usePhysicalLight anymore (Sebavan)
  • Mesh.bakeTransformIntoVertices now preserves child world-space transforms(drigax)
  • Removed setTexturesToUse and setCompressedTextureExclusions from Engine. (bghgary)

4.0.0 (May 1st 2019)

Associated release: https://github.com/BabylonJS/Babylon.js/releases/tag/4.0.3

Major updates

Optimizations

  • Added an engine creation option to compile all shaders with medium precision (Deltakosh)
  • Optimized effect reused for shadow maps (Deltakosh)
  • Added support for scissor testing (Deltakosh)
  • Improved shader precision detection (Deltakosh)
  • Added support for bone matrix texture, allowing skeletons to use a texture instead of uniforms when possible (Deltakosh)
  • Refactored of the SolidParticleSystem code for performance and code quality improvement (barroij)
  • Added per solid particle culling possibility: solidParticle.isInFrustum() (jerome)
  • Performance-oriented changes (barroij):
    • Prevented avoidable matrix inversion or square root computation.
    • Enabled constant-time removal from the transformNodes array and materials array of the Scene. As a consequence, the order of the element within these arrays might change during a removal.
    • Enabled constant-time removal from the instances array of a Mesh. As a consequence, the order of the element within this array might change during a removal.
    • Stopped calling Array.splice on the scene.meshes array and on the engine._uniformBuffer when removing an element. As a consequence, the order of the element within these arrays might change during a removal.
    • Added an option useGeometryUniqueIdsMap in the Scene constructor options. When set to true, each Scene isntance will have and will keep up-to-date a map of geometry per uniqueId. This is to avoid browsing all the geometries of the scene when a new one is being pushed. It also enables a removal of geometry in constant time. Disabled by default.
    • Added an option useMaterialMeshMap in the Scene constructor options. When set to true, each Material isntance will have and will keep up-to-date a map of its bound meshes. This is to avoid browsing all the meshes of the scene to retrieve the ones bound to the current material when disposing the Material. Disabled by default.
    • Added an option useClonedMeshhMap in the Scene constructor options. When set to true, each Mesh will have and will keep up-to-date a map of cloned meshes. This is to avoid browsing all the meshes of the scene to retrieve the ones that have the current mesh as source mesh. Disabled by default.
    • Added blockfreeActiveMeshesAndRenderingGroups property in the Scene, following the same model as blockMaterialDirtyMechanism. This is to avoid calling Scene.freeActiveMeshes and Scene.freeRenderingGroups for each disposed mesh when we dispose several meshes in a row. Enable by setting blockfreeActiveMeshesAndRenderingGroups to true just before disposing the meshes, then set it back to false just after.
    • Prevented code from doing useless and possible time consuming computation when disposing the ShaderMaterial of a LinesMesh.
    • Make a better use of the isIdentity cached value within a Matrix.
    • Make sure we browse all the submeshes only once in Material.markAsDirty function.
    • Added an Vector3.UnprojectRayToRef static function to avoid computing and inverting the projection matrix twice when updating a Ray.
  • Added per mesh culling strategy (jerome)

Updates

GUI

  • Added inputText.onKeyboardEventProcessedObservable (Deltakosh)
  • Added button.image and button.textBlock to simplify access to button internal parts (Deltakosh)
  • Added slider.displayThumb to show/hide slider's thumb (Deltakosh)
  • Added grid.rowCount, grid.columnCount and grid.getChildrenAt() (Deltakosh)
  • Added Control.AllowAlphaInheritance to let users control the way alpha is used (inherited or not) (Deltakosh)
  • Added support for performing operations like select all, text highlight, delete selected in inputText (Saket Saurabh)
  • Added inputText.onTextCopyObservable, inputText.onTextCutObservable and inputText.onTextPasteObservable to inputText (Saket Saurabh)
  • Added AdvancedDynamicTexture.onClipboardObservable to observe for clipboard events in AdvancedDynamicTexture(Saket Saurabh)
  • Added inputText.onFocusSelectAll to allow complete selection of text on focus event.(Saket Saurabh)
  • Added mouse drag to highlight text in inputText (Saket Saurabh)

Core Engine

  • Added reflectionMatrix support for more coordinatesMode's (Dennis Dervisis)
  • Added new WebRequest class to centralize all network requests. Can be used to configure headers of all network requests (Deltakosh)
  • Added WebRequest.CustomRequestHeaders, WebRequest.UseCustomRequestHeaders to send Custom Request Headers alongside XMLHttpRequest's i.e. when loading files (Tools.Loadfile) from resources requiring special headers like 'Authorization' (susares)
  • Added support for user clip planes to LineMeshes (Deltakosh)
  • Added shadowGenerator.onBeforeShadowMapRenderMeshObservable (Deltakosh)
  • Added support for scene.customLODSelector to let users define their own LOD rules (Deltakosh)
  • Added animatable.onAnimationLoopObservable (Deltakosh)
  • Added animationGroup.onAnimationLoopObservable (Deltakosh)
  • Added FlyCamera for free navigation in 3D space, with a limited set of settings (Phuein)
  • Added Engine.onNewSceneAddedObservable (Deltakosh)
  • Added new PassCubePostProcess to render cube map content (Deltakosh)
  • Added support for utility layer for SkeletonViewer (Deltakosh)
  • Added utility function Tools.BuildArray for array initialisation (barroij)
  • Introduced a new IOfflineSupport interface to hide IndexedDB (Deltakosh)
  • PBRMaterial and StandardMaterial now use hot swapping feature for shaders, allowing them to keep using a previous shader while a new one is being compiled (Deltakosh)
  • Aligned BoundingBox and BoundingSphere API and behavior for clarity and simplicity, removing BoundingBox's method setWorldMatrix and disallowing modification of the underlying world matrix except by calling reConstruct or update (barroij)
  • Make sure that Material.markAsDirty and all the markXXXDirty methods early out when scene.blockMaterialDirtyMechanism is true. (barroij)
  • Add updateUpVectorFromRotation to target camera to allow the up vector to be computed from rotation (TrevorDev)
  • Added wrap boolean parameter to CreateBox options to orientate images vertically on box sides (JohnK)
  • Added opacity texture support to GridMaterial (Deltakosh)
  • Added support for deserializing morph target animations in animation groups
  • AssetContainer dispose method (TrevorDev)
  • Loading texture with KTX will fallback to non-KTX loader if KTX loader fails (TrevorDev)
  • Layer are now supported in RenderTargetTexture (Sebavan)
  • Made onscreen joystick's canvas public (TrevorDev)
  • Added .serialize and .Parse functions in ReflectionProbe to retrieve reflection probes when parsing a previously serialized material (julien-moreau)
  • Added clearGizmoOnEmptyPointerEvent options and onAttachedToMeshObservable event to GizmoManager (TrevorDev)
  • Added support for overriding the mesh used for the world matrix for a mesh with a skeleton (bghgary)
  • Added support for linking a bone to a transform node (bghgary)
  • Factored out setDirection function from lookAt for transform node (bghgary)
  • Added support for setting renderingGroupId and creating instances to AxesViewer (bghgary)
  • Added vScale inversion of compressed KTX textures as they are inverted in the file and UNPACK_FLIP_Y_WEBGL is not supported by KTX (TrevorDev)
  • Enabled dragging in boundingBoxGizmo without needing a parent (TrevorDev)
  • Added InputsManager and keyboard bindings for FollowCamera (mrdunk)
  • Fixed typo in FollowCamera InputsManager when limiting rotation to 360 degrees (mrdunk)
  • In FollowCamera InputsManager, allowed choice of modifier key (Alt, Ctrl and/or Shift) for each camera movement axis (mrdunk)
  • Added MouseWheel bindings for FollowCamera (mrdunk)
  • Tweaked MouseWheel bindings for FollowCamera orientations (mrdunk)
  • Added maximum and minimum limits for FollowCamera parameters (mrdunk)
  • Converted ArcRotateCamera to use new BaseCameraPointersInput (mrdunk)
  • Added transparency support to GlowLayer (Sebavan)
  • Added option forceDisposeChildren to multiMaterial.dispose (danjpar)
  • Added Pointer bindings for FollowCamera (mrdunk)
  • Added Inspector light gizmo with icons (TrevorDev)
  • Added option multiMultiMaterials to mesh.mergeMeshes (danjpar)
  • Exposed fallback camera distortion metrics option in vrExperienceHelper (TrevorDev)
  • Added OnAfterEnteringVRObservable to webVRHelper (TrevorDev)
  • Added support for side by side and top/bottom VR videos in the video dome (Sebavan)
  • Added unit tests for BaseCameraPointersInput and ArcRotateCameraPointersInput (mrdunk)
  • Prevented onActiveCameraChanged from being fired when rendering rig cameras (TrevorDev)
  • Added MeshExploder class (danjpar)
  • Enabled Observables to make observers top or bottom priority (TrevorDev)
  • Prevented mesh outline from being shown through the mesh when it's transparent (TrevorDev)
  • Prevented DeviceOrientationCamera from being modified by mouse input when the orientation sensor is active (TrevorDev)
  • Added LoadScriptAsync tools helper function MackeyK24)
  • Added customShaderNameResolve to PBRMaterialBase to allow subclasses to specify custom shader information MackeyK24)
  • Added PBRCustomMaterial to material library to allow easy subclassing of PBR materials MackeyK24)
  • Added custom defines for roughness and microsurface in PBRCustomMaterial Lockphase)
  • Added auto-exposure support in StandardRenderingPipeline when HDR is enabled (julien-moreau)
  • Added EquiRectangularCubeTexture class to enable the usage of browser-canvas supported images as CubeTextures (Dennis Dervisis)
  • Added EquiRectangularCubeTextureAssetTask to be able to load EquiRectangularCubeTextures via Asset Manager (Dennis Dervisis)
  • Added Matrix.RotationAlignToRef method to obtain rotation matrix from one vector to another (sable)
  • ArcRotateCamera will now cache the necessary matrices when modifying its upVector, instead of calculating them each time they're needed (sable)
  • Updated DracoCompression to use web workers (bghgary)
  • Added LOD Babylon Mesh Entities to support to babylonFileLoader.ts (MackeyK24)

OBJ Loader

  • Added color vertex support (not part of standard) (brianzinn)
  • Added option for silently failing when materials fail to load (brianzinn)
  • Added option to skip loading materials (brianzinn)

glTF Loader

  • Added support for mesh instancing for improved performance when multiple nodes point to the same mesh (bghgary)
  • Switched to create TransformNode objects instead of Mesh objects for glTF nodes without geometry (bghgary)
  • Added glTF JSON pointers to metadata of nodes, materials, and textures (bghgary)
  • Enabled loading KTX textures in the gltf2 loader when textureFormat is set on engine (TrevorDev)
  • Fixed skinned meshes to behave as intended by glTF (bghgary)
    • Set an override mesh on skinned meshes instead of reparenting to the __root__ transform node
    • Linked loaded bones to the transform node created for the corresponding glTF node
  • Improved load performance by blocking material dirtying during load (bghgary)
  • Added animation group target override to support custom animation targets (MackeyK24)
  • Added loadMeshPrimitiveAsync extension support (MackeyK24)

glTF Serializer

  • Added support for exporting KHR_lights_punctual
  • Prevented mesh normals from being flipped when exporting a glTF from a Babylon scene with right-handed coordinate system (Nicholas Barlow)

Post-Processes Library

Materials Library

  • Added the cameraOffset vector property in the SkyMaterial to get an offset according to the horizon (julien-moreau)
  • Fixed GradientMaterial to consider disableLighting working as emissive (julien-moreau)
  • Fixed fresnel term computation in WaterMaterial (julien-moreau)
  • Fixed TerrainMaterial.isReadyForSubMesh to remove WebGL warnings (julien-moreau)
  • Fixed MixMaterial.isReadyForSubMesh to remove WebGL warnings (dad72)

Infrastructure

  • Migrated CI to Azure DevOps pipelines (Sebavan)
  • Created test suites for both WebGL1 and WebGL2 (Sebavan)

Bug fixes

  • Fixed ArcRotateCamera.setTarget (position was sometimes wrong) (Deltakosh)
  • Fixed TransformNode.setDirection (orientation was wrong) (Deltakosh)
  • Fixed ArcRotateCamera control when upVector was modified (Deltakosh)
  • Fixed anaglyph mode for Free and Universal cameras (Deltakosh)
  • Fixed FileLoader's loading of a skybox and added a parsed value for whether to create with PBR or STDMaterial (Palmer-JC)
  • Removed bones from rootNodes where they should never have been (Deltakosh)
  • Refocusing on input gui with pointer events (TrevorDev)
  • Gizmo scaling not consistent when camera is parented (TrevorDev)
  • Context loss causing unexpected results with dynamic textures, geometries with the same name and reflectionTextures (TrevorDev)
  • CreateScreenshotUsingRenderTarget stretches mirror textures when setting both width and height (TrevorDev)
  • VR helper only updating VR cameras position when entering VR, rotation was missing, laser distance stopped working (TrevorDev)
  • Fixed VR controllers after gltfLoader transformNode was changed (TrevorDev)
  • Bounding Box fixedDragMeshScreenSize stopped working and allow rotating through bounding box (TrevorDev)
  • VR helper would rotate non-VR camera while in VR (TrevorDev)
  • PointerDragBahavior using Mesh as base type, causing type-checking problems with AbstractMesh (Poolminer)
  • TransformNode lookAt not working in world space when node's parent has rotation (TrevorDev)
  • MakeNotPickableAndWrapInBoundingBox had unexpected behavior when input had scaling of 0 on an axis (TrevorDev)
  • Fixed an issue with loading base64 encoded images in the glTF loader (bghgary)
  • In multi-camera scenes the Inspector would cause the camera's interaction events to get detached (TrevorDev)
  • Fixed delete highlighted text after keyboard input, beat delay after double click event in InputText (Saket Saurabh)
  • Fixed SixDofDragBehavior when the camera is parented (TrevorDev)
  • Deactivate WebVR lasers when not in VR (TrevorDev)
  • Update physics position using absolutePosition instead of pivotPosition (TrevorDev)
  • Disabled camera arrow key controls when the command key is pressed on Mac OS (kcoley)
  • Viewer should not set receiveShadows on an instanced mesh (TrevorDev)
  • Rotation/scaling snapping not working in the negative direction (TrevorDev)
  • Updated comment in TransformNode.rotationQuaternion to include undefined as one of the potential return values (nathankmiller)
  • Cannon.js ignores connectedPivot joint parameter (TrevorDev)
  • Fixed case sensitive paths (mrdunk)
  • Fixed more case sensitive paths (mrdunk)
  • Attaching a BoundingBoxGizmo on a child node shouldn't remove its parent, rotation gizmo should work on object with parent (TrevorDev)
  • ammo.js fix including issue caused after modules update and use world contact point to be consistent with Oimo and Cannon (TrevorDev)
  • Warn of motor with maxForce in Oimo plugin and set default force to be consistent with others, Cannon.js support no impostor, Cannon.js cylinder axis, ammo.js wake up impostor when apply force/impulse (TrevorDev)
  • Utility layer should render on last active camera (TrevorDev)
  • PointerDragBehavior should not let the drag plane get out of sync when rotating the object during dragging (TrevorDev)
  • Do not crash the application if WebVR submitFrame fails (TrevorDev)
  • Fix pinch action on FollowCameraPointersInput (mrdunk)
  • Tools.CreateScreenshot stopped working (TrevorDev)
  • Inspector showing duplicate nodes when attached to gizmo (TrevorDev)
  • Added missing dependencies for files to support including them from a direct path (eg. import "@babylonjs/core/Helpers/sceneHelpers";) (TrevorDev)
  • AssetContainer should not dispose objects it doesn't contain. Support for environmentTexture add/remove (TrevorDev)
  • Fixed mesh.visibility not working properly when certain material properties are set that changes the interpretation of alpha (e.g. refraction, specular over alpha, etc.) (bghgary)
  • Fixed material and texture leak when loading/removing GLTF/obj/babylon files with AssetContainer (TrevorDev)
  • Avoid exception when removing impostor during cannon world step (TrevorDev)
  • Fixed ArcRotateCamera divide by zero error (when looking along up axis) in rebuildAnglesAndRadius (sable)
  • Fixed ArcRotateCamera rebuildAnglesAndRadius when upVector modified (sable)
  • Fixed code branch, that does not try to (re)load an EquiRectangularCubeTexture/HDRCubeTexture when the caching returns an empty or corrupt InternalTexture (Dennis Dervisis)
  • Added error event listener (bubbling up the onError callback chain) in case an EquiRectangularCubeTexture cannot be loaded, because of a wrong path or IO problems (Dennis Dervisis)
  • 3D GUI buttons no longer will scale up when pressing with a multitouch device (TrevorDev)
  • 2D GUI elements will use the last clicked controller instead of only the right controller when dual VR controllers are interacting with an element (TrevorDev)
  • Virtual keyboard not showing up when made visible (TrevorDev)

Core Engine

  • Fixed a bug with mesh.alwaysSelectAsActiveMesh preventing layerMask to be taken in account (Deltakosh)
  • Fixed a bug with pointer up being fire twice (Deltakosh)
  • Fixed a bug with particle systems being update once per camera instead of once per frame (Deltakosh)
  • Properly handled the LinesMesh intersectionThreshold by using its value directly when the intersection against a Ray is checked instead of extending the BoundingInfo accordingly (barroij)
  • Added an InstancesLinesMesh class used to create instance of LinesMesh so that each instance can have its own intersectionThreshold value (barroij)
  • Fixed the LineEdgesRenderer used for edge rendering of LinesMesh to properly handle LinesMeshs made of disconnected lines and made it work for instance of LinesMesh (barroij)
  • Fixed Matrix.toNormalMatrix function (barroij)
  • Added missing effect layer to asset container (TrevorDev)
  • Fixed effect layer compatibility with multi materials (Sebavan)
  • Added a DeepImmutable<T> type to specifiy that a referenced object should be considered recursively immutable, meaning that all its properties are readonly and that if a property is a reference to an object, this object is also recursively immutable. (barroij)
  • Fixed VideoTexture poster property when autoplay is turned off.
  • Fixed position and rotation of plane mesh created by MeshBuilder.CreatePlane when specifying a source plane (sable, bghgary)
  • Fixed inspector dynamic loading (Sebavan)
  • Fixed infiniteDistance not working anymore (Sebavan)
  • Fixed bug in SolidParticle BoundingSphere update within the SolidParticleSystem (barroij)
  • Updated picking so that when the picked Mesh is a LinesMesh, the index of the picked line is returned in the faceId property of the PickingInfo, as we do with face index the picked Mesh is made of triangle faces (barroij)
  • Fixed unintentional cloning of mesh observables (Sebavan)
  • Fixed Inspector resolution with AMD loader (Sebavan)
  • Fixed a bug when a call to updateIndices leads to changing the size of the index buffer by recreating the subMeshes in that case (barroij)
  • Added option to disable gazeTracker color changes in vrExperienceHelper (TrevorDev)
  • Added PointerDragBehavior validateDrag predicate to stop dragging to specific points (TrevorDev)
  • Added Auto Update Touch Action #5674(Sebavan)
  • Added hemispheric lighting to gizmos to avoid flat look (TrevorDev)
  • Fixed a bug causing WebRequest.open to crash if WebRequest.CustomRequestHeaders are set #6055(susares)
  • Fixed a bug causing Mesh.clone to crash if no physicsEngineComponent is used (barroij)
  • Fixed zoom inertia making it difficult to zoom out with ArcRotateCamera (TrevorDev)
  • Added option for isInFrustum to check rigCameras so that viewMatrix updates for rigCameras can notify their parent (TrevorDev)
  • Properly handled unindexed LinesMesh (rendering and picking) (barroij)

Loaders

  • Added missing loadedAnimationGroups to MeshAssetTask (bghgary)
  • Added missing linkTransformNode to BabylonFileLoader (MackeyK24)

Breaking changes

  • Replaced all references to XmlHttpRequest with WebRequest (which provides the same signatures) (Deltakosh)
  • Set Database.IDBStorageEnabled to false by default (Deltakosh)
  • Renamed Database.openAsync to Database.open (Deltakosh)
  • Renamed scene.database to scene.offlineProvider (Deltakosh)
  • Removed BoundingBox.setWorldMatrix and changed BoundingBox.getWorldMatrix to return a DeepImmutable<Matrix> (barroij)
  • Changed Matrix's accessor m and methods toArray and asArray to return a DeepImmutable<Float32Array> as the underlying array is not supposed to be modified manually from the outside of the class (barroij)
  • Removed some deprecated (flagged since 3.0) properties and functions, all of which are superceded by the SceneInstrumentation class unless otherwise specified (Deltakosh)
    • scene.getInterFramePerfCounter()
    • scene.interFramePerfCounter
    • scene.getLastFrameDuration()
    • scene.lastFramePerfCounter
    • scene.getEvaluateActiveMeshesDuration()
    • scene.evaluateActiveMeshesDurationPerfCounter
    • scene.getRenderTargetsDuration()
    • scene.getRenderDuration()
    • scene.renderDurationPerfCounter
    • scene.getParticlesDuration()
    • scene.particlesDurationPerfCounter
    • scene.getSpritesDuration()
    • scene.spriteDuractionPerfCounter
    • engine.drawCalls
    • engine.drawCallsPerfCounter
    • shadowGenerator.useVarianceShadowMap (superceded by useExponentialShadowMap)
    • shadowGenerator.useBlurVarianceShadowMap (superceded by useBlurExponentialShadowMap)
  • The glTF loader now creates InstancedMesh objects when two nodes point to the same mesh (bghgary)
  • The glTF loader now creates TransformNode objects instead of Mesh objects for glTF nodes without geometry (bghgary)
    • Note: The root node is still a Mesh object and is still the first in the returned list of meshes
    • TransformNode objects are excluded from the returned list of meshes when importing mesh
    • TransformNode objects do not raise onMeshLoaded events
  • Renamed xAxisMesh, yAxisMesh, and zAxisMesh of AxesViewer to xAxis, yAxis, and zAxis respectively and changed return to a TransformNode to represent the parent node of the cylinder and line of the arrow (bghgary)
  • Disallowed passing the engine into Viewport.toglobal to prevent circular dependency (Sebavan)
  • Moved Vector3.UnprojectRayToRef to Ray.unprojectRayToRef instance method to decrease class coupling (Sebavan)
  • Moved Material.ParseMultiMaterial to MultiMaterial.ParseMultiMaterial to decrease class coupling (Sebavan)
  • Removed babylon.no-module.max.js javascript version has the Webpack UMD bundle covers both ([Sebavan] (https://github.com/Sebavan))
  • Removed es6.js javascript as it is now available as a true es6 NPM package (Sebavan)
  • Removed babylon.worker.js javascript following the lack of usage from the feature ([Sebavan] (https://github.com/Sebavan))
  • Removed Primitive Geometries as they were not in use since 2.0 (Sebavan)
  • Changed shouldExportTransformNode callback in glTF serializer options to shouldExportNode (kcoley)
  • Changed PhysicsHelper method parameters for event calls (bobalazek)

3.3.0

Major updates

  • Documentation
  • GUI
  • Gizmo Support (TrevorDev)
    • Gizmo and GizmoManager classes used to manipulate meshes in a scene. Gizmo types include: position, scale, rotation and bounding box Doc (TrevorDev)
    • New behaviors: PointerDragBehavior, SixDofDragBehavior and MultiPointerScaleBehavior to enable smooth drag and drop/scaling with mouse or 6dof controller on a mesh Doc (TrevorDev)
    • Added attachToBoxBehavior to attach UI to a bounding box (TrevorDev)
    • Gizmo manager's internal gizmos are now public (TrevorDev)
    • Ability to customize meshes on gizmos (TrevorDev)
    • Added ignoreChildren field to bounding box to save performance when using heavily nested meshes (TrevorDev)
    • Add uniform scaling drag support to the scale gizmo (TrevorDev)
    • Support interacting with child elements (TrevorDev)
    • BoundingBox gizmo support for including/excluding descendants when computing the bounding box (TrevorDev)
    • Drag start and stop events for all gizmos (TrevorDev)
  • Particle system improvements (Deltakosh)
    • Added a ParticleHelper class to create some pre-configured particle systems in a one-liner method style. Doc (Deltakosh) / (DevChris)
    • Improved CPU particles rendering performance (up to x2 on low end devices)
    • Added support for isBillboardBased. Doc
    • Added support for billboard mode. Doc
    • Added support for minScaleX, minScaleY, maxScaleX, maxScaleY. Doc
    • Added support for radiusRange for sphere emitter. Doc
    • Added support for radiusRange and heightRange for cone emitter. Doc
    • Added new point emitter. Doc
    • Added new hemispheric emitter. Doc
    • Added support for ParticleSystem.BLENDMODE_ADD alpha mode. Doc
    • Added support for color gradients. Doc
    • Added support for pre-warming. Doc
    • Added support for minInitialRotation and maxInitialRotation. Doc
    • Added support for size gradients. Doc
    • Added support for life time gradients. Doc
    • Added support for angular speed gradients. Doc
    • Added support for velocity gradients. Doc
    • Added support for limit velocity gradients. Doc
    • Added support for drag gradients. Doc
    • Added support for noise textures. Doc
    • Added support for emit rate gradients. Doc
    • Added support for ramp gradients. Doc
    • Start size gradient support for particles. Doc (TrevorDev)
    • Attached sub emitters. Doc (TrevorDev)
    • Cylinder particle emitter and constructor in baseParticle Doc (TrevorDev)
    • Added support for cylinder particle emitter. Doc (TrevorDev)
    • Added startDelay to support delaying system start of sub emitters. Doc (TrevorDev)
    • Added support for random start cell when using animated sprite sheets. Doc
  • Added SceneComponent to help decoupling Scene from its components. (sebavan)
  • Added Environment Texture Tools to reduce the size of the usual .DDS file (sebavan)
  • Playground can now be used with TypeScript directly! Demo (Deltakosh, NasimiAsl)
  • GUI and Inspector are now ES-Modules (RaananW)
  • Added support for noise procedural textures. Doc (Deltakosh)
  • Added new PhotoDome object to display 360 photos. Demo (SzeyinLee)
  • Added Video Recorder. Doc (sebavan)

Updates

  • Updated TypeScript version to new major 3.0.1 (christopherstock)
  • All NPM packages have latest and preview streams (RaananW)
  • Added New Tools Tab in the inspector (env texture and screenshot tools so far) (sebavan)
  • Moved to gulp 4, updated dependencies to latest (RaananW)

GUI

  • Added dead key support and before key add observable to InputText. Doc (theom)
  • Added TextBlock.computeExpectedHeight, added TextWrapping.Ellipsis as TextBlock.wordWrapping possible value (adrientetar)
  • New vertical mode for sliders in 2D GUI. Demo (Saket Saurabh)
  • Added isEnabled and disabledColor property to Gui Control (barteq100)
  • Added support for connecting multiple InputText controls to VirtualKeyboard and can disconnect individual InputTexts. (brian Zinn)

Core Engine

  • Improved the way world matrices were computed (Deltakosh)
  • Added scene.rootNodes to track root nodes (ie. nodes with no parent) (Deltakosh)
  • Added scene.pickSpriteWithRay function (Deltakosh)
  • Added support for multiple clip planes. Demo (Deltakosh)
  • Added new MixMaterial to the Materials Library allowing to mix up to 8 textures (julien-moreau)
  • Added new BoundingInfo.scale() function to let users control the size of the bounding info (Deltakosh)
  • Added new Animatable.waitAsync function to use Promises with animations. Demo (Deltakosh)
  • Added the choice of forming a closed loop to the catmull-rom-spline curve3 (johnk)
  • Added support for specifying the center of rotation to textures (bghgary)
  • Added webVR support for Oculus Go (TrevorDev)
  • Added ability to not generate polynomials harmonics upon prefiltered texture creation (sebavan)
  • Added predicate function to customize the list of mesh included in the computation of bounding vectors in the getHierarchyBoundingVectors method (sebavan)
  • Added webVR constructor options: disable laser pointer toggle, teleportation floor meshes (TrevorDev)
  • Get a root mesh from an asset container, load a mesh from a file with a single string url (TrevorDev)
  • UtilityLayer class used to render another scene as a layer on top of an existing scene (TrevorDev)
  • AnimationGroup has now onAnimationGroupEnd observable (RaananW)
  • New serialize and Parse functions to serialize and parse all procedural textures from the Procedural Textures Library (julien-moreau)
  • Added a new mesh.ignoreNonUniformScaling to turn off non uniform scaling compensation (Deltakosh)
  • AssetsManager tasks will only run when their state is INIT. It is now possible to remove a task from the assets manager (RaananW)
  • Added sprite isVisible field (TrevorDev)
  • EnvironmentHelper will recreate ground and skybox meshes if force-disposed (RaananW)
  • Added viewport caching mechanism in engine (sebavan)
  • Added unpackFlipY caching mechanism in engine (sebavan)
  • Added rebind optimization of video texture (sebavan)
  • Fix Background Material effect caching (sebavan)
  • Prevent texture getSize to generate garbage collection (sebavan)
  • Prevent lodGenerationScale and lodGenerationOffset to force rebind (sebavan)
  • Added poster property on VideoTexture (sebavan)
  • Added onUserActionRequestedObservable to workaround and detect autoplay video policy restriction on VideoTexture (sebavan)
  • Sound now accepts MediaStream as source to enable easier WebAudio and WebRTC integrations (menduz)
  • Vector x, y and z constructor parameters are now optional and default to 0 (TrevorDev)
  • Added and removed camera methods in the default pipeline (TrevorDev)
  • Added internal texture format support for RenderTargetCubeTexture (PeapBoy)
  • Added canvas toBlob polyfill in tools (sebavan)
  • Added RawCubeTexture class with RGBD and mipmap support (bghgary)
  • Added effect layer per rendering group addressing (sebavan)
  • Added predicate function targetMask argument to scene.beginWeightedAnimation, scene.beginAnimation, scene.stopAnimation, and animatable.stop to allow for selective application of animations. (fmmoret)
  • Oculus GO and GearVR 3dof controllers will now rotate with the user's head if they turn around in their room (TrevorDev)
  • Added onPoseUpdatedFromDeviceObservable to webVRCamera to detect when the camera's pose has been updated (TrevorDev)
  • Added gltf light falloff (sebavan)
  • Added falloff type per light to prevent material only inconsistencies (sebavan)
  • Added WeightedSound; selects one from many Sounds with random weight for playback. (najadojo)
  • Added HDR support to ReflectionProbe (Deltakosh)
  • Added ACES ToneMapping to the image processing to help getting more parity with other engines (sebavan)
  • Added Image Processing to the particle system to allow consistency in one pass forward rendering scenes (sebavan)
  • Added support for main WebGL2 texture formats (PeapBoy)
  • Added fadeInOutBehavior and tooltipText for holographic buttons (TrevorDev)
  • StartDrag method added to pointerDragBehavior used to simulate the start of a drag (TrevorDev)
  • Added EdgesLineRenderer to address #4919 (barteq100)
  • Added ambientTextureImpactOnAnalyticalLights in PBRMaterial to allow fine grained control of the AmbientTexture on the analytical diffuse light (sebavan)
  • BoundingBoxGizmo scalePivot field that can be used to always scale objects from the bottom (TrevorDev)
  • Improved _isSyncronized performance and reduced GC in TransformNode.computeWorldMatrix by directly reading property (Bolloxim)
  • Added supports for reflectionMatrix in Skybox Mode Cube Texture allowing offsetting the world center or rotating the matrix (sebavan)
  • Improved performance of cached nodes but ensuring parent always updates cache. This removes failed isSynchronized test that meant computeWorldMatrix would always have to rebuild. On large scenes this could double framerate. (Bolloxim)
  • Added FXAA and MSAA support to the StandardRenderingPipeline (julien-moreau)
  • Make teleportCamera public in VR experience helper (TrevorDev)
  • Added optional alphaFilter parameter to CreateGroundFromHeightMap to allow for heightmaps to be created that ignore any transparent data (Postman-nz)
  • Fixed renormalization of mesh weights to in cleanMatrixWeights function. (Bolloxim)
  • Added a validationSkin function to report out any errors on skinned meshes. (Bolloxim)

glTF Loader

  • Added support for KHR_texture_transform (bghgary)
  • Added onNodeLODsLoadedObservable and onMaterialLODsLoadedObservable to MSFT_lod loader extension (bghgary)
  • Added glTF loader settings to the GLTF tab in the debug layer (bghgary)
  • Added debug logging and performance counters (bghgary)
  • Added support for EXT_lights_imageBased (bghgary)
  • Added support for MSFT_audio_emitter (najadojo)
  • Added support for custom loader extensions (bghgary)
  • Added support for validating assets using glTF-Validator (bghgary)
  • Added automatically renormalizes skinweights when loading geometry. Calls core mesh functions to do this (Bolloxim)

glTF Serializer

  • Added support for exporting the scale, rotation and offset texture properties (kcoley)

Viewer

  • No fullscreen button on small devices (RaananW)
  • Nav-Bar is now displayed on fullscreen per default (RaananW)
  • Viewer configuration supports deprecated values using the new configurationCompatibility processor (RaananW)
  • Shadows will only render while models are entering the scene or animating (RaananW)
  • Support for model drag and drop onto the canvas (RaananW)
  • New lab feature - global light rotation (RaananW)
  • New NPM package - babylonjs-viewer-assets, to separate the binary assets and the code of the viewer (RaananW)
  • A new HD-Toggler button allows setting a better hardware scaling rate (RaananW)
  • An initial support for WebVR is implemented (RaananW)
  • It is now possible to choose the element that goes fullscreen in the default viewer (RaananW)
  • The default viewer has a plugin system with which new buttons can be added externally (RaananW)
  • The extended configuration is now the default when not providing the "extended" parameter (RaananW)
  • viewer.updateConfiguration also accepts a URL to download configuration remotely (RaananW)
  • Viewer supports 3D printing on windows 10 (RaananW)
  • The viewer's environment map is using the new .env feature (RaananW)

Materials Library

  • Added unlit mode to lava material (sebavan)

Bug fixes

  • VR experience helper will now fire pointer events even when no mesh is currently hit (TrevorDev)
  • RawTexture.CreateAlphaTexture no longer fails to create a usable texture (TrevorDev)
  • SceneSerializer.SerializeMesh now serializes all materials kinds (not only StandardMaterial) (julien-moreau)
  • WindowsMotionController's trackpad field will be updated prior to it's onTrackpadChangedObservable event (TrevorDev)
  • VR experience helper's controllers will not fire pointer events when laser's are disabled, instead the camera ray pointer event will be used (TrevorDev)
  • Node's setParent(node.parent) will no longer throw an exception when parent is undefined and will behave the same as setParent(null) (TrevorDev)
  • Mesh.MergeMeshes flips triangles on meshes with negative scaling (SvenFrankson)
  • Avoid firing button events multiple times when calling vrController.attachMesh() (TrevorDev)
  • Parse geometry when load binary mesh (SinhNQ)
  • Removing observers during observable notify should not skip over valid observers (TrevorDev)
  • Initializing gamepadManager should register the gamepad update events (TrevorDev)
  • Do not generate mipmaps for RawCubeTexture if OES_texture_float_linear and/or EXT_color_buffer_float extensions are not supported (PeapBoy)
  • Do not modify passed camera array parameter when creating a default pipeline (TrevorDev)
  • Fixed issue where gaze trackers were appearing even after leaving VR (atulyar)
  • AdvancedDynamicTexture should not overwrite skipOnPointerObservable to false (TrevorDev)
  • Fixed issue where VRExperienceHelper.onExitingVR observable was being fired twice (atulyar)
  • Avoid firing onExitingVR observable multiple times when calling exitVR() and add observables to Viewer that can be used instead of the ones in VRExperienceHelper (atulyar)
  • GizmoManager should hide existing gizmos if a non-attachable mesh is selected (TrevorDev)
  • Ignore isPickable = false for vr ray casting if the mesh's name matches the specified floorMeshName to maintain backwards compatability (TrevorDev)
  • Fix File Loading if hosted from file:-Protocol (ltetzlaff)
  • Do not throw error when updating a controller with no left stick (TrevorDev)
  • Exiting VR can result in messed up view (TrevorDev)
  • Dispose existing gazeTrackers when setting a new one (TrevorDev)
  • Set missing parentId in Mesh.serialize() for instances (julien-moreau)
  • Do not modify pivot point when using bounding box gizmo or behaviors (TrevorDev)
  • GPUParticleSystem does not get stuck in burst loop when stopped and started (TrevorDev)
  • trackPosition:false not working in webVRCamera/controllers (TrevorDev)
  • Spring Joint could not be removed (TrevorDev)
  • Sometimes duplicate controller models are loaded in VR (TrevorDev)
  • Particle emit rate and start size over time do not reset on every particle system start (TrevorDev)

Core Engine

  • Fixed shadowEnabled property on lights. Shadows are not visible anymore when disabled (sebavan)
  • Physics unregisterOnPhysicsCollide didn't remove callback correctly (RaananW)
  • Added missing getter and setter for global exposure in ColorCurves (RaananW)
  • Fixed an issue with view matrix when ArcRotateCamera was used with collisions (Deltakosh)
  • Fixed a bug with setting unlit on PBRMaterial after the material is ready (Wrong dirty flags) (bghgary)
  • Fixed HighlightLayer support on browsers not supporting HalfFloat (sebavan)
  • Fixed support for R and RG texture formats (sebavan)
  • Fixed updatable parameter setting in the SPS (jerome)
  • Angular and linear velocity were using the wrong method to copy values to the physics engine (RaananW)
  • Fixed env texture generation in Byte Mode (sebavan)
  • Oimo.js now receives quaternion and not euler when a body is being constructed (RaananW)
  • Improving visual quality on SSAO2 shader (CraigFeldspar)
  • Fixed a bug where changing the sample count on PostProcess would not update the WebGL Texture (CraigFeldspar)
  • Fixed multi camera support in defaultRenderingPipeline depth of field (sebavan)

Viewer

  • Fix Navbar Interaction on Mozilla/Firefox (SzeyinLee)
  • Fix Animation Slider Interaction on Mozilla/Firefox (sebavan)
  • Fix Animation Slider Clickable area size Cross Plat (sebavan)
  • Ground material didn't take the default main color is no material definition was provided (RaananW)
  • Model configuration was not extended correctly if loaded more than one model (RaananW)
  • It wasn't possible to disable camera behavior(s) using configuration (RaananW)
  • Animation blending was always set to true, ignoring configuration (RaananW)
  • Animation navbar now updates correctly when a new model is loaded (RaananW)
  • Non-normalized meshes didn't center and focus correctly (RaananW)
  • Meshes with skeletons could have incorrect animations (RaananW)
  • Removed element IDs from viewer's templates to allow muitiple viewers in a single page (RaananW)
  • Viewer is not using Engine.LastCreatedScene anymore, to support multiple viewers in a single page (RaananW)
  • Template location was ignored if html was defined (RaananW)
  • Drag and Drop only worked if a model was already loaded before (RaananW)
  • It was not possible to add new custom optimizers, only use existing ones (RaananW)
  • Button texts were truncated incorrectly (RaananW)
  • Animation names with more than one word didn't work correctly (RaananW)

Loaders

  • STL Loader only supported binary downloads and no data: urls (RaananW)
  • OBJ Loader is now an async loader (RaananW)
  • GLTF Loader does not have texture conflicts on subsequent loads anymore (sebavan)

Breaking changes

  • Fixing support for R and RG texture formats made us remove TextureFormat_R32F and TextureFormat_RG32F as they were mixing formats and types. Please, use the respective TextureFormat_R and TextureFormat_RG with the Float types (sebavan)
  • Replacing scene.onRenderingGroupObservable by onBeforeRenderingGroupObservable and onAfterRenderingGroupObservable to prevent the stage check (sebavan)
  • Replacing IActiveMeshCandidateProvider and the according scene setter by a set of custom predicates scene.getActiveMeshCandidates, scene.getActiveSubMeshCandidates, scene.getIntersectingSubMeshCandidates and scene.getCollidingSubMeshCandidates (sebavan). This helps opening more customization to everybody.

3.2.0

Major updates

Documentation

  • Tons of functions and classes received the code comments they deserved (All the community with a special thanks to John King)
  • Moved the class API documentation to Typedoc (deltakosh)

Updates

  • Improved animation blending (deltakosh)
  • New particle system emitter shapes: cone and sphere (IbraheemOsama)
  • Added support for 16bits TGA (deltakosh)
  • New AnimationPropertiesOverride class used to simplify setting animation properties on child animations. Documentation (deltakosh)
  • New Texture.UseSerializedUrlIfAny static property to let textures serialize complete URL instead of using side by side loading (deltakosh)
  • Added particleSystem.reset() to clear a particle system (deltakosh)
  • Added support for all RGBA orders (BGR, RGB, etc..) for the DDS loader (deltakosh)
  • Improved SceneOptimizer to provide better adaptability (deltakosh)
  • Improved scene.isReady() function which now takes in account shadows and LOD (deltakosh)
  • Added new draw modes to engine (points, lines, linesloop, linestrip, trianglestrip, trianglefan) (benaadams)
  • Added GUI Textblock.lineSpacing setter and getter to configure vertical space between lines in pixels or percentage values when working with text wrapping (carloslanderas)
  • WebVR:
    • VRExperienceHelper will create an empty controller model so that controller interactions can be used while the actual model is still loading (trevordev)
    • VRHelper now has onSelectedMeshUnselected observable that will notify observers when the current selected mesh gets unselected (carloslanderas)
    • VRHelper now has onBeforeCameraTeleport and onAfterCameraTeleport observables that will be notified before and after camera teleportation is triggered. (carloslanderas)
    • VRHelper now has the public property teleportationEnabled to enable / disable camera teleportation. (carloslanderas)
    • VRHelper now exposes onNewMeshPicked observable that will notify a PickingInfo object after meshSelectionPredicate evaluation (carloslanderas)
    • VRHelper will notify now onSelectedMeshUnselected observable to subscribers when the applied ray selection predicate does not produce a hit and a mesh compliant with the meshSelectionPredicate was previously selected (carloslanderas)
    • Support multiple simultaneous WebVR controller GUI interactions in VRExperienceHelper (trevordev)
    • Ability to set a mesh to customize the WebVR gaze tracker (trevordev)
  • AssetsManager will now clear its tasks list from all successfully loaded tasks (deltakosh)
  • Added documentation to WebVRCamera and VRExperienceHelper (trevordev)
  • Introduced isStroke on HighlightLayerOptions which makes the highlight solid (PixelsCommander)
  • The observables can now notify observers using promise-based callback chain (RaananW)
  • Added base64 helper functions to Tools (bghgary)
  • Added createDefaultCamera and createDefaultLight functions to Scene (bghgary)
  • Viewer:
    • initScene and initEngine can now be extended. onProgress during model loading is implemented as observable (RaananW)
    • There is now an option to paste payload instead of a URL for configuration (RaananW)
    • Models can be loaded asynchronously using JavaScript (RaananW)
    • Scene Optimizer integrated in viewer (RaananW)
    • The viewer supports custom shaders in the configuration (RaananW)
    • Introducing the viewer labs - testing new features (RaananW)
    • Model can be normalized using configuration, camera is dynamically configured (RaananW)
    • It is now possible to update parts of the configuration without recreating the objects (RaananW)
    • Viewer supports model animations and multi-model loading (RaananW)
    • Viewer's declaration file automatically generated (RaananW)
  • Build process:
    • New watcher configuration for VSCode. Now the task only compiles changed files (sebavan)
    • Gulp process now supports multiple outputs when using webpack. (RaananW)
    • Extra/external declarations can be prepended to final declarations during build. (RaananW)
    • Extra/external declarations can be prepended to final NPM declarations during build. (RaananW)
    • NPM package now has a dependency system, updated during build. (RaananW)
  • SPS internal storage of each solid particle rotation matrix (jbousquie)
  • SPS particle parenting feature (jbousquie)
  • KeepAssets class and AssetContainer.moveAllFromScene (HoloLite trevordev)
  • GUI.Line can have its world position set from one end or the other (SvenFrankson)
  • Added FOV system to background material for zoom effects in skyboxes without adjusting camera FOV (DavidHGillen)
  • glTF loader:
    • glTF loader now supports the KHR_lights extension (MiiBond)
    • Improved glTF loader by using promises for asynchronous operations (bghgary]
    • Improved glTF loader performance by compiling materials in parallel with downloading external resources (bghgary]
    • Added unit tests for the glTF 2.0 loader (bghgary]
    • Added support for primitive modes to glTF 2.0 loader (bghgary]
    • Add support for sparse accessors to glTF 2.0 loader (bghgary)
    • Add support for cameras to glTF 2.0 loader (bghgary]
    • Add support for preprocessing urls to glTF 2.0 loader (bghgary]
    • Added Draco mesh compression support to glTF 2.0 loader. (bghgary)
    • Added unlit material extension support to glTF 2.0 loader. (bghgary)
  • Added promise-based async functions to the SceneLoader, Scene.whenReadyAsync, and material.forceCompilationAsync. (bghgary]
  • Added checks to VertexData.merge to ensure data is valid before merging. (bghgary]
  • Added promise-based async functions for initWebVRAsync and useStandingMatrixAsync (trevordev)
  • Add stroke (outline) options on GUI text control (SvenFrankson)
  • Add isThumbClamped option on GUI slider control (JeanPhilippeKernel)
  • Add floating point texture support for RenderTargetCubeTexture (PeapBoy)
  • Support for mutli-touch when interacting with multiple gui elements simultaneously (trevordev)
  • Added Tools.WorkerPool class for web worker management. (bghgary)
  • Support depth maps for multiple active cameras for post processes like depth of field (trevordev)
  • Integrates depth texture support in the engine (sebavan)
  • Default fragment shader will clamp negative values to avoid underflow, webVR post processing will render to eye texture size (trevordev)
  • Supports Environment Drag and Drop in Sandbox (sebavan)
  • EnvironmentHelper has no an onError observable to handle errors when loading the textures (RaananW)
  • Tests for sharpen, chromatic aberration, default pipeline and enable/disable post processes (trevordev)
  • onPointer* callbacks have now the event type as a 3rd variable (RaananW)
  • Lightmap texture in PBR material follow the gammaSpace Flag of the texture (sebavan)
  • Added setTextureFromPostProcessOutput to bind the output of a postprocess into an effect (trevordev)
  • Updated bloom effect to only bloom areas of the image above a luminance threshold (trevordev)
  • Cannon and Oimo are optional dependencies (RaananW)
  • Shadows - Introduces Normal Bias (sebavan))
  • Earcut is an external, optional dependency. (RaananW)
  • Return animation groups when calling SceneLoader.ImportMesh. (bghgary]
  • Add support for normalized and non-float data to Buffer and VertexBuffer. (bghgary]
  • New serialize and parse functions for effect layers (Highlight and Glow layers) (julien-moreau)
  • GUI: Introduced MultiLine which will draw lines between any number of meshes, controls and points. Documentation (royibernthal)
  • Added alphaCutOff support for StandardMaterial (deltakosh)
  • New serialize and Parse functions for SSAO2 Rendering Pipeline (julien-moreau)
  • Added furOcclusion property to FurMaterial to control the occlusion strength (julien-moreau)

Bug fixes

  • setPivotMatrix was not setting pivot correctly. This is now fixed. We also introduced a new setPreTransformMatrix to reproduce the sometimes-needed behavior of the previous setPivotMatrix function (deltakosh)
  • SPS solid particle .pivot property now also behaves like the standard mesh pivot. Former behavior (particle translation) can be kept with the particle property .translateFromPivot set to true (jbousquie)
  • Texture extension detection in Engine.CreateTexture (sebavan)
  • SPS uses internal temporary Vector3 instead of Tmp.Vector3 to avoid possible concurrent uses (jbousquie)
  • Fixed a bug when calling load on an empty assets manager - #3739 (RaananW)
  • Enabling teleportation in the vr helper class caused a redundant post process to be added (trevordev)
  • (Viewer) Fixed a bug where loading another mesh positioned it incorrectly (RaananW)
  • (Viewer) Disabling templates now work correctly (RaananW)
  • Scale vr controllers by deviceScale when it is set in VRExperienceHelper (trevordev)
  • AMD "define" declaration is no longer anonymous (RaananW)
  • Collision worker didn't initialize instanced meshes correctly - #3819 (RaananW)
  • postMessage calls in webworkers were fixed (RaananW)
  • Fixed WebCam Texture on Firefox and Edge - #3825 (sebavan)
  • Add onLoadObservable on VideoTexture - #3845 (sebavan)
  • beforeRender is now triggered after the camera updated its state - #3873 (RaananW)
  • Reflection and refraction no longer apply a toLinear conversion twice when applying image processing as a post process - #4060 (trevordev)
  • Fix ember.js compatibility in PostProcessRenderEffect (sebavan)
  • Fix ember.js compatibility in BloomEffect and Camera (kaysabelle)
  • Fix bug with glTF animation when animating bone scale. (bghgary]

Breaking changes

  • Removed the unused PostProcessRenderPass class and extended postProcessingRenderingEffect to support multiple PostProcesses (trevordev)
  • VertexData.merge no longer supports merging of data that do not have the same set of attributes. (bghgary]
  • glTF 2.0 loader now creates a mesh for each primitive instead of merging the primitives together into one mesh. If a mesh only has one primitive, the behavior is the same as before. This change only affects meshes that have multiple primitives. (bghgary]
  • Engine's onCanvasPointerOutObservable will now return a PointerEvent instead of the Engine. (trevordev)
  • Removed public references to default rendering pipeline's internal post process (trevordev)
  • Bone.setScale does not support scaleChildren property anymore. You can use Bone.scale to achieve the same effect (deltakosh)
  • Vector3 & Vector4:
    • MinimizeInPlace has been renamed to minimizeInPlace
    • MaximizeInPlace has been renamed to maximizeInPlace

3.1.0

Major updates

Updates

  • Introduced TransformNode class as a parent of AbstractMesh. This class was extensively asked by the community to hold only transformation for a node (deltakosh)
  • Collider object is now exposed on meshes. It can be used to get precise information about mesh to mesh collisions (used with mesh.moveWithCollisions function) (deltakosh)
  • Added boundingInfo.centerOn to recreate the bounding info to be centered around a specific point given a specific extend (deltakosh)
  • Added mesh.normalizeToUnitCube to uniformly scales the mesh to fit inside of a unit cube (1 X 1 X 1 units) (deltakosh)
  • Added scene.onDataLoadedObservable which is raised when SceneLoader.Append or SceneLoader.Load or SceneLoader.ImportMesh were successfully executed (deltakosh)
  • Support for adaptiveKernelBlur on MirrorTexture (deltakosh)
  • Support for non-uniform scaling. Normals are now correctly computed (deltakosh)
  • Added MultiObserver. Documentation (deltakosh)
  • Added shadowGenerator.addShadowCaster and shadowGenerator.removeShadowCaster helper functions (deltakosh)
  • Several inspector improvements (temechon)
  • New observables for actions: onBeforeExecuteObservable for all actions and onInterpolationDoneObservable for InterpolateValueAction (deltakosh)
  • New observables for gamepads: onButtonDownObservable, onButtonUpObservable, onPadDownObservable, onPadUpObservable (deltakosh)
  • New camera.storeState() and camera.restoreState() functions to store / restore cameras position / rotation / fov. Documentation (deltakosh)
  • POW2 textures rescale is now done by shaders (It was previously done using canvas) (deltakosh)
  • Added SceneLoader.CleanBoneMatrixWeights to force the loader to normalize matrix weights when loading bones (off by default) (deltakosh)
  • Added camera.onViewMatrixChangedObservable and camera.onProjectionMatrixChangedObservable (deltakosh)
  • Added support for folders when drag'n'dropping into the sandbox (deltakosh)
  • Better serialization support (deltakosh)
  • Introduced performanceMonitor class to get better FPS analysis (deltakosh)
  • GUI: Added support for pointer move events on projected UI (deltakosh)
  • Normals are generated automatically by StandardMaterial if meshes do not have normals (deltakosh)
  • Added mesh.onMaterialChangedObservable to notify when a new material is set (deltakosh)
  • Improved the SPS perfs for dead or invisible solid particles (jerome)
  • Added enableDepthSort parameter to the SPS in order to sort the particles from the camera position (jerome)
  • Added pivot property to the SPS solid particles (jerome)
  • Added the mesh facet depth sort to FacetData (jerome)
  • Added LineSystem and LineMesh per point colors (jerome)
  • Added AdvancedDynamicTexture.renderScale to allow users to render at higher DPI (deltakosh)
  • WaterMaterial works on VR (RaananW)
  • Playground has an optional createEngine function to replace the default engine. Example (RaananW)
  • Error handling in the Assets Manager was revamped and now also includes a message and an exception (if provided). Documentation (RaananW)
  • Asset Task has a state (INIT, RUNNING, DONE and ERROR). Documentation (RaananW)
  • Added new options to the physics impostor constructor - ignoreParent and diableBidirectionalTransformation. Documentation (RaananW)
  • It is now possible to define which loader to use when loading assets using the SceneLoader. Commit (RaananW)
  • Added scope option to Observerable (adam)
  • Added shadowBlur, shadowOffsetX, shadowOffsetY, shadowColor to GUI Controls (adam)
  • Added alignWithNormal to AbstractMesh (adam)

Bug fixes

  • Fixed a bug with ellipsoid offset not being taking in account on cameras (deltakosh)
  • Fixed a bug with ellipsoid offset badly taking in account on meshes (deltakosh)
  • Fixed a bug with PBR on iOS (sebavan)
  • MTLLoader didn't parse values correctly (RaananW)
  • Fixed an error with child positions of parents in the physics engine (RaananW)
  • Fixed a bug with error while executing onSuccess callbacks in the Assets manager. (RaananW)
  • Fixed a bug with the Heightmap impostor when the heightmap is scaled or rotated. Commit (RaananW)
  • Fixed an error with deterministic step. (RaananW)
  • Fixed a bug with controller jitter when in VR. (RaananW)
  • Fixed a bug with impostor jitter when in VR. (RaananW)
  • Fixed a bug with GUI Slider not working correctly when rotated (adam)
  • Fixed IE11 "spacebar" bug with GUI InputText (adam)

Breaking changes

  • Gamepads was removed in favor of scene.gamepadManager
  • DynamicFloatArray, MapTexture and RectPakingMap were removed because there were not used anymore
  • IAssetTask was removed in favor of AbstractAssetTask class
  • WebVR 1.0 support removed.

3.0.0

Major updates

Updates

  • Added syncBoneWithImpostor() and syncImpostorWithBone() to PhysicsImpostor to help with creating ragdoll effects. Demo (abow)
  • New automatic creation mode for skybox. Doc here (deltakosh)
  • New way to force compilation of materials. Doc here (deltakosh)
  • Added a Physics tab to the inspector (abow)
  • New Debug.PhysicsViewer class for viewing PhysicsImpostors. Demo (abow)
  • New ColorPicker for GUI. Demo (abow)
  • Added slerp and limits to BoneLookController. Demo (abow)
  • new Texture.readPixels() function to read texture content (deltakosh)
  • New helpers to use ExtrudePolygon. Demo (Cubees)
  • PostProcess can now use alpha blending and share outputs (deltakosh)
  • Added ArcRotateCamera.panningInertia to decouple inertia from panning inertia (deltakosh)
  • Added FIXED_EQUIRECTANGULAR_MIRRORED_MODE mode for reflection texture. Demo here (deltakosh)
  • Introduced boundingBox.centerWorld and boundingBox.extendSizeWorld (deltakosh)
  • Improved FXAA post-process (deltakosh)
  • Added Light.customProjectionMatrixBuilder to allow developers to define their own projection matrix for shadows (deltakosh)
  • Added set() function to all basic types (deltakosh)
  • Added HDRCubeTextureAssetTask to AssetManager (deltakosh)
  • Engine now uses range based fog (deltakosh)
  • VertexBuffer.updatable is now serialized (deltakosh)
  • Added intersectsMeshes() to Ray (abow)
  • New RayHelper class for easily viewing and attaching a ray to a mesh. Demo abow)
  • Mesh.applyDisplacementMap now accepts uvScale and uvOffset parameter (deltakosh)
  • Added addChild(), removeChild(), setParent() to AbstractMesh (abow)
  • Effect.getVertexShaderSource() and Effect.getFragmentShaderSource() now returns the effective shader code (including evaluation of #define) (deltakosh)
  • GroundMesh : getHeightAtCoordinates(), getNormalAtCoordinates() and getNormalAtCoordinatesToRef() can now work with rotated grounds (jerome)
  • GroundMesh, facetData and SolidParticleSystem improvement in normal computations (jerome)
  • Added AbstractMesh.addRotation() (jerome)
  • Added Quaternion.RotationQuaternionFromAxis() and Quaternion.RotationQuaternionFromAxisToRef() (jerome, thanks to abow)
  • Added parameters uvs and colors to MeshBuilder.CreateRibbon() (jerome)
  • Added parameters frontUVs and backUVs to all the methods MeshBuilder.CreateXXX() supporting sideOrientation (jerome)
  • Added Curve3.CreateCatmullRomSpline() (jerome and BitOfGold)
  • Added the optional parametercolorFilter to CreateGroundFromHeightMap() (jerome)
  • Improved the internal code of Vector3.RotationFromAxisToRef() (jerome, thanks to abow)
  • GroundMeshes are now serialized correctly (deltakosh)
  • Added mesh.markVerticesDataAsUpdatable() to allow a specific vertexbuffer to become updatable (deltakosh)
  • Added POINTERTAP and POINTERDOUBLETAP PointerEventTypes to register new Observer mask. Demo here (yuccai)
  • Added OnDoublePickTrigger for ActionManager (yuccai)
  • Added Scene.DoubleClickDelay to set the timing within a double click event like PointerEventTypes.POINTERDOUBLETAP or ActionManager.OnDoublePickTrigger has to be processed (yuccai)
  • New material: ShadowOnlyMaterial to display shadows on transparent surfaces (deltakosh)
  • Added VertexBuffer.TangentKind to specify tangents in place of shader-calculated tangents (dewadswo, bghgary)
  • Added material.twoSidedLighting to PBRMaterial and StandardMaterial to enable flipping normals when backfaceCulling is false (BeardedGnome, bghgary)
  • Added a HTML page with embedded directions to improve the custom build process. (jcpalmer)
  • Added glTF 2.0 loader with versioning support (bghgary, thanks to BeardedGnome for animation updates)
  • New Motion Blur effect added into StandardRenderingPipeline Demo (Julien Moreau-Mathis)
  • Allow the BlackAndWhite post process to adjust the degree in subsequent frames, for Welcome to Wonderland types of animation (jcpalmer)
  • New BABYLON.TextureTools.CreateResizedCopy function to create a copy of a texture and chage its size (deltakosh)

Bug fixes

  • Fixed issue with FPS not decreasing when reflections are disabled (abow)
  • Fixed disappearing BoneAxesViewer (abow)
  • Fixed disappearing SkeletonViewer (abow)
  • Fixed billboarding for parented meshes (abow)
  • Fixed issue with BoneIKController and left-handed coordinate systems (abow)
  • Fixed a bug with spotlight direction (deltakosh)
  • Fixed an issue with Mesh.attachToBone when a mesh is moving and an animation is changed (abow)
  • Fixed an issue withaspect ratio when using CreateScreenshot (deltakosh)
  • Fixed SPS particle initial status when used as updatable with a positionFunction in addShape() (jerome)
  • Fixed SPS particle access start index when used with setParticles(start, end) (jerome)
  • Fixed SPS billboard mode when used with a parented camera (jerome)

API Documentation

  • File abstractMesh.ts documented (jerome)
  • File mesh.ts documented (jerome)
  • File groundMesh.ts documented (jerome)
  • File instancedMesh.ts documented (jerome)
  • File lineMesh.ts documented (jerome)
  • File vertexData.ts documented (jerome)
  • File subMesh.ts documented (jerome)
  • File vertexBuffer.ts documented (jerome)
  • File math.ts documented (jerome)
  • File light.ts documented (jerome)
  • File directionalLight.ts documented (jerome)
  • File hemisphericLight.ts documented (jerome)
  • File pointLight.ts documented (jerome)
  • File spotLight.ts documented (jerome)
  • File shadowGenerator.ts documented (jerome)

Breaking changes

  • WebVRCamera:
    • requestVRFullscreen has been removed. Call attachControl() inside a user-interaction callback to start sending frames to the VR display
    • setPositionOffset has been used to change the position offset. it is now done using camera.position
  • Ray :
    • show has been removed. Use new RayHelper.show() instead
    • hide has been removed. Use new RayHelper.hide() instead
  • AbstractMesh:
    • onPhysicsCollide has been removed. Use mesh.physicsImpostor.registerOnPhysicsCollide() instead
    • setPhysicsState has been removed. Use new PhysicsImpostor() instead
    • getPhysicsMass has been removed. Use mesh.physicsImpostor.getParam("mass") instead
    • getPhysicsFriction has been removed. Use mesh.physicsImpostor.getParam("friction") instead
    • getPhysicsRestitution has been removed. Use mesh.physicsImpostor.getParam("restitution") instead
    • updatePhysicsBodyPosition has been removed. Changes are synchronized automatically now
  • Mesh:
    • updateVerticesDataDirectly has been removed. Use mesh.updateVerticesData() instead
  • SsaoRenderingPipeline:
    • getBlurHPostProcess has been removed. Blur post-process is no more required
    • getBlurVPostProcess has been removed. Blur post-process is no more required
  • Scene:
    • setGravity has been removed. Use scene.getPhysicsEngine().setGravity() instead
    • createCompoundImpostor has been removed. Use PhysicsImpostor parent/child instead
  • ActionManager:
    • LongPressDelay and DragMovementThreshold are now respectively Scene.LongPressDelay and Scene.DragMovementThreshold
  • HDRRenderingPipeline:
    • HDRRenderingPipeline has been removed because it is deprecated. It is now replaced by StandardRenderingPipeline which is more advanced. See documentation
  • PBRMaterial:
    • Fixed several bugs which could lead to visual changes. More info here
    • Removed all overloadedXXX properties
    • Removed all fresnelXXX properties
    • Removed .babylon.hdr textures: We now use DDS files.

2.5.0

Core Engine

Major updates

  • New StandardRenderingPipeline effect to support screen space lens flare and depth of field. Demo - (Julien Moreau-Mathis)
  • New HighlightLayer object to enable highlights rendering. Demo - (sebavan)
  • Babylon.js now supports right handed system with scene.useRightHandedSystem = true (deltakosh)
  • Babylon.js is now compiled with optimize-js to get faster initial load (deltakosh)
  • New BoneIKController Demo (abow)
  • New BoneLookController Demo (abow)
  • You can now build your own version of babylon.js with gulp build-custom Doc (deltakosh)

Updates

  • Added node.doNotSerialize to prevent specific nodes to be serialized by SceneSerializer (deltakosh)
  • Added scene.multiPick and scene.multiPickWithRay to return an array of pickedMesh objects (deltakosh)
  • Added Effect.GetVertexShaderSource() and Effect.GetFragmentShaderSource() (deltakosh)
  • New Texture.LoadFromDataString() to help loading base64 encoded textures (deltakosh)
  • Added Engine detection of the compresed texture formats supported by Hw / browser. You can specify those formats you have files for using Engine.setTextureFormatToUse(), and an appropriate one will be chosen. (Palmer-JC)
  • Added Ray.intersectsMesh, Ray.show, Ray.hide (abow)
  • Added AbstractMesh.setPivotPoint, AbstractMesh.getPivotPoint, AbstractMesh.getAbsolutePivotPoint (abow)
  • Added Debug.AxesViewer and Debug.BoneAxesViewer (abow)
  • Added Bone.getAbsolutePositionFromLocal and getLocalPositionFromAbsolute (abow)
  • Added Bone.setRotation, Bone.getRotation, Bone.setRotationQuaternion, Bone.getRotationQuaternion (abow)
  • Added Bone.getAbsolutePosition and Bone.getAbsolutePositionToRef (abow)
  • Added Bone.translate, Bone.setPosition, Bone.setAbsolutePosition (abow)
  • Added Bone.setYawPitchRoll, Bone.setRotationMatrix, Bone.setScale, Bone.setAxisAngle (abow)
  • Added Bone.rotate (abow)
  • Added Bone.scale (abow)
  • Added Camera.getDirection, AbstractMesh.getDirection, Bone.getDirection (abow)
  • Added subdivisionsX, subdivisionsY option to GroundMesh (abow)
  • New Tools.CreateScreenshot function will capture all canvas data. Previous implementation is now called CreateScreenshotUsingRenderTarget (deltakosh)
  • Cube textures are now cached by texture cache (deltakosh)
  • Added onAnimationEnd callback for sprite.playAnimation (deltakosh)
  • Added support for non square textures for sprites (deltakosh)
  • Added support for texture arrays (deltakosh)
  • Added camera.isInFrustum and camera.isCompletelyInFrustum. Can be used with meshes, submeshes and boundingInfo (deltakosh)
  • Several memory allocation reduction (benaadams)
  • Several GPU state change reduction (benaadams)
  • MapTexture: add supersample mode to double font quality. (nockawa)
  • New SPS feature : solid particle intersection with other solid particle or with any mesh particle.intersectsMesh() (jerome)
  • New invertUV parameter an all ribbon based shapes : ribbon, tube, lathe, basic and custom extrusion (jerome)
  • PerfCounter class added to monitor time/counter and expose min/max/average/lastSecondAverage/current metrics. Updated engine/scene current counter to use this class, exposing new properties as well to access the PerfCounter object (nockawa)
  • Better keyboard event handling which is now done at canvas level and not at window level (deltakosh)
  • New scene.hoverCursor property to define a custom cursor when moving mouse over meshes (deltakosh)
  • WebVR Camera was updated to be conform with the current specs. (RaananW)
  • New "CubeTextureTask" function will allow you to load a CubeTexture in the assetsManager. (agallouin)
  • Scene.stopAnimation has now an optional second parameter, the name of the animation to kill. Usefull if a mesh has multiple animations. (agallouin)

Bug fixes

  • Fixed issue with SkeletonViewer not displaying correctly with meshes that have a PoseMatrix (abow)
  • Fixed issue with Quaternion.toEulerAnglesToRef (abow)
  • Fixed issue with Animatable.goToFrame (abow)
  • Fixed issue with instancse and viewports (deltakosh)
  • Fixed issue with FreeCamera not working in fullscreen or when pointer locked (abow)
  • MapTexture: Font Characters are now correctly aligned on Chrome (nockawa)
  • Fixed some missing parameter default values in MeshBuilder.CreateGroundFromHeightMap() and MeshBuilder.CreateTiledGround() (jerome)
  • Fixed cross vector calculation in _computeHeightQuads() that affected all the GroundMesh.getHeightAtCoordinates() and GroundMesh.getNormalAtCoordinates() methods (jerome)
  • Fixed Mesh.CreateDashedLines() missing instance parameter on update (jerome)
  • Added BBox update on each ribbon based shape (ribbon, tube, extrusion, etc) on dynamic updates (jerome)
  • Fixed model shape initial red vertex color set to zero not formerly being taken in account in the SolidParticleSystem (jerome)
  • Fixed billboard when the SPS mesh is parented in the SolidParticleSystem (jerome)
  • Fixed RenderTargetTexture meshes selection (deltakosh)
  • Fixed camera speed computation (deltakosh)
  • Fixed bug with instances, LOD and edgesRendering (deltakosh)

Breaking changes

  • FollowCamera.target was renamed to FollowCamera.lockedTarget to avoid conflicts (deltakosh)
  • Removed legacy shaders support (deltakosh)

2.4.0

Core Engine

Major updates

  • New refraction channel for Standard material (including fresnel support). Refraction texture can be provided by a reflection probe or a refraction texture. See demo here (deltakosh)
  • Added support for HDR cubemaps. demo here (sebavan)
  • Support for shaders includes (deltakosh)
  • New mesh type : LineSystem. Demo here (jerome)
  • SerializationHelper for complex classes using TypeScript decorators (deltakosh)
  • StandardMaterial now supports Parallax and Parallax Occlusion Mapping (tutorial) (nockawa)
  • Animations blending. See demo here. More info here (deltakosh)
  • New debuger tool: SkeletonViewer. See demo here (Adam & deltakosh)
  • Added Camera Inputs Manager to manage camera inputs (mouse, touch, keyboard, gamepad, ...) in a composable way, without relying on class inheritance. Documentation here (gleborgne)
  • Introduced new observable system to handle events. Documentation here (nockawa, deltakosh)
  • Added a new VR camera : VRDeviceOrientationArcRotateCamera (temechon)
  • Moved PBR Material to core (deltakosh)
  • StandardMaterial.maxSimultaneousLights can define how many dynamic lights the material can handle. Demo here (deltakosh)
  • Introduced Canvas2D feature: a 2D engine to render primitives, sprites in 2D, text. Canvas2D can be displayed in Screen Space (above the 3D scene) or in World Space to be a part of the Scene. (nockawa)
  • Added two new types of Texture: FontTexture and MapTexture (quick doc) (nockawa)
  • Added a dynamic 2D Bin Packing Algorithm, (more info here) (nockawa)
  • Physics engine was completely rewritten, including both plugins for Oimo.js and Cannon.js. feature (RaananW)
  • Interleaved buffers are now directly supported. Create a Buffer object and then use buffer.createVertexBuffer to specify the vertex buffers (benaadams)
  • Vertex buffers can be marked as instanced to allow custom instancing attributes (benaadams)
  • Mesh can have overridenInstanceCount set to specify the number of meshes to draw when custom instancing is used (benaadams)
  • Now supporting the Earcut polygon triangulation library as part of babylon.js library. (Look for the Earcut module). The PolygonMeshBuilder class now relies on Earcut. (nockawa)

Updates

  • Added renderTargetTexture.useCameraPostProcesses to control postprocesses for render targets (deltakosh)
  • Added mesh.toLefthanded() to convert a mesh from right handed system (kesshi)
  • Renderlists can now also be defined using predicates (deltakosh)
  • Added support for various normal maps conventions (deltakosh)
  • Added postprocess.enablePixelPerfectMode to avoid texture scaling/stretching when dealing with non-power of 2 resolutions. cannot be used on post-processes chain (deltakosh)
  • Enabled other post processes to be used when also using a 3D Rig (jcpalmer)
  • Got Skeleton.copyAminationRange scaling better for different bone lengths (jcpalmer)
  • Added skeleton.getBoneIndexByName(boneName: string) (dad72)
  • Added node._children to track children hierarchy (deltakosh)
  • Added Camera.ForceAttachControlToAlwaysPreventDefault to help embedding Babylon.js in iFrames (deltakosh)
  • Support for Layer.alphaTest (deltakosh)
  • New scene.pointerDownPredicate, scene.pointerMovePredicate, scene.pointerUpPredicate to define your own predicates for meshes picking selection (deltakosh)
  • New OnPickTrigger support for spritesManager (deltakosh)
  • New SPS method digest() (jerome)
  • New SPS property computeBoundingBox (jerome)
  • New SPS particle property isVisible (jerome)
  • Added a new OnPickOut trigger fired when you release the pointer button outside of a mesh or sprite. (deltakosh)
  • Added support for OnPointerOver and OnPointerOut for sprites. (deltakosh)
  • Added an optional predicate on Node.getDescendants, Node.getChildren to filter out Nodes based on a callback execution. (nockawa)
  • Added Ray.intersectionPlane & intersectionSegment. (nockawa)
  • LinesMesh class now supports Intersection. Added the intersectionThreshold property to set a tolerance margin during intersection with wire lines. (nockawa)
  • Geometry.boundingBias property to enlarge the boundingInfo objects (nockawa)
  • Tools.ExtractMinAndMax & ExtractMinAndMaxIndexed now supports an optional Bias for Extent computation.
  • Added StringDictionary<T> class to implement an efficient generic typed string dictionary based on Javascript associative array. (quick doc) (nockawa)
  • Added RectanglePackingMap class to fit several rectangles in a big map in the most optimal way, dynamically. (nockawa)
  • Added DynamicFloatArray class to store float32 based elements of a given size (stride) into one big Float32Array, with allocation/free/pack operations to then access an optimal buffer that can be used to update a WebGLBuffer dynamically.(quick doc) (nockawa)
  • Scene.onPointerObservable property added to enable a unique Observable event for user input (see ArcRotateCamera inputs for examples) (nockawa)
  • Oimo.js updated to the latest version (RaananW)
  • Added PhysicsImpostor and PhysicsJoint classes (RaananW)
  • LensFlareSystem now has both ID and name (RaananW)
  • TargetCamera has now a rotationQuaternion variable to can be used to set the camera's rotation (RaananW)
  • SSAORenderingPipeline now uses bilateral blur post-processes instead of standard blur post-process, in order to remove more efficiently the "textile effect"
  • Engine.updateDynamicVertexBuffer now has optional count as well as offset to allow partial updates (benaadams)
  • vertex attributes are only disabled if they aren't going to be reeabled by the next draw, to reduce gpu state changes (benaadams)

Bug fixes

  • Fixed bug with billboards and parenting (deltakosh)
  • Fixed bug with ArcRotateCamera.setTarget (deltakosh)
  • Fixed bug with OBJ Loader - All meshes were concatenated with the previous one (Temechon)
  • Fixed the device orientation cameras (both VR and non-VR cameras) (RaananW)
  • Fixed the WebVR implementation (RaananW)
  • DynamicTexture.clone() now preserves height in addition to width (dahlbyk)
  • Fixed missing some parameter default values in MeshBuilder.CreateGroundFromHeightMap() and MeshBuilder.CreateTiledGround() (jerome)
  • Fixed model shape initial red vertex color set to zero not formerly being taken in account in the SolidParticleSystem (jerome)

Breaking changes

  • VertexData.CreateLines() removed as MeshBuilder.CreateLines() now calls MeshBuilder.CreateLineSystem()
  • scene.onNewXXXAdded and scene.onXXXRemoved callbacks were removed and replaced by scene.onNewXXXAddedObservable and scene.onXXXRemovedObservable
  • Material.dispose does not dispose textures by default. You have to call material.dispose(false, true) to get the previous behavior.
  • SSAORenderingPipeline.getBlurHPostProcess and SSAORenderingPipeline.getBlurVPostProcess. The SSAO rendering pipeline doesn't use standard blur post-process anymore. A bilateral blur post-process is used instead.
  • Engine.bindBuffers is now Engine.bindBuffersDirectly (benaadams)
  • Engine.bindMultiBuffers is now Engine.bindBuffers and strongly typed { [key: string]: VertexBuffer; } of buffers (benaadams)
  • Engine.createDynamicVertexBuffer takes vertices rather than capacity, creating and initalizing in one gpu instruction (benaadams)
  • Internally new Engine.bindBuffer is used rather than gl.bindBuffer which only binds when the bound buffer is changing (benaadams)
  • DynamicTexture no longer forces height/width to exponents of 2 if MIP maps are disabled (dahlbyk)

Exporters

  • Unity3D exporter: Added support for lightmaps (davrous, deltakosh)
  • Unity3D exporter: Added support for export and run (local webserver) (davrous, deltakosh)
  • Unity exporter now support skeletons (sebavan)
  • Support for 3dsmax 2017 (deltakosh)
  • Added support for up to 8 bones influences per vertex for 3dsmax exporter (deltakosh)
  • Added console logging for .babylon file loading & depreciated SceneLoader.Load() in favor of Append() (jcpalmer)

API doc

  • class SolidParticleSystem documented (jerome)
  • class MeshBuilder documented (jerome)
  • class Mesh documented (jerome)

2.3.0

Core Engine

Major updates

Updates

  • Audio files are now saved for offline access (davrous)
  • New CubeTexture.CreateFromImages() (deltakosh)
  • Bounding info can be locked and updated (bb.isLocked and bb.update()) (deltakosh)
  • 2D layers now have a scale and offset properties (deltakosh)
  • TouchCamera can now fallback to regular mouse/keyboard controls (deltakosh)
  • Added ability to skip current prepared Action to next active Action (chained by Action.then(Action)) (vouskprod)
  • Added new event triggers ActionManager.OnLongPressTrigger and ActionManager.OnPickDownTrigger (vouskprod)
  • new Mesh.convertToUnIndexedMesh() to create meshes with no indices (which could be faster when vertex reuse is low and vertex structure is small) (deltakosh)
  • Unity3D exporter will recognise instances of prefabs (ozRocker)
  • New parse mechanism (for loading .babylon file) (deltakosh)
  • New button to log the camera position in the debug layer (temechon)
  • Shader files (fragment and vertex) can now be specified via direct URL (vouskprod)
  • Added Animatable.goToFrame() (deltakosh)
  • Fixed behavior or Animation.CreateAndStartAnimation and added Animation.CreateMergeAndStartAnimation to reproduce previous behavior (deltakosh)
  • Adding StandardMaterial.linkEmissiveWithDiffuse to, well, link emissive with diffuse value. (With)[ https://www.babylonjs-playground.com/#2FPUCS#2] and (without)[ https://www.babylonjs-playground.com/#2FPUCS#1] (deltakosh)
  • Adding support for equi-rectangular mapping. See demo here (deltakosh)
  • Sprites and particles scheduler updated to be resolved before transparent objects (deltakosh)
  • Added ability to deactivate ArcRotateCamera panning mechanism (by setting panningSensibility to 0) (vouskprod)
  • Added DirectionalLight.autoUpdateExtends to prevent directional lights to adapt to scene extends (deltakosh)
  • Added a new parameter to debugLayer.show() to define root element to use (deltakosh)
  • New MeshBuilder class used to create all kind of mesh shapes (deltakosh)
  • Added Scene.constantlyUpdateMeshUnderPointer to improve performance when moving mouse (deltakosh)
  • Added StandardMaterial.disableLighting (deltakosh)
  • Improved reflection shader performance (deltakosh)
  • New Material.sideOrientation property to define clockwise or counter-clockwise faces selection. Demo here (deltakosh)
  • It is now possible to create a custom loading screen. PR (RaananW)
  • Per face color and texture feature in MeshBuilder.CreateCylinder() (jerome)
  • Arc feature in CreateCylinder, CreateSphere, CreateTube, CreateDisc and CreateLathe (jerome)
  • Slice feature in MeshBuilder.CreateSphere() (jerome)
  • closed parameter in MeshBuilder.CreateLathe() (jerome)
  • cap parameter in MeshBuilder.CreateLathe() (jerome)
  • diameter, hasRings, enclose parameters in MeshBuilder.CreateCreateCylinder() (jerome)
  • added getNormalAtCoordinates() and getNormalAtCoordinatesToRef() methods in MeshBuilder.CreateLathe() (jerome)
  • Material.dispose() now removes disposed material from meshes (deltakosh)
  • New Material.getBindedMeshes() function (deltakosh)
  • OimoJS Plugin now uses Quaternions exclusively and calculates body rotations correctly. PR (RaananW)
  • It is now possible to get the physics engine's body and wolrd objects using the physics engine. PR (RaananW)
  • new Heightmap Impostor for Cannon.js physics engine. PR, [Demo] ( https://www.babylonjs-playground.com/#D3LQD#3) (RaananW)
  • A plane mesh can be created with a source plane (math). PR (RaananW)
  • AbstractMesh.onPhysicsCollide will be triggered when a physics-enabled mesh collides against another. PR (RaananW)
  • Added scene onPointerMove public callback. PR (RaananW)
  • Added streaming support for BABYLON.Sound (davrous)
  • Added collisionsEnabled and workerCollisions for serialization PR (Dad72)
  • Changed from a fixed maximum of bone influencers, 4, to variable, 1-8 (Palmer-JC)
    • Support for added to Blender Exporter (Palmer-JC)
  • Float32Arrays can now directly be specified for vertex data attributes, Mesh.updateVerticesDataDirectly deprecated (Palmer-JC)
  • Added panning axis to the ArcRotateCamera PR (mstdokumaci, RaananW)
  • Added Tmp class for internal use in order to improvement the memory management, jerome)
  • Added Scene.swithActiveCamera(newCamera, attachControl) to go from one camera active to another. (dad72) PR

Bug fixes

  • Fixed IDB for offline support (davrous)
  • Fixed a bug with spherical mapping (deltakosh)
  • Fixed a bug with clone and createInstance which was forcing the recomputation of bounding boxes (deltakosh)
  • Fixed a bug with CSG when submeshes are kept (deltakosh)
  • Fixed a bug with texture coordinates matrices (deltakosh)
  • Fixed Sphere texture coordinates generation (deltakosh)
  • Fixed a bug with Mesh.attachToBone when bone's matrix has a negative determinant (deltakosh)
  • Fixed a possible but with the active camera while taking a screenshot. PR (RaananW)
  • Fixed a bug with worker-collisions and instances. PR (RaananW)
  • Fixed a bug with removed meshes and geometries from the worker-cache. PR (RaananW)
  • Fixed getHeightAtCoordinates() : brand new ultra fast algorithm, can be used for many objects at once in the render loop now (jerome)
  • Fixed closePath and closeArray ribbon parameter now working back together (jerome)
  • Fixed morphing on capped tubes (jerome)
  • Fixed morphing on extruded shapes (jerome)
  • Fixed tube and extruded shape cap light artifact (jerome)
  • Fixed lathe light artifact with dedicated new geometry (jerome)
  • Fixed a bug calculating velocity during collision with gravity enabled. PR (RaananW)
  • Fixed a bug in instance serialization. PR (RaananW)
  • Fixed a memory leak with textures (deltakosh)

Breaking changes

  • ActionManager.OnPickTrigger now acts as a single click/tap and is not raised on drag or swipe anymore. To get the old behavior, ActionManager.OnPickDownTrigger should be used instead (vouskprod)
  • VertexData.CreateCylinder() now supports only the single options parameter (jerome)
  • VertexData.CreateRibbon() now supports only the single options parameter (jerome)
  • VertexData.CreateBox() now supports only the single options parameter (jerome)
  • VertexData.CreateSphere) now supports only the single options parameter (jerome)
  • VertexData.CreateTorus() now supports only the single options parameter (jerome)
  • VertexData.CreateTorusKnot() now supports only the single options parameter (jerome)
  • VertexData.CreatePlane() now supports only the single options parameter (jerome)
  • VertexData.CreateDisc() now supports only the single options parameter (jerome)
  • VertexData.CreateLines() now supports only the single options parameter (jerome)
  • VertexData.CreateDashedLines() now supports only the single options parameter (jerome)
  • VertexData.CreateGround() now supports only the single options parameter (jerome)
  • VertexData.CreateTiledGround() now supports only the single options parameter (jerome)
  • VertexData.CreateGroundFromHeightMap() now supports only the single options parameter (deltakosh)
  • Tools.IsExponantOfTwo() renamed to Tools.IsExponentOfTwo() (deltakosh)
  • Tools.GetExponantOfTwo() renamed to Tools.GetExponentOfTwo() (deltakosh)
  • Updated Cannon.js plugin to the newest version (0.6.2). New cannon.js must be used. PR (RaananW)

2.2.0

Core Engine

Major updates

Updates

  • Adding layerMask to lensFlareSystem, spritesManager, particleSystem (deltakosh)
  • Adding emissiveAsIllumination and reflectionFresnelFromSpecular for StandardMaterial (deltakosh)
  • Adding isEnabled for ProceduralTexture (deltakosh)
  • Compression supported for raw textures (deltakosh)
  • New TonemapPostProcess. See demo here (deltakosh)
  • New options parameters for Box, Sphere, Plane and Ground. See demo here (deltakosh)
  • Added per face UV and Colors options for CreateBox (jerome)
  • Added darkness support for soft shadows (deltakosh)
  • Added scene.getLensFlareSystemByName() (deltakosh)
  • Added LensFlareSystem.setEmitter() (deltakosh)
  • Added Color3.FromHexString() and Color3.toHexString() (deltakosh)
  • Added Color4.FromHexString() and Color4.toHexString() (deltakosh)
  • Added mesh.computeBonesUsingShaders to allow developers to disable HW skinning for low end devices (deltakosh)
  • Added material.disableDepthWrite (default is off) (deltakosh)
  • Added material.alphaMode (default is BABYLON.Engine.ALPHA_COMBINE, can be set to BABYLON.Engine.ALPHA_ADD, __SUBTRACT, __MULTIPLY or *_MAXIMIZED ) (deltakosh, jahow)
  • Added Animatable.reset() function (deltakosh)
  • New parameter for ArcRotateCamera.zoomOn to preserve maxZ (deltakosh)
  • PickingInfo.getNormal can now use either vertices normals or vertices positions (deltakosh)
  • Meshes can now support uv2, uv4, uv5 and uv6 for ShaderMaterials (deltakosh)
  • Panning support for ArcRotateCamera (julien-moreau)
  • Vertex color and diffuse color can now be mixed (deltakosh)
  • Depth-of-field improvements PR (jahow)
  • Engine now initialize WebGL with preserveDrawingBuffer = false by default (deltakosh)
  • withEpsilon with a user defined epsilon PR (RaananW)
  • Adding onAfterRender function in BABYLON.PostProcess PR (julien-moreau)
  • Improved shaders optimizer to remove specular code when not needed (deltakosh)
  • Added some utility functions to Vector2/3/4 PR (jahow)
  • Added split angularSensibiliy into X and Y for arcRotateCamera PR (Remwrath)
  • Added function getFrontPosition(distance) for Camera PR (dad72)
  • New rawTexture.update function (robgdl)
  • Changes to meshes transform baking and added flipFaces PR (jahow)
  • SerializeMesh serializes a mesh or array of meshes to be imported with the loader's ImportMesh optionally including their children and/or parents. PR PR2 (RaananW)
  • onCollide callback for meshes calling moveWithCollisions. PR (RaananW)
  • Unity Exporter now uses game object name as the Babylon.js mesh name, instead of mesh name which is not unique when dealing with primitive objects (cubes, spheres, planes, etc..) (ozRocker)
  • Path3D construction : new raw parameter, if true returns a non-normalized Path3D object (jerome)
  • Added Vector3.RotationFromAxisToRef() : same as RotationFromAxis() but assigns a reference (jerome)
  • ComputeNormals optimization : less object allocation and normal array initialization (jerome)
  • Ribbon : closePath parameter now creates a smooth seam (jerome)

Bug fixes

  • Fixing bug with rig cameras positioning (deltakosh)
  • Instance meshes' geometry ID is now serialized correctly. PR (RaananW)
  • Bug fix at set numberOfBricksWidth PR (Polatouche)

Breaking changes

  • In LensRenderingPipeline: parameter dof_focus_depth (range 0..1) is deprecated, use dof_focus_distance (range 0..infinity) instead (jahow)
  • Cylinder Mesh complete reimplementation for better normals (jerome)
  • RotationFromAxis() : fixed the dot product case outside the range [-1, 1] (jerome)
  • Path3D : fix wrong normal/binormal due to normalization approximations (jerome)

2.1.0

Core Engine

Major updates

  • Collisions can now be offloaded on webworkers (raananw)
  • SIMD.js support for math library. See demo (deltakosh)
  • Unity 5 scene exporter. More info here (davrous, deltakosh)
  • New Mesh.CreateDecal() function to create decals. See demo. More info here (deltakosh)
  • New tool for debugLayer: You can now dump renderTargets to see their content (deltakosh)
  • Complete shadows code rework: New bias property for ShadowGenerator, new orthogonal shadows for directional shadows, automatic projection size for directional lights, new BlurVarianceShadowMap filter. See demo. Documentation updated here (deltakosh)
  • New lens effects rendering pipeline. More info here (jahow)
  • New basic mesh type: Ribbons. See demo. More info here (jbousquie)
  • New BABYLON.Mesh.ExtrudeShape and BABYLON.Mesh.ExtrudeShapeCustom. More info here (jbousquie)
  • New Loaders folder with a first additionnal plugin: STL (raananw, deltakosh)
  • Gulp building process revamped, updated and simplified and now includes a config.json (raananw)

Updates

  • Better beta angle support for ArcRotateCamera (raananw)
  • Better video textures support (deltakosh)
  • Cameras hierarchy rework (deltakosh)
  • New Camera.setCameraRigMode to control 3D rendering of any camera (Anaglyph, Stereo, VR) (Palmer-JC, vousk)
  • VR cameras can disable distortion postprocess to get more performance (deltakosh)
  • New cameras: AnaglyphGamepadCamera, StereoscopicFreeCamera, StereoscopicArcRotateCamera, StereoscopicGamepadCamera (deltakosh)
  • New MultiMaterial.clone() function (deltakosh)
  • Faster mesh.computeNormals() function (jbousquie)
  • Added the ability to dynamically update or to morph an mesh instance (jbousquie)
  • Allow static Mesh.MergeMeshes to work with clones & Mesh subclasses (Palmer-JC)
  • Added mesh.freezeWorldMatrix() for static meshes (deltakosh)
  • Added mesh.freezeNormals() for parametric mesh updates (jbousquie)
  • Added Vector3.RotationFromAxis() to get Euler rotation angles from a target system (jbousquie)
  • Added mesh.alwaysSelectAsActiveMesh to disable frustum clipping for a specific mesh (deltakosh)
  • Added updateMeshPositions method (jbousquie)
  • Callbacks for geometry changes (raananw)
  • Allow Engine to run for CocoonJS with standard html, including devices where the hardware scaling != 1 (Palmer-JC)
  • Material onBind callback improvement (jahow)
  • New front/back/double side feature for meshes (jbousquie)
  • New basic mesh type: Disc (jbousquie)
  • New basic mesh type : Dashed Lines (jbousquie)
  • New basic mesh type : Lathe (jbousquie)
  • New basic mesh type: Tube. More info here (jbousquie)
  • Allow ComputeNormals to work with Typed Arrays & the Typescript Level (Palmer-JC)
  • Added uniqueId for nodes (raananw)
  • Added Mesh.onLODLevelSelection(distance: number, mesh: Mesh, selectedLevel: Mesh) callback (deltakosh)
  • Added Material.zOffset to help reducing z-fighting (deltakosh)
  • Added excludeWithLayerMask to lights (Palmer-JC)
  • Added includeOnlyWithLayerMask for filtering meshes (Palmer-JC)
  • Mesh Default layerMask changed to allow more "special cameras filtering" (Palmer-JC)
  • Sprite can now have .width and .height properties (deltakosh)
  • Ability to register events based on mesh/camera/light addition and deletion (raananw)
  • New Curve object (jbousquie) More info here
  • New Path3D object (jbousquie) More info here
  • New 'color correction' post process (jahow)
  • Added sampling mode as a parameter for SpriteManager (jahow)
  • RenderTexture can now be saved to a file (deltakosh)
  • Better attributes management (deltakosh)
  • Source conform to typescript 1.4 (raananw)
  • Adding subMeshId property in PickingInfo structure (deltakosh)
  • No more error when a manifest is not found (deltakosh)

Bug fixes

  • Initial quaternion fix for OIMO plugin (raananw)
  • ArcRotateCamera pinch zoom debug (vousk)
  • Fixing animatable bug when animation is over (temechon)
  • useCameraPostProcess whenever there is a special camera in use (m0ppers)
  • delta in BoundingBox's intersectsPoint is now calculated correctly (raananw)
  • textures cache fixed (deltakosh)
  • ImportMesh now imports referenced geometries of selected meshes (raananw)
  • CSG toMesh() and FromMesh() now support meshes without quaternion (raananw)
Breaking changes
  • OculusCamera was removed (deltakosh)
  • VRDeviceOrientationCamera was renamed to VRDeviceOrientationFreeCamera (deltakosh)
  • WebVRCamera was renamed to WebVRFreeCamera (deltakosh)
  • VideoTexture does not require a size parameter anymore. The new constructor is: constructor(name: string, urls: string[], scene: Scene, generateMipMaps = false, invertY = false, samplingMode: number = Texture.TRILINEAR_SAMPLINGMODE) (deltakosh)

2.0.0

Core Engine

Major updates

  • Support for WebAudio. More info here (davrous)
  • Support for Procedural Texture with standard usable samples and custom support. More info here (meulta)
  • Support for OES_element_index_uint extension in order to support 32 bits indices and then meshes with more than 65536 vertices (deltakosh)
  • Support for levels of detail (LOD) for meshes. More info here (deltakosh)
  • New Scene Optimizer tool. More here (deltakosh)
  • Support for user marks (deltakosh)
  • Using High Resolution Time for performance and FPS measurement (deltakosh)
  • Easing functions for animations. More info here (mimetis)
  • New debug layer than can be used to display debug informations. More info here (deltakosh)
  • New PolygonMeshBuilder object used to create mesh from polygons (ElemarJR)
  • New Mesh.simplify() function to automatically simplify meshes. More info here (raananw)
  • New scene.enableDepthRenderer() to register depth texture rendering. More info here (deltakosh)
  • New SSAORenderingPipeline to apply screen space ambient occlusion. More info here (julien-moreau)
  • New VolumetricLightScatteringPostProcess to simulate volumetric light scattering. More info here (julien-moreau)
  • 3dsMax exporter can now generate binary format files (deltakosh)

Updates

  • Moving of cloning into Mesh constructor (Palmer-JC)
  • Camera types support in 3dsmax exporter (deltakosh)
  • Babylon.Math is now a fluid API (deltakosh)
  • Added FOV mode setting to cameras (jahow)
  • You can now define if OnIntersectionEnterTrigger and OnIntersectionExitTrigger may use precise intersections. More info here (deltakosh)
  • New scene.createDefaultCameraOrLight() function (deltakosh)
  • Added POV movement & rotation (Palmer-JC)
  • Starting documenting public API (raananw)
  • Added render target type (unsigned or floating point) (julien-moreau)
  • Decomposition and interpolation methods for matrices (kpko)
  • Spot lights can now cast shadows (deltakosh)
  • Adding clear() function to DynamicTexture (deltakosh)
  • New RawTexture object to create texture from arraybuffer with specific format (luminance, luminance and alpha, alpha, rgb, rgba) (deltakosh)
  • Animation's key can now be functions (deltakosh)
  • Bones and instances can be used together (deltakosh)
  • Engine can now accept more than one render loop (deltakosh)
  • New ParticleSystem.updateFunction to define custom behavior for particles (deltakosh)
  • New mesh.renderOverlay and mesh.overlayColor (deltakosh)
  • New "Automatically launch animations" option for Blender 3D (deltakosh)
  • Support for vertex color and vertex alpha function (deltakosh)
  • Adding stride size attributes to Mesh.setVerticesData function (deltakosh)
  • New Texture.CreateFromBase64String function (deltakosh)
  • Extending the Ray class functionality to support ray's length (raananw)
  • New Effect.onBind callback (deltakosh)
  • Added support for point rendering (FreeFrags deltakosh)
  • Robust Euler->Quaternion->Euler conversions (MavenRain)
  • new mesh.isCompletelyInFrustum(camera) function (deltakosh)
  • Added the possibility to disable fog for a specific material (demonixis)
  • Added the possibility to disable fog for a specific sprite manager (deltakosh)
  • Added a property to ArcRotateCamera that moves the screen position of the target (daner)

Breaking changes

  • Tools.GetFps() and Tools.GetDeltaTime() are now functions hosted by the engine: engine.getFps() and engine.getDeltaTime() deltakosh)

Bug fixes

  • Insane amount of fixes for 3dsmax and blender exporters (deltakosh)
  • Fixed nearest texture filters (deltakosh)
  • Fixed mesh loading when url has a query string (dlajarretie)
  • Fixed a bug with pause/restart on animations (deltakosh)
  • Fixed a bug with CSG and transformations (deltakosh)

1.14.0

Core Engine

Major updates

  • New VRDeviceOrientionCamera for cardboard like systems (demonixis)
  • New WebVRCamera for WebVR compatible systems (demonixis)
  • All shaders now use high precision profile to address iOS8 compatibility (deltakosh)
  • New camera: BABYLON.FollowCamera used to smoothly follow a given target abogartz
  • New BABYLON.AssetsManager used to handle assets loading alongside loading screen display (deltakosh)
  • New Engine.displayLoadingUI(), Engine.hideLoadingUI(), Engine.loadingUiText. See more here (deltakosh)
  • New cache engine (Based on state objects) (deltakosh)
  • Fresnel support for diffuse, emissive, opacity and reflection on StandardMaterial. See demo here and wiki here (deltakosh)
  • TypeScript declaration file is now available (deltakosh)
  • Binary file format supported. You can use online converter here (r2d2Proton)

Updates

  • New mesh.updateVerticesDataDirectly(kind, float32array) to update mesh data directly (deltakosh)
  • Sandbox & IndexedDB layer are now supporting TGA & DDS textures (davrous)
  • Integrating lights animations, cameras type and animations for Blender exporter (Palmer-JC)
  • New "Get zip" option for CYOS (deltakosh)
  • Add pinch and zoom for iOS and Android on ArcRotateCamera (Eucly2)
  • New camera.projectToScreen() function to transform a vector3 into a screen pixel (deltakosh)
  • New effect parameter to define custom shader for BABYLON.ParticleSystem constructor. See demo here and wiki here (deltakosh)
  • Added toEulerAnglesToRef and CopyFromFloats to Quaternion (Demonixis)
  • Added function to calculate the inverse of a quaternion (Daner)
  • New StandardMaterial.useSpecularOverAlpha to define if you want specular to appear even on top of transparent surfaces (deltakosh)
  • New SceneLoader.Append function to append a babylon.js file to an existing scene (Palmer-JC)
  • New LinesMesh.alpha property (deltakosh)
  • Adding instances exportation support for 3DSMax exporter (deltakosh)
  • New Mesh.applyDisplacementMap and Mesh.applyDisplacementMapFromBuffer (deltakosh)
  • New Mesh.renderOutline property to render outlines around a mesh (used with Mesh.outlineColor and Mesh.outlineWidth) (deltakosh)
  • New Light.includedOnlyMeshes array to define explicitely which mesh is affected by a light (deltakosh)
  • Added multiply and divide functions to Vector2 (daner)
  • New feature demo for custom render target texture (deltakosh)
  • RenderTargetTexture can now specify a camera to use (deltakosh)

Bug fixes

  • Fixing tons of bugs with PostProcessRenderPipeline. Wiki updated. (deltakosh)

1.13.0

Core Engine

Major updates

Updates

  • Fixed ray creation when the devicePixelRatio is not equals to 1 (demonixis)
  • New mesh.registerAfterRender and mesh.unregisterAfterRender functions (deltakosh)
  • New fragmentElement parameter to define custom shader for BABYLON.ParticleSystem constructor (deltakosh)
  • New OnKeyDown and OnKeyUp triggers. See actions wiki for more info (deltakosh)
  • ArcRotateCamera can now check collisions wiki (deltakosh)
  • New Engine.Version property which returns a string with the current version (deltakosh)
  • New "Export and Run" feature for Max2Babylon (deltakosh)
  • Animations delta time is now capped between Scene.MinDeltaTime and Scene.MaxDeltaTime (deltakosh)
  • Non-squared DDS are now supported (deltakosh)
  • New triggers: BABYLON.ActionManager.OnIntersectionEnterTrigger, BABYLON.ActionManager.OnIntersectionExitTrigger. Documentation updated (deltakosh)
  • New mesh type: BABYLON.LinesMesh. You can find a demo here (deltakosh)
  • New mesh.moveWithCollisions function. Used with mesh.ellipsoid and '''mesh.ellipsoidOffset```, this function can be used to move a mesh and use an ellipsoid around it to check collisions (deltakosh)
  • New feature demo: How to do drag'n'drop (deltakosh)
  • New BABYLON.PickingInfo.getTextureCoordinates() function (deltakosh)
  • New BABYLON.Scene.cameraToUseForPointers property that defines this parameter if you are using multiple cameras and you want to specify which one should be used for pointer position (deltakosh)
  • BABYLON.OculusOrientedCamera was replaced by BABYLON.OculusCamera for better integration into camera system (deltakosh)
  • New Mesh.CreateTiledGround() function (kostar111)
  • Shadow Poisson Sampling (clementlevasseur)

Bug fixes

  • Fixing a bug when instances are used with a mesh with submeshes.length > 1 (deltakosh)
  • CreateCylinder() : add subdivisions parameter and fix normals bug (kostar111)

1.12.0

Core Engine

Major updates

  • Babylon.js is now entirely developed using TypeScript (deltakosh, davrous)
  • Physics plugins: You can add your own physics engine to Babylon.js. More info here. Cannon.js is the first supported plugin (deltakosh)
  • BABYLON.Action: You can now create a complex system of interactions. More info here (deltakosh)
  • Babylon.js Playground: Experiment and learn Babylon.js using the playground (deltakosh)
  • Geometry system (gwenael-hagenmuller)
  • Support for TGA textures based on Vincent Thibault work (deltakosh)
  • BABYLON.Gamepads & BABYLON.Gamepad: Support for Gamepad API (Xbox 360 Pad & Generic Pads) (davrous)
  • BABYLON.GamepadCamera: use a FPS-like camera controlled by your gamepad using 1 line of code (davrous)
  • Hardware accelerated instances used to render identical meshes. More info here (deltakosh)
  • New BABYLON.GroundMesh created by BABYLON.Mesh.Createground and BABYLON.Mesh.CreateGroundFromHeightMap. This object is optimized for collisions and rendering of grounds (!!!). A first feature is also included GroundMesh.getHeightAtCoordinates (deltakosh)
  • Beta: New exporter for 3ds Max 2013+ (deltakosh)

Updates

  • DDS: Support for RGB, Luminance and cube file format (deltakosh)
  • New LensFlareSystem.isEnabled property (deltakosh)
  • New samplingMode parameter when creating textures (deltakosh)
  • Blender: changed object.isVisible to reflect the corresponding param in Blender (vousk)
  • New properties: scene.meshUnderPointer, scene.pointerX, scene.pointerY (deltakosh)
  • Added "layerMask" property to meshes and cameras (marcolebdech)
  • New Mesh.showSubMeshesBoundingBox to display sbumeshes bounding boxes (deltakosh)
  • Octree are now more generics and used to optimize rendering, collisions and picking. More info (deltakosh)
  • Shadows now support alpha testing (deltakosh)
  • New feature demo: particles (deltakosh)
  • New renderTargetTexture.refreshRate property to define the refresh rate of RenderTargetTexture: Use 0 to render just once, 1 to render on every frame, 2 to render every two frames and so on... (deltakosh)
  • New scene.beforeCameraRender and scene.afterCameraRender callbacks (deltakosh)
  • New custom functions for ParticleSystem: startDirectionFunction and startPositionFunction (deltakosh)
  • useAlphaFromDiffuseTexture option for standard material to use 8-it alpha channel from the diffuse texture instead of using it as an alpha test value (Platane)
  • New Tools.Log, Tools.Warn, Tools.Error functions. Filter can be applied using Tools.CurrentLoglevel (MaxenceBrasselet, deltakosh)
  • Using grunt-contrib-uglify to reduce babylon.js size (from 500KB to 384KB) (deltakosh)
  • setDirectionToTarget function added to SpotLight, HemisphericLight and DirectionalLight (Wingnutt)
  • Picking now takes viewport in account (deltakosh)
  • Point lights and spot lights now have a range (deltakosh)
  • Color3 interpolator for animations (deltakosh)
  • New function: VertexData.CreateGroundFromHeightMap(deltakosh)
  • New function: Tools.CreateScreenshot(nicolas-obre)

Bug fixes

  • Fixing ArcRotateCamera.setPosition() (Celian)
  • RenderTarget crashed when used with incremental engine (deltakosh)
  • Depth clear is now more controlled (Mainly for Ejecta) (deltakosh)
  • Fixed a bug with ratio when using RenderTargetTexture deltakosh)
  • Fixed a bug in the sandbox tool (davrous)
  • Fixed a bug with skybox seams holcombj)
  • Moved mousewheel event from window to canvas deltakosh)
  • Fixed matricesIndices serialization (gwenael-hagenmuller)
  • Bug fix and GC optimisation on CSG (clementlevasseur)

Breaking changes

  • Mesh.setVerticesData signature is now: (kind, values, updatable) instead of (values, kind, updatable) in order to be consistent with Mesh.updateVerticesData deltakosh)

1.11.0

Core Engine

Major updates

  • New option for mesh: mesh.showBoundingBox to display mesh's bounding box. You can configure back and front color using scene.getBoundingBoxRenderer(). This function returns a BABYLON.BoundingBoxRenderer where you can define backColor, frontColor and showBackLines (deltakosh)
  • New basic mesh: BABYLON.Mesh.CreateTorusKnot (deltakosh)
  • New BABYLON.AnaglyphArcRotateCamera and BABYLON.AnaglyphFreeCamera (michael-korbas), (deltakosh)
  • Tags system (gwenael-hagenmuller)
  • New render pipeline system for post-processes. See documentation here (michael-korbas)

Updates

  • Added parameters to enable or disable a type of texture on all BABYLON.StandardMaterial (demonixis)
  • New BABYLON.VertexData.ExtractFromMesh function (deltakosh)
  • Cameras can now have sub-cameras (see BABYLON.AnaglyphArcRotateCamera for example) (deltakosh)
  • New BABYLON.Engine.runEvenInBackground property. True by default. It allows you to stop rendering when the browser is not the foreground application. (deltakosh)
  • Darkness of a shadow + shadow on transparent meshes (clementlevasseur)
  • New event for materials: onCompiled and onError (deltakosh)

Bug fixes

  • Fixed a bug with collisions cache
  • Fixed a bug with mesh.dispose when called twice (deltakosh)
  • Fixed an issue with Internet Explorer while rendering a RenderTargetTexture outside the engine renderLoop (nicolas-obre)

New demos

1.10.0

Core Engine

Major updates

Updates

  • Shaders can be loaded from DOM element alongside .fx files (deltakosh)
  • Adding arcRotateCamera.wheelPrecision (deltakosh)
  • Support for DOMMouseScroll (nicolas-obre)
  • Adding BABYLON.PickingInfo.prototype.getNormal (deltakosh)
  • Adding a new noMipmap parameter to BABYLON.CubeTexture constructor (deltakosh)
  • Adding BABYLON.Color3.FromInts() and BABYLON.Color4.FromInts() (deltakosh)
  • Adding invertY parameter to BABYLON.VideoTexture constructor (deltakosh)
  • Adding new BABYLON.Scene.getCameraByID function (deltakosh)
  • Adding new BABYLON.Scene.setActiveCameraByName() function (deltakosh)
  • Renaming BABYLON.Scene.activeCameraByID() to BABYLON.Scene.setActiveCameraByID() (deltakosh)
  • Adding texture wrapping support to Blender exporter (vousk)
  • Add Gulp for buiding babylon cross platform (SideraX)
  • Shadow map improvement on pack method (clementlevasseur)

Bug fixes

1.9.0

Core Engine

Major updates

  • Beta support for scene serialization with BABYLON.SceneSerializer.Serialize function (deltakosh)
  • Blender exporter now supports 32 bits indices (deltakosh)
  • Flat shading support (From Blender and with ``mesh.convertToFlatShadedMesh()`) (deltakosh)

Updates

  • New mesh.rotate and mesh.translate functions to rotate and translate mesh both locally and globally (deltakosh)
  • New feature for particles: ParticleSystem.forceDepthWrite (deltakosh)
  • Adding a new parameter to pick in order to be able to pick even on multi views (deltakosh)
  • New mesh.lookAt function (professorF)
  • New postprocess system (independent from cameras) (michael-korbas)
  • New mesh.setAbsolutePosition function (gwenael-hagenmuller)

Bug fixes

  • Fixing issue with mesh.infiniteDistance (deltakosh)
  • Fixing issue with camera caches (deltakosh)
  • Fixing issue with aspect ratio (deltakosh)
  • Fixing arcRotateCamera angle limitations (deltakosh)
  • Fixing a bug with multi-views: depth buffer was not clear between different passes (deltakosh)

1.8.5

Core Engine

Major updates

  • Visual Studio 2013 templates for Windows 8.1 and nuget packages (pierlag)

Updates

  • New matrix.multiply function (up to 50% faster) (deltakosh)
  • New matrices cache system for camera (view and projection matrices) (juliengobin)
  • New physics impostor: compound and mesh (still really slow) (deltakosh)
  • Set crossOrigin flag for support CORS (vbouzon)
  • XNA importer: Changes for Right-Left Coordinate Systems & Prefixed Mesh Parts with Mesh Name (professorF)
  • Fixing getPivotMatrix (gwenael-hagenmuller)
  • New geometry functions: getLocalTranslation, setPositionWithLocalVector, getPositionExpressedInLocalSpace,locallyTranslate (gwenael-hagenmuller)
  • Adding multi mesh import from same file(nicolas-obre)

Bug fixes

  • Fixing issue when disposing a parent and not its children (deltakosh)
  • Fixing .obj importer (deltakosh)
  • Added guardband checks for impostors' size (deltakosh)

1.8.0

Core Engine

Major updates

Updates

  • New animation.currentFrame property to get current animation frame (deltakosh)
  • New animation.floatInterpolateFunction property to define custom float interpolation function (deltakosh)
  • New animation.vector3InterpolateFunction property to define custom vector3 interpolation function (deltakosh)
  • New animation.quaternionInterpolateFunction property to define custom quaternion interpolation function (deltakosh)

1.7.3

Core Engine

Updates

Bug fixes

  • "use strict" is no more included in minified version (deltakosh)
  • Fixing a bug with MSGesture with IE11 on Windows 7 (deltakosh)

1.7.0

Core Engine

Major updates

Updates

  • New light.excludedMeshes property to exclude specific meshes from light computation (deltakosh)
  • New texture.anisotropicFilteringLevel property to define the anisotropic level of a texture (deltakosh)
  • New mesh.infiniteDistance property to make a mesh static from the point of view of the camera (deltakosh)
  • New scene.customRenderTargets property to add our own renderTargetTexture (deltakosh)
  • Transparent meshes are sorted back to front (deltakosh)

Bug fixes

  • Fixing a bug when cloning mirrorTexture (deltakosh)

1.6.0

Core Engine

Major updates

Updates

Bug fixes

  • Fixing a memory leak when releasing textures (simonferquel)

1.5.3

Core Engine

Updates

  • New lockedTarget for freeCamera in order to allow cameras to track moving targets (deltakosh)
  • Cameras now supports animations (see https://www.babylonjs.com/index.html?TRAIN) (deltakosh)
  • New angularSensibility property for cameras (deltakosh)
  • New upVector property for cameras. Cameras are now not limited to a (0, 1, 0) up vector (deltakosh)
  • New parent property for cameras and lights: Lights, cameras and meshes can be related. For instance a camera can now be attached to a mesh as child and vice versa (deltakosh)

Bug fixes

  • Fixing a bug when exporting materials from Blender (deltakosh)
  • Fixing an issue with IE11 for RT (deltakosh)
  • Fixing an issue with looping animations (deltakosh)

1.5.2

Core Engine

Updates

  • New renderingGroupId for SpriteManager (deltakosh)
  • BoundingBox and BoundingSphere are prepared with an identity matrix during construction (deltakosh)

Bug fixes

  • Fixing a bug preventing wireframe to be displayed (deltakosh)
  • Fixing an issue with last IE update (deltakosh)

1.5.1

Core Engine

Updates

  • Massive update of typescript files (jroblak)

Bug fixes

  • Fixing an issue with SceneLoader.ImportMesh (nicolas-obre)
  • Fixing an issue with sprites rendering when no mesh is present (deltakosh)

1.5.0

Core Engine

Major updates

  • New DeviceOrientationCamera that supports W3C DeviceOrientations events (deltakosh)
  • Incremental loading support for meshes and textures (deltakosh)
  • New API online page to convert .babylon files to .incremental.babylon files (pierlag)
  • New mesh.renderingGroupId and particleSystem.renderingGroupId properties to support rendering layers (deltakosh)

Updates

  • New predicate parameter for scene.pick function in order to be able to select pickable meshes (deltakosh)
  • New mesh.refreshBoundingInfo() method (deltakosh)
  • New onAnimationEnd parameter for animations (deltakosh)

1.4.3

Core Engine

Updates

  • New mesh.setLocalTranslation and mesh.getLocalTranslation functions (deltakosh)
  • New matrix.setTranslation function (deltakosh)
  • mesh.rotation and mesh.rotationQuaternion are now two separated functions (deltakosh)

1.4.2

Core Engine

Bug fixes

  • Fixing an issue with scene.executeWhenReady (deltakosh)

1.4.1

Bug fixes

1.4.0

Core Engine

Major features

  • Bones support (deltakosh). Bones and animated bones are now supported. They can cast shadows. Bones can be exported from Blender or from FBX
  • Offline support (davrous. You can specify to offline assets (scene and textures) to a local IndexedDB. Assets are then loaded once until you change the version on a server-side manifest
  • N-Level octrees (deltakosh):

Updates

  • Adding dispose() function and a disposeWhenFinishedAnimating property to sprites (Cyle)
  • Adding a applyTransform() function to meshes in order to bake a specific transformation into vertices (deltakosh)
  • Adding setPivotMatrix() and getPivotMatrix() to meshes to define pivot matrix (deltakosh)
  • Mesh.CreateCylinder now takes two diameters as parameters to be able to create cone (deltakosh)
  • New material.Clone function (deltakosh)

Bug fixes

  • scene.IsReady() is more robust now and can be used to detect when the scene is EFFECTIVELY ready :) (deltakosh)
  • Fixing animations timing. Animations should be in sync now (deltakosh)
  • Fixing a bug with orthographic camera (deltakosh)
  • Fixing a bug with attachControl() function (deltakosh)
  • Fixing a bug with scene.pick() function (deltakosh)

1.3.2

Core Engine

  • Fixing a bug with camera.detachControl

1.3.0

Core Engine

  • Selection octrees
  • Breaking changes: Meshes now use multi vertex buffers (one for each attribute) instead of a big one. This is for more flexibility. The .babylon file format has changed accordingly (no more .vertices property on meshes but .positions, .normals, .colors, .uvs, .uvs2)

1.2.1

Core Engine

  • Support for PointerLock ()
  • StandardMaterial now supports per-vertex color
  • Blender exporter supports per-vertex color

1.2.0

Core Engine

  • Major rework of the API to remove GC pressure.
  • FreeCamera: Support for QWERTY keyboards
  • New 3D charting demo

1.1.0

Core Engine

  • Shadow Maps and Variance Shadow Maps
  • Shadows Maps and animations are now exported from Blender
  • Hand.js is no longer required for ArcRotateCamera
  • ArcRotateCamera support pinch/zoom gesture on IE

1.0.10

Core Engine

  • Using typed arrays for Matrix
  • Improving IE11 support
  • Support for new mesh primitives : Torus and cylinder

1.0.9

Core Engine

  • Orthographic camera

1.0.8

Core Engine

  • Adding keyboard support to ArcRotateCamera
  • Starting to use git tag

1.0.7

Core Engine

  • New demo: Worldmonger
  • Improved IE shaders

1.0.6

Core Engine

  • Dynamic meshes
  • Skybox
  • Support for high-DPI displays
  • Height maps

1.0.5

Core Engine

  • Adding color tint for sprites and layers

1.0.4

Core Engine

  • Various optimizations
  • Fog
  • TypeScript support

1.0.3

Core Engine

  • Video textures
  • Normal map (bump)

1.0.2

Core Engine

  • Spot lights
  • Hemispheric lights