Package detail

3d-tiles-tools

CesiumGS3.1kApache-2.00.5.0

3D Tiles tools

3D Tiles

readme

3D Tiles Tools

Overview

The 3D Tiles Tools are a collection of tools and utilities for converting, optimizing, processing, and analyzing 3D Tiles data.

Installation

To install the 3D Tiles Tools locally into a directory, run

npm install 3d-tiles-tools

If you want to work directly with a clone of the Git repository, see Developer Setup.

Command Line Usage

Note: All input- and output paths for the 3D Tiles Tools are case sensitive. Even though some operating systems (like Windows) usually do not differentiate between uppercase and lowercase, the file- and directory names that are given at the command line must exactly match the actual names.

Common command line options for each function:

Flag Description Required
-i, --input Input file or directory Yes
-o, --output Output file or directory Yes
-f, --force Overwrite output if it exists No, default false
--logLevel The log level. Valid values are trace, debug, info, warn, error, fatal, and silent No, default info
--logJson Print log messages as JSON instead of pretty-printed No, default false

Command line tools for tilesets

gzip

Gzips the input tileset.

npx 3d-tiles-tools gzip -i ./specs/data/TilesetOfTilesets/ -o ./output/TilesetOfTilesets-gzipped/

Additional command line options:

Flag Description Required
-t, --tilesOnly Only gzip tiles. No, default false

(Note: The exact set of files that are covered with tilesOnly is not specified yet)

ungzip

Ungzips the input tileset.

npx 3d-tiles-tools ungzip -i ./specs/data/TilesetOfTilesets-gzipped/ -o ./output/TilesetOfTilesets-ungzipped/

combine

Combines all external tilesets into a single tileset.

Note about the difference between merge and combine: The combine command takes a tileset that already refers to external tilesets. And it creates a new tileset where the former external tilesets are "inlined". So the result will be a single tileset, without external references.

Example:

npx 3d-tiles-tools combine -i ./specs/data/combineTilesets/input -o ./specs/data/combineTilesets/output

merge

Merge multiple tilesets into a single one that refers to the input tilesets as external tilesets.

Note about the difference between merge and combine: The merge command creates a new tileset that refers to the given ones as external tilsets. This means that the resulting tileset is not complete without the ones that are used as the inputs for the merge command.

Example:

npx 3d-tiles-tools merge -i ./specs/data/mergeTilesets/TilesetA -i ./specs/data/mergeTilesets/sub/TilesetA -o ./specs/data/mergeTilesets/output

mergeJson

Merge multiple tilesets into a single tileset JSON file that refers to the input tilesets as external tilesets.

This differs from the merge command insofar that it does not copy the input tilesets to the output directory, but only creates the JSON file for the merged tileset, which uses relative paths to refer to the input tilesets. A common use case for this is to create a tileset JSON file in a certain directory, with the input tilesets being located in subdirectories.

Example:

npx 3d-tiles-tools mergeJson -i ./example/TilesetA/tileset.json -i ./example/TilesetB/tileset.json -o ./example/mergedTileset.json

upgrade

Upgrade a tileset to the latest 3D Tiles version.

npx 3d-tiles-tools upgrade -i ./specs/data/TilesetOfTilesets/tileset.json -o ./output/upgraded

Additional command line options:

Flag Description Required
--targetVersion The target version to upgrade to. May be 1.0 or 1.1. No. Default: 1.0
--options All arguments past this flag are consumed by gltf-pipeline. No

By default, this will upgrade legacy tilesets to comply to the 3D Tiles 1.0 specification.

These upgrades include:

  • The asset version will be set to '1.0'.
  • Tile content that uses a url will be upgraded to use uri.
  • The refine value will be converted to be in all-uppercase.
  • glTF 1.0 models in B3DM or I3DM will be upgraded to glTF 2.0.

Implementation note:

Internally, the conversion of glTF 1.0 assets into glTF 2.0 assets is performed by processing the GLB data with gltf-pipeline. This will include the attempt to convert materials that are given with the KHR_technique_webgl extension into PBR materials. Options that are given after the --options parameter are passed to gltf-pipeline. These options may include the names of uniform variables that should indicate whether a certain texture is used as the "base color" texture of a PRB material. For example, when a tileset contains B3DM or I3DM data that contains GLB with the KHR_technique_webgl extension where the uniform names u_diff_tex and u_diffuse indicate that a texture should be a base color texture, then the command line

