Skip to main content

Changelog

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

4.5.0 (2022-06-30)#

Features#

  • WebXR AR Sessions now support hit testing and anchors. (#749) (d4e22d2)
  • Can now customize the materials assigned to CompoundGeoms. (#767) (9fc3022)
  • FatPoints now support per-point picking and highlighting. (f8d5482)
  • implemented 'LinesSphere' class for displaying a sphere made up of 3 circles aligned to each axis. (#762) (abd4ecf)
  • More convenient access to data in the tree via accessors. (7092a53)
  • To make picking small object easier, the GLViewport now scans a 5x5 pixel area for the closest object. (81a070f)
  • Version class can now be constructed from a string, or an array, and can be converted back to an array for comparisons with other Version instances. (5448cff)
  • XRefs can now load custom properties such as Color and Configuration. (ab18511)

Bug Fixes#

  • Clicking on handles is now much easier as the viewport picking function prioritises items in the overlay pass over regular items. (f4db13e)
  • Cloned a CADAssets and XRef items now clone the source items url. (fc982d1)
  • CompoundGeoms edges are now rendered with a larger overlay values to address z-fighting of edges agains the polygons. (6360602)
  • Fixed issues in Orthographic mode that caused surface lighting and overlay to be incorrect. (#744) (753b501)
  • Fixed race condition where metadata loading was completed before geoms loading was completed. (#750) (ffed89a)
  • Groups now correctly save to JSON and load items from JSON. (#759) (754573d)
  • Groups will no longer allow adding an item if the item is already in the group (104387b)
  • if a TreeItem's childrens names conflict, and then that conflict is resolved, the TreeItem.getChildByName will now then resolve the correct child. (8120159)
  • In some obscure cases, the renderer would throw exceptions when items were removed from the scene. (733bcaa)
  • KinematicGroup orientation now simply matches the first item to match the SelectionGroup (2fae71d)
  • Manipulating the transoformation of items that are also being transformed by a kinematic group would cause a pop in location. (#764) (7f84870)
  • Max resource load count is reduced to 1000 as Chrome was throwing errors around the 1400 mark. (bcb0043)
  • NodeJS build now exports the Shaders so that Materials can be assigned a Shader name and fully configured. (#761) (239f14e)
  • Outline thickness now takes into account the devicePixelRatio, so on devices with high pixel ratio, we now get clearer/thicker outlines. (6c0453a)
  • PMIView activation was broken because the 'camera' reference was lost during loading of zcad files. (09fd015)
  • Points now update correctly when changing vertex attributes when displayed using FatPointsShader. (4a4fdaf)
  • removing the fist item in the group was fixed. (f7a5188)
  • Removing the highlight that is not the top of the stack now correctly leaves the top highlight in visible. (#766) (c1a40fa)
  • Shaders no longer discard fragments for transparent items as it changes the contents of the z-buffer (bfb68f5)
  • The canvas is now forced to fit its parent by applying 100% width and height values to the styling. This addresses canvs fitting its parent on screens where devicePixelRatio < 1. (e5181df)
  • the NameChangedEvent class is now exported (8a9b988)

4.4.0 (2022-04-26)#

Features#

  • The GLRenderer now supports various rendermodes that configure 'wireframe', 'hidden line', 'flat' and 'pbr' render styles. (3ae4fb0)
  • Build system now generates a NodeJS compatible cjs build. (3580137)
  • GLRenderer now support rendering outlines using a new geometry base technique for cleaner outlines. (3ae4fb0)
  • Improved load times using a more efficient web worker class called the WorkerPool. (640569e)
  • XRef loading now supports firing a callback on the asset load context to generate the URL for the XRef (7c6b0cb)
  • ZCAD loading now spreads work more evenly across workers. When many files are loading, we can reduce memory requirements. (ae96a26)
  • TreeItem now features an opacityParam which provides a hierarchical opacity setting. (d22a957)
  • The renderer can now release Geometry data to free up memory after uploading it to the GPU (c04cef5)
  • We now pre-allocate a block of GPU memory to avoid re-allocating when loading small to medium sized models. ([c04cef5](https://github.com/ZeaInc/zea-engine/commit/ c04cef598424c971777722a7da04ae8425b8ab59))

Bug Fixes#

  • XRef cloning would result in incorrect transformations. (c229a64)
  • Address regression on older Safari browsers that still only support WebGL1 (53576fc)
  • Applied workaround to address performance regression in Safari. (846cacd)
  • Viewport no longer emits a 'pointerDoublePressed' event when using multiple touches. (846cacd)
  • CADAsset now generates a useful error message when loading zcad files that are corrupt in some way. (8341c66)
  • CADAssets would fail to resolve the load promise if nested XRefs failed to load. (487bc0a)
  • Edge lines now blend correctly over the top of faces. (cab33cd)
  • Fixed a crash on systems unable to run WebGL2 code, such as iOS devices that have not yet been updated to iOS 15. (696eb1f)
  • Items that were initially culled, but becoming visible could cause artifacts in the rendering (b66c701)
  • Loading zcad files containing XRefs now correctly resolves the promise. (b28a19e)
  • Removed redundant logging. Logging should be implemented at the application level. (191033a)
  • removed static material configuration in PMIItem as it threw exceptions (silent) exceptions during load. (ad39a8f)
  • Version 3.11.0 and below of the C++ libraries were not correctly exporting points 'sub-geoms'. The loading code now handles loading these files. (4004a0a)
  • When loading multiple assets using a shared context, the units value would be modified during load, causing the subsequent a (fea04aa)
  • If silhouettes are enabled, we must match multi-sampling settings from the screen buffer. ([c04cef5](https://github.com/ZeaInc/zea-engine/commit/ c04cef598424c971777722a7da04ae8425b8ab59))

4.3.0 (2022-03-17)#

Features#

  • BaseClass and BaseEvent classes are now exported by the engine. (eaf61ae)
  • CADAsset now has a 'FileUnits' parameter that can be displayed by our parameter display widgets. (82d1d81)
  • CADAsset now logs the version and SDK used to produce the zcad file it is loading. (5215e6d)
  • CADAsset.loadMetadata now support taking a url to the .zmetadata file, so that it can be explicitly specified, instead of inferred. (7b25f09)
  • Clicking on PMIText has been made easier by generating a plane to fill in the background, so pointer events are always caught when moving the mouse. (3461e38)
  • FlatSurfaceShader and FlatSurfaceMaterial now provide a new 'Overlay' param that enables geometry to be rendered on top of other geometry in the scene. Similar to the LinesShader and PointsShader currently work. (a070f0a)
  • PMIView now correctly sets up CuttingPlanes. (09ca588)

Bug Fixes#

  • A regression was fixed in visibility toggling that affected only the new CompoundGeometry items available in zcad 3.9.0 and above. (624596e)
  • Disable multidraw in Safari (686ede4)
  • Fixed an exception thrown when an Item was made transparent, and then a mouseover occurred (fb0c08f)
  • If an item was not visible when the CADAsset was initially loaded, in some cases could not be made visible. (3fce9ad)
  • Mesh items visibility was in some cases, not being honored due to a regression caused by the integration of the occlusion culling system. (1f5816a)
  • PMI highlighting now modifies the drawn color of the PMI text geometries. (4070864)
  • PMIView activation now correctly configures the orthographic Viewport height. (62afcdd)
  • Progress bars now complete when loading zcad files with steaming geoms. (45a13fb)
  • Re-enable contextual menus (c291b4a)
  • XRefs in large shattered assemblies would cause name collisions due to losing their unique name. (4505801)
  • XRefs in large shattered assemblies would cause name collisions due to losing their unique name. (133f373)
  • XRefs will no longer try to load if a resource dictionary was provided, but no mapping was given for the XRef source file. (6503835)

4.2.0 (2022-02-15)#

Features#

  • Added getHighlightName to TreeItem to return the name of the current highlight. (94563c8)
  • Compressed geometries version 3.9.1 and above now store quantized vertices using 16bits per channel for positions and textureCoords. This improves compression quality while also reducing zcad file size. (fbe8c02)
  • Duplicate registration of classes now fails on the second attempt, instead of overwriting previous classes. (3f0e5cc)
  • Implemented Box2Parameter and Box3Parameter to store custom data loaded from zcad. (6422103)
  • Implemented CompoundGeom and GLGeomItemSetMultiDrawCompoundGeom to support geometries featuring multiple geom geoms of different primitive types. (21f2370)
  • ResourceLoader now caps concurrent resource requests at 2000, thereby addressing an issue where the browser generates errors if too many resources are created at the same time. (e22dbd5)
  • The Renderer now tracks the number of visible triangles, lines and points, giving useful feedback to the developer. (9bf084c)

Bug Fixes#

  • #581 - When an InstanceItem clones, it must also cone the reference item when it asynchronously clones. (b77ee0b)
  • A regression in bounding box calculation meant instanced geometries could have the incorrect bounding box. (f648494)
  • A regression in the Math library was fixed. Inverting Xfo values that contained non-uniform scale values would not correctly invert the scale component. (a972289)
  • An exception was thrown in the culling worker if an item was removed from the renderer after being considered in the view. (71edd57)
  • Blending is now disabled while debugging the GeomDataBuffer (f204789)
  • Cleaned up bug causing bounding box to always be considered dirty. (07176a6)
  • Correctly implemented 'clone' option in BinReader. (6514343)
  • Fixed WebGL error when occlusion culling occurs before the first GeomData rendering. (61e14f8)
  • items being un-culled before being drawn for the need to be added to the dirtyGeomItems so the buffers get populated. (367c9f6)
  • Persisted Materials now can be reloaded constructing the concrete material class. e.g. SimpleSurfaceMaterial instead of just Material (9382989)
  • Quat.slerp threw an exception if the 2 quats were identical or very similar. Slerp now assumes that the angle is always 0..PI/2 (c169837)
  • Transparent geometries, including lines, were not correctly un-culled when the camera moved. Meaning that once a line or transparent geometry went offscreen, it would never be rendered again. (4f45024)

4.1.1 (2022-02-03)#

Bug Fixes#

  • A crash when loading multiple assets using a shared AssetLoadContext. (8a2eb6a)
  • An exception was thrown in the culling worker if an item was removed from the renderer after being considered in the view. (e2ac458)
  • Blending is now disabled while debugging the GeomDataBuffer (7511f88)
  • Fixed regression in Multi-Draw when items visibility changes. (#669) (e53663d)
  • Fixed WebGL error when occlusion culling occurs before the first GeomData rendering. (caf19f4)
  • Transparent geometries, including lines, were not correctly un-culled when the camera moved. Meaning that once a line or transparent geometry went offscreen, it would never be rendered again. (b1c5b35)

4.1.0 (2022-01-21)#

Features#

  • Added CameraManipulator.zoomTowardGeomUnderCursor. This option enables zooming towards the point under the mouse. By default now, the current framing is maintained during zoom. (df887b4)
  • Cuboid can be generated without normals and texture coordinates. Used in the new occlusion culling feature. (312e3fe)
  • DataImage can now be loaded with a WebGLTexture object and used in the scene. Very helpful for debugging rendering textures. (fa6e3b3)
  • GLRenderer now assumes material color values are in linear space as the color values in ZCAD files are always linear. A new option was added to the renderer to force gamma space color values to be used. (84a802b)
  • GLRenderer now support GPU based occlusion culling that improves performance by reducing the number of drawn geometries. (c9762d2)
  • GLScreenQuad now supports binding without providing a texture. (852e631)
  • GLViewport helper method that calculates a 2d position from a 3d world coordinate. (#614) (215929a)
  • Holding ctrl while using the mouse wheel now moves the user forward. (82a1105)
  • Implemented getNumTriangles on Mesh, which calculates the number of triangles based on the face counts. (4d74050)
  • Material Color parameters now have a colorSpace value which determines if the value is in linear of gamma space. By default color values are in Gamma space, but values loaded from files are assumed to be in Linear space. (83a52eb)
  • Move pointerRay value up one level in the class hierarchy so all pointer events, even those emitted by XR controllers now provide a pointerRay that is used in hit testing. (b0250dd)
  • VRController now provides a raycastDist property that controls the distance of the ray used to detect geometries. (2b43375)
  • XRController now emits 'buttonPressed' and 'buttonReleased' events when users press buttons aside from the main trigger button. (b452a08)

Bug Fixes#

  • #581 - When an InstanceItem clones, it must also cone the reference item when it asynchronously clones. (59e8a0b)
  • #595 ensure the XRControllerEvent has a reference to the VRViewport. (c964784)
  • A warning was generated when replacing an image on a MaterialColorParam due to trying to remove a listener that was never added. (9b265fc)
  • Addressed double-initialization issue causing exception in the WebXR emulator. (fe8f8c1)
  • All XR classes are now exported to make their types available. (#660) (4e9c852)
  • At the end of an XR Session, the frustum is re-culled using the regular camera. (3be9fb4)
  • Captured events no longer propagate to other items. (2046984)
  • Cleaned up exception thrown when loading an obj asset referencing materials. (080a985)
  • Cleaned up huge performance issue loading large assemblies. Listening to changes the GLGeomItemLibrary caused a massive problem. (69ba155)
  • Cloning custom material types, like FlatSurfaceMaterial now results in a new FlatSurfaceMaterial instead of a generic Material class. (7a9f5c2)
  • Cloning items in the tree now correctly clones the 'isSelectable' property. (11f467e)
  • Cutting Plane values on the BaseGeomItem are now initialized to reasonable values. (c983f19)
  • Debugging GeomData buffer is now possible when silhouettes are being displayed. (8cc3439)
  • Double taps were being generated on non-iOS devices due to mouse events being emulated after real touch events were generated. This is now fixed. (4836a48)
  • Each XRController now has a separate 'capture' item for UI interactions. (2381c36)
  • Exceptions where thrown when a scene consisted of many different textured items and one was highlighted dynamically. (cbd1c2c)
  • Fixed WebGL error caused by a GLRenderTarget.unbindForWriting trying to re-bind a previous fbo it should have been null (2b2597b)
  • GLRenderTarget now correctly binds the TEXTURE_MIN_FILTER and TEXTURE_MAG_FILTER to its generated textures. (8eb7a90)
  • GLTexture2D now correctly infers the internalFormat for RGB format textures. (5679167)
  • Labels with the fixed size on screen value set to 'true' now rendered correctly in VR. (4e18cad)
  • Pointer click distance is now correct in orthographic cameras.(This was a regression in 4.0.0) (1fcfd56)
  • ProcessTextureParams now checks for wrapS and wrapT in the parsers provided by the image. (4af31da)
  • RaycastWithProjection and raycastCluster now are correctly depth tested. (87a945f)
  • Textured materials are now correctly unbound addressing a WebGL error: WebGL: INVALID_ENUM: activeTexture: texture unit out of range (da78764)
  • The camera now orbits around the clicked position, even when clicking in empty space. (52b1826)
  • The WalkMode on the CameraManipulator is working again. (085a3b0)
  • Window zoom changes now cause the canvas to be resized. (fa13044)
  • Xfo.multiply generated incorrect results if the LHS Xfo had non-uniform scale. (22cb841)
  • XR Controller ray casting distance and 'dist' value in the intersectionData are now corrected for stage scale. (9a9d0f3)

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 jsDelivr.
  • 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 Entity 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.