qgis / QGIS

QGIS is a free, open source, cross platform (lin/win/mac) geographical information system (GIS)
https://qgis.org
GNU General Public License v2.0
10.65k stars 3.01k forks source link

3DTiles: QGIS fails to render the transparency that Skyline's 3DTiles set to the floor tiles #55579

Closed yanivday closed 9 months ago

yanivday commented 11 months ago

What is the bug or the crash?

Skyline is a leading provider of 3D earth visualization software. It provides 3D Tiles mesh layers with an embedded Floor (DTM), in addition to the mesh texture. Loading the mesh layer, QGIS fails to render the transparency that Skyline's 3DTiles set to the floor tiles. As a result, we can see white areas where the floor penetrates the mesh's texture. Screenshot 2023-12-12 145604

Steps to reproduce the issue

  1. Open QGIS
  2. Load Scene > URL = https://cloud.skylineglobe.com/sg/demos/b3dm/857700/tileset.json
  3. Note the white areas, which should be transparent.

Versions

QGIS 3.34.1

Supported QGIS version

New profile

Additional context

No response

nyalldawson commented 11 months ago

Can you share a site showing what these tiles are supposed to look like?

yanivday commented 11 months ago

Hi, I appreciate your response. Here is a web project of the same dataset: https://cloud.skylineglobe.com/sg/tef/te.html?project=https://cloud.skylineglobe.com/sg/tutorialvideos/projects/washu.898400 3

Otherwise, you can load the 3Dtiles to ESRI ArcGIS Online:

  1. Connect to https://www.arcgis.com/home/webscene/viewer.html
  2. Sign in with an ArcGIS account.
  3. Click the + button > ArcGIS Web Service > Enter Layer URL: https://cloud.skylineglobe.com/SG/demos/arcgis/rest/services/857700/SceneServer
  4. Click Add Layer 2
yanivday commented 11 months ago

You can also load it with Cesium Sandcastle:

  1. Browse to: https://sandcastle.cesium.com/
  2. Add the following JavaScript code, and click Run:

const viewer = new Cesium.Viewer("cesiumContainer", { terrain: Cesium.Terrain.fromWorldTerrain(), });

try { const tileset = await Cesium.Cesium3DTileset.fromUrl('https://cloud.skylineglobe.com/sg/demos/b3dm/857700/tileset.json'); viewer.scene.primitives.add(tileset); viewer.zoomTo(tileset); } catch (error) { console.log(Error loading tileset: ${error}); }

5

yanivday commented 11 months ago

Hi, Has this been reviewed?

github-actions[bot] commented 10 months ago

The QGIS project highly values your report and would love to see it addressed. However, this issue has been left in feedback mode for the last 14 days and is being automatically marked as "stale". If you would like to continue with this issue, please provide any missing information or answer any open questions. If you could resolve the issue yourself meanwhile, please leave a note for future readers with the same problem and close the issue. In case you should have any uncertainty, please leave a comment and we will be happy to help you proceed with this issue. If there is no further activity on this issue, it will be closed in a week.

yanivday commented 10 months ago

Hi @nyalldawson, Were you able to look at it?

Skyline4Airwise commented 9 months ago

Hi @nyalldawson , how can we promote this? Do you need any other information we can provide?

P-SLISSE commented 9 months ago

Hello, I've had the same issue with 3DTiles produced with Skyline software. In the 3DTiles, there is some meshes with transparency value 0.0; this ones are displayed by QGis as it doesn't use the transparency of the material

            "materials":[

{ "alphaMode":"BLEND", "name":"m0", "pbrMetallicRoughness": { "baseColorFactor":[0.80000001192092896,0.80000001192092896,0.80000001192092896,0.0], "metallicFactor":0, "roughnessFactor":1 } }]

I agree it would be great if QGis can use the transparency.

Other solutions : *) There is an option when Skyline exported the 3DTiles files : you can say not to export embedded floor. In fact, that embedded floor is just unuseful in 3DTiles.

*) With CesiumGS/3d-tiles-tool you can identify the b3dm files who doesnt have textures but only materials -> this ones are the embedded floor files Use b3dmToGltf so you can see the b3dm files which don't have an associated texture When identified, I remove the b3dm files from the data and the problem is solved

I think the solution can be on both sides : ) On short terms, don't produce 3DTiles containing embedded floor Other softwares like Bentley Context Capture or Metashape don't integrate embedded floor so you don't encouter this issue ) On middle terms, il would be great that QGis display meshes according to transparency value

I hope this will help

saberraz commented 9 months ago

I am not sure if this is a bug or an unsupported feature (see https://www.lutraconsulting.co.uk/blog/2023/11/16/3d-tiles-in-QGIS/)

You can always directly contact Nyall or Lutra to address the issue.

yanivday commented 9 months ago

Hi @nyalldawson and the team, Thanks for your effort in implementing this! Greatly appreciated. Is there a beta or a nightly version we can test (3.360.0)?