npx 3d-tiles-tools upgrade -i ./input/tileset.json -o ./output/tileset.json --options --baseColorTextureNames u_diff_tex --baseColorTextureNames u_diffuse

can be used.

When --targetVersion 1.1 is given, then this will upgrade legacy tilesets to comply to the 3D Tiles 1.1 specification, including an attempt to convert PNTS, B3DM, and I3DM tile content into glTF assets. The upgrades then include:

  • The asset version will be set to '1.1'.
  • Tile content that uses a url will be upgraded to use uri.
  • The refine value will be converted to be in all-uppercase.
  • glTF 1.0 models in B3DM or I3DM will be upgraded to glTF 2.0.
  • The 3DTILES_content_gltf extension declaration will be removed.
  • PNTS, B3DM, I3DM, and CMPT content will be converted to glTF.

Implementation note:

The conversion of the legacy tile formats to glTF should be considered as a preview feature. There are corner cases where the conversion is not possible generically - for example, when I3DM tile content contains glTF data that contains animations, or when a CMPT (indirectly) contains multiple glTF assets that already use the EXT_structural_metadata extension. The conditions under which the conversion is possible may be specified more explicitly in the future.

convert

(This replaces the databaseToTileset and tilesetToDatabase commands)

Convert between tilesets and tileset package formats.

npx 3d-tiles-tools convert -i ./specs/data/TilesetOfTilesets/tileset.json -o ./output/TilesetOfTilesets.3tz

Additional command line options:

Flag Description Required
--inputTilesetJsonFileName The name of the input file that should be considered to be the top-level tileset JSON file No

The input- and output arguments for this command may be

  • The name of a directory that contains a tileset.json file (or the full path to a tileset JSON file)
  • The name of a .3tz file
  • The name of a .3dtiles file

The input may also be a .zip file that contains a tileset.json file.

When the input is a .zip file or a directory that contains multiple tileset JSON files, and none of them is called tileset.json, then the --inputTilesetJsonFileName argument can be used to define the JSON file that should be considered to be the top-level tileset JSON. For example, when there is an ambiguous.zip tile that does contain two JSON files called tilesetA.json and tilesetB.json, the following command can be used to designate tilesetA.json as the top-level tileset JSON file:

npx 3d-tiles-tools convert -i ./specs/data/convert/ambiguous.zip -o ./output/ambiguous.3tz --inputTilesetJsonFileName tilesetA.json

databaseToTileset

Deprecated. This functionality is now offered via the convert command.

tilesetToDatabase

Deprecated. This functionality is now offered via the convert command.

Command line tools for tile content

glbToB3dm

Creates a b3dm from a glb with an empty batch table.

npx 3d-tiles-tools glbToB3dm -i ./specs/data/CesiumTexturedBox/CesiumTexturedBox.glb -o ./output/CesiumTexturedBox.b3dm

glbToI3dm

Creates a i3dm from a glb with a single instance at position [0, 0, 0] and an empty batch table.

npx 3d-tiles-tools glbToI3dm -i ./specs/data/CesiumTexturedBox/CesiumTexturedBox.glb -o ./output/CesiumTexturedBox.i3dm

b3dmToGlb

Extracts the glb from a b3dm.

npx 3d-tiles-tools b3dmToGlb -i ./specs/data/batchedWithBatchTableBinary.b3dm -o ./output/extracted.glb

i3dmToGlb

Extracts the glb from a i3dm.

npx 3d-tiles-tools i3dmToGlb -i ./specs/data/instancedWithBatchTableBinary.i3dm -o ./output/extracted.glb

cmptToGlb

Extracts the glb models from a cmpt tile. If multiple models are found a number will be appended to the output file name.

npx 3d-tiles-tools cmptToGlb -i ./specs/data/composite.cmpt -o ./output/extracted.glb

splitCmpt

