Skip to content

Releases: adobe/lagrange

Lagrange Release v6.43.0

31 Mar 17:04
Immutable release. Only release title and notes can be modified.
771d858

Choose a tag to compare

Dependencies

  • πŸ“Œ Add support for Eigen 5
  • πŸ“Œ Update vcpkg baseline to move to OpenVDB 13

New Module: serialization2

  • ✨ New serialization2 module for SurfaceMesh, SimpleScene, and Scene
    • Uses cista for zero-copy deserialization and zstd for optional multi-threaded compression
    • Does not require the full dependency set of lagrange::io
    • API: serialize_mesh / deserialize_mesh / save_mesh / load_mesh (and scene equivalents)
    • Suggested file extensions: .lgm (SurfaceMesh) and .lgs (Scene / SimpleScene)
    • Cross-type deserialization via allow_scene_conversion and allow_type_cast

Core Module

  • ✨ Add mesh_bbox() utility to replace unsafe Eigen 5 iteration patterns
  • ✨ Add compute_facet_facet_adjacency() β€” supports non-manifold meshes; returns a compressed CSR AdjacencyList; non-manifold edges (3+ incident facets) produce complete clique connections
  • ✨ Add opt-in corner attribute support to uv_mesh_ref and uv_mesh_view
  • πŸ› Avoid welding invalid values in weld_indexed_attribute

Scene and IO Modules

  • πŸ› Map missing OBJ indices (normals, UVs) to invalid attribute values instead of crashing
  • πŸ› Fix WASM/Emscripten test failure by forcing embedded images for binary glTF

BVH Module

  • ✨ Add compute_uv_overlap for detecting overlapping triangles in UV space

Raycasting Module

  • ✨ Add compute_local_feature_size

Polyddg Module

  • ✨ Helmholtz-Hodge decomposition for 1-forms on polygonal meshes
    • Decomposes into exact (gradient), co-exact (divergence-free), and harmonic parts
    • VEM-stabilized inner products for consistent differential operators
    • Saddle-point solver for the co-exact part; dim(harmonic) = 2g for genus-g surfaces
  • ✨ Hodge decomposition for vertex vector fields with n-rosy support

Subdivision Module

  • ✨ Add adaptive tessellation based on chordal deviation: new max_chordal_deviation option, mutually exclusive with max_edge_length
  • πŸ› Fix subdivide_mesh with zero subdivision levels

Texproc Module

  • ✨ Precise alpha carving with threshold interpolation
  • πŸ› Fix ambiguous marching squares case and add bilinear alpha sampling

Python

  • πŸ› Allow extract_submesh to accept list or tensor for selected_facets
  • πŸ› Fix Python submodule imports
  • 🎨 Move OpenVDB initialization to the volume module

Miscellaneous

  • πŸ› [polyscope] Fix registration of 4-channel vector/color attributes
  • 🎨 [polyscope] Use categorical data type for integer scalar attributes
  • πŸ› [volume] Add support for meshes with >4-vertex facets in voxelization

Lagrange Release v6.42.0

09 Mar 18:55
Immutable release. Only release title and notes can be modified.
9a9cae0

Choose a tag to compare

Dependencies

  • πŸ“Œ Update spdlog to 1.17.0
  • πŸ“Œ Update gl3w to fix link issues on Linux
  • πŸ“Œ Add support for Embree 4, now the default

Python

  • 🚨 Rename Lagrange Python package to adobe-lagrange to improve compatibility with internal releases while avoiding PyPI collision
    • Before: uv pip install lagrange-open
    • After: uv pip install adobe-lagrange
    • Import name unchanged (import lagrange)
    • Redirection packages ensure transitions to the latest versions
  • πŸ› Fix hierarchical logging in Python

Core Module

  • 🎨 Broadcast constant value attributes in map_attribute
  • πŸ› Fix issues with weld_indexed_attributes
  • πŸ› Fix double-flip bug in facet reorientation for orient_outward

Scene and IO Modules

  • ✨ Add Scene to SimpleScene conversion functions
  • πŸ› Fix node indexing bug in save_gltf when using explicit root nodes
  • πŸ› Skip non-triangle primitives in load_scene_gltf, load empty placeholder mesh
  • πŸ› Fix FBX load issue with duplicate attribute names
  • πŸ› Account for geometry transforms and scale inherit mode in load_fbx
  • πŸ› Fix image size assert in load_gltf

Remeshing Module

  • ✨ New remeshing_im module wrapping Instant Meshes

Polyddg Module

  • ✨ Shape operator for discrete curvature computation

BVH Module

  • ✨ Add mesh-to-mesh distance evaluation
    • New bvh::compute_mesh_distances for per-vertex distance
    • Add bvh::compute_hausdorff and bvh::compute_chamfer metrics
    • Python bindings available

