PolyTerrain mesh terrain
Dawn Engine PolyTerrain is a true 3D mesh terrain system (also known in code as PolyPartition). Unlike heightfield terrain, it can express overhangs, caves, tunnels, and steep cliffs as editable triangle meshes, with a non-destructive modifier stack, weight-channel painting, deterministic bake, and optional runtime virtual texturing.
Maturity: shipped. Provided by the PolyTerrain Gem. Off by default—enable it in the Settings Registry before authoring. It is independent from the heightfield Terrain Gem; both can coexist in one level.
It does not replace heightfield terrain: open plains and clipmap-style far terrain still use Gems/Terrain. Use PolyTerrain where mesh topology is required.
What problem it solves
Heightfields cannot represent multi-valued height (overhangs, caves, stacked decks). Hand-authored static meshes lose the non-destructive edit loop of terrain tools. PolyTerrain provides:
- Base mesh sections with a stack of modifiers (sculpt, paint, boolean, spline, noise, and more);
- Live Preview in the editor and bit-identical Compiled bake for runtime;
- Weight channels for material splat, physics materials, and vegetation tags;
- Bridges to World Streaming, PhysX collision, Atom materials, and optional VT / PCG / multiplayer weight overlays.
With the Gem disabled (/O3DE/PolyTerrain/Enabled=false), heightfield terrain and existing levels behave as before.
How it works
MPD (.polypartitiondefinition)
│
Poly Partition entity ── Base Sections ── Modifier stack (Priority Layer + Sub-Priority)
│
├─ Preview (editor): same evaluator, in-memory mesh, no disk write
└─ Build → .polypartition → AP → .polypartitionsection + .polypartitionweights
│
PrefabProcessor → runtime section entities (+ WS cells)
│
Atom render + PhysX collision (+ optional VT / SurfaceData)
Two rules run through the Gem:
- Non-destructive authoring: Prefabs store Base + Modifier params; Preview rebuilds on load. Undo is the standard editor undo stack.
- One evaluator: Preview and Compiled share the same Core evaluation kernel;
ContentHashdrives incremental AssetProcessor bake.
Large worlds use double-precision section anchors (AZ::Vector3d) and typically pair with
double-precision rendering and
World Streaming.
Quick start (summary)
- Enable the
PolyTerrainGem, then set/O3DE/PolyTerrain/EnabledandEditorModeEnabledtotrue. Restart the editor. - Create a Poly Partition Definition (
.polypartitiondefinition) with Priority Layers and Weight Channels. - Tools → Poly Terrain Mode → Create: make a Poly Partition entity and assign the MPD.
- Add Sculpt / Weight Paint, iterate in Preview, then Build Compiled Sections.
Sample level: AutomatedTesting/Levels/PolyTerrain/PolyTerrainSample.
For the full walkthrough, Registry gates, and bake checklist, see Getting started.
Handbook chapters
| Chapter | Contents |
|---|---|
| Getting started | Enable Gem and Registry, create MPD and Partition, sculpt, paint, bake |
| Core concepts | Partition, Section, MPD, Preview vs Compiled, stack order, ContentHash, anchors |
| Components | Field tables for partition, runtime, bridges, and modifiers |
| Authoring | Six-tab mode, Outliner, Refine/Coarsen, Landscape Canvas, recipes |
| Modifiers | Catalog of twelve modifiers, key parameters, layer-order pitfalls |
| Materials and bake | MPD sections, splat and physics materials, Transformer Pipeline, AP bake |
| Integrations | Heightfield coexistence, World Streaming, SurfaceData vegetation |
| Optional features | VT, PCG graphs, runtime weight rewrite / multiplayer, GPU preview |
| Reference | Settings Registry, EBus selection, Python (azlmbr.poly_terrain) |
| Debugging | ImGui overlay, constraints, troubleshooting |
Glossary
| Term | Meaning |
|---|---|
| Poly Partition | Root entity + component that owns Base Sections and the modifier stack |
| Base Section | Initial mesh tile of a partition (plane, converted mesh, or heightfield sample) |
| Preview Section | Editor-only mesh rebuilt from Base + modifiers (in memory) |
| Compiled Section | Runtime asset after Transformer Pipeline bake (.polypartitionsection) |
| MPD | Poly Partition Definition (.polypartitiondefinition): layers, channels, materials, build variants |
| Weight Channel | Per-vertex weight attribute; baked to textures for splat, physics, and SurfaceData |
| Priority Layer | Named stack layer declared in the MPD; controls modifier evaluation order |
| Transformer Pipeline | Post-eval stages: StaticMesh LOD, Skirt, Collision, Subsection, FarField, WS, VT |
Limits and related capabilities
You can rely on:
- Non-destructive modifier stacks; Preview / Compiled parity via one evaluator;
- Weight channels for splat, physics, and SurfaceData; WS cell bake and FarField HLOD contribution;
- Optional VT, GPU preview, PCG graphs, and multiplayer weight-stamp sync.
Do not assume:
- PolyTerrain implements
TerrainDataRequestBus(useGetUnifiedSurfacePointDin the editor; runtime gameplay should use compiled meshes / SurfaceData / your own queries); - Enabling the Gem alone turns on edit mode or VT (separate Registry keys);
- Section entities are networked actors (spawnable / WS authority; only weight overlays replicate when the Multiplayer submodule is built).
Next steps
- Getting started — shortest path to a baked partition.
- World Streaming — bake partitions into streaming cells and FarField HLOD.
- Double-precision rendering — section anchors and large-world authorship.
Getting started
Enable PolyTerrain, create an MPD and Poly Partition, sculpt and paint in Preview, then bake compiled sections.
Core concepts
Understand Poly Partition, sections, MPD, Preview versus Compiled, modifier stack order, ContentHash, and double-precision anchors.
Components
Field reference for Poly Partition, runtime section, collision, SurfaceData, heightfield bridge, VT components, and shared modifier properties.
Authoring
Use the six-tab Poly Terrain mode, Outliner, Refine and Coarsen, Landscape Canvas, and common recipes.
Modifiers
Catalog of the twelve PolyTerrain modifiers, key parameters, evaluation order, and authoring pitfalls.
Materials and bake
Configure MPD material and weight channels, Transformer Pipeline stages, and the AssetProcessor bake path.
Integrations
Coexist with heightfield terrain, stream with World Streaming, and drive vegetation through SurfaceData.
Optional features
Enable runtime virtual texturing, PCG graphs, runtime weight rewrite and multiplayer stamps, and GPU sculpt preview.
Reference
Settings Registry keys, EBus selection, and Python scripting for PolyTerrain.
Debugging
Use the ImGui overlay, Build To, performance constraints, and troubleshooting tables for PolyTerrain.