Split a cmpt tile into its inner tiles. The output file name for each inner tile will be determined by appending a number to the given output file name, and an extension that depends on the type of the inner tile data.

npx 3d-tiles-tools splitCmpt -i ./specs/data/compositeOfComposite.cmpt -o ./output/inner --recursive

For an input file compositeOfComposite.cmpt that contains a composite tile that contains one B3DM and one I3DM content, this will generate the files inner_0.b3dm and inner_1.i3dm in the output directory.

Additional command line options:

Flag Description Required
--recursive Whether the split operation should be applied to inner tiles that are composite No, default: false

convertB3dmToGlb

Convert a b3dm file into a glTF asset that uses glTF extensions to represent the batch- and feature table information.

npx 3d-tiles-tools convertB3dmToGlb -i ./data/example.b3dm -o ./data/example.glb

convertPntsToGlb

Convert a pnts file into a glTF asset that uses glTF extensions to represent the point properties and batch- and feature table information.

npx 3d-tiles-tools convertPntsToGlb -i ./data/example.pnts -o ./data/example.glb

convertI3dmToGlb

Convert an i3dm file into a glTF asset that uses glTF extensions to represent the batch- and feature table information. This conversion may be lossy if the GLB of the input i3dm contains animations.

npx 3d-tiles-tools convertI3dmToGlb -i ./data/example.i3dm -o ./data/example.glb

optimizeB3dm

Optimize a b3dm using gltf-pipeline.

npx 3d-tiles-tools optimizeB3dm -i ./specs/data/batchedWithBatchTableBinary.b3dm -o ./output/optimized.b3dm

Additional command line options:

Flag Description Required
--options All arguments past this flag are consumed by gltf-pipeline. No

Examples:

To use Draco compression, pass the draco flags

npx 3d-tiles-tools optimizeB3dm -i ./specs/data/Textured/batchedTextured.b3dm -o ./output/optimized.b3dm --options --draco.compressMeshes --draco.compressionLevel=9

This example optimizes the b3dm and compresses the meshes using Draco, with a high compression level.

optimizeI3dm

Optimize an i3dm using gltf-pipeline.

npx 3d-tiles-tools optimizeI3dm -i ./specs/data/instancedWithBatchTableBinary.i3dm -o ./output/optimized.i3dm

See optimizeB3dm for further examples.

updateAlignment

Update a B3DM, I3DM, PNTS or CMPT file to ensure that the alignment requirements for the batch- and feature tables and the tile data as a whole are met. For CMPT tile data, the data of inner tiles will be updated recursively.

npx 3d-tiles-tools updateAlignment -i ./specs/data/updateAlignment/testComposite.cmpt -o ./output/testCompositeFixed.cmpt

analyze

Analyze the input file, and write the results to the output directory.

npx 3d-tiles-tools analyze -i ./specs/data/batchedWithBatchTableBinary.b3dm -o ./output/analyzed/

This will accept B3DM, I3DM, PNTS, CMPT, and GLB files (both for glTF 1.0 and for glTF 2.0), and write files into the output directory that contain the feature table, batch table, layout information, the GLB, and the JSON of the GLB. This is primarily intended for debugging and analyzing tile data. Therefore, the exact naming and content of the generated output files are not specified.

createTilesetJson

Create a tileset JSON file from a given set of tile content files.

Additional command line options:

Flag Description Required
--cartographicPositionDegrees An array of either two or three values, which are the (longitude, latitude) or (longitude, latitude, height) of the target position. The longitude and latitude are given in degrees, and the height is given in meters. No

If the input is a single file, then this will result in a single (root) tile with the input file as its tile content. If the input is a directory, then all content files in this directory will be used as tile content, recursively. The exact set of file types that are considered to be 'tile content' is not specified, but it will include GLB, B3DM, PNTS, I3DM, and CMPT files.

Examples:

npx 3d-tiles-tools createTilesetJson -i ./input/ -o ./output/tileset.json --cartographicPositionDegrees -75.152 39.94 10

This creates the specified tileset JSON file, which will refer to all tile content files in the given input directory as its tile contents. The root node of the tileset will have a transform that will place it at the given cartographic position.

