Tiles flashing by

I made a 3dtiles sample.with gltfUpAxis=Z. When loading it in cesiumJS, I can see the tile shows up but disappear immediately. While rotating the camera,the tile may appear sometimes. I guess it is relate to some kind of culling mechanism. Could anyone tell me what i miss in my 3dtiles sample? Thanks :pray:

var viewer = new Cesium.Viewer("cesiumContainer", {
  imageryProvider: new Cesium.UrlTemplateImageryProvider({

const tileset = new Cesium.Cesium3DTileset({
  url: '',


Ezha2_output.zip (10.6 KB)


It’s hard to tell from a short (“2D”) screengrab. But it looks like that tile might just be below the surface.

When you create the viewer with

var viewer = new Cesium.Viewer("cesiumContainer", {
  globe: false

(i.e. without imagery and without the globe), do you see the tileset?

If this is the case, then this could be solved by moving that tileset up a little, either by setting the tileset.modelMatrix, or modifying the root transform in the tileset JSON file.

:pray: No, the tile is above the surface. You can easily reproduce the problem using the uploaded sample data “Ezha2_ouput.zip”.

The tileset refers to a B3DM file. This B3DM file contains GLB (glTF binary) data. I extracted that GLB and attach it here:

Tile_+001_+000.glb (12.6 KB)

Dragging-and-dropping this into the glTF-Validator at glTF Validator reports several errors. The most relevant here are those of the category

    "message": "Declared minimum value for this component (-1.9738363027572632) does not match actual minimum (-5.023843288421631).",
    "severity": 0,
    "pointer": "/accessors/0/min/0"
    "message": "Accessor contains 36 element(s) less than declared minimum value -1.9738363027572632.",
    "severity": 0,
    "pointer": "/accessors/0/min/0"

So the glTF is invalid, because its bounding box size cannot be determined. And with an invalid glTF, there is no guarantee that it can be rendered properly - neither by CesiumJS nor by other viewers.

You said…

I made a 3dtiles sample.with gltfUpAxis=Z.

There are two questions:

1.) Why did you try to change things so that they need the gltfUpAxis=Z?

There is most likely no good reason to do that. Changing the orientation of the glTF can be tricky - it’s sometimes hard to get the coordinate transforms right. Additionally, the gltfUpAxis property is not part of the 3D Tiles specification. So other 3D Tiles viewers may not even support the gltfUpAxis property, meaning that you might not be able to render this tileset in other viewers.

I’d strongly recommend to not transform it in a way that requires the gltfUpAxis=Z. But if you think that this is necessary:

2.) How did you modify the glTF asset to change its orientation?

1 Like

I got it work. thx!

  1. Because a 3dtiles processing software which i use can only deal with gltfUpAxis=Z,i have no choice. :rofl:
  2. I used pygltflib to docode the glb, modified the vertex buffer manually,and then encoded the whole content back to glb.