Skip to main content

Changelog

All notable changes to this project will be documented in this file. See standard-version for commit guidelines.

4.0.1 (2021-11-25)#

Bug Fixes#

  • Cleaned up auto near/far plane auto adjust code so that the near plane gets moved away when zooming out. (17f037e)
  • Cleaned up regression when loading ZCAD files containing points materials. (92ebb71)
  • ES modules support (1d49056)
  • KinematicGroup was not calling super.bindItem(), which meant pointer events were not propagating from members to the group. (0e454dd)
  • Near and Far planes are now automatically adapted by 4 orders of magnitude. (7000916)
  • Parameter becomes dirty by setting 'clean' just prior to calling 'setDirty' to ensure a change in state. (21b1440)
  • When an OperatorOutput with mode OP_READ_WRITE is connected to a parameter, the parameter should be dirtied back to the first OP_WRITE index. (145c45a)
  • When deleting the VAO, ensure to detach the indexBuffer first. (991c2b1)

4.0.0 (2021-11-10)#

Version 4.0.0 is a major release for Zea Engine, as the entire codebase was ported and updated to work with TypeScript. This change caused a few breaking changes as TypeScript did not allow methods with any ambiguity in the signatures. Porting to TypeScript addressed a wide range or minor issues, picked up by the strict typing of TypeScript.

A second and very important benefit of the port to TypeScript, is to provide TypeScript support within client developed applications. We highly recommend you install the engine and its libraries as dependencies using npm, yarn or your favorite package manager, and import the engine into your code using the bundler tools that come with React or Svelte.

Old code#

Previously, our engine did not support module bundlers for a few technical reasons that have now been addressed. Instead, we recommended users load our engine using script tags, and then access the classes using a global variable. This approach had a few concerns and limitations.

  • The engine code was not installed in a clients application, creating a dependency on servers such as jsdeliver.
  • using incomplete version numbers, like the one shown below, caused automatic and silent updates to the engine on already deployed applications. These updates sometimes had unintended negative consequences.
  • Any other resources in the module bundle were not available, such as TypeScript definitions.
<script  src="https://cdn.jsdelivr.net/npm/@zeainc/zea-engine@3.11/dist/index.umd.js"></script>
// Load the classes out of the global variable.const { Scene, GLRenderer } = zeaEngine

New code#

npm install '@zeainc/zea-engine'
// Import the classes from the installed moduleimport { Scene, GLRenderer } from '@zeainc/zea-engine'

We will continue to implement improvements in the typings and inline documentation. Our commitment to our users from this version forward is to maintain a stable, backwards compatible and developer friendly API.

⚠ BREAKING CHANGES#

  • Canvas must now be nested under a another DOM element that it is resized to fit 100% This addresses a circular relationship where the canvas width and height must be calculated based on its parent, not on itself.
#rendererHolder {  width: 500;  height: 300;}#renderer {  width: 100%;  height: 100%;}
<div id="canvasHolder">  <canvas id="canvas"></canvas></div>
  • The Scene Tree now contains only TreeItems. This means items such as Kinematic Solvers can no longer be added as children in the tree.

  • Scene Settings has been removed, and its values migrated to either the Scene or the Viewport.

Old code

const color = new Color('#E5E5E5')scene.getSettings().getParameter('BackgroundColor').setValue(color)

New code

const color = new Color('#E5E5E5')renderer.getViewport().backgroundColorParam.value = color
  • VertexAttributes are now typed. Adding Vertex Attributes to geometries now requires that the user constructs the appropriate typed attribute, then adds it to the geometry.

Old code

const attr = geom.addVertexAttribute('foo', Vec3)

New code

const attr = new Vec3Attribute()points.addVertexAttribute('foo', attr)
  • VertexAttribute values are no longer initialized to zero and must be explicitly initialized.

New code

const line = new Lines()line.setNumVertices(2)line.setNumSegments(1)line.setSegmentVertexIndices(0, 0, 1)line.getVertexAttribute('positions').setValue(0, new Vec3(0, 0, 0))line.getVertexAttribute('positions').setValue(1, new Vec3(0, 0, 1))
  • VertexAttributes.length was removed and replaced with getCount

Old code

const attr = geom.addVertexAttribute('foo', Vec3)attr.length

New code

const attr = new Vec3Attribute()attr.getCount()
  • Assets are now loaded using the 'load' method instead of using the 'FilePath' parameters.

Old code

