Cesium for Blender — streaming World Terrain, imagery & 3D Tiles (incl. Google Photorealistic) into Blender [open source, WIP]

Hi everyone,

I’ve been building Cesium for Blender — an open-source Blender addon that streams Cesium data directly into the Blender viewport with camera-driven LOD. Think CesiumJS-style streaming, but pure Python inside Blender: move the viewport camera and tiles fetch, refine, coarsen, and unload automatically.

What works today

  • Quantized-mesh terrain — Cesium World Terrain via ion (or any self-hosted layer.json stack): SSE-driven quadtree refinement, replacement refinement, frustum + ellipsoid horizon culling
  • Imagery draping — ion-hosted TMS (geodetic and web-mercator) and Bing aerial via quadkeys, with per-vertex mercator reprojection and stitched tile covers
  • Upsampled tiles past a terrain dataset’s resolution limit (CesiumJS-style), so imagery keeps sharpening on subdivided tiles
  • 3D Tiles — OSM Buildings and Google Photorealistic 3D Tiles: b3dm / glb / cmpt content, external tilesets, and dynamic screen-space error so detail concentrates near the camera
  • Extras: hypsometric relief-map styling and procedural volumetric clouds for quick dioramas

Repo (MIT): GitHub - CognitoBit/CesiumForBlender · GitHub

On AI: I want to be transparent that a large part of this codebase was developed with AI assistance (Anthropic’s Claude working alongside me) — the design, implementation, and testing were an iterative human + AI effort.

Known issue: viewing very large areas of 3D Tiles (wide horizon views over dense photogrammetry) still gets heavy in Blender — many small meshes plus main-thread glTF imports drop viewport performance. I’m actively working on it; this post is mainly to show progress, not a polished release.



Feedback, ideas, and testing are very welcome!

PS: used to work earlier on cesium js, lost account for a long time, and i don’t recall my credentials so created a new account.

2 Likes