CesiumJS

Hello, I’m sorry to bother you! I was doing research on cesium recently, and I encountered some problems in the process. I wonder if I can ask you for advice?
1.How does cesium define frames and frame rates during rendering? Is it defined by the number of calls to the function in one second, or how many frames are rendered by the function in one second?
2.Where does the data source in cesium come from? Do you want to distribute the same data on different servers or different data on different servers?
3.How is the rendering time defined in cesium? Do you receive rendering commands from functions until the end of rendering, or do you receive rendering data from functions until the end of rendering?
4.What is the slicing strategy of 3D Tiles? How does it divide different models into the same b3dm file? Can user generated b3dm files not follow your specifications?
5.Is the data rendering synchronous or asynchronous? Do you want to render while fetching data, or render after fetching data? Will the process be blocked during rendering?
The above are my current problems. I hope to get answers from you. Thank you very much!

Hello there,

Good questions!

1.How does cesium define frames and frame rates during rendering? Is it defined by the number of calls to the function in one second, or how many frames are rendered by the function in one second?

This is the number of frames rendered by CesiumJS per second. Like most game engines, frames are rendered regularly as close to the target frame rate as possible. There should only be one call to the actual top-level render function— scene.render— per frame, as it’s tied to the requestAnimationFrame API.

As many CesiumJS apps can have stationary views and do not necessarily need to render regularly, there’s also a mode called request render mode, which only renders new frames under specific conditions, reducing overall CPU usage.

2.Where does the data source in cesium come from? Do you want to distribute the same data on different servers or different data on different servers?

By default, most data in a CesiumJS application comes from Cesium ion, a SaaS platform which provides some data such as global imagery and terrain, and allows users to bring their own data as well.

CesiumJS supports many 3D and geospatial open standards and can also can be configured to load data from other services and even local data so an app can be run entirely offline.

3.How is the rendering time defined in cesium? Do you receive rendering commands from functions until the end of rendering, or do you receive rendering data from functions until the end of rendering?

Rendering time is the time it takes to render one frame. The post Graphics Tech in Cesium - Renderer Architecture goes into more detail about how that is done.

4.What is the slicing strategy of 3D Tiles? How does it divide different models into the same b3dm file? Can user generated b3dm files not follow your specifications?

While all 3D Tileset must conform to the 3D Tiles specification, different tools can tile the same model in different ways while still being compliant. They can factor in different heuristics such as performance or visual quality. Cesium’s 3D Tiles tools are optimized for the most efficient streaming and rendering via CesiumJS, Cesium for Unreal, and similar runtime engines, by reducing the number of draw calls when rendering a frame and only downloading necessary data. I’d encourage you to read the post Introducing 3D Tiles for more information.

5.Is the data rendering synchronous or asynchronous? Do you want to render while fetching data, or render after fetching data? Will the process be blocked during rendering?

Generally, we opt for asynchronously loading data where possible, though data must be loaded before it can be rendered. This is why a lot of data coming into CesiumJS is tiled as it allows for only visible tiles to streamed— and only those tiles which are most important for a given 3D view. The process of rendering a frame consists of different process across both the CPU and GPU, so there is some balancing of rendering and fetching data during each frame, but it’s not a strictly either/or operation.

Hope that helps,
Gabby