Skip to content

Releases: 3DGI/tyler

v0.4.1 - Native glTF

Choose a tag to compare

@balazsdukai balazsdukai released this 30 Apr 15:38

The main features of the new version:

  • The dependency on geoflow is completely removed, and the glTF conversion was ported to Rust.
  • Tyler can now read regular CityJSON files, CityJSONSeq files, and the legacy feature-files as input.
  • Improved parallelism so Tyler scales better with the available CPU cores.
  • Several existing bugs have been fixed in the glTF conversion and tileset generation, so implicit tilesets are fully functional.
  • Performance improvements throughout the codebase, resulting in significant speedups.

Added

  • Native GLB generation in Rust through cityjson-convert, so Tyler no longer depends on an external geoflow installation for export.
  • Optional intermediary tile materialization in CityJSONSeq format for debugging.
  • First-class cjindex input support for cityjsonseq, cityjson, and feature-files datasets.
  • --include-parent-attributes for 3DBAG/roofer-style parent-child datasets.
  • A just ci-check recipe and the GitHub Actions workflow that runs it.
  • ADRs and supporting documentation for the cjindex input model, CityJSONSeq exchange, and grid traversal changes.
  • A repo-local profiling workflow driven by just profile, scripts/profile-tyler.sh, and Geodepot-backed profile-by-name resolution.
  • Per-run profiling artifacts under docs/performance/runs/, including structured summaries for perf stat and Valgrind Massif.
  • Retention of raw profiling artifacts and Tyler output under the gitignored docs/performance/runs/raw/ tree for later analysis.
  • Runner selection for profiling sessions so perf and Massif can be run independently or together, with failed runs preserved for later inspection.
  • A focused CLI/debug regression test suite for intermediary tile preparation, debug data replay, grid export/load, tileset-only runs, and object-attribute mapping.
  • A just coverage recipe backed by cargo tarpaulin, plus a recorded baseline under docs/testing/coverage-baseline.md.

