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