Raycasting Module

  • ✨ New RayCaster class for SurfaceMesh
    • Construction: add_mesh(), add_instance(), add_scene()
    • Modification: update_mesh(), update_vertices(), update_transform()
    • Support visibility, intersection and occlusion filters
    • Distance queries: closest_pointN(), closest_vertexN()
    • Ray queries: castN(), occludedN()
  • Refactored projection functions to support SurfaceMesh:
    • Can project either vertex positions or attributes such as colors
    • project_closest_point(), project_closest_vertex(), project_directional()
  • Python bindings available

TexProc Module

  • ✨ Mesh with alpha mask to SDF conversion
  • πŸ› Apply regularization consistently to LHS and RHS (filtering + stitching)

Miscellaneous

  • πŸ—οΈ Chainload WindowsToolchain for vcpkg on Windows
  • πŸ› Support empty inputs in mesh subdivision
  • 🎨 Unify index buffer in polyscope mesh viewer example
  • 🎨 Expose grid background value in Python bindings
  • 🎨 Update default rendering setting for large point clouds

Lagrange Release v6.41.0

11 Feb 01:38
Immutable release. Only release title and notes can be modified.
cf7782d

Choose a tag to compare

Dependencies

  • πŸ“ŒΒ Update Eigen to 3.4.1
  • πŸ“Œ Update ufbx to v0.21.2
  • πŸ“Œ Downgrade Entt to v3.15.0 due to type matching issues
  • πŸ“Œ Switch pcg-cpp repo source with WinARM support
  • πŸ“Œ Update OpenVDB to 13.0.0

Infrastructure

  • πŸ›Β Numpy 2.4.0 compatibility fix
  • πŸ—οΈ New trigger to build python wheel for PRs
  • πŸ—οΈ Fix doc build failures
  • πŸ—οΈ Auto extract version from git tags

Scene and IO Modules

  • 🎨 Add scene_to_meshes and simple_scene_to_meshes
  • 🎨 Add option to triangulate mesh during saving
  • 🎨 Allow saving scenes with invalid URI to OBJ with warnings
  • πŸ› Fix target axis and units when loading FBX models
  • πŸ› Load empty images when failed to load FBX textures
  • πŸ› Proper attribute usage for tangent/bitangent attributes from FBX

Core Module

  • 🎨 Faster per-vertex component computation (~23% faster)

BVH Module

  • ✨ Add remove_interior_shells support for removing non-intersecting interior shells

TexProc Module

  • 🎨 New graphical demo for texture stitching

Subdiv Module

  • 🎨 Add compute_sharpness helper function

Volume Module

  • 🎨 mesh_to_volume updates:
    • New Unsigned signing mode
    • Update winding number signing
    • Bug fix in quad-to-tri tessellation
  • πŸ“ Update example demos
    • New voxelize_gui and grid_viewer examples
    • New register_grid.h utility for visualizing VDB grids with Polyscope in examples
    • Rename voxelize_mesh -> voxelize_cli and support additional input/output files
  • 🎨 Add NanoVDB support in demos/Python bindings
  • ✨ New Grid class wrapping OpenVDB grids (CPU only)
    • .to_mesh() and .from_mesh() for converting between mesh <-> SDF grid (float or double)
    • .save(), .to_buffer() and .load() for serialization (supports NanoVDB and compression)
    • Grid properties: .bbox_index, .bbox_world, .num_active_voxels
    • .world_to_index() and .index_to_world() to apply coordinate transforms
    • .sample_trilinear_*() to sample points in parallel
    • .resample(), .densify(), .redistance() and .offset_in_place() utility methods

Lagrange Release v6.40.1

20 Jan 23:03
Immutable release. Only release title and notes can be modified.
ced6e05

Choose a tag to compare

Minor release to fix Python documentation issues.

Lagrange Release v6.40.0

12 Dec 23:34
Immutable release. Only release title and notes can be modified.
5b7deeb

Choose a tag to compare

Dependencies

  • πŸ“Œ Updated oneTBB to 2022.3.0 and oneMKL to 2025.3.0
  • πŸ“Œ Updated spdlog from 1.15.1 to 1.16.0
  • πŸ“Œ Updated fmt from 11.1.4 to 12.0.0
  • πŸ“Œ Updated EnTT from 3.13.2 to 3.16.0

Core Module

  • ✨Added compute_uv_area function
  • 🎨 compute_edge_is_manifold can now compute a per-edge attribute indicating manifoldness
  • 🎨 Added support for inverting normal/bitangent attributes when flipping facets
    • orient_outward will now flip normal/bitangent attributes
  • πŸ› Fixed infinite loop issue in earcut triangulation