Changed

  • Tyler now resolves every input through cjindex; the old metadata.city.json + **/*.city.jsonl parser is gone. Tyler now takes a single dataset root input instead of separate --metadata and
    --features arguments.
  • Tile-model building now relies on cityjson_lib::ops::merge to reconcile mixed input transforms, so cjindex inputs with differing transforms no longer need local normalization.
  • Large cjindex runs are handled in page-sized chunks with thread-local index reuse, which cuts repeated reads during extent and tile processing.
  • Grid indexing for cjindex inputs now consumes decoded scan pages directly instead of paging references and issuing per-feature reads.
  • Grid vertex counting now accumulates directly into per-cell counts, avoiding per-feature vertex-cell sorting except for thresholded large-feature parallelism.
  • Tile conversion now uses thread-local CityIndex handles for cjindex reads and defers normal per-feature cleanup until after tile model merging.
  • The CityJSON-to-GLB pre-write path now skips redundant cleanup and filtering work where the GLB output would not change, and records extra timing information around the remaining hot spots.
  • Tyler no longer depends on an external geoflow-bundle installation for GLB export.
  • For implicit 3D Tiles, tiling is now performed in geographic coordinates.
  • 3D Tiles now use region bounding volumes instead of boxes.
  • --debug-dump-data now dumps bincode snapshots and intermediary per-tile CityJSONFeature streams under debug/, and RUST_LOG=debug follows the same dump path while also enabling debug logging.
  • --debug-load-data now continues to support partial replay from any available subset of dumped debug data, and --debug-load-grid now actively reloads exported grid.tsv and features.tsv data
    for quadtree recomputation.
  • The CLI debug/export surface was consolidated: --debug-tile-inputs became --debug-dump-data, --grid-export became --debug-dump-grid, --grid-export-features became
    --debug-dump-grid-features, --grid-file became --debug-load-grid, --3dtiles-tileset-only became --debug-3dtiles-tileset-only, and --geometric-error-factor became
    --3dtiles-geometric-error-factor with the -e shorthand removed.
  • --object-attributes now accepts comma-separated name:type mappings and still subsets and coerces CityObject attributes before GLB export.
  • --include-parent-attributes now copies inherited parent attributes even when the parent object type itself is not selected.
  • --3dtiles-metadata-class now defaults to citymodel.
  • When no --lod-* override is supplied, Tyler now keeps the highest available LoD per CityObject by default.
  • CityObject type and LoD filtering now run once through the shared cjindex filtering path before extent, grid, tile, and export decisions, so tile bounds and output content use the same retained
    geometry.
  • README, Dockerfiles, Nix, and bundled resources were updated for the new pipeline.

v0.3.14

Choose a tag to compare

@balazsdukai balazsdukai released this 22 Oct 11:19

Fixed

  • Median calculation in compute_grid_statistics was incorrect. The case when 0-2 grid cells had vertices was not
    handled correctly.

v0.3.13

Choose a tag to compare

@balazsdukai balazsdukai released this 29 Jul 19:55
  • Add --verbose-geof flag to run geof in verbose mode
  • Update to geoflow-bundle to 2025.07.15
  • Do not write empty tiles

v0.3.12

Choose a tag to compare

@balazsdukai balazsdukai released this 22 May 11:28
  • Fix bbox update that causes index out of bounds
  • Update to geoflow-bundle 2025.02.12

v0.3.11

Choose a tag to compare

@balazsdukai balazsdukai released this 25 Jul 12:32

Fixed

  • If there is only a single tile, the root contains the content and the tileset geometricError is
    0.00. (#45)

v0.3.10

Choose a tag to compare

@balazsdukai balazsdukai released this 11 Mar 09:05

Changed

  • Update geoflow-bundle docker image

Added

  • The smooth-normals and simplification-max-error options

v0.3.9

Choose a tag to compare

@balazsdukai balazsdukai released this 09 Dec 04:45

Fixed

  • Parsing CityObjects without a geometry member
  • Median vertex count from a single CityObject

Added

  • A python script to adjust the geometric_error in an existing tileset (resources/python/adjust_geometric_error.py)

v0.3.8

Choose a tag to compare

@balazsdukai balazsdukai released this 18 Sep 08:06

Changed

  • Remove debug info from release build
  • Geometric error above the leafs defaults to 12
  • Update geoflow-bundle docker image

v0.3.7

Choose a tag to compare

@balazsdukai balazsdukai released this 21 Aug 08:03

Fixed

  • Geometric error calculation for the parents of the deepest leaves, where the leaf has an edge length of the grid cellsize.
  • Replace maxz in leaf content if minz is greater than maxz.
  • Tile bounding volume when tile is empty.
  • Fixed the hardcoded timeout.

Added

  • Set content bounding volume from tile bounding volume with the --3dtiles-content-bv-from-tile option. Required when the tile content is clipped to the tile's extent, for example for terrain.
  • Write quadtree content bounding box to .tsv with --grid-export.
  • Log all arguments in debug.
  • Split an explicit tileset to external tilesets if the tree is deep.
  • GitHub Action for publishing to DockerHub to 3dgi/tyler (#40), see https://hub.docker.com/r/3dgi/tyler

Changed

  • Debug data, incl. --grid-export, is written to the debug directory within the --output directory.
  • Remove logging from geof. Speeds up the conversion and fixes the extreme memory consumption when geof emits a large amount of messages.
  • Use BufWriter for writing the input paths.
  • Implement parallel computation for the extent, where the direct subdirectories of --features are visited in parallel (but their contents are processed sequentially).
  • Floats in the 3D Tiles tileset.json are written with 2 decimals
  • Implement parallel indexing of the features, where the direct subdirectories of --features are visited in parallel (but their contents are processed sequentially).
  • The grid is centered at the computed extent, instead of matching their origin.
  • Rename tiles directory to t to save space in the tileset.json
  • The tile content bounding volume, content.boundingVolume, is not added to the tile content anymore. You need to enable this option if you want to include the content bounding volumes. Enable it with --3dtiles-content-add-bv.
  • The grid's cell size is adjusted so that it is possible to construct a tightly fit square of 4^n cells. The final cell size will be larger than what is set with --grid-cellsize.

v0.3.6

Choose a tag to compare

@balazsdukai balazsdukai released this 17 Jul 13:05

tyler 0.3.6 (2023-07-17)

Changed

  • The --grid-export switch does not export the feature centroids anymore. Use the --grid-export-features if you want to export the feature centroids together with the grid cells.
  • Write both pruned and unpruned tilesets. Unpruned tiles are only written in debug mode.
  • Reduced the logging in debug mode.

Fixed

  • Invalid subtree for implicit tiling, in case of very large areas (eg. the Netherlands).

Added

  • Write the world, quadtree and tiles_failed instances to bincode when running in debug mode. The instances can be loaded for debugging with the --debug-load-data, in which case tyler will load the instance data instead of generating it.
  • Describe how to generate debug data.