Build a playable, real-world San Francisco scene in the Taos Editor — Cesium World Terrain streamed from Cesium ion under a physical atmosphere sky — without writing a line of code. Everything happens through the Create menus and the Inspector; by the end you'll be flying over the bay at runtime. (The scripted twin of this scene is samples/geo_sanfran.ts.)
What you'll use:
| Piece | What it does |
|---|---|
| Geo Reference component | The scene's georeference: anchors the world at a longitude/latitude, holds the scene-wide ion Access Token, shows the attribution overlay |
| Geo 3D Tileset component | One streamed layer; its Source picks the data — a Cesium ion asset by id, keyless streamed terrain + imagery, or keyless OpenStreetMap buildings |
| Sky component | Physical atmosphere lit by the Sun light |
| Camera Controller component | Fly camera for play mode |
Prerequisites#
- The Taos Editor, on a WebGPU-capable machine.
- A free Cesium ion account — ion hosts the curated global 3D content (Cesium World Terrain, OSM Buildings, Google Photorealistic 3D Tiles) and requires an access token.
No account yet? Everything through step 3 works keyless, and step 5 notes the keyless terrain alternative.
Create a project#
File > New Project, pick the Basic template. You get a scene with a Main Camera and a Sun (directional light).
Three edits prepare it for planet scale. There are two cameras to widen — the editor viewport's fly camera (what you see while authoring) and the scene's Main Camera (what renders in the Game view and at runtime):
- Click the ⚙ gear at the top-right of the viewport and set Clip far
to
5000000(5,000 km). This is the editor camera's far plane — its default suits room-to-city scenes, but a planet's horizon is a long way off and geo terrain would visibly cut off a couple of kilometers out. The setting is saved with the project, so it sticks across sessions. Setting Clip near to1helps depth precision at these distances too. - Select Main Camera and, in the Inspector's Camera component, set
Far to
5000000and Near to1— the same change for the runtime camera. - Move the camera up and back so it isn't underground when the world appears:
set its Position to
(0, 400, 2000).
Add the sky#
Create > Environment > Sky. The default mode is atmosphere — a physical
Rayleigh/Mie sky lit by your Sun. Drag the Sun's rotation (or edit it in the
Inspector) and the sky follows.
Once the Geo Reference exists (next step), it couples this sky to the globe: the horizon dips as you climb, a lit ground sphere fills below it where no tiles have streamed, and vista-scale aerial perspective hazes the far hills into the sky. Both are on by default — the Curved Horizon and Aerial Perspective toggles live on the Geo Reference.
Anchor the world at San Francisco#
Create > Geo > Geo Reference — the scene's georeference. It anchors a floating-origin frame at its Longitude / Latitude / Height and re-centers the world origin under the camera as you fly, so coordinates stay precise at planetary distances. On its own it renders nothing — Geo 3D Tileset layers stream through it. It is single-instance: creating a second one just selects the existing one, like Sky.
Set its anchor to the San Francisco waterfront:
- Longitude:
-122.37806 - Latitude:
37.804287 - Height:
312.56
Edits apply live — type any place on Earth and the origin (and the camera floating above it) teleports there.
Connect to Cesium ion#
- Sign in at ion.cesium.com and open Access Tokens.
- Copy your token (the auto-created Default Token is fine, or create one
scoped to
assets:read). - Select the Geo Reference object and paste it into ion Access Token.
That token is the scene-wide default — every Geo 3D Tileset you add uses it automatically. (An individual tileset's ion Token property overrides it, e.g. for an asset shared from a different account.)
Add Cesium World Terrain#
Create > Geo > Cesium World Terrain.
This adds a Geo3DTileset component with Source ion, preconfigured for
asset 1 — Cesium's quantized-mesh global terrain. Within a few seconds the
city, the bay, and the hills stream in under the camera. If nothing appears,
open the Console panel — a missing or invalid token logs a [Geo3DTileset]
warning there, and streaming starts the moment you paste a valid one.
No ion account handy? Create > Geo > Geo Terrain instead — a Geo 3D Tileset
with Source terrain, streaming keyless raster-DEM elevation draped with
the Imagery of your choice (Esri satellite, OSM, Carto light/dark). It's
lower fidelity than Cesium World Terrain; use one or the other, not both — two
overlapping terrains z-fight.
Notice the small attribution line at the bottom-left of the viewport — the on-screen data credits required by the providers' terms of service. It updates automatically as sources come and go (leave Show Attribution on the Geo Reference in anything you ship).
Optional layers#
More quick-adds compose onto the same terrain:
- Create > Geo > Cesium OSM Buildings — ion asset 96188, Cesium's worldwide OpenStreetMap buildings, extruded over the terrain.
- Create > Geo > Geo Buildings — the keyless OpenStreetMap alternative
(Source
osm-buildings); use one building layer, not both. - Create > Geo > Google Photorealistic 3D Tiles — ion asset 2275207, photogrammetry of much of the world. Use it instead of terrain + buildings (delete those objects) — it's a complete surface on its own.
- Any other ion asset: add a Geo 3D Tileset component to an empty object and type its ion Asset ID from your ion dashboard. Terrain and 3D-Tiles assets are auto-detected, and every property re-streams live.
If a dense building layer costs too much framerate, the Geo 3D Tileset has three performance levers, all live:
- Max Render Distance — cap how far buildings draw. The building quick-adds
default to
20000(20 km); from a city vantage, unlimited measured ~5× the draw calls and ~13× the tile memory of a 10 km cap, with no visible difference near the camera.0= unlimited. - Cast Shadows — off roughly halves the layer's remaining draw work (buildings still receive shadows).
- Max Screen-Space Error — higher = coarser/fewer tiles everywhere.
While authoring, note the editor renders the scene twice when both the Scene and Game tabs are visible — hide the Game tab for full viewport framerate.
Explore the bay in the editor#
Hold the right mouse button in the viewport to look around, W/A/S/D (+ Q/E for down/up) to fly, and scroll the wheel while flying to change speed. In geo scenes the fly speed adapts to your altitude automatically — climb for fast travel, descend to slow down for street level; the ⚙ settings panel's Fly speed sets the ground-level base (saved with the project), and Shift triples it while held. Turn toward the Golden Gate, skim the hills, and watch tiles refine as you approach.
Play it#
Give the runtime a fly camera:
- Select Main Camera and Add Component > Camera Controller.
- Leave Mode as
fly; set Speed to250— the same runtime speed the sample uses. - Press Play.
In the Game view you fly the same world with the same controls, now as the
game. Terrain, sky, and the attribution overlay all come along — the geo
module is detected from the components in the scene, so a Build for Web
(Ctrl+B) of this project streams it in the browser too.
Where to go next#
- samples/geo_sanfran.ts — this scene as a script, wiring the same curved-horizon atmosphere and aerial perspective by hand that the Geo Reference toggles gave you here.
- Geo Tutorials — the scripting series behind these components: floating origins, layer stacking, anchors and picking, clipping, vector data, terrain physics, other worlds.
- Data Sources — every source the geo module can stream, keyless vs. keyed.
- Performance, Quality & Debugging — the detail-vs-framerate knobs behind Max Screen-Space Error and friends.