CesiumGS / cesium

An open-source JavaScript library for world-class 3D globes and maps :earth_americas:
https://cesium.com/cesiumjs/
Apache License 2.0
13.03k stars 3.51k forks source link

Version 1.97 breaks my pointclouds #10786

Closed shelterit closed 2 years ago

shelterit commented 2 years ago

Hi,

Bit hard to demonstrate with all my data locked behind firewalls, but has the rendering of pointclouds changed? I've tested all versions from 1.87 till 1.96, all fine, but 1.97 breaks them all. Has there been a change in formats, etc that I missed? I can see the "CesiumJS has switched to a new architecture for loading glTF models and tilesets" message, but in what way has this affected pointclouds? They're all pretty much version 1.0, and I use 3DTILES_draco_point_compression. I see some scattered dots, but nothing you'd understand as a pointcloud. What should I look into, what has changed with pointcloud rendering?

Cheers,

Alex

ggetz commented 2 years ago

@ptrgags Would you be able to talk to anything that changed with point cloud rendering during the past few releases?

ptrgags commented 2 years ago

Hi @shelterit,

The introduction of the new Model architecture affects all the 3D Tiles 1.0 formats, including point clouds. The new architecture unifies the implementation, so b3dm, i3dm, and pnts all can use the same model code we use for glTF models.

The change was actually implemented much earlier in 1.90 when the new architecture was still called ModelExperimental, see this older changelog entry

The new implementation does support 3DTILES_draco_point_compression, for example, Draco is used for the tileset in this Sandcastle so maybe there's some other corner case here.

Are you using any CesiumJS features like point cloud attenuation, styling, or anything else beyond just loading the tileset?

I know you mentioned you're not able to share an example due to firewall restrictions, but if you want to inspect things on your own, these are the places in the code that are specific to point clouds:

ptrgags commented 2 years ago

Oh, @shelterit since you can't post an example publicly here, would you be able to send example data (and/or an asset ID if you tiled through Cesium ion) to support@cesium.com? If so, please include this CesiumJS issue number

aixiaodeyanjin commented 2 years ago

image

lilleyse commented 2 years ago

@aixiaodeyanjin are you able to share your tileset?

shelterit commented 2 years ago

Hi there, thanks for the reply. I've turned off pretty much anything I could find (any transforms, tweaks or settings, so it's pretty raw) making me believe that maybe its a format thing? Has anything in the parsing of the files changed?

I popped the object out so you could see it (I've shot some relevant stuff);

image image

I've stripped it bare, still no show. In my app I have a plugin I can attach to the tileset with a bunch of controls, and I've played around with all of them without seeing any changes;

image

I've got a screenshot for you here. The red polygon is usually clamped to a rich pointcloud, however now you only see, if you squint, a few dots here and there;

image

What should I investigate next in terms of the files? We use MetaShape to generate most of them, I'll see if I can pull one out for you to try.

lilleyse commented 2 years ago

@shelterit thanks for the info. My first guess is that something about the quantization code is wrong. That might explain why the points are so far apart. I noticed that the Draco code is slightly different in PntsLoader compared to the old implementation in PointCloud (see here vs. here)

I pushed a fix to this branch: https://github.com/CesiumGS/cesium/tree/draco-quantization-type. Could you try it out?

If that doesn't work, a MetaShape example would be really helpful.

shelterit commented 2 years ago

Sure, I'll give it a try. I usually use npm packages, but I'll try to set up a Cesium build later today. But that's good that we're seeing something that worth chasing.

shelterit commented 2 years ago

I've eliminated the Las file itself, it's definitely in the 3D tiles from MetaShape. Do you support Cesium Zipped tiles uploads in Ion?

lilleyse commented 2 years ago

You can grab the npm package published by CI if that's easier: http://cesium-dev.s3-website-us-east-1.amazonaws.com/cesium/draco-quantization-type/cesium-1.97.tgz

Do you support Cesium Zipped tiles uploads in Ion?

Yes

shelterit commented 2 years ago

I get a 404 on that one. Anyway, don't worry, I'll give a Cesium build a try. I should have one, but it's nice sometimes not to have complete control over everything and have someone else to blame for a change ... :)

shelterit commented 2 years ago

O, I've uploaded the tileset to Cesium Ion. It views in the Ion admin tool (which uses Cesium 1.91);

image

But if I view it in Sandcastle (which is latest 1.97), then it's blank (with no errors in the console);

image

You can see the assetId in the screenshot as well;

Cesium.IonResource.fromAssetId(1314334)

Let me know if you need anything else. I couldn't get Cesium to build, but that's a problem with my current environment (remote virtualbox on rubbish hardware over rubbish lines). Might be able to pull it off next week when I get back.

Hopefully that's at least enough to do a quick test. Let me know if there's anything else I could chase/try.

lilleyse commented 2 years ago

Ah... sorry about the 404, we'll look into that.

Good news is that the branch fixes the bug. I'll open a PR.

good

lilleyse commented 2 years ago

PR here: https://github.com/CesiumGS/cesium/pull/10794

shelterit commented 2 years ago

Awesome, at least it was reasonably easy to find and fix. If only all bugs could be more like that. :) Thanks for all your help.