Py3dtiles is a command-line Python library and tool for generating, reading and modifying 3D Tiles dataset. You can use it alone or integrate it into your own Python application.

Version 7.0.0 has just been released, it's time to take a little retrospective on the last few years!

The community and a new maintainer

We welcome a new maintainer: Lorenzo Marnat (Liris). Liris has contributed very significantly to py3dtiles and has carried out significant R&D work on their fork and via the py3dtilers application. For several months, Lorenzo has been carrying out the work of integration into the common core, a real painstaking task that is so necessary. Integrating him into the team was therefore the logical step in this process.

This means that py3dtiles is no longer an Oslandian-only project! This is a very important step in the development of a truly community project and we are very happy to have him on the team.

As a result, some changes have been adopted to make py3dtiles more independent of Oslandia. We hope to encourage external contributions and the involvement of entities other than Oslandia and Liris:

  • The code repository has been moved to its own organization: https://gitlab.com/py3dtiles/py3dtiles. We took the opportunity to rename the master branch to main (so that we don't deviate from gitlab new default branch name).
  • The website is now hosted at https://py3dtiles.org. A redirection of the old site has been implemented, but we still recommend updating your web bookmarks.
  • We now have a document describing governance: GOVERNANCE.md, which describes how the community works.
  • And we now have a chat channel on matrix.org!

IGN Lidar HD dataset, converted with py3dtiles and viewed with giro3d

Functional developments

3Dtiles support improvements

In version 2, py3dtiles still suffered from the absence of these few classes describing 3Dtiles concepts, and which are now present in version 7:

  • BoundingVolumeBox
  • TileSet
  • Tile
  • Extension

Feature tables are now supported for b3dm in addition to pnts.

New formats

Py3dtiles now supports PLY (point cloud only) and LAZ files.

XYZ and CSV support has been improved, with auto-detection of the CSV format.

py3dtiles merge

This is a new command allowing you to generate a tileset from 2 other tilesets. For the moment the generation of root tiles is quite naive, but should work very well with point clouds.

Other features

It is now possible to export point cloud classifications into pnts.

Support for batch tables has been added.

Technical improvements

Packaging

Optional dependencies

With support for additional formats, the number of py3dtiles dependencies increases significantly. We've created optional dependency sections, to avoid asking users to install libraries for formats they don't use.

Docker image

We are now publishing docker images to the gitlab registry and docker hub.

Windows support

Initial work to support Windows has been done, but work remains to be done to produce an .exe to facilitate deployment.

Code quality

A lot of effort has been made to make contributing more enjoyable and overall improve the quality of the code. Automatic code analyzers have been implemented, including linters and a SonarCloud.

We have made a specific effort to type our function and variable declarations with the new possibilities offered by modern versions of Python.

Future

The main point will be support for geometries in the multi-process conversion process launched by py3dtiles convert. This will then provide support for geometric formats, in particular IFC! (But also, improved PLY support, PostGIS tables, OBJs, etc.).

Other improvements are of course in the works.

Get involved!

Py3dtiles is community software and will do better if you participate! Testing, opening tickets, even contributing or financing are actions that are very useful for the project. The community contribution guide is here. Alternatively, do not hesitate to contact us to discuss!