V.2.2.0 Into a photogenic world

2026-10-31 · Kenji Yoshida

Making "something like Cesium" is not that hard. Making "a 3D engine at Cesium's level" is a different story altogether. That is how much of a god Cesium is.

Even if it is only imitation, I wanted to get one step closer to that god at a time. So I started on the unglamorous work of tracing the Sandcastle examples and crossing off, one by one, what Cesium can do and ortho-earth cannot. This is the record of that thorny road.

It reads a bit like a "Project X" documentary, but the persistence of the draftsmen (Claude) genuinely moved me!

Method

All 309 Sandcastle examples (Cesium's official examples) were run on ortho-earth. Twelve of them, such as the Moon and Mars examples, examples with no viewer and examples that start in 2D, cannot be compared and were left out. The other 297 were compared side by side with Cesium.

Progress

The first shoot (2026-10-25) gave 3/2/1/0 = 23/120/129/24. Only 23 of 309 drew the same picture, and I thought this was a bit of trouble. From there:

Date3210What went in
10-252312012924First shoot. Primitive, Model, particles, clouds and more stop as "not supported"
10-26331836211The facade (#672). Borrowing Cesium's parts, almost everything runs
10-261001295410CZML solids, 3D Tiles, the starry sky, a translucent globe (#698–#703)
10-27117126448Model lighting (#704), shadows, the blue globe, satellite orbits (#715–#720)
10-28124121439The horizon, near terrain, the camera target (#723–#730)
10-29149108328Post-processing, particles, clouds and clustering, the sea floor, lens flare, point clouds, CustomShader (to #761)
10-3018610650All 309 re-shot on a real GPU (UI hidden on the ortho side). Imagery draped on 3D Tiles, clipping polygons, your own GLSL (to #798)
v2.2.019010700All 309 re-shot in one go on a real GPU with the same code as npm 2.2.0. Negative terrain heights, the underground test, clouds (to #808)

Note: up to 10-28 the gate forced a software GPU (SwiftShader, no WebGPU), so ortho fell back to WebGL2. From partway through 10-28 the shots were taken on the Mac's real GPU (Metal, WebGPU). The 10-29 row is the family re-shoots laid over the gallery. The 10-30 row is all 309 re-shot on a real GPU. The last row, v2.2.0, is the final count, re-shot with the same code that went to npm as 2.2.0.

Results

Re-shooting all 309 in one go with v2.2.0 (the same code as on npm, on the Mac's real GPU with WebGPU), the 297 scored examples came to 3/2/1/0 = 190 / 107 / 0 / 0. No example fails to run, none runs only in part, and every one gives the same answers as Cesium. 190 (64%) draw the same picture, eight times the 23 of the first shoot. Every picture can be seen next to Cesium's in Sandcastle.

From the left: Before (ortho), After (ortho, v2.2.0), and real Cesium.

aerometrex-san-francisco: the grey sky turned blue (colour match 50.7% → 90.2%)

aerometrex-san-francisco: Before, After and Cesium

sample-height-from-3d-tiles: from solid grey to the rooftops (27.7% → 98.2%)

sample-height-from-3d-tiles: Before, After and Cesium

drape-imagery-on-3d-tiles: the map is draped on the 3D Tiles (22.5% → 97.6%)

drape-imagery-on-3d-tiles: Before, After and Cesium

itwin-gaussian-splats: from plain blue to the building (0.0% → 91.2%)

itwin-gaussian-splats: Before, After and Cesium

What was built

What was given up

Why upstream did not budge

In these seven days about 130 PRs (#665–#808), mostly for Cesium compatibility, went into main. Even so, the automatic deploy from main runs the full-page WebGPU and UI gates and the production-bundle gate before anything reaches production. There were regressions along the way, in WGSL, depth and clouds (#730–#734, #799), but the gates caught them, held the deploy, and they were fixed the same day.

With v2.2.0, ortho-earth can finally call itself photogenic, and its features have filled out a lot. The way to evaluate Cesium compatibility is now in place too, so I will keep polishing.

The same approach now runs Leaflet and Google Maps code on the globe as well. What shipped is in "Ortho Earth 2.2 is out".

And yet, for all this flamboyant tinkering, upstream did not budge. That is how ortho-earth is developed.

Kenji Yoshida @ Yokohama