const objAsset = new ObjAsset('cow')objAsset.getParameter('FilePath').setValue('data/cow.obj')objAsset.on('loaded').then(() => {  renderer.frameAll()})

New code

const objAsset = new ObjAsset('cow')objAsset.load('data/cow.obj').then(() => {  renderer.frameAll()})
  • EnvMap are now loaded using the 'load' method instead of using the 'FilePath' parameters.

Old code

const envMap = new EnvMap()envMap.getParameter('FilePath').setValue('data/pisa-webp.zenv')envMap.on('loaded').then(() => {  ...})

New code

const envMap = new EnvMap('cow')envMap.load('data/pisa-webp.zenv').then(() => {  ...})
  • EnvMap are now loaded using the 'load' method instead of using the 'FilePath' parameters.

Old code

const image = new FileImage('albedo')image.getParameter('FilePath').setValue('data/steelplate1-unity/steelplate1_albedo.webp')image.on('loaded').then(() => {  ...})

New code

const image = new FileImage('albedo')image.load('data/steelplate1-unity/steelplate1_albedo.webp').then(() => {  ...})
  • getSelectable was renamed to isSelectable

Old code

const geomItem = new GeomItem('foo')geomItem.getSelectable()

New code

const geomItem = new GeomItem('foo')geomItem.isSelectable()
  • GLShader.getParamDeclarations was replaced with getMaterialTemplate getParamDeclarations would return an array of parameter descriptors, but now we return an instance of a Material from getMaterialTemplate instead.

Old code

  static getParamDeclarations() {    const paramDescs = super.getParamDeclarations()    paramDescs.push({      name: 'BaseColor',      defaultValue: new Color(1.0, 1.0, 0.5),    })    return paramDescs  }

New code

  static getMaterialTemplate(): Material {    const material = new Material()    return material  }
  • Registry.getBlueprintName was Registry.getClassName The registry, which stores all class definitions, and a mapping to the names they were registered under, can be used to retrieve the registered name of a class instance. Due to the strict typing of TypeScript, the interface needed to change. Instead of passing a class, you must pass the definition of the class to getClassName

Old code

  const myClassInst = ...  const className = Registry.getBlueprintName(myClassInst)  console.log("className:", className)

New code

  const myClassInst = ...  const className = Registry.getClassName(Object.getPrototypeOf(myClassInst).constructor)  console.log("className:", className)
  • The deprecated Group class was removed from the build. You must now use one of the specialized classes based on BaseGroup. e.g. SelectionSet, or KinematicGroup.

Features#

  • The engine and each library now logs it version to the console to let the user know the exact version of the engine or library that is installed. (8e35d43)
Zea Engine v4.0.0main.js:16 Registered lib '@zeainc/zea-ux' v4.0.0main.js:16 Registered lib '@zeainc/zea-kinematics' v4.0.1main.js:16 Registered lib '@zeainc/zea-potree' v4.0.0
  • The entire engine was ported to TypeScript with TypeDefinitions now being bundled in the package. (e949662)

  • auto-position the canvas and its parent (18b8a90)

  • The engine now provides various statically defined Materials. This simplifies the process of assigning materials to Geometries, as the parameters are exposed as public properties. (ae92d20)

  • zcad files when loading now construct statically defined materials when possible. (4acad4e)

  • Vec2, Vec3, Vec4, Quat, Color, Xfo, Mat3 and Mat4 parameters can now be encoded in zcad files. (1b17f76)

  • Parameters are now accessible directly on the class as public members.

  • Parameter values are now accessible as a property via getter and setter.

geomItem.getParameter('LocalXfo').setValue(xfo)

The new, more convenient access looks like the following.

geomItem.localXfoParam.value = xfo

New code

  const treeItem = new TreeItem()  const className = treeItem.getClassName()  console.log("className:", className)

