-
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
Refinement based on proximity #101
Comments
@lilleyse this will require some experimentation to flush out. This adds Here's a potential example where the root tile could be a city; the child is a building's interior tile; and the grandchild is an external tileset for a point cloud for an object in the building. For kicks I also added a transform to the children (#98) since the building's interior and point cloud would likely be in their own coordinate systems. {
"asset" : {
// ...
},
"geometricError": 200, // Error when no buildings are rendered
"root": {
"boundingVolume": { /* ... */ },
"geometricError": 20, // Error because building interior is not rendered
"refine": "replace",
"content": {
"url": "0.b3dm" // Exteriors for entire city
},
"children": [{
"transform": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 7000000, 0, 0, 1], // transform to WGS84
"boundingVolume": { /* ... */ },
"geometricError": 2, // Error because point cloud is not rendered
"viewerRequestVolume": { /* ... */ },
"content": {
"url": "1.b3dm" // inside of building
},
"children": [{
"transform": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 2, 0, 0, 1], // transform to Building's coordinate system
"boundingVolume": { /* ... */ },
"geometricError": 2, // Error because point cloud is not rendered, forces external tileset load
"viewerRequestVolume" : { /* ... */ },
"content": {
"url": "points-tileset.json" // New tileset with point cloud
}
}]
}]
}
} Here's another example where the root tile (a city) has two (grand-)children (each building interiors) in their own tilesets (using additive refinement so, for example, the city is visible outside of the window). {
"asset" : {
// ...
},
"geometricError": 200, // Error when no buildings are rendered
"root": {
"boundingVolume": { /* ... */ },
"geometricError": 20, // Error because biggest building interior is not rendered
"refine": "add",
"content": {
"url": "0.b3dm" // Exteriors for entire city
},
"children": [{
"transform": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 7000000, 0, 0, 1], // transform this building to WGS84
"boundingVolume": { /* ... */ }
"geometricError": 20, // Error because biggest building interior is not rendered, forces external tileset load
"viewerRequestVolume": { /* ... */ },
"content": {
"url": "big-building-interior-tileset.json"
}
}, {
"transform": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 6000000, 0, 0, 1], // transform this other building to WGS84
"boundingVolume": { /* ... */ },
"geometricError": 10, // Error because smaller building interior is not rendered, forces external tileset load
"viewerRequestVolume": { /* ... */ },
"content": {
"url": "small-building-interior-tileset.json"
}
}]
}
} Discussion
|
Cesium implementation is in CesiumGS/cesium#4138 |
Instead of relying just on SSE to refine a tile, this would allow, for example, when the viewer enters a bounding volume that the tile gets refined.
A use case is to tile a city with a kd-tree, then when the viewer enters (or comes close to) a building, the building is loaded with an octree, grid, portals, etc.
We might also want to be able to explicitly disable the rest of the scene when inside a building.
CC #15
The text was updated successfully, but these errors were encountered: