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:

  1. Non-destructive authoring: Prefabs store Base + Modifier params; Preview rebuilds on load. Undo is the standard editor undo stack.
  2. One evaluator: Preview and Compiled share the same Core evaluation kernel; ContentHash drives 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)

  1. Enable the PolyTerrain Gem, then set /O3DE/PolyTerrain/Enabled and EditorModeEnabled to true. Restart the editor.
  2. Create a Poly Partition Definition (.polypartitiondefinition) with Priority Layers and Weight Channels.
  3. Tools → Poly Terrain Mode → Create: make a Poly Partition entity and assign the MPD.
  4. 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

ChapterContents
Getting startedEnable Gem and Registry, create MPD and Partition, sculpt, paint, bake
Core conceptsPartition, Section, MPD, Preview vs Compiled, stack order, ContentHash, anchors
ComponentsField tables for partition, runtime, bridges, and modifiers
AuthoringSix-tab mode, Outliner, Refine/Coarsen, Landscape Canvas, recipes
ModifiersCatalog of twelve modifiers, key parameters, layer-order pitfalls
Materials and bakeMPD sections, splat and physics materials, Transformer Pipeline, AP bake
IntegrationsHeightfield coexistence, World Streaming, SurfaceData vegetation
Optional featuresVT, PCG graphs, runtime weight rewrite / multiplayer, GPU preview
ReferenceSettings Registry, EBus selection, Python (azlmbr.poly_terrain)
DebuggingImGui overlay, constraints, troubleshooting

Glossary

TermMeaning
Poly PartitionRoot entity + component that owns Base Sections and the modifier stack
Base SectionInitial mesh tile of a partition (plane, converted mesh, or heightfield sample)
Preview SectionEditor-only mesh rebuilt from Base + modifiers (in memory)
Compiled SectionRuntime asset after Transformer Pipeline bake (.polypartitionsection)
MPDPoly Partition Definition (.polypartitiondefinition): layers, channels, materials, build variants
Weight ChannelPer-vertex weight attribute; baked to textures for splat, physics, and SurfaceData
Priority LayerNamed stack layer declared in the MPD; controls modifier evaluation order
Transformer PipelinePost-eval stages: StaticMesh LOD, Skirt, Collision, Subsection, FarField, WS, VT

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 (use GetUnifiedSurfacePointD in 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


Copyright © 2026 DawnEngine. All rights reserved.

DawnEngine is a commercial 3D engine distributed under the DawnEngine end-user license agreement. Engine binaries and source are proprietary and are not covered by the licenses below.

Documentation only: the prose and templates on this site are a derivative work of Open 3D Engine (O3DE) documentation by the O3DE Contributors, used under CC BY 4.0 (documentation content), Apache 2.0 (site code), and the MIT license (inline code samples).

The open-source 3D engine that DawnEngine is built on top of is Open 3D Engine . DawnEngine is not affiliated with, endorsed by, or sponsored by The Linux Foundation or the O3DE project. “O3DE” and “Open 3D Engine” are trademarks of The Linux Foundation.