Bug Fixes#

  • Cutaways are now applied to GeomData and Highlight rendering so surfaces that are both highlighted and cutaway, the highlight is also cutaway.
  • The GEOMITEM_INVISIBLE_IN_GEOMDATA is now being honored in the SimpleSurfaceShader and FlatSurfaceShader.
  • A bug in our resize throttling caused incorrect canvas size. (8d23702)
  • black flickering when resizing (10005fa)
  • FlatSurfaceShader now supports cutaways (9a46e49)
  • A bug in our resize throttling caused incorrect canvas size. (8d23702)
  • Cleaned up silly bug in renderer. Geometries were continuously being uploaded to the GPU. (c131a96)
  • Fixed loading Obj files that contain a reference to a mtl file. Fixed parsing mtl files. (b0ec4fe)
  • Fixed regression causing canvas size on to fix parent (9522192)
  • Fixed warning in React and error in Svelte by forcing the webWorkerLoader to assume a browser environment. (3308c13)
  • Implemented InstanceItem.clone so that as a tree is cloned, the instances are kept. (8981248)
  • Optimized memory used by the typescript build. Mostly by avoiding use of closures. (c84ef65)
  • Picking lines was broken after version 3.12.0. This is now addressed. (952dadb)
  • Removed dependency on 'semver' as it was not abe to build a browser bundle friendly version (1ce5a0d)
  • MaterialGroup updateMaterials is no longer async (0722336)
  • The Plane primitive faces were facing backwards which is now fixed. (d85a3d7)
  • Vec2,3 & 4 classes now more robustly check that constructor parameters are numeric (26a07fb)

3.12.5 (2021-11-03)#

Bug Fixes#

  • Vec2, Vec3, Vec4, Quat, Color, Xfo, Mat3 and Mat4 parameters can now be encoded in zcad files. (1b17f76)
  • A bug in our resize throttling caused incorrect canvas size. (8d23702)
  • Fixed loading Obj files that contain a reference to a mtl file. Fixed parsing mtl files. (b0ec4fe)
  • fixed regression causing canvas size on to fix parent (9522192)
  • Fixed warning in React and error in Svelte by forcing the webWorkerLoader to assume a browser environment. (3308c13)
  • Picking lines was broken after version 3.12.0. This is now addressed. (952dadb)
  • Removed dependency on 'semver' (1ce5a0d)

3.12.4 (2021-10-28)#

Bug Fixes#

  • Fixed warning in React and error in Svelte by forcing the webWorkerLoader to assume a browser environment. (3308c13)
  • Removed dependency on 'semver' (1ce5a0d)

3.12.2 (2021-10-27)#

Features#

Bug Fixes#

  • Prevent GLBaseRenderer from resizing buffers to zero width or height. (33983aa)

3.12.1 (2021-10-27)#

Features#

  • Added support for parsing 'Property_SInt32', 'Property_UInt32', 'Property_Float32', values from zcad files. (88b751e)
  • zcad files can now contain String Lists, used to store PMI Linked Entitiy paths. (39f43c6)
  • zcad files can now contain BooleanParameters (f4f0761)

Bug Fixes#

  • InstanceItem no longer tries to resolve an empty path. (7fc1274)
  • Prevent Safari iOS 14 from generating a float geom buffer. (9d48867)
  • Removed explicit 'position: relative' style value applied to the Canvas as it broke layout of sibling elements. (170c487)
  • revert change to calculating canvas width to not use devicePixelRatio (7df6bed)

3.12.0 (2021-10-19)#

Features#

  • 'FlatSurfaceShader' is now always rendering double-sided. (f295714)
  • The engine now supports loading zcad files that contain non-orthogonal and uniform scaling within the tree. (aaafa71)

