Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adds 3DTILES_content_gltf extension #427

Merged
merged 13 commits into from
Nov 6, 2020
Merged

Conversation

lilleyse
Copy link
Contributor

@lilleyse lilleyse commented Sep 21, 2020

Fixes #385

Direct Link Draft Version Changes
3DTILES_content_gltf 0.0.0 Initial draft

This extension allows a tileset to use glTF 2.0 and GLB models directly as tile content.

Using glTF directly simplifies runtime implementations and content pipelines that already support glTF but don't support 3D Tiles native formats. glTF models may be extended with instancing, feature metadata, and compression extensions to achieve near feature parity with the existing 3D Tiles formats.

The example tileset can be loaded on the feature-metadata branch in CesiumJS.

@lilleyse lilleyse changed the title Added spec for 3DTILES_content_gltf Adds 3DTILES_content_gltf extension Sep 21, 2020
@lilleyse
Copy link
Contributor Author

Format Comparison

The sections below describe the differences between native 3D Tiles formats and glTF.

Batched 3D Model (b3dm)

Since b3dm is a thin wrapper around binary glTF there aren't too many differences when using glTF directly.

  • RTC_CENTER may be represented as a glTF node translation.
  • Batch Table and Batch IDs may be stored with EXT_feature_metadata.

Instanced 3D Model (i3dm)

i3dm instances a glTF model (embedded or external) and provides per-instance transforms and feature IDs.

  • EXT_mesh_gpu_instancing may be used to instance glTF nodes.
  • RTC_CENTER may be represented as a glTF node translation.
  • Batch Table and Batch IDs may be stored with EXT_feature_metadata. Per-instance properties are supported.
  • No glTF support for compressed per-instance translations and rotations, uniform scale, multi-instance properties, and EAST_NORTH_UP.
  • Longer term a 3D Tiles vector tile format may instance models as point features.

Point Cloud (pnts)

glTF natively supports point clouds with the primitive mode 0 (POINT). Concepts in the pnts format map well to glTF.

  • Feature table properties like like POSITION, COLOR, and NORMAL may be stored as glTF attributes.
  • EXT_meshopt_compression and KHR_mesh_quantization may be used for point cloud compression. POSITION_QUANTIZED, NORMAL_OCT16P, RGB565, and 3DTILES_draco_point_compression are not directly supported in glTF.
  • RTC_CENTER may be represented as a glTF node translation.
  • Batch Table and Batch IDs may be stored with EXT_feature_metadata. The extension supports both per-point properties and multi-point properties in the same glTF.
  • No glTF support for CONSTANT_RGBA.

Composite (cmpt)

All inner contents may be bundled into the same glTF as separate nodes, meshes, or primitives, up to the tileset author's discretion. EXT_feature_metadata supports multiple feature collections.

@pjcozzi
Copy link
Contributor

pjcozzi commented Sep 21, 2020

@lilleyse please LMK when this is ready. for me to review. Should anyone else review first?

@lilleyse lilleyse changed the base branch from master to 3d-tiles-next October 9, 2020 19:06
@lilleyse
Copy link
Contributor Author

A discussion about optional vs. required in a 3d-tiles-validator PR:

3DTILES_content_gltf says it needs to go in extensionsRequired but now I'm thinking about the interaction with 3DTILES_layers and how someone might create a tileset with both b3dm and glTF layers so that the b3dm layer can be a fallback if the client doesn't support 3DTILES_content_gltf. That's a possible use case for allowing 3DTILES_content_gltf to be optional.

@lilleyse lilleyse marked this pull request as draft October 25, 2020 18:30
Copy link
Contributor

@sanjeetsuhag sanjeetsuhag left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Spec looks good. I noticed some problems with the example in the 3d-tiles-next-experimental branch. This issue was fixed.


## Status

Draft
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can this be removed?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we should keep it until these extensions get merged into master

extensions/3DTILES_content_gltf/README.md Show resolved Hide resolved
@lilleyse lilleyse marked this pull request as ready for review November 6, 2020 00:47
@sanjeetsuhag sanjeetsuhag merged commit 8c105d8 into 3d-tiles-next Nov 6, 2020
@sanjeetsuhag
Copy link
Contributor

Looks good for v.0.0.0. Thanks @lilleyse

@sanjeetsuhag sanjeetsuhag deleted the 3DTILES_content_gltf branch November 6, 2020 01:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Support glTF and glb as tile formats
3 participants