Agisoft generated Cesium 3d tiles issue

1. A concise explanation of the problem you’re experiencing.

Hi,

I’m working on creating a 3d viewer for our website to showcase some of the 3d deliverables we create for clients. We’re an aerial mapping firm, Strix Imaging. We do alot of work in Agisoft (photogrammetry), and I downloaded agisoft’s beta version, 1.4 which has the capability to export my dense point cloud as cesium 3d tiles. For a fairly small area the cesium 3d tiles file was huge, around 10GB for a 10 acre lot. The file structure looks like this:

  • sparks

– tileset.js

– Data

— xxx.pnts (many of these files)

— xxx (many of these random folders)

---- xxx.pnts (many of these files within each folder)

---- tileset.json (one within each folder)

I’ve setup two node.js servers on my desktop following the hello world tutorial and the cesium tiles tutorial which allows me to successfully show the demo cesium 3d tiles locally. However when I attempt to point the tileset url at my Agisoft created 3d tiles, it does nothing. no errors in the console either, it’s just black. Any idea what I’m doing wrong? I have a feeling Agisoft didn’t export the tiles correctly but I can’t find anyone discussing an issue like this. I’m new to cesium, only been looking at it for about a week.

2. A minimal code example. If you’ve found a bug, this helps us reproduce and repair it.

The code below successfully shows the demo tile files in my local sandcastle, but does not show the 3d tiles from agisoft.

Cesium.BingMapsApi.defaultKey = ‘AqvKbFHsgHpXjbfz6lR6k57gfsUvQz6zcjaG7PWMtzHycskqMCdZhkNojJnSycO_’;

var viewer = new Cesium.Viewer(‘cesiumContainer’);

viewer.scene.imageryLayers.removeAll();

viewer.scene.globe.baseColor = Cesium.Color.BLACK;

var tileset = viewer.scene.primitives.add(new Cesium.Cesium3DTileset({

url : ‘http://localhost:8003/tilesets/sparks/

}));

tileset.readyPromise.then(function(tileset) {

viewer.camera.viewBoundingSphere(tileset.boundingSphere, new Cesium.HeadingPitchRange(0, -0.5, 0));

viewer.camera.lookAtTransform(Cesium.Matrix4.IDENTITY);

});

3. Context. Why do you need to do this? We might know a better way to accomplish your goal.

Trying to show the topographic maps we create for our clients on our website in a 3d viewer. Ultimately I would like to have contours and shading like the Propeller Aero plugin shows, but first I have to get it to show my data at all before I try doing fancy stuff like contours.

4. The Cesium version you’re using, your operating system and browser.

Cesium 1.4, Agisoft 1.4, Ubuntu 16.04, chrome 63.0.3239.84, node.js 6.12.2, npm 3.10.10

It does seem like it could be an issue with the tileset itself, and I personally haven’t encountered a point cloud tileset produced by Agisoft before. Would you mind sending the data over for us to investigate? You can email a donwload link to me at slilley@agi.com.

Now that https://github.com/AnalyticalGraphicsInc/cesium/pull/6088 is merged it’s a lot easier to see tileset errors.

The one that’s popping up repeatedly is:

Error: start offset of Float32Array should be a multiple of 4

Looking at the file more closely I see that one of the feature table properties is not byte aligned correctly:

“NORMAL”:{“byteOffset”:22695}

While it’s just an implementation note right now, the spec states that properties should be byte aligned to their data type, so the byteOffset needs to be a multiple of 4. We plan on making this a requirement before 3D Tiles 1.0 is ready.

https://github.com/AnalyticalGraphicsInc/3d-tiles/tree/master/TileFormats/FeatureTable#implementation-notes

You may need to contact Agisoft about this bug in their exporter.

I wanted to follow up if anyone have forwarded this to argisoft.

I will give them a note otherwise.

I have. They gave me a pre-release version of 1.4.1 which may be working. I was able to see the point cloud in cesium locally, however the building the point cloud represents is spread out over the entire city it’s in.