Bug Fixes#

  • Always re-render the geomdata fbe after a pass updates. (b26f905)
  • as billboard atlas is being re-generated. Skip images that have not loaded. (684c712)
  • BillboardItems now correctly generate pointer events allowing mouse interactions on labels and billboards. (26c854f)
  • During rapid resizing, the canvas element would be drawn black. This is now fixed by throttling the frequency we can resize the WebGL buffers. (#501) (49d8aba)
  • FlatSurfaceShader now correctly masks the rasterized area when rendering geomdata and highlight buffer. (f8e76ae)
  • Highlighting of transparent textured items now works reliably. (7378f60)
  • Mouse interactions work correctly again on Safari. (df8d38e)
  • removing an item from the renderer when it was highlighted could cause corruption. (368c57f)
  • Safari now supports up to 8 passes. (bc1bd81)
  • textured geoms would continuously upload their data to the GPU as a 'clean' flag was not correctly being set. (7814aa7)
  • transparent geometries now correctly generate pointer events when the mouse or vr controller interacts with them. (3068acb)
  • when removing transparent items from the renderer, an exception was thrown as event listeners were unregistered. (#517) (ce15e4a)
  • zcad files can not contain BooleanParameters (f4f0761)

3.11.1 (2021-09-22)#

Bug Fixes#

  • InstanceItem no longer clones the children of the source tree item. This means that CADPart or CADAssembly should always be found under an InstanceItem, where before you might find a CADBody or a GeomItem.
  • To keep compatibility with version < 3.11.0, the plugins.umd.js script has been re-added to the build with a deprecation warning. This allows code to load the plugins file and generate a warning instead of an error.

3.11.0 (2021-09-15)#

Notes:#

For this release, the 'plugins' file is no longer being built and should be removed from your script tags. The plugins are now bundled into the engine library and so the plugins tag should be simply removed

<script src="https://cdn.jsdelivr.net/npm/@zeainc/zea-engine@3/dist/plugins.umd.js"></script>

Features#

  • ZeaEngine now supports bundlers such as webpack or rollup. (7696c09)

Bug Fixes#

  • Fixed memory leak in the GeomLibrary that caused memory to not be freed after loading zcad files. (3fda57a)
  • The Renderer would leak memory by not correctly releasing all handles to Materials, even after the material was removed from the Renderer. (9964438)
  • #482 - GeomData buffer can now be debugged on low end GPUs. (#483) (0ded2f3)
  • A regression was fixed that means that GLRenderer now honors the 'antialias' value if provided in the options object. (fa38277)
  • Addressed an error where an XR session is started before any pointer events are sent to the viewport, meaning that no 'Active' viewport was set. Now simply defaulting to the first viewport. (c5da48c)
  • Based on feedback from the Chromium team, we now use a DEPTH24_STENCIL8 texture and render buffer when rendering silhouettes (1d9c76a)
  • Culling worker now knows when an items visibility is false, and can ignore from culling. (4dbc545)
  • disabling Silhouettes on all low end devices to make Oculus Quest work. (2da7fad)
  • FatPoints and FatLines now render correctly in XR sessions. The view scaling is now correctied to give the appropriate point size and line width. (33e40c7)
  • Geom picking is now more precise making smaller items easier to pick. (4b70014)
  • GeomItems loaded from zcad files now contain a precise bounding box. Previously this bounding box was approximate, and not precise enough for many scenarios. (a92a3af)
  • GLTexture2D now correctly infers the internalFormat for RGB format textures. (7dcc181)
  • Label sorting was sometimes incorrect in small scenes (#495) (0100957)
  • non-multidraw merged shader fix (5cafdae)
  • Oculus Rift controllers are now correctly positioned and sized in VR. (26bd25c)
  • On some VR devices, an error is thrown the first time XR session is launched as it had not yet detected the correct HMD. (4def1e9)
  • Shader compiler now correctly handles diamond shaped import chain. (#465) (eebf405)
  • Sphere surface became inverted after a resize. (c210a34)
  • Surfaces no longer render black before EnvMap or textures have loaded. (8e7f7e5)
  • The Promise returned from VLHImage.load is now being correctly resolved or rejected. (1eb4b16)

3.10.6 (2021-07-02)#

Bug Fixes#

  • addressed regression drawing large scenes on iOS devices using the new multi-draw-emulation code path. (e54ff55)
  • Line picking fattening now works on Safari. (dc2c65f)

3.10.5 (2021-07-01)#

Bug Fixes#

  • 'setSelectable' now dynamically updates the rendering of GeomItems to the geom data buffer. (fb58d36)

  • Cleaned up PointerEvents emitted during VR Sessions. (8ab20bb)

  • LinesPicking filtering no longer applied in VR. (0ccb93f)

  • camera panning in orthographic mode now correctly tracks the mouse pointer.

  • CameraManipulator now maintains screen space geometry position under the mouse while mouse wheel zooming of orthographic cameras.

  • Camera framing now uses GeomItem bounding box if the geometry has not yet been loaded.

  • The frustum culling system now correctly culls items for orthographic cameras.

  • Surface lighting in orthographic rendering is now consistent for geometry anywhere on screen. Shaders now use the camera zaxis as the view vector.

  • Outline shader now adapts sensitivity on a per-pixel basis. This reduces moiré patterns seen on some background surfaces as the camera zoomed into a foreground object.

  • Camera near and far planes are adjusted on view framing to fit the scene size. The auto near/far plane multipliers are now much more tightly fitting the scenes, which reduces moiré patterns seen on background surfaces.

  • Camera framing would sometimes cause a corrupt camera matrix when framing on a CADAsset before the geometries were loaded.

  • Silhouettes now have smoother graduations in darkness.

3.10.3 (2021-06-29)#

Bug Fixes#

  • Fix mixing multi-draw and non-multi-draw. (49002b8)
  • Fixed FatPointsShader multi-draw code path. (9c3debf)
  • Fixed regression in PointsShader in multi-draw. (3bb38e7)
  • Fixed regression in FatLinesShader in multi-draw. (a796d3a)
  • Fixed multi-draw code path for Firefox. (ca88db3)
  • Fixed multi-draw code path for iOS. (54ab89a)

3.10.0 (2021-06-16)#

Features#

  • Lines picking is now easier and more stable using a new line picking filter (1471dc8)
  • proxy geometries loaded from zcad files now expose methods to determine the number of triangles and line segments. (1437c72)
  • when loading assets, a new context class enables specifying the system units, paths to external resources, and other information. (1b8aa4d)
  • Implemented Vec2.intersectionOfLines and tests.
  • TreeItem now supports a toggle to disable the bounding box calculation for its self and subtree.

Bug Fixes#

  • Addressed exception rendering transparent geoms in VR. (1a2f0bf)
  • Animated geometries are now correctly un-culled when they come back into the frustum. (#431) (1b5806f)
  • calling setSelectable(false) on a GeomItem now configures its visibility in the GeomData buffer. (1d7fbc4)
  • culling frustum is now correctly reset to the regular viewport when exiting a VR session. (47f4270)
  • Lines are now easier to select by making the click zone more consistently fatter. (09892b5)
  • Selection highlight in the engine conflicted with selection highlight in the UX library. Removing the engine implementation. (b42f9d9)
  • To address a performance disparity on platforms where multi-draw is not supported, we now run an almost identical code path that emulates multi-draw. (ef1222e)
  • CameraManipulator now modifies the Frustum hight value instead of moving the camera when dollying an orthographic camera.(3ac71e8)
  • Camera now frames more precisely on the scene geometry bounding boxes.

3.9.1 (2021-05-19)#

Bug Fixes#

  • Disabled drawing silhouettes on iOS as it relied on an extension unsupported on iOS. (100c0f2)

3.9.0 (2021-05-18)#

Features#

  • Camera near and far dist modulation can be disabled and configured. (27c1999)
  • CameraManipulator now supports two-fingered roll in tumbler or trackball manipulation modes. (ca61cd1)
  • CameraManipulator aim focus feature now has independent settings for double/single mouse clicks and double/single touch taps. (b650fe6)
  • Cone and Sphere primitive constructors now provide options to not generate normals. (5de65bc)
  • GeomItems can now be filtered from selectability with a simple boolean value 'visibleInGeomDataBuffer'. (1a62f78)
  • Improved highlight rendering quality using Sobel Filter to detect borders. (fabff57)
  • LinesShader now provides controls for line stippling.The Shader allows specifying a stipple pattern for un-occluded lines separately from occluded lines. Used to achieve HiddenLine rendering modes. (79875b8)
  • Renderer can now display a Silhouette around geometries, as part of the implementation of CAD style rendering modes. (cf55227)
  • SimpleSurfaceShader and StandardSurfaceShader compute face normals dynamically if not provided as vertex normals. (4280b2c)
  • Solid Angle Culling limit value can now be customized on the renderer. renderer.solidAngleLimit = 0.0 will disable culling based on the solid angle of an item. (a1068b6)
  • The default Orbit rate has been increased to 0.5 on Mobile devices. (bcddfc1)

Bug Fixes#

  • Addressed an exception thrown then items were re-attached to different parts of the tree, and then had opacity changes. The renderer was not being correctly cleaned when an item was simply moved in the tree, leaving dangling event listeners. (074574d)
  • Camera view no longer pops as the start of manipulations of orthographic cameras. (30bc147)
  • Items being removed and re-added to the renderer now are correctly updated in the frustum culling system. (7dc5c90)
  • Procedural geoms now correctly support lazily computing vertex normals and hard edge indices. Previously the geometries would not be updated automatically. (aefc299)
  • Screen space items like selection rectangles no longer get culled by the frustum culling system. (ef49f56)
  • The frustum culling system would incorrectly cull items at the sides of the screen if those items had very large bounding spheres. This was due to incorrect math calculating the solid angle of the items. (b41fe82)
  • Tightened view framing algorithm so that the the camera is moved to more closely fit the provided items. (533444c)

3.8.0 (2021-04-29)#

Features#

  • Add zeaEngine.packageJson (620f7ac)

3.7.0 (2021-04-28)#

Features#

  • GeomItem can now calculate precise bounding boxes for geometries after loading a zcad file. (fafdfe7)

Bug Fixes#

  • GeomLibrary now correctly cleans up the culling worker when items are removed from the renderer. (a5f8181)
  • Mobile Safari touch (575a430)
  • Removing transparent items from the renderer no longer causes a crash. (8cf4b15)
  • Renderer now updates all instances of instanced geometries where topologies are changing. (a7b5730)

3.6.0 (2021-04-23)#

Features#

  • BaseImage now provides wrapping and filter params to the renderer. (834949b)
  • BillboardItem now provides a 'Pivot' parameter to control the center pivot of the billboard. (6212ad2)
  • Camera now supports perspective and orthographic projections, and is able to interpolate between. (1709f86)
  • CameraManipulator now orbits the user around the point under the cursor. (c8dd77e)
  • GLRenderer now applies the touch-action: none rule to the canvas to prevent scrolling when interacting on the canvas on mobile devices. (322b327)
  • Mouse wheel zooming now moves towards the point below the mouse, if the mouse pointer is over a geometry. (4839f6e)
  • PointsShader now supports drawing GeomData and highlights. (73455d0)
  • Renderer now calculates Frustum culling to reduce the number of drawn objects. (859c83b)
  • StandardSurfaceShader now supports AmbientOcclusion textures. (f8a7283)

Bug Fixes#

  • An exception thrown when all the items for a geom were removed from a GLGeomItemSet, if there were highlighted items before. (201952d)
  • Assigning a regular value to a Material parameter no longer removes the assigned texture. (e536595)
  • CameraManipulator would sometimes cause rolling when double tapping, leaving the user camera a bit crooked. (a195b8f)
  • Canvas is now immediately resized to fit its parent container when the WebGL context is created, making renderer setup synchronous (16f9fd7)
  • Cleaned up memory leak removing items from the renderer. (d0e9438)
  • Cutting Plane values on the BaseGeomItem are now initialized to reasonable values. (08c61e7)
  • done. (a8b3c59)
  • In some cases lines would render over surfaces and appear to show through in some cases. (9db725c)
  • indices in the renderer became broken after removing a geometry from the renderer. (638037c)
  • Items are no longer culled if their size, or matrix is calculated in the GPU. Addresses culling single points geometries and Xfo handles. (fbd2b4f)
  • LinesShader opacity in multi-draw now matches opacity in regular drawing. (29dcbf8)
  • Removed a redundant caching mechanism in the resource loader that prevented re-loading data at the same URL. (0f8f3e2)
  • SimpleUniformBinding now correctly binds textures to uniform values, so all PBR parameters can now be textured. (1fc68ae)
  • The Canvas size can now be resized to zero width or height without the renderer throwing exceptions. (67b7a8c)
  • The Engine became incompatible with its plugins due to a variable rename. This fix puts back the old name to address this compatibility issue. (4e7c444)
  • Visibility changes on transparent items now trigger re-sorting of items. (9726a28)

3.5.2 (2021-03-26)#

Bug Fixes#

  • A redraw is now correctly triggered after a GeomItem visibility changes. (1cfe32d)
  • Adding passes to the renderer would cause subsequent pass indexes to become broken. e.g. Adding a new pass would break the Overlay pass and then Handles would not work. (e3f8354)
  • Addressed major performance issue in the GLGeomItemSetMultiDraw as it was registering too many listeners to the GLGeomLibrary. (329fa6d)
  • GeomIds can now be correctly visualized again by passing { debugGeomIds: true } to the renderer constructor (8fe65ef)
  • MouseWheel zooming is more smooth now and merges multiple events into a single motion. (5e862ca)
  • The ZEA Splash image is now removed. (5b4f82f)

3.5.1 (2021-03-23)#

Bug Fixes#

  • Correctly disable PBR on WebGL1. Only affects Safari browsers. (c31af3d)

3.5.0 (2021-03-22)#

Features#

  • The Renderer now request a high-peformance WebGL context by default. (154d524)

Bug Fixes#

3.4.0 (2021-03-21)#

Features#

  • GLPass classes can now pack and extract extra data in the GoemData shader and return data in pointer events. (930f88a)

Bug Fixes#

  • Async class is no longer used, and now removed from the engine. (dd5892c)
  • Canvas resizing (b923fb0)

3.3.2 (2021-03-16)#

Bug Fixes#

  • An exception was thrown in the Renderer if an empty geometry was added. Clearing a geometry would leave fragmented empty allocations in the GPU buffers. (9f5c05d)

3.3.0 (2021-03-09)#

Features#

  • The PBR Lighting pipeline was completely overhauled. The BRDF and HDR image convolution rewritten, and now the Materials match closely those of other PBR renderers such as Unity, Marmoset, and Filament.
  • emission now enables causing an object to become completely transparent by lerping off the specular effect. (34ee061)
  • EnvMap convolution quality is now modulated by the detected performance of the GPU. (8023088)
  • Normal Mapping now works well with the new PBR lighting pipeline. (a7b1f2e)
  • Transparent objects now use multi-draw (d49148d)
  • GLShader now generates far nicer formatted error messages. No longer dumping out the entire GLSL code for the shader, instead just the culprit line and a few surrounding lines. (5af69e3)
  • added Color.addInPlace function. (470c701)
  • Assets now support a simpler interface for loading data. Simply: Asset.load(url).then(...) (2caee89)

Bug Fixes#

  • Adding a custom highlight multiple times in a tree now does not cause multiple highlightChanged events (ea03bfa)
  • Addressed error message: Two textures of different types use the same sampler location (ea3d354)
  • Addressed error on Safari due to navigator.hardwareConcurrency being unavailable. (ff846f4)
  • Addressed regression in test where fat lines and thin lines are rendered from the same lines geometry. (f401aba)
  • All GPU geometries are now lazily uploaded to the GPU during rendering. Fixes issue where sometimes mesh rendered without the correct geometry data after an update to the Mesh. (824351f)
  • Cleaned up detection of transparency. Should be much faster now. (ad6b1b0)
  • Color.equal deprecated in favor of Color.isEqual. (385c9e6)
  • Fixed incorrect deprecation of equal method in Vec3. (c729d2a)
  • Fixed minor regression running the engine on Safari devices. (d3c082b)
  • GeomData shader was left bound between multi-draw and regular drawing causing warning to be emitted as the 'multi-draw' vertex attribute bindings were still being used. (30af594)
  • If a material became transparent due to baseColor alpha value change, and then the opacity was changed, it would incorrectly determined as opaque. (53772c7)
  • Materials loaded from zcad files were not being detected as transparent, even if they had transparent parameters. (f6c997d)
  • Normalized mouse wheel movements across browsers. Firefox mouse wheel zooming now works as in Chrome. (ea443b0)
  • ObjeAsset did not need to create its own Material and Geometry libraries as the base class already does this. (49fa075)
  • Procedural Sphere was generating texture coordinates with artifacts. (999ce15)
  • Touch event listeners are now registered as passive listeners, which resolves a nagging warning message in Chrome. (19e4aa6)

3.2.0 (2021-02-08)#

Features#

  • Added Color#addInPlace (58a9953)
  • CameraManipulator#setDefaultManipulationMode generates a useful error message if an invalid value is passed (2cbde30)
  • Due to a change in behavior in Chrome which caused a pause launching the renderer, xrCompatible is now set to false by default. The GL canvas is converted to an XR canvas when an XR device is detected, so no change in behavior should be noticed. (e5f1ee0)
  • GLShader now generates far nicer formatted error messages. No longer dumping out the entire GLSL code for the shader, instead just the culprit line and a few surrounding lines. (d8b219b)
  • As geometries are streamed, the bounding box for the tree is now valid as we pre-load the bounding boxes for the geometries into the tree. (9017f08)
  • CameraManipulator now calls 'setCapture' to avoid redundant geom data rendering during camera movements. (6134bdd)
  • GridTreeItem is now exported for use outside the engine. (9a5bfc7)
  • Draw shaders now support debugging of geom Id to verify how effective instancing has been. (5b87975)
  • Pointer events are now emitted from the VRViewport based on interactions with VR controller (426a153)
  • Implemented support for spectator mode in VR. (23fdbec)
  • Implemented a 1D Allocator for managing 2d arrays packed into a single 1D Array. (b37bcca)
  • Initializing VR Stage below the active viewport position. (ac6c5f2)
  • Material now tracks state to check if a a texture has been assigned, or if it has become transparent. (7914eac)
  • Multi-draw pipeline now supports lines and points, and also non-32bit attr values. (0553692)
  • Resizing a GLFbo now causes its bound color texture to be resized. (29359c3)
  • Resource loader now supports loading binary files via a new plugin (#309) (adc5f1c)

Bug Fixes#

  • Cloning NumberParameter or MaterialFloatParam now properly clones the range and step values. (ad4eefd)
  • Labels are now lazily updated on the next draw, instead of waiting on a timeout. This means we should no longer have frames where labels disappear/reappear. (740d42c)
  • PointGrid was not correctly generating its geometry after changes to procedural geometries in the previous release.(70e7c46)
  • Cleaned up regressions in the VRViewTool for VR navigation(fe3b656)
  • CameraManipulator WASD walk keys were left on when the mouse left the viewport. (5edd614)
  • VLAAsset was not correctly reporting progress when loading streaming geoms. (9c828c3)
  • ObjAsset was not able to correctly load objects made up of groups. (ef1d92b)
  • Viewports can now be initialized after the scene is already assigned to the renderer. Needed for XRViewports. (a6fbb5c)

[3.0.1] (2020-12-04)#

Bug Fixes#

  • Fixed property detection on GLLines (dc2d474)

[2.0.0] (2020-09-12)#

⚠ BREAKING CHANGES#

  • npm: Raw imports are no longer supported.

Features#

  • Added 'Overlay' option to LinesShader so lines can be rendered overlaid on scene geometries.
  • Added support to make Points and Lines drawn as Overlay.
  • SystemDesc now correctly detects RTX based GPUs.

Bug Fixes#

  • Docs search now have their own namespace.
  • Dynamic updates to lines topology now is reflected in the renderer.
  • GeomProxy was missing a method to retrieve the bounding box, which caused regression when loading polygon meshes from zcad files.
  • Updated Version class, deprecating old methods.
  • Wasm file resolving from script tag.

Build#

  • npm: Add UMD support.

1.3.0 (2020-08-20)#

Features#

  • Added PointSize parameter to PointsShader now that it's working in Chrome.
  • Implemented new 'tumbler' manipulation mode on CameraMouseAndKeyboard manipulator to emulate the behavior of various CAD packages.
  • TreeItem.resolvePath now throws an exception if the path cannot be resolved.

Bug Fixes#

  • Regressions in the code for procedural lines and material parameter.
  • Bug causing circle to throw exception when generating.
  • Bug that prevented updating points geometry dynamically.
  • Issues related to loading label packs in the labelManager.
  • Regression in Group when using the 'manual' Initial Xfo mode.
  • Regression in ObjLoader caused by changes to Mesh topology.
  • Regressions in RouterOperator due to changes to OperatorOutputs map on Operator.
  • Reverted Torus to simpler detail setting. Consistent with Sphere Cone, and Circle.
  • Updated all snapshots with new output format.

1.2.0 (2020-08-14)#

Features#

  • Add footer for docs.
  • Add GridTreeItem file and update Scene class.
  • Added 'mouseOverGeom' and 'mouseLeaveGeom' events.
  • Added basic cycle checking in the operator evaluation.
  • Add isEqual and approxEqual to Xfo.
  • Added splash screen to Zea Engine when loading.
  • Implement 'addFace' on Mesh class to make it easier to setup meshes.
  • Improved parameter dirtying when many multi-output operators are bound to many different parameters.
  • Make the splash screen optional.
  • No longer logging the SystemDesc on startup.
  • Shaders can now provide a name to the constructor.

Bug Fixes#

  • Cleaned up error messages being provided when throwing exceptions.
  • Cleaned up dirty state vs clean state on Parameter.
  • Duplicated createFromBuffer method on Color class.
  • Wrong byteOffset on few classes.
  • Debug script for Windows systems.
  • Minor issue with the drawCount in the class GLMaterialGeomItemSets.
  • Regression causing changes to materials to not trigger re-rendering.
  • Regression in Potree due to GLGeom was no longer emitting a 'destructing' event.
  • Geometry types are now registered with the SGFactory.
  • Math type constructors need to be able to take a Float32Array as an argument.
  • OperatorOutput now throws an error if trying to call 'getValue' before a param is connected.
  • Operators now become dirty when adding Inputs and Outputs.
  • Quat.setFrom2Vectors was incorrectly normalizing input vectors. Now assumes unit vectors are provided.
  • Removed 'flags' implementation from Items.
  • Removed 'flags' implementation on parameters and geometries, we're no longer using it.
  • Replaced old sgFactory from GridTreeItem for Registry.
  • Restored code that shouldn't be touched(Backwards compatibility).
  • Restoring Box3 to default values in case axes are not numeric.
  • Regressions in 'removeParameter' and 'replaceParameter'.
  • Throwing errors instead of warnings in Registry class.