-
Notifications
You must be signed in to change notification settings - Fork 469
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
Clarify upsampling requirements in 3DTILES_implicit_tiling #489
Comments
I wonder if the distinction should depend on the type of refinement? e.g. |
I don't think so @ptrgags, because buildings could be REPLACE as well. It will never hurt to do the upsampling, though, it's just (potentially unnecessary) complexity. As an aside, I kind of think we should deprecate ADD refinement. It has problems:
Of course, we could turn an ADD tileset into a REPLACE one at runtime, and very well may end up doing that in Cesium for Unreal, but I'm not sure the value of ADD refinement actually outweighs the costs. |
Is this already "enshrined" at some point?
I think this could be the case for buildings and terrain, and for Beyond that: There may be an implicit assumption below that, namely that terrain geometry is always... "complete" (as in ~"homeomorphic to the 3-sphere"). If somebody only has terrain for a certain area (e.g. a certain country), I wonder how this case should be handled: Specifically: Clients should be able to trust the availability info, and know that the upper right child is not available, because ... there is nothing. I'm not so deeply involved in how the tilers actually generate that data, but ... if the client had to figure out the difference between (Other questions might become relevant then. For example: How often does this happen in practice?) |
Yes, I think I agree. Clients should never be required to upsample, and the spec should say so. Or perhaps no one outside of Cesium would even think of doing that anyway, so it doesn't really need to be mentioned. That will make it slightly more work to convert Cesium World Terrain to 3D Tiles with 3DTILES_implicit_tiling, but that's ok. |
@kring how often does the client needs to upsample for CWT? I kind of agree with @javagl that that upsampling should happen at tiling time so that availability isn't ambiguous, but also don't want to balloon the number of network requests with small redundant data. If we don't give any hints in the spec, will Cesium Native just continue to treat CWT as "complete" and upsample as needed? |
@lilleyse I don't know offhand how often it happens. It would only be on edges where multiple data sources that went into CWT meet. It's uncommon enough, though, that we nearly got to release before we noticed we weren't doing the upsampling: I don't think it'll balloon the number of tiles or network requests much, so I'd definitely support dealing with it at tiling time. Either way, cesium-native will need to do upsampling in some situations. Backward compatibility for quantized-mesh for one. And high-res imagery draped on lower res terrain, for another. |
One could argue about whether the behavior in this case is so much an aspect of "a certain runtime behavior" that it does not have to be specified. But not saying anything about the case of "one quadtree node with 3 children" will raise the question about how this should be handled. (It already did, in slack, and it will in the future, in GitHub issues). So the crucial question is: How will this affect the spec? Even if it only was a (non-normative) "Implementation note", I wonder what it could look like. Consider this pseudocode:
If the answer to the One could mention it, but leave it vague and open, as in
I don't recommend this, of course. It would be a form of surrendering in view of the accidental complexity that we're facing here. And of course, it would make it impossible to achieve a cleanly defined state in the future without breaking ""backward compatibility"" for existing combinations of implementations and data sets (and we're already seeing that). A more abstract aside: When it comes to implementations, I'm usually repeating the mantra "When in doubt, leave it out". It's always possible to add something later. But it is never possible to remove something later. When it comes to specifications, the mantra could be "When in doubt, don't allow it". It's always possible to relax a requirement later. But it's never possible to make a requirement stricter. Maybe the spec can still be made stricter, and then refer to future data sets and implementations that will be created, and the existing tiler+CWT+CesiumJS/cesium-native behavior can be seen as an inofficial, internal backward compatibility mechanism. That will cause trouble (*cough* |
I say we close this for now - if
|
It would be useful to make content availability even stricter:
This means:
I probably have several blindspots. Is anything made worse or impossible with these rules? |
Me too. But a few short comments:
This is allowed.
This sounds sensible for me (I always wondered what could be the purpose of leaf tiles without content, but they considered that they might carry some other data). But ... when all leaf tiles must have content, and this implies that their parents must have content, then ... I think that some of the data structures ... "collapse": Right now, they store availability information for tiles and content, for each node in a tree. With these additional constraints, they'd basically just describe ~"the set of available leaves", and then there might be an easier and more compact representation of that. (I think you once mentioned the option of having something like a (I'll probably have to re-read this and think more thoroughly about the implications on the spec - and even then, I could hardly foresee the implications for the implementation, so I'm curious what others think...) |
I might need to change the second rule from
to
(there's got to be a shorter way to say that...) This would mean content availability is still needed after all - to handle cases like content decimation being unacceptable and only leaf tiles being allowed to render. Maybe useful for CAD models. You still get the benefit of occluding tiles that are offscreen but you'd have to crank down your geometric error to 0. I was going to say a double headed quadtree that has a root tile with no content, but usually that's implemented as two different implicit tiles... |
A related issue, about the role of "empty tiles" that are used for culling (but not refinement): #609 |
In Cesium World Terrain, it doesn't really make any sense for just 1, 2, or 3 child tiles to be available for rendering. Either the tile is a leaf and has 0 children available, or, if we refine this tile, we're going to need to be able to render all 4 of its children. If we refine a parent tile but only have three children, there would be a hole where the fourth child is meant to be.
However, it's actually fairly common in Cesium World Terrain to have a tile with only 1, 2, or 3 tiles marked as available. When this happens, the client is expected to subdivide the parent tile to create the missing children, a process that is called "upsampling" in CesiumJS and cesium-native. This is a small optimization, reducing the number of pre-generated tiles that need to be stored and transmitted.
In the more general case of 3DTILES_implicit_tiling, though, a missing child tile might be common and normal and not indicate any need for upsampling. For example, if the tileset is buildings, there may simply not be any buildings in the area of a child tile.
So, some questions:
The text was updated successfully, but these errors were encountered: