Releases: adobe/lagrange
Releases · adobe/lagrange
Lagrange Release v6.43.0
Immutable
release. Only release title and notes can be modified.
Dependencies
- 📌 Add support for Eigen 5
- 📌 Update vcpkg baseline to move to OpenVDB 13
New Module: serialization2
- ✨ New
serialization2module forSurfaceMesh,SimpleScene, andScene- Uses
cistafor zero-copy deserialization andzstdfor 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_conversionandallow_type_cast
- Uses
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 CSRAdjacencyList; non-manifold edges (3+ incident facets) produce complete clique connections - ✨ Add opt-in corner attribute support to
uv_mesh_refanduv_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_overlapfor 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) = 2gfor 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_deviationoption, mutually exclusive withmax_edge_length - 🐛 Fix
subdivide_meshwith zero subdivision levels
Texproc Module
- ✨ Precise alpha carving with threshold interpolation
- 🐛 Fix ambiguous marching squares case and add bilinear alpha sampling
Python
- 🐛 Allow
extract_submeshto accept list or tensor forselected_facets - 🐛 Fix Python submodule imports
- 🎨 Move OpenVDB initialization to the
volumemodule
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
Immutable
release. Only release title and notes can be modified.
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-lagrangeto 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
- Before:
- 🐛 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_gltfwhen 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_immodule wrapping Instant Meshes
Polyddg Module
- ✨ Shape operator for discrete curvature computation
BVH Module
- ✨ Add mesh-to-mesh distance evaluation
- New
bvh::compute_mesh_distancesfor per-vertex distance - Add
bvh::compute_hausdorffandbvh::compute_chamfermetrics - Python bindings available
- New
Raycasting Module
- ✨ New
RayCasterclass forSurfaceMesh- 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()
- Construction:
- 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
Immutable
release. Only release title and notes can be modified.
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_meshesandsimple_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_shellssupport for removing non-intersecting interior shells
TexProc Module
- 🎨 New graphical demo for texture stitching
Subdiv Module
- 🎨 Add
compute_sharpnesshelper function
Volume Module
- 🎨
mesh_to_volumeupdates:- New
Unsignedsigning mode - Update winding number signing
- Bug fix in quad-to-tri tessellation
- New
- 📝 Update example demos
- New
voxelize_guiand grid_viewer examples - New
register_grid.hutility for visualizing VDB grids with Polyscope in examples - Rename
voxelize_mesh->voxelize_cliand support additional input/output files
- New
- 🎨 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
Immutable
release. Only release title and notes can be modified.
Minor release to fix Python documentation issues.
Lagrange Release v6.40.0
Immutable
release. Only release title and notes can be modified.
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_areafunction - 🎨
compute_edge_is_manifoldcan now compute a per-edge attribute indicating manifoldness - 🎨 Added support for inverting normal/bitangent attributes when flipping facets
orient_outwardwill now flip normal/bitangent attributes
- 🐛 Fixed infinite loop issue in earcut triangulation
Python Bindings
- 🐍 Added python bindings for:
compute_edge_is_orientedcompute_vertex_is_manifoldcompute_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
quietoption 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_networkregister_meshregister_point_cloud
- Infer structure type from mesh connectivity:
register_structure
- Create or update Polyscope attribute based on Lagrange's:
register_attribute
- Register explicit structure:
Lagrange Release v6.39.0
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_attributeto 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::quietto 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 toscipy.linalg.eigsh())
Texproc Module
- 🐛 Fix out-of-bound access in rasterization code
- 🐛 Add checks to ensure number of channels consistency
- 🐍 Update
texture_from_multiview.pyto accept list of render images + ensure output uses .exr - 🐛 Fix vertical flip in
geodesic_dilationcode introduced in v6.38.0 - 🐛 Fix image transpose issue in Python bindings
- 🐍 Add
geodesic_dilation.pydemo
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()andpoint_to_point_geodesic()
- Added
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_meshexample 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
Infrastructure
- 🏗️ New CMake option
LAGRANGE_PROPAGATE_WARNINGS - 📌 Update Catch2 to v3.10.0
- 📌 Update WindingNumber to v0.3.15
- 🏗 Enable
\Z7flag in MetaBuild for debug build
Core module
- 🏗️ Replace
M_PIwithlagrange::internal::pi - ✨ Add
compute_facet_circumcenter - ✨ Add
compute_facet_vector_area - 🐍 Add
SurfaceMesh.edgesin python binding - 🎨 Update
point_triangle_squared_distanceandpoint_segment_squared_distanceto 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
TriangeAABBTreeandEdgeAABBTree
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
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.tomlto haveurls.documentationandurls.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>tolagrange::SafeVector<T>which is an alias forstd::vector<std::shared_ptr<T>>when compiled for python bindingsstd::vector<T>otherwise, unchanged from before
- 🎨Updated
Scene::far_planeto 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
solvermodule! It manages dependencies across platforms and provides aliases for solver wrappers. Currently contains<lagrange/solver/DirectSolver.h>
Texture Signal Processing
- ✨New
texprocmodule! It provides texture-space operations such as filtering (smoothing, sharpening), stitching, compositing.
Lagrange Release v6.36.0
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
ioandscene - 🎨 New
scene_convertexample
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
Infrastructure
- 🏗️ Add existence check in
get_data_pathandget_data_folderfor loading unit test assets
Core and IO modules
- 🎨 Indexed attribute support for saving in MSH format
- 🐛 Throw exception for unsupported format in
load_sceneandload_simple_scene - 🐛 Bug fix in
split_triangle - 🐛 Bug fix in
map_attribute - 🎨 Add centroid-fan support in
triangulate_polygonal_facets - ✨ New
split_facets_by_materialfunction
Filtering module
- 🎨 Support smoothing of multi-channel attribute