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

Implicit tiling spec #444

Merged
merged 62 commits into from
Jan 26, 2021
Merged

Implicit tiling spec #444

merged 62 commits into from
Jan 26, 2021

Conversation

ptrgags
Copy link
Contributor

@ptrgags ptrgags commented Dec 7, 2020

Direct link to 3DTILES_implicit_tiling spec

Opening this early because I wanted to refer to some of the availability buffer formulas in another issue.

This is the specification to describe the implicit tiling schema we merged into 3d-tiles-next last week.

I'll update this description once I have more of the text fleshed out.

Copy link
Contributor Author

@ptrgags ptrgags left a comment

Choose a reason for hiding this comment

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

Added some notes about problems with formulas

@ptrgags
Copy link
Contributor Author

ptrgags commented Dec 11, 2020

@sanjeetsuhag I just pushed the commits @ErixenCruz and I have been working on. There's still a couple sections and diagrams in progress, but you can review what we have so far

extensions/3DTILES_implicit_tiling/0.0.0/README.md Outdated Show resolved Hide resolved
extensions/3DTILES_implicit_tiling/0.0.0/README.md Outdated Show resolved Hide resolved
extensions/3DTILES_implicit_tiling/0.0.0/README.md Outdated Show resolved Hide resolved
extensions/3DTILES_implicit_tiling/0.0.0/README.md Outdated Show resolved Hide resolved
extensions/3DTILES_implicit_tiling/0.0.0/README.md Outdated Show resolved Hide resolved
extensions/3DTILES_implicit_tiling/0.0.0/README.md Outdated Show resolved Hide resolved
extensions/3DTILES_implicit_tiling/0.0.0/README.md Outdated Show resolved Hide resolved
extensions/3DTILES_implicit_tiling/0.0.0/README.md Outdated Show resolved Hide resolved

**Tile availability** is a bitstream that determines which tiles exist within a subtree. There is one bit for each subtree node. A 1 indicates that a tile is available, while a 0 indicates that a tile is unavailable.

![Tile Availability](figures/tile-availability.jpg)
Copy link
Contributor

Choose a reason for hiding this comment

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

This diagram may potentially mislead someone into believing that binary trees are supported. We should use quadtrees.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Yeah, my only hesitation is that a quadtree diagram could get quite a bit wider (since we need to show the entire buffer).

As a group we decided to hold off for now and find a better solution later.

@ptrgags
Copy link
Contributor Author

ptrgags commented Dec 11, 2020

@sanjeetsuhag updated!

extensions/3DTILES_implicit_tiling/0.0.0/README.md Outdated Show resolved Hide resolved

Implicit tiling also provides a method for accessing tiles by tile coordinates. This allows for abbreviated tree traversal algorithms.

![Explicit vs Implicit Tiling](figures/implicit-vs-explicit.jpg)

Choose a reason for hiding this comment

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

Should clarify binary tree is for visualization only since we only support quad and oct.

extensions/3DTILES_implicit_tiling/0.0.0/README.md Outdated Show resolved Hide resolved
extensions/3DTILES_implicit_tiling/0.0.0/README.md Outdated Show resolved Hide resolved
Copy link
Contributor Author

@ptrgags ptrgags left a comment

Choose a reason for hiding this comment

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

Found several small revisions, but nothing huge.

extensions/3DTILES_implicit_tiling/0.0.0/README.md Outdated Show resolved Hide resolved
extensions/3DTILES_implicit_tiling/0.0.0/README.md Outdated Show resolved Hide resolved
extensions/3DTILES_implicit_tiling/0.0.0/README.md Outdated Show resolved Hide resolved
extensions/3DTILES_implicit_tiling/0.0.0/README.md Outdated Show resolved Hide resolved
extensions/3DTILES_implicit_tiling/0.0.0/README.md Outdated Show resolved Hide resolved
extensions/3DTILES_implicit_tiling/0.0.0/README.md Outdated Show resolved Hide resolved
extensions/3DTILES_implicit_tiling/0.0.0/README.md Outdated Show resolved Hide resolved
* **tiling scheme** - A well-defined method for subdividing a bounding volume into a hierarchy of tiles.
* **unavailable tile** - A region of space that does not contain a tile.

## Examples
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 feel like overall we could do better with examples if we had a more visual way of presenting at least one of them. Though as @ErixenCruz and I learned on Friday, putting together labeled examples can be time consuming (since determining morton order is necessary in some diagrams.

@ptrgags
Copy link
Contributor Author

ptrgags commented Dec 14, 2020

Note: we should be careful about subtree diagrams. subtree leaf nodes should point to the subtree below them, not a node directly.

@IanLilleyT
Copy link
Contributor

IanLilleyT commented Jan 16, 2021

Should

  "tileAvailability": {
    "constant": 0
  }

be explicitly forbidden?

Because if it were 0, there would be no point in having a subtree in the first place.

Another benefit of this constraint is if using tile metadata, it's guaranteed that a tile metadata buffer always exists.

@ptrgags
Copy link
Contributor Author

ptrgags commented Jan 22, 2021

@IanLilleyT @sanjeetsuhag @ErixenCruz @lilleyse

Changelist from this week's round of implicit tiling schema/spec updates:

  • subtree files are binary now! the format is similar to GLB, but a bit more slimmed down (no JSON/BIN chunk headers)
  • the description of buffers/bufferViews is now included in this spec since we're getting rid of 3DTILES_binary_buffers. This description includes the 8-byte alignment requirement.
  • clarified some wording about the size of childSubtreeAvailability
  • clarification: Levels are measured starting at 0 at the root implicit tile, i.e. the tile with the 3DTILES_implicit_tiling extension. This clarification is necessary since an implicit tileset may be part of a larger explicit tileset.
  • 3DTILES_implicit_tiling.content is optional, and when present, subtree.contentAvailability is required. If content is not specified, then contentAvailability is disallowed.
  • remove mimeType, it won't be useful until 2.0, and even then it's not a complete solution.
  • Fixed some examples that still were putting the extension in the tileset rather than the root tile
  • Added some details about availability that were present in the schema but not the spec.

What has NOT been changed (yet):

Any questions/comments, please let me know.


**Child subtree availability** is a bitstream that determines which subtrees can be reached from the deepest level of this subtree.

The child subtree availability bitstream has slightly different structure than tile or content availability. There is one bit for each node in the level of the tree immediately below the subtree. That is, if the deepest subtree is level `L`, then there is one bit for every node at level `L + 1`. Since each node at level `L` has `N` children (4 for `QUADTREE` or 8 for `OCTREE`), there are `N * (L + 1)` bits in the child subtree availability bitstream. A 1 bit means there is a child subtree available at that position in the tree. A 0 bit means there is no subtree available at that position.
Copy link
Contributor

@IanLilleyT IanLilleyT Jan 22, 2021

Choose a reason for hiding this comment

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

  • That is, if the deepest subtree. Should it be deepest subtree node?
  • I assume L is a level local to the subtree, but it could be read as a global level.
  • The equation N * (L + 1) should be N ^ (L + 1).
  • No mention of morton encoding

I feel like this paragraph could be more clear if defined in terms of subtreeLevels

@lilleyse
Copy link
Contributor

To keep the in-progress extensions in lockstep we're going to merge this PR into the 3d-tiles-next staging branch and work from there.

@lilleyse lilleyse marked this pull request as ready for review January 26, 2021 23:42
@lilleyse lilleyse merged commit 87333ff into 3d-tiles-next Jan 26, 2021
@lilleyse lilleyse deleted the implicit-tiling-spec branch January 26, 2021 23:42
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.

5 participants