What's New
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
andboundingBoxRenderer.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 thetexturePath
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 toAssetsManager
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 toScene
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 theEffectLayer
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
andScreenSize
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
anda
outputs to theReflectionTexture
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
andlocalAxesSize
(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
tostlSerializer.CreateSTL
(aWeirdo)
Navigation
- export/load prebuilt binary navigation mesh (cedricguillemet)
- get next path step point for an agent (cedricguillemet)
Materials
- Added the
roughness
andalbedoScaling
parameters to PBR sheen (Popov72) - Updated the energy conservation factor for the clear coat layer in PBR materials (Popov72)
- Added the
transparencyMode
property to theStandardMaterial
class (Popov72) - Added to
FresnelParameters
constructor options and equals method (brianzinn) - Added
AddAttribute
toCustomMaterial
andPBRCustomMaterial
(Popov72) setTexture
andsetTextureArray
fromShaderMaterial
take now aBaseTexture
as input instead of aTexture
, allowing to pass aCubeTexture
(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 theBackgroundMaterial
class (Popov72) - Added support for lightmaps in unlit PBR materials (Popov72)
- Added
muted
setting toVideoTexture
, Fixed autoplay in Chrome (simonihmig) - Added
waveCount
toWaterMaterial
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 ifopacityTexture
is present (metaobjects) - Added
hasTexture
override inMultiMaterial
(Vampiro)
Meshes
- Added
MeshBuilder.CreateCapsule
andMesh.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
andselectend
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 theTexture
to avoid deformations when rotating the texture with non-uniform scaling (Popov72) - Added
Texture.ForceSerializeBuffers
(aWeirdo)
Audio
- Added support of
metadata
inSound
class. (julien-moreau) - Added
currentTime
property to theSound
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 theControl
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
andPBRCustomMaterial
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 havetouch-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 aTransformNode
as a source for spatial sound (Poolminer) - Fixed bug when using
ShadowOnlyMaterial
with Cascaded Shadow Map andautoCalcDepthBounds
istrue
(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
tofalse
(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 toFollowCamera.meshTarget
to not be in conflict withTargetCamera.target
(Deltakosh)EffectRenderer.render
now takes aRenderTargetTexture
or anInternalTexture
as the output texture and only a singleEffectWrapper
for its first argument (Popov72)- Sound's
updateOptions
takesoptions.length
andoptions.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 nowISceneLoaderProgress
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 tofalse
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 itsvalue
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
andSoundTrack.AddSound
were renamed toSoundTrack.removeSound
andSoundTrack.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
- Node Material and Node material editor Doc (Deltakosh / TrevorDev)
- WebGPU preliminary support Doc (Sebavan)
- Added the "Cascaded Shadow Mapping" (CSM) shadow rendering technique (Popov72 (initiated by lockphase))
- .basis texture file format support Doc (TrevorDev)
- Navigation mesh and crowd of moving agents Doc (CedricGuillemet)
- Added Points Cloud Particle System Doc (JohnK)
- Classes decoupling ending up with smaller bundle sizes Blog (Deltakosh)
- Babylon.js controls Doc (Sebavan / Deltakosh)
- Massive WebXR updates (See below) (RaananW / TrevorDev)
- Added support for Offscreen canvas Doc (Deltakosh)
- Added support for multiple canvases with one engine Doc (Deltakosh)
- Added useReverseDepthBuffer to Engine which can provide greater z depth for distant objects without the cost of a logarithmic depth buffer (BenAdams)
- Screen space reflections post-process Doc (julien-moreau)
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 theGlowLayer
(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
andBABYLON.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 theshadowMinZ
andshadowMaxZ
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
andfragmentSource
parameters toShaderMaterial
(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
andSSAO2RenderingPipeline
(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
andTools.CreateScreenshotUsingRenderTargetAsync
(mehmetoguzderin) - Added
Color3.toHSV()
,Color3.toHSVToRef()
andColor3.HSVtoRGBToRef()
(Deltakosh) - Added
ShadowGenerator.onAfterShadowMapRenderObservable
andShadowGenerator.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 nowTransformNode
instead ofAbstrachMesh
(Popov72) - Added the
useVertexAlpha
options toMeshBuilder.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 inShaderMaterial
(Popov72) - Added
depthFunction
new property toMaterial
base class (Popov72) - Added
setCompressedTextureExclusions
method toEngine
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 makeSound
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
andContainer.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)
Navigation Mesh
- Added moveAlong function to cast a segment on mavmesh (CedricGuillemet)
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
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 coordinatesbu
andbv
being returned is actuallybv
andbw
. (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 customfilesList
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 cloneshaderPath
andoptions
properties (Popov72) - Prevent an infinite loop when calling
engine.dispose()
in a scene with multipleSoundTracks
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 toDeepCopier.DeepCopy
cloningparent
(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 aidealWidth
oridealHeight
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
istrue
(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
andTools.ExtractMinAndMax
are now ambiant functions (available onBABYLON.extractMinAndMaxIndexed
andBABYLON.extractMinAndMax
) (Deltakosh)Tools.QueueNewFrame
was removed in favor ofEngine.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
andMaterialHelper.BindLights
do not need the usePhysicalLight anymore (Sebavan)Mesh.bakeTransformIntoVertices
now preserves child world-space transforms(drigax)- Removed
setTexturesToUse
andsetCompressedTextureExclusions
from Engine. (bghgary)
4.0.0 (May 1st 2019)
Associated release: https://github.com/BabylonJS/Babylon.js/releases/tag/4.0.3
Major updates
- New fancy forum! (Deltakosh)
- Inspector v2.0. Dev log (Deltakosh)
- Added support for parallel shader compilation (Deltakosh)
- Added Object Based Motion Blur post-process (julien-moreau)
- Added support for ammo.js as a physics plugin (Composite objects, motors, joints) (TrevorDev)
- Added support for soft bodies, which are 3D softbody, 2D cloth and 1D rope, in ammo.js physics plugin (JohnK)
- Added support for Convex Hull Impostor using ammo.js plugin (MackeyK24)
- Added
AmmoJSPlugin
scene file loader (MackeyK24)
- Added support for WebXR (TrevorDev)
- Added
customAnimationFrameRequester
to allow sessions to hook into engine's render loop (TrevorDev) - Added
Camera customDefaultRenderTarget
to allow cameras to render to a custom render target (e.g., XR framebuffer) instead of the canvas (TrevorDev) - Added webXR camera which can be updated by a
webXRSession
(TrevorDev) - Added
webXRSessionManager
to bridgexrSession
to babylon's camera/engine (TrevorDev) - Added
webXRExperienceHelper
to setup a default XR experience (TrevorDev) - Added
WebXREnterExitUI
andWebXRManagedOutputCanvas
classes to configure the XR experience (TrevorDev) - Added
WebXRInput
to manage controllers for the XR experience (TrevorDev) - Control WebXR camera rotation using parent container (TrevorDev)
- Added
- GUI:
- Added
control.useBitmapCache
to optimize re-rendering of complex controls by keeping a cached version (Deltakosh) - Added new ImageBasedSlider to let users customize sliders using images (Deltakosh)
- Added support for clipboard events to let users perform
cut
,copy
andpaste
events (Saket Saurabh) - Added new ScrollViewer with mouse wheel scrolling for larger containers to be viewed using Sliders (JohnK and Deltakosh)
- Moved to a measure/draw mechanism (Deltakosh)
- Added support for nine patch stretch mode for images. (Deltakosh)
- Added invalidateRect to AdvancedDynamicTexture to improve perf for heavily populated GUIs, works with shadows (TrevorDev)
- Added
- Migrated the code to modules and deploy ES6 npm packages (Sebavan)
- Added TrailMesh class. Credit to furcatomasz (danjpar)
- Support rendering to a multiview outputRenderTargetTexture with multiview engine component to improve performance for XR scenarios (TrevorDev)
- PBR (Sebavan):
- Added clear coat
- Added anisotropy
- Added sheen
- Added sub-surface
- Added energy conservation through multiscattering BRDF
- Added Inspector Debug Mode
- Added Smith Height Correlated Visibility term (white paper)
- Added SH Harmonics
- Added STL exporter (pryme8)
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 andmaterials
array of theScene
. 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 aMesh
. As a consequence, the order of the element within this array might change during a removal. - Stopped calling
Array.splice
on thescene.meshes
array and on theengine._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 theScene
constructor options. When set to true, eachScene
isntance will have and will keep up-to-date a map of geometry peruniqueId
. 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 theScene
constructor options. When set to true, eachMaterial
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 theScene
constructor options. When set to true, eachMesh
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 theScene
, following the same model asblockMaterialDirtyMechanism
. This is to avoid callingScene.freeActiveMeshes
andScene.freeRenderingGroups
for each disposed mesh when we dispose several meshes in a row. Enable by settingblockfreeActiveMeshesAndRenderingGroups
totrue
just before disposing the meshes, then set it back tofalse
just after. - Prevented code from doing useless and possible time consuming computation when disposing the
ShaderMaterial
of aLinesMesh
. - Make a better use of the
isIdentity
cached value within aMatrix
. - 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
andbutton.textBlock
to simplify access to button internal parts (Deltakosh) - Added
slider.displayThumb
to show/hide slider's thumb (Deltakosh) - Added
grid.rowCount
,grid.columnCount
andgrid.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
andinputText.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 morecoordinatesMode
'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
andStandardMaterial
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
andBoundingSphere
API and behavior for clarity and simplicity, removingBoundingBox
's methodsetWorldMatrix
and disallowing modification of the underlying world matrix except by callingreConstruct
orupdate
(barroij) - Make sure that
Material.markAsDirty
and all themarkXXXDirty
methods early out whenscene.blockMaterialDirtyMechanism
is true. (barroij) - Add updateUpVectorFromRotation to target camera to allow the up vector to be computed from rotation (TrevorDev)
- Added
wrap
boolean parameter toCreateBox
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 inRenderTargetTexture
(Sebavan)- Made onscreen joystick's canvas public (TrevorDev)
- Added
.serialize
and.Parse
functions inReflectionProbe
to retrieve reflection probes when parsing a previously serialized material (julien-moreau) - Added
clearGizmoOnEmptyPointerEvent
options andonAttachedToMeshObservable
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 fromlookAt
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 forFollowCamera
(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 forFollowCamera
(mrdunk) - Tweaked
MouseWheel
bindings forFollowCamera
orientations (mrdunk) - Added maximum and minimum limits for
FollowCamera
parameters (mrdunk) - Converted
ArcRotateCamera
to use newBaseCameraPointersInput
(mrdunk) - Added transparency support to
GlowLayer
(Sebavan) - Added option
forceDisposeChildren
tomultiMaterial.dispose
(danjpar) - Added
Pointer
bindings forFollowCamera
(mrdunk) - Added Inspector light gizmo with icons (TrevorDev)
- Added option
multiMultiMaterials
tomesh.mergeMeshes
(danjpar) - Exposed fallback camera distortion metrics option in
vrExperienceHelper
(TrevorDev) - Added
OnAfterEnteringVRObservable
towebVRHelper
(TrevorDev) - Added support for side by side and top/bottom VR videos in the video dome (Sebavan)
- Added unit tests for
BaseCameraPointersInput
andArcRotateCameraPointersInput
(mrdunk) - Prevented
onActiveCameraChanged
from being fired when rendering rig cameras (TrevorDev) - Added
MeshExploder
class (danjpar) - Enabled
Observable
s 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
toPBRMaterialBase
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 asCubeTexture
s (Dennis Dervisis) - Added
EquiRectangularCubeTextureAssetTask
to be able to loadEquiRectangularCubeTexture
s 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 ofMesh
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
- Set an override mesh on skinned meshes instead of reparenting to the
- 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
- Added the Ocean post-process (julien-moreau)
Materials Library
- Added the
cameraOffset
vector property in theSkyMaterial
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 whenupVector
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
usingMesh
as base type, causing type-checking problems withAbstractMesh
(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 ofpivotPosition
(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) inrebuildAnglesAndRadius
(sable) - Fixed
ArcRotateCamera
rebuildAnglesAndRadius
whenupVector
modified (sable) - Fixed code branch, that does not try to (re)load an
EquiRectangularCubeTexture
/HDRCubeTexture
when the caching returns an empty or corruptInternalTexture
(Dennis Dervisis) - Added error event listener (bubbling up the
onError
callback chain) in case anEquiRectangularCubeTexture
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 aRay
is checked instead of extending theBoundingInfo
accordingly (barroij) - Added an
InstancesLinesMesh
class used to create instance ofLinesMesh
so that each instance can have its ownintersectionThreshold
value (barroij) - Fixed the
LineEdgesRenderer
used for edge rendering ofLinesMesh
to properly handleLinesMesh
s made of disconnected lines and made it work for instance ofLinesMesh
(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 arereadonly
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 theSolidParticleSystem
(barroij) - Updated picking so that when the picked Mesh is a
LinesMesh
, the index of the picked line is returned in thefaceId
property of thePickingInfo
, as we do with face index the pickedMesh
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 ifWebRequest.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 checkrigCameras
so thatviewMatrix
updates forrigCameras
can notify their parent (TrevorDev) - Properly handled unindexed
LinesMesh
(rendering and picking) (barroij)
Loaders
- Added missing
loadedAnimationGroups
toMeshAssetTask
(bghgary) - Added missing
linkTransformNode
toBabylonFileLoader
(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
toDatabase.open
(Deltakosh) - Renamed
scene.database
toscene.offlineProvider
(Deltakosh) - Removed
BoundingBox.setWorldMatrix
and changedBoundingBox.getWorldMatrix
to return aDeepImmutable<Matrix>
(barroij) - Changed
Matrix
's accessorm
and methodstoArray
andasArray
to return aDeepImmutable<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 byuseExponentialShadowMap
)shadowGenerator.useBlurVarianceShadowMap
(superceded byuseBlurExponentialShadowMap
)
- The glTF loader now creates
InstancedMesh
objects when two nodes point to the same mesh (bghgary) - The glTF loader now creates
TransformNode
objects instead ofMesh
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 meshTransformNode
objects do not raiseonMeshLoaded
events
- Note: The root node is still a
- Renamed
xAxisMesh
,yAxisMesh
, andzAxisMesh
ofAxesViewer
toxAxis
,yAxis
, andzAxis
respectively and changed return to aTransformNode
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
toRay.unprojectRayToRef
instance method to decrease class coupling (Sebavan) - Moved
Material.ParseMultiMaterial
toMultiMaterial.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 toshouldExportNode
(kcoley) - Changed
PhysicsHelper
method parameters for event calls (bobalazek)
3.3.0
Major updates
- Documentation
- Entire codebase is now documented. API documentation
- GUI
- New GUI 3D controls toolset. Complete doc + demos (Deltakosh)
- New GUI control: Grid (Deltakosh)
- New GUI control: InputPassword (theom)
- New GUI container SelectionPanel (JohnK)
- 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
andheightRange
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
andmaxInitialRotation
. 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
andpreview
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
, addedTextWrapping.Ellipsis
asTextBlock.wordWrapping
possible value (adrientetar) - New vertical mode for sliders in 2D GUI. Demo (Saket Saurabh)
- Added
isEnabled
anddisabledColor
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
andParse
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
andlodGenerationOffset
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 acceptsMediaStream
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 toscene.beginWeightedAnimation
,scene.beginAnimation
,scene.stopAnimation
, andanimatable.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
andonMaterialLODsLoadedObservable
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
onPBRMaterial
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
byonBeforeRenderingGroupObservable
andonAfterRenderingGroupObservable
to prevent the stage check (sebavan) - Replacing
IActiveMeshCandidateProvider
and the according scene setter by a set of custom predicatesscene.getActiveMeshCandidates
,scene.getActiveSubMeshCandidates
,scene.getIntersectingSubMeshCandidates
andscene.getCollidingSubMeshCandidates
(sebavan). This helps opening more customization to everybody.
3.2.0
Major updates
- Support for GPU particles. Demo here (deltakosh)
- Improved building process: We now run a full visual validation test for each pull request. Furthermore, code comments and what's new updates are now mandatory (sebavan)
- Babylon.js now uses Promises in addition to callbacks. We created several
xxxAsync
functions all over the framework (SceneLoader.AppendAsync
for instance, which returns a Promise). A polyfill is also integrated to support older browsers (deltakosh) - Introduced texture binding atlas. This optimization allows the engine to reuse texture bindings instead of rebinding textures when they are not on constant sampler indexes (deltakosh)
- New AnimationGroup class to control simultaneously multiple animations with different targets (deltakosh)
WebVRCamera
: added basic support for Daydream and Gear VR (brianzinn)- Introduced Projection Texture on SpotLight. Demo here (lostink)
- Introduced support for local cubemaps. Demo here (deltakosh)
- Added VideoDome class to easily support 360 videos. Demo here (DavidHGillen)
- Added GlowLayer to easily support glow from emissive materials. Demo here (sebavan)
- New AssetContainer class and loading methods (trevordev)
- Added depth of field, MSAA, sharpening, chromatic aberration and grain effect to the default pipeline (trevordev)
- Added support for animation weights. Demo here (deltakosh)
- Added sub emitters for particle system which will spawn new particle systems when particles die. Demo here (IbraheemOsama)
- New Babylon.js and glTF exporter for Autodesk Maya (Noalak)
- New glTF exporter for Autodesk 3dsmax (Noalak)
- New glTF serializer. You can now export glTF or glb files directly from a Babylon scene (kcoley)
- Physics - Latest production version of Oimo.js is being used - 1.0.9 (RaananW)
- Introduces PCF and PCSS shadow support in WebGL 2 (sebavan))
- Introduces PBR Specular Anti Aliasing support. Demo here (sebavan))
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
andonAfterCameraTeleport
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 itstasks
list from all successfully loaded tasks (deltakosh)- Added documentation to
WebVRCamera
andVRExperienceHelper
(trevordev) - Introduced
isStroke
onHighlightLayerOptions
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
andcreateDefaultLight
functions toScene
(bghgary) - Viewer:
initScene
andinitEngine
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
anduseStandingMatrixAsync
(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
andVertexBuffer
. (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
andParse
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 newsetPreTransformMatrix
to reproduce the sometimes-needed behavior of the previoussetPivotMatrix
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
andCamera
(kaysabelle) - Fix bug with glTF animation when animating bone scale. (bghgary]
Breaking changes
- Removed the unused
PostProcessRenderPass
class and extendedpostProcessingRenderingEffect
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 useBone.scale
to achieve the same effect (deltakosh)- Vector3 & Vector4:
MinimizeInPlace
has been renamed tominimizeInPlace
MaximizeInPlace
has been renamed tomaximizeInPlace
3.1.0
Major updates
- Added VRExperienceHelper to create WebVR experience with 2 lines of code. Documentation (davrous, TrevorDev)
- Added BackgroundMaterial. Documentation (sebavan)
- Added EnvironmentHelper. Documentation (sebavan)
- Added support for WebGL context lost and restored events. Documentation (deltakosh)
- Added support for non-pow2 textures when in WebGL2 mode (deltakosh)
- Engine can now be initialized with an existing WebGL context (deltakosh)
- Introduced behaviors. Documentation (deltakosh)
- Added support for WebGL Occlusion queries. Documentation (Ibraheem Osama)
- New behaviors for ArcRotateCamera. Documentation
- New InputText for Babylon.GUI. Documentation (deltakosh)
- New VirtualKeyboard for Babylon.GUI. Documentation (deltakosh / adam)
- Added support for depth pre-pass rendering. Documentation (deltakosh)
- Added support for
material.separateCullingPass
. Documentation (sebavan) - Added support for Windows Motion Controllers (Lewis Weaver)
- Added support for Particle animation in ParticleSystem. Documentation (Ibraheem Osama)
- More robust TypeScript code with strictNullChecks, noImplicitAny, noImplicitThis and noImplicitReturns compiler options (deltakosh and RaananW)
- Introduced
NullEngine
which can be used to use Babylon.js in headless mode. Documentation (deltakosh) - New instrumentations tools. Documentation (deltakosh)
- Complete rework of Unity3D exporter. Documentation (MackeyK24)
- Introducing the BabylonJS viewer, an HTML-based 3D/model viewer, with Babylon at its core. Documentation (RaananW)
- Full NPM support for BabylonJS and its modules, based on UMD and including Typings. BabylonJS on npm (RaananW)
Updates
- Introduced
TransformNode
class as a parent ofAbstractMesh
. 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
andshadowGenerator.removeShadowCaster
helper functions (deltakosh) - Several inspector improvements (temechon)
- New observables for actions:
onBeforeExecuteObservable
for all actions andonInterpolationDoneObservable
forInterpolateValueAction
(deltakosh) - New observables for gamepads:
onButtonDownObservable
,onButtonUpObservable
,onPadDownObservable
,onPadUpObservable
(deltakosh) - New
camera.storeState()
andcamera.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
andcamera.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
andLineMesh
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 ofscene.gamepadManager
DynamicFloatArray
,MapTexture
andRectPakingMap
were removed because there were not used anymoreIAssetTask
was removed in favor ofAbstractAssetTask
class- WebVR 1.0 support removed.
3.0.0
Major updates
- WebGL2 context support. WebGL2 is now used instead of WebGL 1 when available. More info here (deltakosh)
- Complete WebVR 1.1 support including controllers for HTC Vive and Oculus. More info here (raanan & davrous)
- Complete rewrite of PBRMaterial. Introduced two new helper materials:
pbrMetallicRoughnessMaterial
andpbrSpecularGlossinessMaterial
. Demo - More info here (Sebastien Vandenberghe) - Support for Morph Targets. More info here (deltakosh)
- New Babylon.GUI to create user interface (compatible with WebVR). More info here (deltakosh)
- Added support for Exponential Shadow maps to replace Variance Shadow maps. more info here Demo#1 Demo#2 (deltakosh)
- Support for Vertex Array Objects (deltakosh)
- Support for Uniform Buffer Objects (CraigFeldspar)
- New SSAO technique, using MultiRenderTargets (CraigFeldspar)
- Support for multisample render targets. Demo (deltakosh)
- New DebugLayer. Doc (temechon)
- New
VideoTexture.CreateFromWebCam
to generate video texture using WebRTC. Demo (Sebastien Vandenberghe) / (deltakosh) - New Facet Data feature (jerome)
- babylon.fontTexture.ts was moved from babylon.js to canvas2D (nockawa)
- Multi-platform Compressed Textures for Desktops & Mobile Devices with fall back. Batch (dos) scripts to convert entire directories of .jpg's & .png's Doc (jcpalmer)
- All deprecated functions and properties were removed (deltakosh)
- New build system based on workloads. More info here (deltakosh)
- New
Cell Shading
material added intoMaterials Library
Demo (Julien Moreau-Mathis) - New kernel based blur. Demo (deltakosh)
- New highlights postprocess (deltakosh)
- New DefaultRenderingPipeline to enable image processing effect. Demo (deltakosh)
- New image processing postprocess. Doc here (deltakosh)
- Spector.js New WebGL debugger: more info here (Sebastien Vandenberghe)
- New blur mode for mirrors. Demo (deltakosh)
Updates
- Added
syncBoneWithImpostor()
andsyncImpostorWithBone()
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
andboundingBox.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()
andEffect.getFragmentShaderSource()
now returns the effective shader code (including evaluation of #define) (deltakosh)- GroundMesh :
getHeightAtCoordinates()
,getNormalAtCoordinates()
andgetNormalAtCoordinatesToRef()
can now work with rotated grounds (jerome) GroundMesh
,facetData
andSolidParticleSystem
improvement in normal computations (jerome)- Added
AbstractMesh.addRotation()
(jerome) - Added
Quaternion.RotationQuaternionFromAxis()
andQuaternion.RotationQuaternionFromAxisToRef()
(jerome, thanks to abow) - Added parameters
uvs
andcolors
toMeshBuilder.CreateRibbon()
(jerome) - Added parameters
frontUVs
andbackUVs
to all the methodsMeshBuilder.CreateXXX()
supportingsideOrientation
(jerome) - Added
Curve3.CreateCatmullRomSpline()
(jerome and BitOfGold) - Added the optional parameter
colorFilter
toCreateGroundFromHeightMap()
(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
andPOINTERDOUBLETAP
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 intoStandardRenderingPipeline
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
inaddShape()
(jerome) - Fixed SPS particle access
start
index when used withsetParticles(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. CallattachControl()
inside a user-interaction callback to start sending frames to the VR displaysetPositionOffset
has been used to change the position offset. it is now done usingcamera.position
- Ray :
show
has been removed. Use newRayHelper.show()
insteadhide
has been removed. Use newRayHelper.hide()
instead
- AbstractMesh:
onPhysicsCollide
has been removed. Usemesh.physicsImpostor.registerOnPhysicsCollide()
insteadsetPhysicsState
has been removed. Usenew PhysicsImpostor()
insteadgetPhysicsMass
has been removed. Usemesh.physicsImpostor.getParam("mass")
insteadgetPhysicsFriction
has been removed. Usemesh.physicsImpostor.getParam("friction")
insteadgetPhysicsRestitution
has been removed. Usemesh.physicsImpostor.getParam("restitution")
insteadupdatePhysicsBodyPosition
has been removed. Changes are synchronized automatically now
- Mesh:
updateVerticesDataDirectly
has been removed. Usemesh.updateVerticesData()
instead
- SsaoRenderingPipeline:
getBlurHPostProcess
has been removed. Blur post-process is no more requiredgetBlurVPostProcess
has been removed. Blur post-process is no more required
- Scene:
setGravity
has been removed. Usescene.getPhysicsEngine().setGravity()
insteadcreateCompoundImpostor
has been removed. Use PhysicsImpostor parent/child instead
- ActionManager:
LongPressDelay
andDragMovementThreshold
are now respectively Scene.LongPressDelay and Scene.DragMovementThreshold
- HDRRenderingPipeline:
HDRRenderingPipeline
has been removed because it is deprecated. It is now replaced byStandardRenderingPipeline
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 bySceneSerializer
(deltakosh) - Added
scene.multiPick
andscene.multiPickWithRay
to return an array of pickedMesh objects (deltakosh) - Added
Effect.GetVertexShaderSource()
andEffect.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 calledCreateScreenshotUsingRenderTarget
(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
andcamera.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()
andMeshBuilder.CreateTiledGround()
(jerome) - Fixed cross vector calculation in
_computeHeightQuads()
that affected all theGroundMesh.getHeightAtCoordinates()
andGroundMesh.getNormalAtCoordinates()
methods (jerome) - Fixed
Mesh.CreateDashedLines()
missinginstance
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 usebuffer.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). ThePolygonMeshBuilder
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()
andMeshBuilder.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 asMeshBuilder.CreateLines()
now callsMeshBuilder.CreateLineSystem()
scene.onNewXXXAdded
andscene.onXXXRemoved
callbacks were removed and replaced byscene.onNewXXXAddedObservable
andscene.onXXXRemovedObservable
Material.dispose
does not dispose textures by default. You have to callmaterial.dispose(false, true)
to get the previous behavior.SSAORenderingPipeline.getBlurHPostProcess
andSSAORenderingPipeline.getBlurVPostProcess
. The SSAO rendering pipeline doesn't use standard blur post-process anymore. A bilateral blur post-process is used instead.Engine.bindBuffers
is nowEngine.bindBuffersDirectly
(benaadams)Engine.bindMultiBuffers
is nowEngine.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 thangl.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
- Sponza demo
- Support for procedural cube textures Demo here (deltakosh)
- New UniversalCamera which support keyboard, mouse, touch and gamepad (davrous)
- Point lights shadow mapping. Demo here (deltakosh)
- Introducing Materials Library (deltakosh)
- Water material: //doc.babylonjs.com/toolsAndResources/assetLibraries/materialsLibrary/waterMat. Demo here (julien-moreau)
- Fire material: //doc.babylonjs.com/extensions/fire. Demo here (julien-moreau)
- Normal material: //doc.babylonjs.com/extensions/normal (temechon)
- Lava Material: //doc.babylonjs.com/extensions/lava (temechon)
- PBR Material: //doc.babylonjs.com/extensions/pbr (deltakosh)
- Fur Material: //doc.babylonjs.com/extensions/Fur. Demo here (julien-moreau)
- Introducing Procedural textures Library (meulta
- New cache mechanism for StandardMaterial (deltakosh)
- New Solid Particle System Demo here (jerome)
- New
StandardMaterial.lightmapTexture
which can be controlled withStandardMaterial.useLightmapAsShadowMap
(deltakosh) - Support for reflection probes. See documentation here (deltakosh)
- New serializers folder to host .babylon serializers (deltakosh)
- New .obj serializer (BitOfGold)
- Sprites now can be picked and can use actions (deltakosh)
- New
Mesh.CreatePolyhedron()
method (jerome) - New
Mesh.CreateIcoSphere()
method Demo here (G'kar) - Introducing babylon.core.js (deltakosh)
- Introducing AnimationRanges for Skeletons and Animations (deltakosh)
- Support for glTF files [loader](https://github.com/BabylonJS/Babylon.js/tree/master/dist/preview release/loaders) (julien-moreau)
Updates
- Audio files are now saved for offline access (davrous)
- New
CubeTexture.CreateFromImages()
(deltakosh) - Bounding info can be locked and updated (
bb.isLocked
andbb.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
andActionManager.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 addedAnimation.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
andCreateLathe
(jerome) - Slice feature in
MeshBuilder.CreateSphere()
(jerome) closed
parameter inMeshBuilder.CreateLathe()
(jerome)cap
parameter inMeshBuilder.CreateLathe()
(jerome)diameter
,hasRings
,enclose
parameters inMeshBuilder.CreateCreateCylinder()
(jerome)- added
getNormalAtCoordinates()
andgetNormalAtCoordinatesToRef()
methods inMeshBuilder.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
andcloseArray
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 toTools.IsExponentOfTwo()
(deltakosh)Tools.GetExponantOfTwo()
renamed toTools.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
- Blender can now bake Procedural textures & Cycles materials. Plus more. See documentation here (Palmer-JC)
- Meshes can now be attached to bones. See documentation here and sample here (deltakosh)
- HDR Rendering pipeline. See demo here (julien-moreau)
- New rewored StandardMaterial.isReady for better memory usage and performance (deltakosh)
- Revamping of FBX exporter. Now supports animations and bones (simonferquel, deltakosh)
- StandardMaterial.useGlossinessFromSpecularMapAlpha to use specular map alpha as glossiness level (deltakosh)
- Added support for StandardMaterial.roughness. See demo here (deltakosh)
- OBJ loader. See demo here (Temechon)
- EdgesRenderer. See demo here (deltakosh)
- Actions Builder tool for 3dsmax exporter. More info here (julien-moreau)
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.ALPHACOMBINE, 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 asRotationFromAxis()
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, usedof_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
andBABYLON.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
andmesh.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()
andTools.GetDeltaTime()
are now functions hosted by the engine:engine.getFps()
andengine.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 forBABYLON.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
andMesh.applyDisplacementMapFromBuffer
(deltakosh) - New
Mesh.renderOutline
property to render outlines around a mesh (used withMesh.outlineColor
andMesh.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
- TypeScript port finished (davrous & deltakosh)
- Physics engine: new OIMO plugin (temechon)
- New demo: V8 engine (Michel Rousseau)
Updates
- Fixed ray creation when the devicePixelRatio is not equals to 1 (demonixis)
- New
mesh.registerAfterRender
andmesh.unregisterAfterRender
functions (deltakosh) - New
fragmentElement
parameter to define custom shader forBABYLON.ParticleSystem
constructor (deltakosh) - New
OnKeyDown
andOnKeyUp
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 withmesh.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 byBABYLON.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 byBABYLON.Mesh.Createground
andBABYLON.Mesh.CreateGroundFromHeightMap
. This object is optimized for collisions and rendering of grounds (!!!). A first feature is also includedGroundMesh.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
andscene.afterCameraRender
callbacks (deltakosh) - New custom functions for ParticleSystem:
startDirectionFunction
andstartPositionFunction
(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 usingTools.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 withMesh.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 usingscene.getBoundingBoxRenderer()
. This function returns aBABYLON.BoundingBoxRenderer
where you can definebackColor
,frontColor
andshowBackLines
(deltakosh) - New basic mesh:
BABYLON.Mesh.CreateTorusKnot
(deltakosh) - New
BABYLON.AnaglyphArcRotateCamera
andBABYLON.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
andonError
(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
- Virtual joysticks canera (davrous)
- Oculus Rift support (davrous), (simonferquel), (deltakosh)
- Support for DDS textures (deltakosh)
- Constructive solid geometries (CraigFeldspar)
- Importer plugin system (deltakosh)
- Filter postprocess (deltakosh)
- Convolution postprocess (deltakosh)
- Added Cheetah3d exporter (Calebsem)
- New
BABYLON.ShaderMaterial
object to simply create custom shaders (deltakosh) - See Custom shader - cell shading - New
BABYLON.VertexData
object to easily manipulates vertex attributes (deltakosh) - See VertexData
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()
andBABYLON.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()
toBABYLON.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
- Fixing multimat naming convention in Blender (deltakosh)
- Fixing mesh.clone (temechon)
- Fixing camera rotation export in blender (khmm12)
- Fixing opacity map bug (deltakosh)
- Fixing physics objects disposal (deltakosh)
- Using the hardware scaling when creating a ray (demonixis)
- *New demos
- Hill Valley
- Custom shader - cell shading
- Constructive solid geometries
- Postprocess - Convolution
- VertexData
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
andmesh.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
- Support for physics engine thanks to cannon.js (deltakosh)
- New sandbox tool (davrous)
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
- Support for "file://" moniker (davrous)
- Support for DAE (COLLADA) file format (gwenael-hagenmuller)
- Support for "empty" object type in Blender exporter (deltakosh)
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
- Support for lens flares (deltakosh)
- Support for multi-views (deltakosh)
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
- Support for postprocesses (deltakosh)
- New builtin postprocesses: Pass, Refraction, Blur, Black and White, Convolution (deltakosh)
- New builtin postprocess: FXAA (simonferquel)
- Online assets converter (pierlag)
Updates
- New features demos: POSTPROCESS - REFRACTION and POSTPROCESS - BLOOM
- Removing the unused depth buffer for postprocesses chains (simonferquel)
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
andBoundingSphere
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
andparticleSystem.renderingGroupId
properties to support rendering layers (deltakosh)
Updates
- New
predicate
parameter forscene.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
andmesh.getLocalTranslation
functions (deltakosh) - New
matrix.setTranslation
function (deltakosh) mesh.rotation
andmesh.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
- Support for Safari (deltakosh)
- Adding local transformations to Blender exporter (deltakosh)
- IndexedDB code refactoring to support simultaneous calls (davrous)
- Hardware scaling fix (Gwenaël Hagenmuller)
- Fixing a bug with sprites dynamic buffers (deltakosh)
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 adisposeWhenFinishedAnimating
property to sprites (Cyle) - Adding a
applyTransform()
function to meshes in order to bake a specific transformation into vertices (deltakosh) - Adding
setPivotMatrix()
andgetPivotMatrix()
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