Repository navigation
v1.1.0-beta.1
Pre-release
Pre-release
·
21 commits
to main
since this release
This releases contains several bugfixes, stability improvements, and new functionalities. Some highlights include:
- significantly improved geometric validity of the generated building models; in the order of 10x less errors with val3dity. This was achieved by detecting and fixing locally 2D arrangement configurations that led to e.g. non-manifold edges after extrusion and self intersecting faces. Likewise it is now detected if a slanted roofplane would be extruded to under the floor elevation, the below the floor part is now cut off from the footprint. This work was sponsored via the project "Innovatieve algoritmes voor betrouwbare, stedelijke 3D-modellen".
- Reorganised configuration file. Parameters are now divided into Input, Crop, Reconstruction, and Output sections. Old parameters locations will give a deprecation warning, and be removed in v2.0.
- All reconstruction parameters are now configurable via the configuration file.
- A new
unit-scaleparameter that scales parameter values that are defined in metres. For example if you data is in feet, this can be used to get good results with the default parameter values. One user also reported that a scale of 0.55 can help with getting better results on low density point clouds.
Added
- A github sponsorship button. Software doesn't maintain itself. If you are a (professional) user of roofer and have an interest in ensuring that roofer is maintained, bugs are fixed and new features are added, consider supporting the project through sponsorship. You can make one-off donations via this link. If you would like to sponsor the roofer project in another way, or need an invoice, please reach out to us via email.
- Repair of non-manifold and self-intersecting roof junctions during arrangement snapping. This prevents certain geometric errors like non-watertight meshes, and highly non-planar faces that could previously happen in complex roof arrangements. See #168.
- Experimental optional per-tile triangulated terrain output as CityJSON
TINRelieffeatures, see the--terrainoption. Its output and configuration may change, and the feature may be removed in a future release. - A new
max-nodata-fractionconfiguration option to control the maximum fraction of nodata pixels in a building polygon that is allowed before a building pointcloud is considered insufficient. - New struct
roofer::reconstruction::ReconstructionConfigthat contains the configuration for every reconstruction stage. Field declarations are now the single source for defaults, descriptions, validation, nested TOML parsing, generated documentation, and Python bindings. - A nested C++
ReconstructOptionsAPI and correspondingreconstructoverload. The nested reconstruction configuration is also available from Python, including each component configuration that exposes public parameters. - Linux arm64 docker image.
Fixed
- More robust handling of OGC WKT payloads in LAS/LAZ files.
- Prevent roof-ground bow-ties by clipping roof faces against the terrain before extrusion. Fixes #17.
- Correct squared-distance tolerance comparisons during extrusion.
- Reject TOML integer values outside the supported
intrange instead of silently narrowing them. - Reject malformed or non-finite numeric CLI and TOML values instead of accepting numeric prefixes or propagating
NaN/infinity. CLI--no-options are now limited to boolean parameters, general CLI validators are applied consistently, and TOML syntax errors retain their source location and parser explanation.
Changed
- Application configuration is organised into
[input],[crop],[reconstruction], and[output]tables, with output attribute names under[output.attributes]and pointclouds under[[input.pointclouds]]. Deprecated root keys remain supported during 1.x, while canonical section values take precedence. - The pointcloud-insufficient test is now an absolute per-building density floor (
min-building-density, points/m²) instead of a tile-relativemean - 2·stdoutlier test. The old test depended the entire tile that was being processed, so the same building could be flagged differently between runs with different tiling — potentially skipping point-rich buildings and leaving them without geometry. The decision is now deterministic and depends only on the building's own data. - Region growing no longer uses a wall-clock time limit, which could make a building reconstruct with success on one run and fall back to LoD 1.1 on the next given identical input due to resource starvation with multithreading. The deterministic plane-count limit (
lod11-fallback-planes) is now the sole reconstruction-complexity cutoff. Thelod11-fallback-timebehavior is removed; its CLI flag and root configuration key are accepted but ignored with a deprecation warning during 1.x compatibility. - Reconstruction configuration now uses nested TOML tables such as
[reconstruction.plane-detector]and[reconstruction.arrangement-optimiser]. Core reconstruction stages receive their component configuration aggregates; pipeline-derived settings such as requested LoD and terrain availability are overlaid on local copies. - Reconstruction parameter descriptions now state physical and angular units where applicable; counts remain unit-free.
- All canonical reconstruction angle parameters now use degrees. Plane-detection normal, horizontal, and wall thresholds are expressed directly as angles instead of dot products, and the line-regularisation angle is no longer in radians. The legacy
plane-detect-normal-anglealias and compatibility API properties retain their 1.x dot-product semantics. - Reconstruction snapping and duplicate-vertex tolerances now use distances in metres instead of base-10 exponents. Existing defaults retain their previous effective distances.
- Added global
unit-scale(metres per input coordinate unit) to convert metre-based reconstruction, crop, and output parameters for input data that uses another unit. - Set the default cityjson scale in the transform object to 0.0001. This helps with improving geometric validity. The previous 0.001 setting regurlarly caused validity issues due to the relatively large quatisation error.
- Descriptor-generated TOML documentation and Python bindings omit reconstruction components that have no public parameters.
complexity-factornow directly controls the optimiser energy balance: the data term is weighted bycomplexity-factorand the smoothness term by1 - complexity-factor. The independentdata_multiplierandsmoothness_multipliercomponent options were removed.- The flattened C++
roofer::ReconstructionConfigremains as a 1.x compatibility adapter, while itsreconstructoverloads are deprecated. Its defaults and validation delegate to the nested configuration. - Low-level C++ component configuration member names were normalised to
snake_case, and obsolete members were removed. This is a source-breaking change for code that uses the component configuration structs directly; the flattenedroofer::ReconstructionConfigadapter does not cover those direct uses. - Legacy root-level reconstruction TOML keys remain accepted during 1.x, emit a destination-specific deprecation warning, and are applied before nested TOML values. CLI arguments retain the highest precedence. The
--lod12,--lod13,--lod22,--clip-terrain, and--complexity-factorflags remain supported without deprecation warnings. Other supported legacy reconstruction CLI flags remain accepted with deprecation warnings; several older names remain root-TOML-only aliases and are not accepted as CLI flags. - Use mesh centroid for volume calculation.
Reconstruction parameter mapping
Legacy root keys, and matching legacy CLI flags where available, map as follows:
| Legacy parameter | Nested TOML parameter | Notes |
|---|---|---|
lod12 |
[reconstruction] lod12 |
CLI flag remains supported. |
lod13 |
[reconstruction] lod13 |
CLI flag remains supported. |
lod22 |
[reconstruction] lod22 |
CLI flag remains supported. |
clip-terrain |
[reconstruction] clip-terrain |
CLI flag remains supported. |
lod13-step-height |
[reconstruction] lod13-step-height |
Relocated; legacy CLI flag is deprecated. |
h-terrain-strategy |
[reconstruction] h-terrain-strategy |
Relocated; legacy CLI flag is deprecated. |
complexity-factor |
[reconstruction.arrangement-optimiser] complexity-factor |
CLI flag remains supported. |
plane-detect-k |
[reconstruction.plane-detector] plane-neighbour-count |
Renamed; legacy CLI flag is deprecated. |
plane-detect-min-points |
[reconstruction.plane-detector] min-plane-points |
Renamed; legacy CLI flag is deprecated. |
plane-detect-epsilon |
[reconstruction.plane-detector] plane-epsilon |
Renamed; legacy CLI flag is deprecated. |
plane-detect-normal-angle |
[reconstruction.plane-detector] normal-angle-threshold |
Renamed; root TOML alias only. Legacy values remain unitless dot products and are converted to degrees. |
line-detect-epsilon |
[reconstruction.line-detector] distance-threshold |
Renamed; root TOML alias only. |
thres-alpha |
[reconstruction.alpha-shaper] alpha |
Renamed; root TOML alias only. |
thres-reg-line-dist |
[reconstruction.line-regulariser] distance-threshold |
Renamed; root TOML alias only. |
thres-reg-line-ext |
[reconstruction.line-regulariser] extension |
Renamed; root TOML alias only. |
lod11-fallback-planes |
[reconstruction.plane-detector] max-plane-count |
Renamed; deprecated legacy CLI flag and deterministic complexity cutoff. |
lod11-fallback-time |
[reconstruction.plane-detector] max-plane-count |
Deprecated CLI flag and root key are accepted but ignored; max-plane-count is the deterministic replacement. |