Georeference and 3D tilesets
This chapter covers the two components every globe scene needs: CesiumGeoreferenceComponent and Cesium3DTilesetComponent.
Georeference
| Field | Default | Purpose |
|---|---|---|
| Origin placement | CartographicOrigin | Or TrueOrigin (ECEF zero = engine origin) |
| Origin lon / lat / height | 0 / 0 / 0 | Cartographic origin in LLH |
| Scale | 1.0 | Globe meters per engine meter |
| Ellipsoid asset / radii | WGS84 | Custom body via .cesiumellipsoid or explicit radii |
Built-in ellipsoids under Gems/Cesium3DTiles/Assets/Ellipsoids/: WGS84, Moon, Mars (.cesiumellipsoid). Changing the ellipsoid rebuilds dependent tilesets.
Editor actions: Place Origin Here, degrees-minutes-seconds display, Show Load Radii for sub-level debug spheres.
#include <Cesium3DTiles/CesiumGeoreferenceBus.h>
DawnCesium::CesiumGeoreferenceRequestBus::Event(
georeferenceEntityId,
&DawnCesium::CesiumGeoreferenceRequests::SetOriginLongitudeLatitudeHeight,
lonDegrees, latDegrees, heightMeters);
Optional soft reference: tilesets can point at a specific georeference entity (Georeference entity ID); empty uses the level default.
Tileset sources
Cesium3DTilesetComponent loads one 3D Tiles dataset.
| Source | When to use |
|---|---|
FromCesiumIon | Hosted ion assets (terrain, cities, photorealistic tiles) |
FromUrl | Self-hosted or CDN tileset.json |
FromLocalFile | Offline absolute path / file:// to tileset.json |
FromEllipsoid | Debug ellipsoid mesh without external tiles |
Ion fields
| Field | Default | Notes |
|---|---|---|
| Ion asset ID | 1 | World Terrain; common: 2275207 Google Photorealistic |
| Ion access token | empty | Falls back to server asset → registry → CESIUM_ION_TOKEN |
| Ion server asset | empty | Optional .cesiumionserver for private ion |
URL / local fields
| Field | Notes |
|---|---|
| URL | tileset.json endpoint (FromUrl) |
| Local file path | Absolute path to tileset.json (FromLocalFile) |
| Request headers | Extra HTTP headers for every tileset / tile request |
Empty per-tileset token falls back as described in
Getting started. Optional .cesiumionserver asset fields: server URL, API URL, default access token, OAuth application ID.
LOD, cache, and culling
| Field | Default | Notes |
|---|---|---|
| Maximum screen space error | 16.0 | Lower = sharper / heavier; 0 → project default |
| DPI scaling mode | UseProjectDefault | Or force Enabled / Disabled |
| Maximum cached bytes | 512 MB | Loaded-but-hidden tile content |
| Preload ancestors / siblings | on / on | Reduces holes when refining |
| Forbid holes | off | Wait for children before refining (extra latency) |
| Frustum / fog culling | on / on | Disable carefully with LOD transitions |
| Enforce culled SSE | off | Refine culled tiles to Culled screen space error |
| Culled screen space error | 64.0 | Coarser budget for off-screen tiles |
| Use LOD transitions | off | Cross-fade; mutually exclusive with frustum/fog-friendly occlusion path |
| LOD transition length | 0.5 s | Fade duration |
| Enable occlusion culling | off | Experimental; requires frustum culling; rebuilds tileset |
| Delay refinement for occlusion | on | Wait ~4 frames for query results |
| Maximum occlusion proxies | 500 | Cap on tracked proxies |
| Maximum simultaneous tile loads | 0 | 0 → registry default (8) |
| Loading descendant limit | 20 | Descendants loaded per frame while refining |
| Suspend update | off | Pause selection / loading; last set keeps rendering |
glTF, physics, and materials
| Field | Default | Notes |
|---|---|---|
| Generate smooth normals | off | When source glTF has none |
| Always include tangents | off | Even without normal maps |
| Ignore KHR_materials_unlit | off | Force lit material for unlit-tagged prims |
| Texture anisotropy max | 1 | 1 = off; higher enables anisotropic filtering |
| Create physics meshes | true | Static PhysX colliders |
| Collision layer / group | empty | Empty layer = Default; empty group = All |
| Enable double-sided collisions | off | 2× collision index memory |
| Create nav meshes | off | Needs NavMesh bridge + PhysX |
| Receive decals | on | Atom decals on tile materials |
| Show credits on screen | off | Force attribution on screen |
| Enable Gaussian splatting | on | KHR_gaussian_splatting |
| Splat SH degree | 3 | 0 = COLOR_0 only; capped by source |
| Enable voxel rendering | off | Raymarch 3DTILES_content_voxels |
| Voxel render property / density | empty / 8.0 | Property name + opacity scale |
| Voxel custom shader path | empty | From Voxel Metadata “Generate Voxel Shader” |
| Custom / translucent materials | empty | Global or BLEND-mode base |
| Material overrides by name | empty | glTF material.name → asset |
| Enable water mask | off | Cesium World Terrain water channel |
| Water material / wave params | defaults | Speed 0.5, scale 0.35, strength 0.15 |
| Translucency sort priority | 0 | Atom: smaller draws earlier |
| Render highlight / color | off / orange | Silhouette diagnostic highlight |
Point cloud shading (m_pointCloudShading): attenuation off by default; geometric error scale 1.0; maximum attenuation / base resolution 0 = unclamped / 1 px fallback.
Camera binding and soft references
| Field | Default | Notes |
|---|---|---|
| Georeference / credit / camera manager entity | empty | Soft refs; empty → level defaults |
| Use default / editor / game / RTT / XR cameras | all on | Per-tileset LOD source filters |
| Additional camera entities | empty | Explicit Camera entities always appended |
Editor and diagnostics
| Field | Default | Notes |
|---|---|---|
| Update in editor | on | Stream in the editor viewport |
| Unload tiles in play mode | off | Set true to avoid PIE double memory |
| Log selection / shared asset stats | off | Frame logs when numbers change |
Editor actions: Set Ion Asset, Focus Viewport on Tileset (GetRootTileWorldBounds), Troubleshoot Token.
Runtime API sketch
#include <Cesium3DTiles/Cesium3DTilesetBus.h>
DawnCesium::Cesium3DTilesetRequestBus::Event(
tilesetEntityId,
&DawnCesium::Cesium3DTilesetRequests::RefreshTileset);
DawnCesium::Cesium3DTilesetRequestBus::Event(
tilesetEntityId,
&DawnCesium::Cesium3DTilesetRequests::SetMaximumScreenSpaceError,
8.0);
Useful requests: RefreshOverlays, SetSuspendUpdate, SetOfflineRenderingEnabled, GetLoadedTileCount / GetLoadProgress, SampleHeight / SampleHeights, glTF post-processor / modifier hooks, tile handle queries, collision layer/group, highlight. Notifications: OnTilesetLoaded, OnTilesetLoadFailure (includes HTTP status), OnHeightsSampled.
Full signatures: Reference.
Next steps
- Overlays and clipping — drape imagery and clip regions.
- Recipes — photorealistic and offline setups.
- Reference — EBus quick list.