Choose the export
| Action | Result |
|---|---|
| Graph toolbar: Export Mesh | Standalone mesh with wood, realised canopy, fruit where present, trunk collision and four LODs. |
| Actor: Bake | Baked wood plus separate foliage prototypes and transforms. |
| ExportStaticMesh | Wood-only scripting export for workflows that keep leaf instances separate. |
| ExportScatterMesh | Complete tree with a selectable first LOD and count, for Foliage and PCG Static Mesh Spawner. |
| ExportForestSet | Seeded mesh variants and Foliage Type assets. |
Realising thousands of leaves produces large meshes. Start forest exports at LOD 1 or 2 and measure the target scene. Optional Nanite needs compatible platform, renderer and material settings.
Terrain and PCG examples
Open these maps in the separate example project's Content/Examples/Maps folder:
| Map | Environment |
|---|---|
| L_ProceduralPlant_Forest | Rolling woodland with a mixed tree canopy, understory shrubs, dense grass and fern patches. |
| L_ProceduralPlant_Marsh | Sparse wetland trees, open gaps, low bank plants and connected water channels with absorption, subtle ripples and reflections. |
| L_ProceduralPlant_OpenWorld | A 2.016 km landscape with hills and a broad valley, World Partition and nine editable PCG forest regions. |
The graphs are in /Game/ProceduralPlant/Biomes/PCG. Select a named PCG volume and use Generate after editing. In the open-world editor, load the region in the World Partition window before inspecting its vegetation. Plant and ground-cover graphs are separate. Forest and open-world terrain also generate nearby grass through LGT_WoodlandFloor.
Marsh height filters use $Position.Z relative to the waterline. Preserve these bands to keep reeds at the shore and dry grass on the banks. The maps use movable lighting and sky fill; generated vegetation does not require a baked lighting pass. Keep the open-world map's matching external actor packages when copying it.
Python and Blueprint
UProceduralPlantScripting is the editor scripting library for graph authoring and exports. Python uses unreal.ProceduralPlantScripting. In gameplay Blueprint, spawn a Procedural Plant Actor, assign its component Graph, batch SetPlantParameter(Name, Value, false), then call GeneratePlant. This switches from baked rendering to runtime generation. RandomizePlant or GeneratePlant(true) creates a fresh seed.
Fresh Random is a graph node with Min, Max and Integer mode, without a seed pin. Each generation gets a new pseudorandom sample, shared across consumers and actor LODs. Use Seed variables for repeatable plants. Standard Blueprint random nodes can also feed SetPlantParameter. Runtime generation is synchronous and can be expensive: batch edits, distribute builds across frames and measure the target scene.
GetNodeByIndex exposes compound node properties. SetNodeProfileByIndex accepts finite, ordered Vector2D(t, value) keys with t from zero to one. Its final boolean selects replacement or multiplication of the scalar value.
Numeric and text setters participate in Unreal transactions. Group edits with unreal.ScopedEditorTransaction and call RefreshGraphEditor after a batch to update the canvas and preview.