This is going to be a loaded post, so here goes.
I'm investigating Cesium's capabilities for rendering large LIDAR datasets. I'm using PDAL to do some preprocessing and Entwine to generate the 3D tile hierarchy. I've made some modifications to Entwine to output the batch table data and my review of the output appears correct*1. However when I review the sandcastle examples for feature picking from tilesets or use my own tilesets, only the b3dm return the correct types listed in the documentation. For point clouds, I get an anonymous object with a different set of properties.
What I'm aiming to do is create declarative styling like the sandcastle 3D point cloud styling example, and store additional per-point data to lookup on the server.
My question is: am I looking at bleeding edge changes in Cesium that are incomplete (yes I know it's a branch and inherently unstable/incomplete), is the documentation incomplete, or am I doing something incorrect?
Here's what my investigation has found.
Sandcastle 3D Point cloud styling example, selecting a point returns:
Object {
color:Color
content:PointCloud3DTileContent
primitive:Cesium3DTileset
}
Sandbox 3D Tiles example, with the Tileset example selected, selecting a building returns:
Cesium3DTileFeature {
_batchId:4
_batchTable:Cesium3DTileBatchTable
_color:Color
_content:Batched3DModel3DTileContent
color:(...)
primitive:Cesium3DTileset
show:(...)
}
The documentation (from 3d-tiles branch: Build/Documentation/Cesium3DTileFeature.html) has sample code that uses ScreenSpaceEventHandler.setInputAction -> scene.pick(movement.endPosition)*2, which gives the same result as using a Cesium3DTilesInspectorViewModel.feature. Both of these return the results I see above; the documented behaviour when viewing a b3dm tileset (from 3d-tiles branch: Build/Documentation/Cesium3DTilesInspectorViewModel.html?classFilter=inspector, feature property indicates a Cesium3DTileFeature type), and undocumented behaviour when using a point cloud tileset.
The readme on per point properties (https://github.com/AnalyticalGraphicsInc/3d-tiles/tree/master/TileFormats/PointCloud#per-point-properties) states "If the BATCH_ID semantic is not defined, then the batch table stores per-point metadata, and the length of the Batch Table arrays will equal POINTS_LENGTH."
Viewing the readme for batch table (https://github.com/AnalyticalGraphicsInc/3d-tiles/blob/master/TileFormats/BatchTable/README.md) indicates it does everything I need it to, include support for point clouds (pnts). However only the b3dm tileset feature contains a reference to the batch table, and the point cloud tileset feature does not. There is also sample code in the same readme for extracting the batch data out. I haven't been able to get this far even with the example point cloud styling dataset which has a batch table containing "temperature" since the objects are not what I'm expecting. Apart from that, the declarative styling works for the point cloud with temperature data.
*1 [I don't seem to be able to validate my own tilesets out of my modified Entwine as the 3d-tiles-tools repo (https://github.com/AnalyticalGraphicsInc/3d-tiles-tools) appears to have an empty validator/bin/3d-tiles-validator.js. Assuming the issue register is up-to-date, https://github.com/AnalyticalGraphicsInc/3d-tiles-tools/issues/5 would indicate validation is far from complete.]
*2 [which appears incorrect as the movement object only has the position property in my build of 3d-tiles HEAD]