Pipeline

Execute a sequence of operations that are described in a JSON file.

Note: The pipeline execution feature is preliminary. Many aspects of the pipeline definition, including the JSON representation and the exact set of operations that are supported as parts of pipelines may change in future releases.

The basic structure of a pipeline JSON file is summarized here:

  • A pipeline has an input and output, which are the names of a tileset directory or package
  • A pipeline has an array of 'tileset stages'
  • A tileset stage has a name and a description
  • A tileset stage can carry information about the content types that it is applied to
  • A tileset stage has an array of 'content stages'
  • A content stage has a name and a description

A simple example pipline may therefore look like this:

{
  "input": "./specs/data/TilesetOfTilesetsWithUris",
  "output": "./output/TilesetOfTilesetsWithUris.3tz",
  "tilesetStages": [
    {
      "name": "_b3dmToGlb",
      "description": "Convert B3DM to GLB",
      "contentStages": [
        {
          "name": "b3dmToGlb",
          "description": "Convert each B3DM content into GLB"
        }
      ]
    }
  ]
}

The name of a tileset- or content stage can refer to a predefined set of operations that can be executed. If a name is not one of the known operations, it should start with an _ underscore.

The description of a tileset- or content stage is intended as a human-readable summary, to be shown as log output.

The predefined operations largely correspond to the command-line functionality.

The known tileset stages are:

  • Modification:
    • upgrade: Upgrade the input tileset to the latest version. Details about what that means are omitted here.
    • combine: Combine all external tilesets of the input tileset, to create a single tileset
  • Compression:
    • gzip: Apply GZIP compression to all files (with optional filters)
    • ungzip: Uncompress all files that are compressed with GZIP

The known content stages are:

  • Conversion:
    • glbToB3dm: Convert all GLB tile contents into B3DM
    • glbToI3dm: Convert all GLB tile contents into I3DM (with the GLB being the only instance)
    • b3dmToGlb: Convert all B3DM tile contents into GLB (assuming that the B3DM is only a wrapper around GLB)
    • i3dmToGlb: Convert all I3DM tile contents into GLB (assuming that the I3DM is only a wrapper around GLB)
    • separateGltf: Convert all GLB tile contents into .gltf files with external resources
  • Optimization:

    These operations receive an options object, which is an untyped object carrying the options that are passed to gltf-pipeline for the optimization.

    • optimizeGlb: Optimize GLB tile content, using gltf-pipeline
    • optimizeB3dm: Optimize the GLB payload of a B3DM tile content, using gltf-pipeline
    • optimizeI3dm: Optimize the GLB payload of a I3DM tile content, using gltf-pipeline

An example of a pipeline that combines a sequence of multiple operations is shown in examplePipeline.json.

Developer Setup

When the tools are not installed as a package from NPM, but supposed to be used directly in a cloned repository, then the command line usage is as follows:

  • Clone the repository into the current directory:
    git clone https://github.com/CesiumGS/3d-tiles-tools
  • Change into the directory of the cloned repository:
    cd 3d-tiles-tools
  • Install the tools and all dependencies:
    npm install

After this, the tools can be executed using the same command line options as described above - for example:

npx ts-node .\src\cli\main.ts gzip -i ./specs/data/TilesetOfTilesets/ -o ./output/TilesetOfTilesets-gzipped/

See the implementation notes for details about the project structure.

changelog

Change Log

0.5.0 - 2025-02-17

  • Fix the upgrade command to properly handle a gltfUpAxis that may be defined in the tileset JSON, via #166
  • Breaking: Change the TilesetSource and TilesetTarget interfaces to be completely asynchronous, via #167
    • Clients that used the functions from this interface will generally just have to await the results of calling these functions
    • As part of this change, the TraversedTile now returns a subtree URI only for the implicit tileset root, and not for the explicit tile that defines the implicit tiling
  • Breaking: Consistently use undefined instead of null as return types, via #169
    • Clients will have to update their checks from null to undefined accordingly. This change does not apply to glTF extension implementations that are based on glTF-Transform.
  • Handle the presence of the CESIUM_RTC extension in glTF 2.0 during the upgrade, via #172
  • Fix several smaller bugs for reading 3TZ files, e.g. ones that used 'extras' in the ZIP file headers, via #173

0.4.4 - 2024-12-03

  • Updated the better-sqlite3 dependency from 8.0.1 to 11.5.0 to support NodeJS 22
  • Updated the NodeJS version requirement to >=18 for compatibility with latest CesiumJS version
  • Fixed a bug where applying the merge or mergeJson command to multiple implicit tilesets created an invalid result, via #161
  • Fixed a bug where resolving binary glTF data failed for glTF that used the EXT_meshopt_compression glTF extension with fallback buffers, via #160

0.4.3 - 2024-09-14

  • Fixed the handling of legacy B3DM files that contain glTF 1.0 data with texture coordinates that are stored as "quantized" 3D coordinates, via #148
  • Fixed the upgrade command for targetVersion 1.1 for the case that the input data contains very old B3DM files that do not define a BATCHID attribute, via #147.
  • Added a mergeJson command to create a tileset JSON that refers to other tilesets as external tilesets, without copying the input tilesets to the output directory, via #140 and #143.
  • Fixed a bug where the combine command did not properly update the content URIs when an external tileset in a subdirectory referred to another external tileset in the same subdirectory, via #139
  • Added an updateAlignment command that can process a B3DM, I3DM, PNTS, or CMPT file, to ensure that the alignment requirements for the batch- and feature table and the tile data as a whole are met, via #136

0.4.2 - 2024-05-15

  • 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).

0.4.1 - 2024-02-20

  • 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.

0.4.0 - 2024-02-06 (not released)

  • 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)
  • 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 or undefined 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

0.3.2 - 2023-11-01

  • The upgrade command is now removing empty tile.children arrays, setting the children to be undefined 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:
    • Added meshoptimizer and registered the corresponding encoder/decoder in the preconfigured glTF-Transform IO instance that is used internally (via #74)
    • Exposed all classes (except for the pipeline classes) for internal use (via #75)

0.3.1 - 2023-10-10

  • 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, and silent)
      • --logJson to print log messages as JSON instead of pretty-printed
  • The convertI3dmToGlb functionality has been added to the CLI (in addition to the existing convertB3dmToGlb and convertPntsToGlb)
  • Internal restructuring (mainly for the use of the 3d-tiles-tools in the 3d-tiles-validator):
    • Exposed and generalized GltfUtilities: It now offers a function extractDataFromGlb that returns the JSON- and binary buffer from arbitrary glTF 1.0 or 2.0 buffers
    • Extracted a BinaryMetadata structure from the former BinaryPropertyTable
    • 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)

0.3.0 - 2023-08-30

  • Transparently decompress entries in 3tz files when they are compressed with DEFLATE (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 called tileset.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 called tileset.json), the name of the top-level tileset JSON file can be defined with the --inputTilesetJsonFileName command line argument.
  • 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 the EXT_structural_metadata, EXT_mesh_features, and EXT_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 behavior of b3dmToGlb and i3dmToGlb 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 single tile.content is used in these cases, and the tile.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

0.2.1 - 2023-04-27

  • 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 and ungzip 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.
  • Allow passing options to the upgrade command that will be forwarded to gltf-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 in BasicTilesetProcessor

0.2.0 - 2023-04-14

  • Rewrite

0.1.3 - 2017-04-14

  • Cleaned up project files and upgraded dependencies. #70

0.1.2 - 2017-04-07

  • Breaking changes
    • extractB3dm and extractI3dm now return the feature table JSON and batch table JSON instead of buffers.
    • glbToB3dm and glbToI3dm now take feature table JSON and batch table JSON instead of buffers.
  • Handle b3dm tiles with the legacy 24-byte header. #69

0.1.1 - 2017-03-15

  • Breaking changes
    • Renamed tileset2sqlite3 to tilesetToDatabase.
  • Added databaseToTileset for unpacking a .3dtiles file to a tileset directory. #62
  • Added glbToI3dm and optimizeI3dm 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 the cmptToGlb command line tool. #42

0.1.0 - 2016-12-16

  • Initial release.