- When upgrading a tileset to version 1.1, then the
upgrade
command did not yet convert CMPT files into GLB. This functionality was now added via #117, including an attempt to merge multiple GLB files that contain the Cesium glTF metadata extensions. Details of the merge process are not yet specified, but should cover the most common cases that appear during the conversion of CMPT files. - When upgrading B3DM to GLB, it was possible that the GLB that was contained in the B3DM contained the same accessor for the batch ID attribute in multiple mesh primitives. This could cause the data to be duplicated during the conversion to feature IDs. This was fixed in #124.
- Fixed a bug where the
combine
operation discarded the transforms and bounding volumes of the input tilesets (#113). - The
createTilesetJson
command has been extended to receive an optional cartographic position, which serves as the position of generated tileset (#105).
- The packages that have been introduced in version
0.4.0
have been merged back into a single package. Details about the structure can be found in the implementation notes.
- The 3D Tiles Tools have been split into multiple packages.
For users of the command-line interface, this should not make a noticable difference: The installed package declares all other packages as its dependencies, and installs them transparently.
Structurally, the packages are now organized as a 'monorepo', meaning that all packages are maintained in this repository, in a
packages
subfolder. Further details about the structure can be found in the updated implementation notes. - Improved the computation of bounding volumes in #79
- Some bounding volumes had been computed as bounding spheres or as non-tight-fitting oriented bounding boxes. By integrating the dito.ts library, it is now possible to compute tighter-fitting oriented bounding boxes for tile content (#58) and creating bounding boxes instead of bounding spheres when applying the
merge
command (#69)
- Some bounding volumes had been computed as bounding spheres or as non-tight-fitting oriented bounding boxes. By integrating the dito.ts library, it is now possible to compute tighter-fitting oriented bounding boxes for tile content (#58) and creating bounding boxes instead of bounding spheres when applying the
- Fixed a bug where
b3dmToGlb
left invalid "padding" bytes at the end of GLB data #82 - Added a
splitCmpt
function to split a composite (CMPT) file into its elements #78 - Extended the support for instanced 3D model (I3DM) files that used a URI to refer to an external GLB file #45
- Fixed a bug where the upgrade of batched 3D models (B3DM) into GLB files with metadata caused errors when the B3DM contained
null
orundefined
strings in its batch table #96 - Fixed a bug where GLB files could not be processed (and caused crashes) when they did not contain a
BIN
chunk #94 - Extended the upgrade of legacy B3DM that contained glTF 1.0 data with oct-encoded (2D) normals. These normals are now decoded into 3D normals as part of the upgrade #98
- The
upgrade
command is now removing emptytile.children
arrays, setting thechildren
to beundefined
instead (via #73) - Fixed a bug that prevented the content of external tileset to be processed in certain operations (#76)
- Fixed a runtime error that could occur when encoding many textures to KTX (#77)
- Internal:
- Integrated a dedicated logging library (via #61)
- By default, only few, informative messages are logged to the console
- There are additional command-line arguments:
--logLevel
can be used to set the log level (trace
,debug
,info
,warn
,error
,fatal
, andsilent
)--logJson
to print log messages as JSON instead of pretty-printed
- The
convertI3dmToGlb
functionality has been added to the CLI (in addition to the existingconvertB3dmToGlb
andconvertPntsToGlb
) - Internal restructuring (mainly for the use of the
3d-tiles-tools
in the3d-tiles-validator
):- Exposed and generalized
GltfUtilities
: It now offers a functionextractDataFromGlb
that returns the JSON- and binary buffer from arbitrary glTF 1.0 or 2.0 buffers - Extracted a
BinaryMetadata
structure from the formerBinaryPropertyTable
- The different representations of
ENUM
values (namely, as numbers or as strings) had not been handled correctly (via #71) - Internal fixes for KTX encoding (via #40 - not yet part of a public functionality)
- Exposed and generalized
- Transparently decompress entries in
3tz
files when they are compressed withDEFLATE
(via #55)- The exact behavior in terms of entry compression is not specified yet. This is tracked in #56
- Extended the handling of tileset JSON files for the
convert
command (via #54)- The
convert
command did not anticipate that the.3dtiles
and.3tz
formats require the top-level tileset file to be calledtileset.json
. This is enforced now. For cases where the input is ambiguous (for example, for a ZIP file or a directory that contain multiple tileset JSON files, with none being calledtileset.json
), the name of the top-level tileset JSON file can be defined with the--inputTilesetJsonFileName
command line argument.
- The
- The
upgrade
command has been generalized (via #41 and #52)- The default behavior of the the
upgrade
command remained unaffected - When passing in the
--targetVersion 1.1
command line argument, then the upgrade will attempt to do a more extensive upgrade of the (legacy) PNTS, B3DM, and I3DM tile formats. It will convert these tile formats into glTF assets that use theEXT_structural_metadata
,EXT_mesh_features
, andEXT_instance_features
extensions, to represent the former batch- and feature table information. This is intended as a preview feature. The CMPT format can not yet be upgraded. There are corner cases (for example, animations in the glTF assets that are used for I3DM) that can not generically be translated into glTF assets with extensions. The scope and configurability of the command will be extended and specified more extensively in the future.
- The default behavior of the the
- The behavior of
b3dmToGlb
andi3dmToGlb
commands has changed: They originally upgraded any glTF 1.0 content that they encountered to glTF 2.0. Now, they only extract the actual glTF data as it is. - Operations that modified the content of tiles (for example, converting B3DM to GLB) only had been applied to the top-level input tileset. Now, these operations by default are also applied to the contents of external tilesets that are referred to from the top-level tileset (via #42 and #48)
- Certain operations on tilesets caused the output tileset to use a
tile.contents[]
array even when there only was a single content. This was fixed in #38, to make sure that a singletile.content
is used in these cases, and thetile.contents[]
array only when there actually are multiple contents. - Added further
structure
classes that are (largely) auto-generated from JSON schema (via #36)- The classes in the
structure/TileFormats
package represent the batch- and feature table JSON of the (legacy) tile formats - The classes in the
structure/Style
package represent the JSON structures for 3D Tiles styling
- The classes in the
- Internal refactorings and bugfixes for tileset processing and pipelines:
- The tileset JSON had been written in gzipped form if and only if it was read in gzipped form, to mimic the previous behavior of functions like
combineTilesets.js
. - This caused the tileset JSON to not be zipped even when the
gzip
command was applied (#22). - Now, the tileset JSON will always be written in unzipped form by default.
- The
gzip
andungzip
commands are implemented as 'tileset stages' that do not apply any special handling to the tileset JSON. - The filters for included- and excluded content types have been mored from the 'content stage' to the 'tileset stage' accordingly, because the content stages already are specific for certain content types, and will check these types internally.
- The default handling of the case that the included content types are
undefined
has changed: Content types will be included by default now. To not include anything, and empty array can be used.
- The tileset JSON had been written in gzipped form if and only if it was read in gzipped form, to mimic the previous behavior of functions like
- Allow passing options to the
upgrade
command that will be forwarded togltf-pipeline
- Added (auto-generated) TSDoc documentation to the 3D Tiles classes in the
structure
directory - Fixed a bug in the
analyze
command that caused a wrong payload length to be reported - Fixed a bug that caused single-element
contents
arrays to be created in tiles inBasicTilesetProcessor
- Rewrite
- Cleaned up project files and upgraded dependencies. #70
- Breaking changes
extractB3dm
andextractI3dm
now return the feature table JSON and batch table JSON instead of buffers.glbToB3dm
andglbToI3dm
now take feature table JSON and batch table JSON instead of buffers.
- Handle b3dm tiles with the legacy 24-byte header. #69
- Breaking changes
- Renamed
tileset2sqlite3
totilesetToDatabase
.
- Renamed
- Added
databaseToTileset
for unpacking a .3dtiles file to a tileset directory. #62 - Added
glbToI3dm
andoptimizeI3dm
command line tools. #46 - Handle b3dm tiles with the legacy 20-byte header. #45
- Added
extractCmpt
to extract inner tiles from a cmpt tile and thecmptToGlb
command line tool. #42
- Initial release.