Python Bindings

  • 🐍 Added python bindings for:
    • compute_edge_is_oriented
    • compute_vertex_is_manifold
    • compute_edge_is_manifold
  • 🐍 Added python bindings for SurfaceMesh::foreach_* functions
  • 🎨 Improved meshstat.py: added orientation check, non-manifold count, facet stats

Primitive Module

  • 🎨 Now open source!

IO Module

  • πŸ—οΈ Silenced IO warnings in unit tests
  • 🎨 Added quiet option for saving meshes

Texproc Module

  • 🎨 Added option to regularize the stiffness matrix in texture filtering and stitching
  • 🎨 Added option to clamp output values in texture filtering / stitching / compositing
  • 🎨🐍 Exposed options to C++ examples and python bindings
  • πŸ› Fixed non-deterministic __randomize option in texture stitching
  • πŸ—οΈ Made unit tests single-threaded to ensure reproducibility, and changed to stricter tolerances

Polyscope Module

  • ✨ New dedicated module to facilitate interop with Polyscope
    • Register explicit structure:
      • register_edge_network
      • register_mesh
      • register_point_cloud
    • Infer structure type from mesh connectivity:
      • register_structure
    • Create or update Polyscope attribute based on Lagrange's:
      • register_attribute

Lagrange Release v6.39.0

14 Nov 18:22
ee6f7f0

Choose a tag to compare

Infrastructure

  • πŸ—οΈ Compilation fixes for Xcode 26
  • πŸ—οΈ Fix CMake sanitizer setup for MSVC
  • πŸ“Œ Update earcut.hpp dependency to f36ced7
  • πŸ“Œ Update cpptrace to 1.0.4
  • πŸ“Œ πŸ› Update PoissonRecon dependency to fix a memory allocation bug

Core Module

  • 🎨 Add overload to SurfaceMesh::delete_attribute to accept id as input

IO Module

  • πŸ› Throw error when saving float/double texture to glTF file
  • πŸ“– Add explicit warning when loading glTF without explicit stitching behavior
  • 🎨 Add new LoadOptions::quiet to silence IO related log messages
  • 🎨 Update STL mesh load to not stitch vertices by default for consistency with other formats

Solver Module

  • ✨ Add support for Spectra-based sparse eigenvalue solver
    • [generalized_]selfadjoint_eigen_[largest|smallest]() in C++
    • lagrange.solver.eigsh() in Python (follows a similar API to scipy.linalg.eigsh())

Texproc Module

  • πŸ› Fix out-of-bound access in rasterization code
  • πŸ› Add checks to ensure number of channels consistency
  • 🐍 Update texture_from_multiview.py to accept list of render images + ensure output uses .exr
  • πŸ› Fix vertical flip in geodesic_dilation code introduced in v6.38.0
  • πŸ› Fix image transpose issue in Python bindings
  • 🐍 Add geodesic_dilation.py demo

Geodesic Module

  • ✨ New geodesic module to compute single-source and point-to-point geodesic distance
    • Added GeodesicEngine[...] class for repeated computation
    • Choice of algorithm between DGPC, MMP and Heat
    • Two methods available: single_source_geodesic() and point_to_point_geodesic()

Polyddg Module

✨ New polyddg module that implements most of the operators from this paper:

De Goes, F., Butts, A., & Desbrun, M. (2020).
Discrete differential operators on polygonal meshes.
ACM Transactions on Graphics (TOG), 39(4), 110-1.

Documentation

  • πŸ“– Docstring updates for scene module
  • πŸ“– Update voxelize_mesh example code to read/write .vdb files
  • πŸ“– Fixed typos and grammar in comments with Copilot

Python Bindings

  • πŸ“Œ Updated scikit-build core to 0.11.6
  • πŸ“Œ Updated sphinx and autoapi
  • πŸ—οΈ Set upper-bound to Python <3.14 due to nanobind uncertainty
  • πŸ“– Fixed generated Sphinx documentation due to refactored stub files

Full Changelog: v6.38.0...v6.39.0

Lagrange Release v6.38.0

17 Oct 02:45
eb3522d

Choose a tag to compare

Infrastructure

  • πŸ—οΈ New CMake option LAGRANGE_PROPAGATE_WARNINGS
  • πŸ“Œ Update Catch2 to v3.10.0
  • πŸ“Œ Update WindingNumber to v0.3.15
  • πŸ— Enable \Z7 flag in MetaBuild for debug build

Core module

  • πŸ—οΈ Replace M_PI with lagrange::internal::pi
  • ✨ Add compute_facet_circumcenter
  • ✨ Add compute_facet_vector_area
  • 🐍 Add SurfaceMesh.edges in python binding
  • 🎨 Update point_triangle_squared_distance and point_segment_squared_distance to be dimension independent

