Greetings! I am 100% new here. I am in the process of fulfilling a longstanding hobby-project in which I intend to bring my fantasy world to life online. After a lot of back and forth with AI etc. it seems like Cesium.js would be the preferred technology to have a vector-based 3D globus online, with height-map, layers (borders, continents, cities etc.), the ability to later add new layer features via web-based interface and the ability to start with a high level global map, and later populate it with more and more details. Ideally I would use AI to autogenerate tiles for zoom-in.
After toying around quite a bit it looks like a good tool (I manage to get a globus with a .png file stretch accross working online, but going forward with heightmapping and have it work with 2.5D view etc. is more tricky), but I was wondering a) if its so engrained in our real world that is hard to build a new one from scratch. In cesium Ion I for one wasnt able to upload maps without geomapping.
Anyone with a bit more experience with the platform who are able to say how far-fetched it is to build a fictions world using Cesium?
For reference, here is a concept-scetch to show what I intend to end up with, but with zoom capability and various toggelable information layers.
Hi @RHSandvik , welcome to the Cesium community! This is a really fun use case.
The short answer is: yes, CesiumJS can absolutely work for a fictional world — but the key distinction to understand is the difference between CesiumJS (the open-source JavaScript library) and Cesium ion (the cloud data platform). You’ve correctly identified that Cesium ion requires georeferenced real-world data, so it’s not the right fit here. But CesiumJS itself doesn’t care — you can feed it any imagery and terrain you want.
Here’s how the main pieces of your project map to CesiumJS features:
Custom globe texture / imagery layers
Use SingleTileImageryProvider to wrap a single PNG/JPEG across the entire globe, or UrlTemplateImageryProvider if you want to serve tiled zoom levels (e.g. via a tile server). You’ve already gotten a PNG to stretch across the globe — that’s exactly this.
Custom heightmap / terrain
Use CustomHeightmapTerrainProvider — it accepts a callback that returns elevation values, so you can drive it from any heightmap image. No real-world data required. Alternatively, start with EllipsoidTerrainProvider (a perfectly smooth globe) while you develop the rest.
Toggleable layers (borders, cities, continents)
CesiumJS has great support for this. You can load GeoJSON, KML, or hand-craft entities (points, polylines, polygons) for your world features. Each data source can be toggled with dataSource.show = false/true. You can also add these dynamically at runtime through a web interface.
AI-generated tiles for zoom levels
Totally viable long-term. If you can generate tiles in a standard XYZ/TMS format, UrlTemplateImageryProvider will pick them up. This can be as simple as a folder of PNG files served as static assets.
You may also find this prior forum thread useful — another user built a fantasy world visualization with custom tile providers and animated map features: [custom tile providers for fantasy world].
A few questions that would help me give more specific guidance:
Are you self-hosting CesiumJS, or were you planning to use Cesium ion as the backend?
What format is your heightmap in — a flat grayscale PNG?
Do you have a server available for tiles, or are you working with static files?
For example: Cesium Fantasy by nahured
This is a tool I created for drawing worlds, but you can easily create a custom provider that takes a high-quality image with a 1:2 aspect ratio, whose size has to be a power of 2, so you can easily visualize the image in Cesium.
I’m currently learning to use Cesium for a fantasy game project, and visualizing the data for the fantasy world is something Cesium won’t give you any problems with.