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

This PR adds support for 3D Tiles Next #58

Open
wants to merge 254 commits into
base: main
Choose a base branch
from
Open

Conversation

sanjeetsuhag
Copy link

3D Tiles Next is a set of capabilities for the future of 3D Tiles. Read the overview document for more details.

This PR adds support for the following extensions:

  • EXT_mesh_gpu_instancing
  • EXT_feature_metadata
  • 3DTILES_content_gltf
  • 3DTILES_implicit_tiling

This PR also adds support for the RMTexture and RMDescriptor datasets.

@lilleyse
Copy link
Contributor

The feature table property elementCount can be removed. It has since been removed from EXT_feature_metadata.

@lilleyse
Copy link
Contributor

GTModels have a _FEATURE_ID_0 attribute on each primitive but it's not linked to a feature table. I assume it can be removed because the instancing extension is what links to the feature table.

@lilleyse
Copy link
Contributor

For San Diego - what is the GTModels/1_1/Gltf folder for? It has D500_S001_T001_AL015_000_coronado_bridge.glb but N32W118_D101_S001_T001.json doesn't seem to reference it.

@lilleyse
Copy link
Contributor

HydrographyNetwork/N32W118_D204_S002_T005_LC6_U0_R0.glb doesn't pass the validator. (That's the only one I checked, but I assume something is wrong with vector datasets)

descriptions["FSC"] = "This code, in conjunction with the FACC is used to distinguish and categorize features within a dataset.";
descriptions["HGT"] = "Distance measured from the lowest point of the base at ground (non-floating objects) or water level (floating objects downhill side/downstream side) to the tallest point of the feature above the surface. Recorded values are positive numbers. In the case of roads and railroads, HGT corresponds to the elevation of the road/railroad wrt terrain in its immediate vicinity.";
descriptions["MLOD"] = "The level of detail of the 3D model associated with the point feature. When used in conjunction with MODL, the MLOD attribute indicates the LOD where the corresponding MODL is found. In this case, the value of MLOD can never be larger than the LOD of the Vector Tile-LOD that contains it. When used in the context of Airport and Environmental Light Point features, the value of MLOD, if present, indicates that this light point also exist in a 3D model found at the specified LOD. In such case, the value of MLOD is not constrained and can indicate any LOD.";
descriptions["MODL"] = " A string reference, the model name, which stands for the modeled geometry of a feature; in the case of buildings, this includes both its external shell and modeled interior. Usage Note: Needed for Point features, Road Figure Point features, Railroad Figure Point features, Pipeline Figure Point features and Hydrography Figure Point features that are modeled as OpenFlight or as RCS (Shape). MODL can also be used with Road Lineal features, Railroad Lineal features, Pipeline Lineal features and Hydrography Lineal and Areal features. Note that it is not permitted to specify a value for MODL simultaneously with a value for MMDC.";
Copy link
Contributor

Choose a reason for hiding this comment

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

Suggested change
descriptions["MODL"] = " A string reference, the model name, which stands for the modeled geometry of a feature; in the case of buildings, this includes both its external shell and modeled interior. Usage Note: Needed for Point features, Road Figure Point features, Railroad Figure Point features, Pipeline Figure Point features and Hydrography Figure Point features that are modeled as OpenFlight or as RCS (Shape). MODL can also be used with Road Lineal features, Railroad Lineal features, Pipeline Lineal features and Hydrography Lineal and Areal features. Note that it is not permitted to specify a value for MODL simultaneously with a value for MMDC.";
descriptions["MODL"] = "A string reference, the model name, which stands for the modeled geometry of a feature; in the case of buildings, this includes both its external shell and modeled interior. Usage Note: Needed for Point features, Road Figure Point features, Railroad Figure Point features, Pipeline Figure Point features and Hydrography Figure Point features that are modeled as OpenFlight or as RCS (Shape). MODL can also be used with Road Lineal features, Railroad Lineal features, Pipeline Lineal features and Hydrography Lineal and Areal features. Note that it is not permitted to specify a value for MODL simultaneously with a value for MMDC.";

Comment on lines +38 to +47
options.add_options("hidden")
("3d-tiles-next",
"Experimental convert to 3DTiles with 3DTILES_content_gltf, 3DTILES_implicit_tiling, and EXT_feature_metadata extensions.",
cxxopts::value<bool>()->default_value("false"))
("external-schema",
"Use external schema file for Feature Metadata.",
cxxopts::value<bool>()->default_value("false"))
("subtree-levels",
"The number of levels in each subtree for implicit tiling.",
cxxopts::value<int>()->default_value("7"));
Copy link
Contributor

Choose a reason for hiding this comment

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

These don't need to be hidden options.

Comment on lines +42 to +44
("external-schema",
"Use external schema file for Feature Metadata.",
cxxopts::value<bool>()->default_value("false"))
Copy link
Contributor

Choose a reason for hiding this comment

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

I think schemas should be external by default to help cut down on glb sizes. Maybe then the option would be renamed to --embedded-schema

@lilleyse
Copy link
Contributor

The UI in the linked sandcastle does something weird when the info button is clicked:

Peek 2021-07-12 20-27

@lilleyse
Copy link
Contributor

@sanjeetsuhag I forget, are we able to post a sandcastle demo for Yemen? It would be great to show off the feature id textures

@lilleyse
Copy link
Contributor

@sanjeetsuhag @ErixenCruz that's my first pass over the CLI, README, and inspecting the tileset output. I'll probably do a quick code pass later. So far seems pretty good!

@ErixenCruz
Copy link
Contributor

For #39 I think it would not be too much work. We already have that branch that is mentioned in the issue that has most of the changes needed to calculate the tighter bounding region. For implicit, only the non positive levels would be affected.

@ErixenCruz
Copy link
Contributor

Why is content availability stored in a separate binary file instead of embedded in the subtree?

I believe originally for multicontent, we were going to need per-content availability, and we thought it made more sense to store availability binaries within their respective content folder instead of smashing them all on the end of the subtree file. Multicontent was abandoned, but that decision was not revisited

@sanjeetsuhag
Copy link
Author

@sanjeetsuhag I forget, are we able to post a sandcastle demo for Yemen? It would be great to show off the feature id textures

Yes. the Sandcastle can be found here.

@sanjeetsuhag
Copy link
Author

An optimization for creating bounding volumes for instanced models would be to add the min and max of the TRANSLATION values to the accessor.

@lilleyse
Copy link
Contributor

I pushed a commit that fixes the 3D Tiles Next links. See CesiumGS/3d-tiles#478

@lilleyse
Copy link
Contributor

@sanjeetsuhag is there any top-level metadata (provenance information like author, date, etc) that should get carried over into tileset metadata? And more generally is there any other CDB metadata that's not getting carried through into the tileset?

CC @bradyjmoore

@sanjeetsuhag
Copy link
Author

@lilleyse From what I recall, the problem here is that the CDB datasets we have kinda follow rules of their own in terms of what they put in the top level Metadata folders. I remember the LA CDB had a completely different set of namespaces in its Metadata.XML compared to the San Diego one. That being said, I don't think we've looked at the CDB spec either about what the typical way of doing this is.

@sanjeetsuhag
Copy link
Author

Before this is merged, we should implement support for propagating feature ID textures to higher LODs where the RMTexture dataset does not extend, but the Imagery does.

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.

4 participants