# City scale 3d buildings performance problems

We put 2000+ 3D buildings(b3dm) into Cesium, but the RAM usage is too high, it looks like the Cesium just load all of them at once.

We are using simple blank models just like the example of the New York City, but much much less fluent when moving the camera.

In fact, as in this profession, the usual way is to set LOD, but how to do that with 3d tiles models? If it's already in tiles?

Can we set to only load screen scale scene and others to be shown as 2D base map particularly while moving the camera, then load their models when fixed?

Have you seen to 3D Tiles specification document? It explains how to construct the LODs in the tileset JSON file.

Thanks,

Gabby

Hi Gabby

Thank you, I read that document,and as I understand that,in the usual way, each model is already split into layers of parent and children and children's children, so I should just give them suitable geometricError values to be displayed at different distance of the camera, thus LOD, right?

Yes, the geometric error is used to determine the screen space error (SSE) for the tile. If the width of the tile in pixels is greater than the SEE, the tile is rendered. The bottom-most children tiles will generally have a geometric error close to 0. You can start with determining the geometric error og the the root tile, and divide by two for each successive LOD. So for instance, if your root tile has an error of 100, the next LOD would have 50, etc.

Yes, the geometric error is used to determine the screen space error (SSE) for the tile. If the width of the tile in pixels is greater than the SEE, the tile is rendered. The bottom-most children tiles will generally have a geometric error close to 0. You can start with determining the geometric error og the the root tile, and divide by two for each successive LOD. So for instance, if your root tile has an error of 100, the next LOD would have 50, etc.

On Sunday, July 8, 2018 at 10:40:49 PM UTC-4, karl...@gmail.com wrote:Hi Gabby
Thank you, I read that document,and as I understand that,in the usual way, each model is already split into layers of parent and children and children's children, so I should just give them suitable geometricError values to be displayed at different distance of the camera, thus LOD, right?

The last few days I've been studying the New York demo, after I downloaded the data(https://s3.amazonaws.com/cesiumjs/3DTiles/NewYorkCityGml.zip), T can't open the json file(tileset.json) in Chrome nor notepad, it just show messy, and to put it into VS2017 it shows a binary code, is it encrypted or I just don't know the right way?

And I can't use that data, putting that json file into localhost shows nothing.

As a matter of fact, to load these 700MB models Cesium need more than 1.5GB of RAM, to load my own 1.2 GB models Cesium need nearly 2GB of RAM. For it's your official demo, is there really not some better way to improve that?

Never the less, the New York demo is still much more fluent than mine.It's not the RAM usage problem, I was thinking of LOD, since I can't read the json file, could you please tell my how did you deal with the New York demo?

I have the same issues with my project.

Here you can find a Sandcastle demo of my dataset.

I read the 3D Tiles documentation, and the theory behind the specification is quite clear.

Now I have to face the practice.

I have created my tileset through the automatic process of FME (Safe Software), and it works fine, but it is not so good in terms of performance, as you can see.

How can I optimize my tileset? Just changing the geometricError value (but how? This is still unclear for me, sorry!) or should I apply other optimizations?

Thank you,

Michele

tileset.json (111 KB)

Hi karlintc and Michele,

The reason you see the binary code is because the tileset has been compressed with gzip for a smaller file size.

I’ll need more details to figure out why your tileset isn’t showing up locally. Are you serving it via web server that’s configured for json and gzipped content? Cesium’s development server is an example of how to do this.

Here’s a thread to troubleshoot why your browser may be using so much memory. You can also compress your tiles with Draco and gzip your tileset. You can also try playing with the values in the JSON, but as an alternative to other tiling software that may not be meeting your needs, we also have some tiling tools available, please take a look at our Data Services page and contact Tim if you would like to take advantage of them.

Thanks,

Gabby

Hello Gabby

Could you do my a favor and tell me how much RAM the New York demo should normally cost and how much frames while roaming when it works fine?

Because my own work is quite like that one, and if it works fine on your side, then the problem is my own tileset, then I'll try something else to fix, although I still don't understand how to calculate the geometric error and so many other things, like external tilesets.

But if it's the same with you as I pictured, then it's just a performance problem of large scale rendering that need to be solved in the future.

Thank you

Hi Gabby,

I’ve already contacted Tim in order to figure out the issue.

Thanks,

Michele

Hi karlintc,

On my machine the demo uses about 0.2GB of RAM, even when panning and zooming around the scene.

Thanks,

Gabby

Hello

It’s an old topic but recently I’ve made it better.

My computer has a NVIDIA Quadro video card so I never doubt performance ability, but it turns out NOT working at all.

At default, Chrome is handled by Intel’s integrated video card and for daily web surfing it is enough.

But for large scale webgl rendering, you have to manually designated to a much more powerful external video card.

Now it works fine at 60 FPS and I thought it’ll be good to tell others to watch out.

Thank you.

Hi Karl,

thank you for your feedback… I’ve just tried to force the GPU rendering in chrome, but the system is not yet responsive enough.

It runs a little bit better, but not usable for public deployment. In my case, the issues are strongly related to the 3DTiles generation.

Thanks,

Michele