-
Notifications
You must be signed in to change notification settings - Fork 470
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
Finish Point Cloud Tile spec #22
Comments
Hobu, Inc. has been working on organization and streaming of large scale point clouds, and we have been working with the Potree project. See http://speck.ly and http://potree.entwine.io for examples. We have developed two open source software projects in support of this effort -- Greyhound http://github.com/hobu/greyhound and Entwine http://github.com/connormanning/entwine Greyhound is the HTTP server that answers LoD requests for a dynamic point cloud schema. Entwine is software that organizes massive point clouds (100+ billion pts) to be served through Greyhound. Entwine is like PotreeConverter if you are familiar with that software, except more sophisticated in that it losslessly processes the data and does so in a parallel way. PotreeConverter answers a fixed schema, whereas Entwine/Greyhound is dynamic (a basic assumption of XYZ of course). Greyhound answers requests as either uncompressed ArrayBuffer or LASzip-style compressed fields, which works in both native C/C++ and JavaScript code. We have found this LASzip-style approach to be efficient and data preserving from source all the way to client. 3D Tiles doesn't have to use the approaches we've developed, but we have been working through the problem for quite a while, and it may learn from our experience. Here's some highlights:
Let us know how we can help, and I look forward to seeing you at FOSS4GNA. |
@hobu cool stuff, thanks for the comments.
Also, we are very interested in point cloud compression that can be decompressed quickly. How fast is LASzip decompression in JavaScript? We talked about it quite a while ago and I thought it had pretty significant overhead. |
Notes for updates to the .pnts tile format
Also see The Compact YCoCg Frame Buffer. Given that the base tile format cannot require lossy colors, we could also move color to the batch table and have a raw and compressed version; this would also be optimal for point clouds without color.
|
Discussed with @lilleyse offline:
|
Discussed offline with @lilleyse @bagnell
|
Spec update:
|
Cesium implementation of color batch table semantics by @lilleyse - CesiumGS/cesium#4112 Still a lot more work to go. |
Spec update:
|
I'm leaning towards using RGBA. |
OK. |
Spec notes in #104. |
@nosy-b just wanted to loop you into the plans for the point cloud tile format in 3D Tiles to see if you have any feedback. See #22 (comment) and #22 (comment) |
First round of Cesium changes by @lilleyse: CesiumGS/cesium#4183 |
I wonder if we may need to support Then there's an alternative idea that instead of storing a |
In the event that you are exceeding the data type limitations for a single tile, the data can be split out onto multiple tiles as part of a composite tile. |
In glTF, the semantic defines the data type: https://github.com/KhronosGroup/glTF/blob/master/specification/README.md#semantics However, ...
The downside here is it hurts client-side batching and increases the number of draw calls. We're going to need If the implementation for this is simple, I think it is a fine change.
Good thought for perhaps post 1.0 depending on community interest. |
I think it will need to more flexible though to accommodate @pjcozzi just to be clear, do you prefer the second method?
|
Maybe define a default data type and allow it to be overwritten? |
Use the second method. The semantic would define the valid values for For example:
and
|
Disregard, wrong thread. |
Ignoring dynamic styling of point sizes, how do these properties sound for the feature table:
|
@lilleyse I don't think we need to include point size in the spec (at least not per-point or even per-tile); it does make sense for I alluded to this above:
They may exist, but I have never seen an input point cloud dataset with per point sizes so I would not focus on this now. Point size is usually a runtime concern where, for example, attenuation is based on screen-space error to try to approximate a closed surface. |
Ok sounds good. |
Hey all. I've recently added the ability to output 3D Tiles point cloud tilesets from Entwine. See connormanning/entwine#12. It's very much an initial prototype and does not implement the full specification (although the subset that it does support should be fully conformant), but maybe it can be useful for testing out the point cloud concepts being discussed for the 3D Tiles effort. Some public resources are available to demonstrate this capability - so far the biggest tileset we've created was the 4.7 billion point set of New York City, which took two hours on an EC2 instance. Some smaller sets are Autzen and Red Rocks Amphitheatre. Comparisons with speck.ly and Potree versions of the same resources might be interesting, since these tilesets are written with the same chunking structure as the one used by Entwine. The repository skeleton for these samples (minus the actual data) is here, which will mostly be uninteresting to you devs aside from perhaps the docker instructions for using Entwine to generate tilesets. Maybe it can be useful for you. |
Awesome work @connormanning! Thanks for sharing all this. I will take a closer look when I am back from travel. In the meantime, feel free to post your spec suggestions here. |
@lilleyse is there any more spec work to be done here for a minimum 1.0? If not, OK to close this? There are a few nice runtime implementation features in #22 (comment) but I can move them to the Cesium roadmap. |
I can't think of anything at the moment. Ok to close. |
Fantastic! |
The following changes to the points README would help reduce potential for misunderstanding:
magic
bytes should be set topnts
version
should be set to1
positions
data to be in lat/lon, radians, or..?positions
data to be expressed asXYZXYZXYZ
orXXXYYYZZZ
?colors
data to be expressed asRGBRGBRGB
orRRRGGGBBB
?16 + numpoints * 15
The text was updated successfully, but these errors were encountered: