- 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. overview, tutorial (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. overview (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 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)
- Added
- 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
- 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)