IO module

  • πŸ› Bug fix in directory creation when saving obj file

Texproc module

  • πŸ› Add check for flipped UV triangles
  • πŸ—‘οΈ Cleanup geodesic dilation code

BVH module

  • 🎨 Refactor AABB as a stand-alone class
  • 🎨 Add support for TriangleAABBTree
  • 🎨 Update EdgeAABBTree
  • 🎨 Add python binding for TriangeAABBTree and EdgeAABBTree

Documentation and other updates

  • πŸ“Œ Update Doxygen and CSS version
  • πŸ“Œ Update website dependency
  • πŸ’„ Update code format for the entire repo
  • πŸ“– Improve texproc documentation
  • πŸ—οΈ Add explicit ref to Doxygen comments
  • πŸ—οΈ Remove doxygen autolink
  • πŸ“– Update python doc strings
  • πŸ› Fix python stub generation

Lagrange Release v6.37.0

29 Sep 19:04
1dd323e

Choose a tag to compare

Infrastructure

  • πŸ—οΈImproved DLL copies with CMake. This fixes some Jenkins failure cases.
  • πŸ—οΈImproved code-coverage.cmake. Prevents overwriting job pools configurations for downstream projects, improves cross-platform support, and adds configuration options.
  • πŸ—οΈRun patchelf on downloaded MKL to prevent linking issues.
  • πŸ›Fixed ODR issues.
  • πŸ“ŒUpdated MshIO to v0.1.0
  • πŸ“ŒUpdated miniz from 2.2.0 to 3.0.2

Core Module

  • 🎨Improved stability in remove_duplicate_vertices(), it now keeps vertices order if possible

Python Bindings

  • πŸ—οΈMoved all nanobind includes to a single file <lagrange/python/binding.h> to avoid potential ODR violations.
  • πŸ“–Updated pyproject.toml to have urls.documentation and urls.repository
  • πŸ“ŒUpdated nanobind to v2.9.2. This adds support for in-place updates to dicts, lists, etc., such as my_dict["key"] += 1

Scene Module

  • πŸ›To fix a mutable element issue in python bindings, changed Scene types from std::vector<T> to lagrange::SafeVector<T> which is an alias for
    • std::vector<std::shared_ptr<T>> when compiled for python bindings
    • std::vector<T> otherwise, unchanged from before
  • 🎨Updated Scene::far_plane to be optional
  • ✨Added camera matrix utilities in <lagrange/scene/scene_utils.h>
    • Eigen::Affine3f camera_view_transform(const Camera& camera, const Eigen::Affine3f& world_from_local)
    • Eigen::Projective3f camera_projection_transform(const Camera& camera)

Solver Module

  • ✨New solver module! It manages dependencies across platforms and provides aliases for solver wrappers. Currently contains <lagrange/solver/DirectSolver.h>

Texture Signal Processing

  • ✨New texproc module! It provides texture-space operations such as filtering (smoothing, sharpening), stitching, compositing.

Lagrange Release v6.36.0

19 Aug 17:55
286283e

Choose a tag to compare

Infrastructure

  • πŸ—οΈ Add export macros for filtering module
  • πŸ—οΈ Minor CMake cleanups
  • πŸ“Œ Update cpptrace to 1.0.3 and removed StackWalker

Core Module

  • 🎨 New is_closed() function for SurfaceMesh
  • 🎨 Support degenerate polygons in compute_weighted_corner_normal()
  • 🎨 Support for indices shared across vertices in weld_indexed_attribute()
  • πŸ› Fix out-of-bound bug in split_edges() for 2D meshes

IO Module

  • 🎨 Added save_simple_scene_obj()
    • Supports multiple nodes and instances
  • 🎨 Added save_scene_obj()
    • Supports uvs, materials, and multiple nodes and instances
  • πŸ—οΈ Changed io tests to write to a designated output directory (build/tmp)
  • πŸ“– Improved Python documentation in io and scene
  • 🎨 New scene_convert example

BVH Module

  • ✨ New weld_vertices() function for SurfaceMesh

Volume Module

  • 🎨 Added sample_vertex_normal() to sample normals from VDB grid

Lagrange Release v6.35.0

28 Jun 00:50
01187b1

Choose a tag to compare

Infrastructure

  • πŸ—οΈ Add existence check in get_data_path and get_data_folder for loading unit test assets

Core and IO modules

  • 🎨 Indexed attribute support for saving in MSH format
  • πŸ› Throw exception for unsupported format in load_scene and load_simple_scene
  • πŸ› Bug fix in split_triangle
  • πŸ› Bug fix in map_attribute
  • 🎨 Add centroid-fan support in triangulate_polygonal_facets
  • ✨ New split_facets_by_material function

Filtering module

  • 🎨 Support smoothing of multi-channel attribute