Skip to content

Foliage Painting and Management

Foliage is the collection of detail meshes that populate the terrain surface with organic visual variety: grass blades, flowers, pebbles, small rocks, bushes, and trees. Unlike objects that are placed individually from the object browser, foliage is painted onto the terrain using a density-based brush system that distributes instances procedurally across the painted area. A terrain with no foliage looks like a bare diorama. A terrain with thoughtfully painted foliage at appropriate density and scale variation looks like a living environment that invites exploration.

This article is a procedural tutorial covering every foliage painting and management operation available in the Unturned™ Level Editor. It describes the foliage panel interface, the brush parameters that control density and scale, the per-foliage-type placement constraints defined in the foliage asset configuration, the erase and re-paint workflow for editing placed foliage, the color variation system, and the failure modes that cause foliage to appear incorrect or absent in the game viewport. The article assumes the reader is familiar with the Level Editor interface, camera controls, and toolbar layout documented in Level Editor UI and Navigation.

Foliage panel open in the Unturned Level Editor with grass brush active on a forest terrain

Prerequisites

  • A map with completed terrain heightmap and material splatmap, created following Custom Map Creation: Project Setup. The editor must be open and the terrain must have at least one material layer painted.
  • Familiarity with the editor toolbar, viewport navigation, and the terrain material painting workflow from Terrain Heightmap Editing.
  • A set of foliage assets available in the map's master bundle or in the vanilla asset library. The vanilla game ships over 240 InstancedMeshInfoAsset configurations and 69 tree types.
  • A mouse with a scroll wheel for brush size adjustment.

What you will learn

  • How to open the foliage panel and navigate the foliage asset list.
  • How to select and configure a foliage brush for grass, bushes, and trees.
  • How brush parameters (Density, Scale Range, Size) control the placement behavior.
  • How per-type density maps work and how multiple foliage types layer on the same area.
  • How to paint grass, bush, and tree foliage onto the terrain surface.
  • How to configure color variation for natural-looking foliage tint variation.
  • How to erase specific foliage types or clear an area entirely.
  • How to re-paint and edit placed foliage using the additive brush system.
  • How to diagnose and resolve foliage LOD pop-in and foliage not appearing in-game.

Background: how the foliage painting system works

The foliage painting system is a procedural density-map system, not a discrete object placement system. When the paint brush is dragged across the terrain, the editor samples the brush area at regular intervals and evaluates a set of placement conditions at each sample point. If the conditions are satisfied, a foliage instance is added at that position. The conditions are defined in the foliage asset's .dat configuration file and include the terrain material weight threshold, the surface angle range, and the obstruction radius that prevents overlap with existing objects.

As shown in the flowchart above, the foliage brush evaluates three constraint gates at each sample point before placing an instance. The material weight gate, the angle gate, and the obstruction gate are all defined in the foliage asset's .dat file and are not configurable from the brush panel during painting. The brush panel controls only the density target, the scale range, and the brush radius.

Foliage data storage

Foliage data is stored in the Level/Foliage/ directory, separate from the heightmap and splatmap data. Replacing the heightmap or repainting terrain materials does not affect the existing foliage data. The foliage is only modified when the brush tool is used in Paint or Erase mode. The foliage storage format was upgraded from V1 (fragmented per-region files) to V2 (single consolidated file) following the 3.22.8.0 update. Maps using V1 format are automatically upgraded to V2 on the next save after version 3.22.20.0.

Foliage asset subtypes

The foliage system defines two asset subtypes. Each subtype uses a different .dat format and serves a different purpose in the painting workflow.

SubtypeType stringPurposePainted as
InstancedMeshInfoAssetSDG.Framework.Foliage.InstancedMeshInfoAssetSmall dense foliage rendered through GPU instancingGrass, flowers, pebbles, small bushes
FoliageResourceInfoAssetSDG.Framework.Foliage.FoliageResourceInfoAssetTrees and large resource foliage with collisionTrees, large bushes, harvestable resources

The distinction matters for the painting workflow because tree assets (the FoliageResourceInfoAsset subtype) have an Obstruction_Radius that prevents overlap with other large foliage and objects, while instanced mesh assets (grass, pebbles) have a smaller obstruction radius that produces denser coverage. The brush panel treats both subtypes identically for painting purposes: select the asset, configure the brush, and paint.

For the complete foliage asset field reference, see Foliage Asset Reference.

Foliage panel overview

The foliage panel is the primary interface for foliage painting and management. Open it by clicking the Foliage icon on the Level Editor toolbar.

Panel layout

The foliage panel displays a vertical list of all foliage assets available for painting on the current map. Each entry in the list shows:

  • Asset name: The internal name of the foliage asset.
  • Thumbnail preview: A small icon showing the foliage mesh or a placeholder icon.
  • Type indicator: An icon distinguishing InstancedMeshInfoAsset (grass icon) from FoliageResourceInfoAsset (tree icon).
  • Density slider: A per-asset density control that overrides the asset's Density field. The slider range is 0 to 1 and maps to a density multiplier applied at paint time.

Panel controls

ControlLocationDescription
Mode toggleTop of panelSwitches between Paint mode and Erase mode
Brush SizeBelow asset listThe radius of the brush cursor in terrain units, range 1-200
Min ScaleBelow Size controlThe minimum random scale applied to each placed instance
Max ScaleBelow Min ScaleThe maximum random scale applied to each placed instance
DensityPer-asset slider in listDensity multiplier for the selected asset, range 0-1

On-screen appearance of the foliage panel

The foliage panel occupies the right side of the editor interface when visible. The asset list scrolls vertically. Each asset row has a small preview thumbnail on the left, the asset name in the center, and a density slider on the right. The current mode (Paint or Erase) is indicated by the highlighted mode button at the top of the panel. The brush cursor appears in the viewport as a circle centered on the mouse position; the circle radius matches the Brush Size value.

Step-by-step: painting grass foliage

Grass is the most frequently painted foliage type. It covers the majority of the terrain surface and provides the visual foundation for all other foliage layers.

Step 1: Open the foliage panel by clicking the Foliage icon on the toolbar.

Step 2: Confirm the mode is set to Paint (the default mode). The Paint button is highlighted.

Step 3: Select a grass foliage asset from the list. Grass assets are InstancedMeshInfoAsset type and are typically named Grass_00, Grass_Dense_01, Grass_Tall_00, or similar conventions. The preview thumbnail shows a green grass blade or patch.

Step 4: Set the brush parameters. For ground-cover grass on a standard survival map, the cohort starting point is:

ParameterRecommended valueRationale
Brush Size100-150Covers a broad area per stroke for efficient grass painting
Density slider0.4-0.6Produces moderate coverage visible from standing height
Min Scale0.6Prevents grass instances from appearing too small or too uniform
Max Scale1.2Allows some instances to reach full height for visual variety

Step 5: Position the brush cursor over the terrain area where grass should appear. Left-click and hold, then drag the mouse across the terrain surface. Grass instances appear under the brush cursor as the stroke is applied.

Step 6: Continue painting until the target area is covered. Release the mouse button to end the stroke.

On-screen appearance: As the brush is dragged, grass mesh instances appear in real time on the terrain surface. Each stroke adds instances at the configured density within the brush radius. The instances are placed with random rotation and scale within the configured range, producing a natural-looking distribution. The grass instances are shaded by the current environmental lighting and cast shadows if the foliage material supports shadow casting.

Step 7: After painting the base grass layer, switch to a second grass asset with a different scale range (e.g., a tall grass variant with Min Scale 0.8, Max Scale 1.8) and paint over the same area at a lower density (0.2-0.3). This creates a layered grass effect with both low ground cover and taller stalks.

Step-by-step: painting bushes

Bushes are medium-height foliage that provides visual variety between the ground-level grass layer and the overhead tree layer.

Step 1: Select a bush foliage asset from the foliage list. Bush assets are typically named Bush_00, Shrub_01, or use the foliage type's internal name. Bush assets can be either InstancedMeshInfoAsset or FoliageResourceInfoAsset subtype depending on whether they have collision behavior.

Step 2: Set the brush parameters. For bushes, use smaller brush settings than grass:

ParameterRecommended value
Brush Size40-80
Density slider0.15-0.3
Min Scale0.5-0.7
Max Scale1.3-1.6

Step 3: Paint the terrain surface in areas where bushes should appear: along forest edges, in clearings, scattered across open terrain. Each stroke places bush instances within the brush radius at the configured density.

Step 4: For bush clusters around tree bases (simulating natural undergrowth), reduce the brush size to 20-30 and paint small patches around each tree position.

On-screen appearance: Bush instances appear as larger, more substantial meshes than grass. The obstruction radius defined in the bush asset prevents bushes from overlapping with trees and buildings. Bush instances may have visible shadow casting depending on the asset configuration.

Step-by-step: painting trees

Trees are FoliageResourceInfoAsset subtype. They have collision behavior, can be harvested for resources, and have an Obstruction_Radius that prevents them from spawning inside buildings or overlapping with other trees.

Step 1: Select a tree foliage asset from the foliage list. Tree assets are listed under the Resources section and are named by tree type: Pine_00, Oak_00, Palm_00, etc.

Step 2: Set the brush parameters. Trees require significantly wider spacing than grass or bushes:

ParameterRecommended value
Brush Size30-60
Density slider0.05-0.15
Min Scale0.7-0.85
Max Scale1.0-1.3

Step 3: Paint the terrain surface. Each click places one or more tree instances within the brush area, subject to the tree asset's Obstruction_Radius and density configuration.

On-screen appearance: Trees appear as full-size resource models with collision. The tree instances are placed with random rotation and scale. The tree's Obstruction_Radius is visualized in the editor as a light sphere around each potential placement position, visible during the stroke when the cursor is held over an area where a tree would be placed. Trees that cannot be placed due to obstruction are silently skipped; the brush only places instances where the obstruction check passes.

Step 4: For forest areas, paint multiple strokes across the same area to build up tree density. The density slider controls the per-stroke density; multiple passes over the same area add trees cumulatively until the obstruction radius prevents further placement.

Tree placement constraints

Tree placement is constrained by the asset's .dat fields, which are not adjustable from the brush panel. The following fields control where trees can be placed:

FieldDescriptionDefault behavior
Min_Weight / Max_WeightTerrain material weight rangeTrees only placed on material layers whose blend weight falls within this range
Min_Angle / Max_AngleSurface slope angle rangeTrees not placed on slopes steeper than the max angle
Obstruction_RadiusOverlap check sphere radiusTrees not placed within this distance of any existing obstruction

A tree asset configured with Max_Angle 30 will not be placed on slopes steeper than 30 degrees, regardless of the brush position. If the brush stroke covers a slope area, trees are only placed on the portions of the brush area where the slope angle is within the allowed range.

Density controls in the brush workflow

The density system determines how many instances of a foliage type appear per unit area. Understanding the density-to-coverage relationship is essential for achieving the intended visual result.

Density slider interpretation

The per-asset density slider in the foliage panel is a multiplier applied to the foliage asset's Density field at paint time. A density slider value of 1.0 applies the asset's full density. A value of 0.5 applies half the asset's density. A value of 0.0 places no instances (effectively disabling the asset during painting).

Density sliderEffective density multiplierCoverage character
0.00xNo instances placed
0.250.25xVery sparse; individual instances clearly separated
0.50.5xSparse but coverage is visible as a group
0.750.75xModerate density; instances begin to overlap visually
1.01.0xFull asset density; dense coverage

Layering multiple foliage types

Multiple foliage types with overlapping material weight ranges all place instances in the same area, producing a layered effect. The typical layering strategy is:

  1. Base layer: A short grass type at density 0.5-0.7 covering all vegetated terrain.
  2. Mid layer: A tall grass or flower type at density 0.2-0.4 layered over the base grass.
  3. Scatter layer: Pebbles or small rocks at density 0.1-0.2 in open areas.
  4. Bush layer: Bushes at density 0.1-0.2 along forest edges and terrain transitions.
  5. Tree layer: Trees at density 0.05-0.15 in forest zones.

Each layer uses a different foliage asset. The layers combine visually to produce a terrain surface that looks organic rather than uniform.

Density and performance trade-off

Higher density values produce more instances per unit area, which increases GPU workload. The cohort-recommended maximum density for a Medium map is:

Foliage typeMaximum densityReason
Short grass0.6Dense grass is the highest-instance-count foliage type
Tall grass0.4Each tall grass instance has more triangles than short grass
Flowers0.3Flowers use non-uniform scale, reducing instancing efficiency
Pebbles0.2Low-density scatter is visually sufficient
Bushes0.2Bushes are large; low density is visually adequate
Trees0.15Each tree is a high-poly resource asset

Exceeding these values on a Medium map with three or more grass types can produce millions of instances, causing measurable frame rate degradation on average hardware.

Scale range and visual variety

The Min Scale and Max Scale brush parameters control the random size variation applied to every foliage instance placed during the stroke. Each instance receives a random scale value uniformly distributed within the configured range.

Scale range configuration

Scale behaviorMin ScaleMax ScaleVisual effect
Uniform size1.01.0All instances identical size; looks artificial
Subtle variation0.851.15Instances vary by 15% in each direction; natural but subtle
Moderate variation0.61.4Instances vary by 40%; good for most foliage types
Wide variation0.41.8Instances vary by 140%; suitable for wild, untended vegetation

The cohort recommendation for most foliage types is a scale range of 0.6-1.4 (moderate variation). Narrower ranges (0.85-1.15) are appropriate for manicured or uniform vegetation such as hedge rows or planted crops. Wider ranges (0.4-1.8) are appropriate for wild, overgrown vegetation in abandoned or post-apocalyptic biomes.

Uniform Scale optimization

The foliage asset's Uniform_Scale field determines whether the scale is applied uniformly on all axes (a single float value) or per-axis (a Vector3 value). When Uniform_Scale is true in the asset's .dat, the Min Scale and Max Scale brush parameters produce uniform scaling on all axes, enabling a GPU instancing optimization that packs more instances per draw call.

Grass and pebble assets should have Uniform_Scale true for maximum performance. Flowers and plants that benefit from non-uniform aspect ratios (wider horizontally than vertically) may set Uniform_Scale false.

Color variation for foliage

Foliage instances support per-type color variation controlled by two fields in the foliage asset's .dat configuration: Color and Color_Range. These fields are not adjustable from the brush panel; they are set at asset authoring time.

How color variation works

The Color field defines the base color of the foliage mesh as an RGB triplet in 0-1 float range. The Color_Range field defines a uniform offset that is applied randomly to each instance's color. A higher Color_Range value produces more chromatic variation between instances.

Color baseColor_RangeVisual effect
0.3 0.6 0.2 (green)0.0All instances identical green; no variation
0.3 0.6 0.2 (green)0.05Subtle variation; instances range from slightly lighter to slightly darker green
0.3 0.6 0.2 (green)0.15Natural variation; instances include yellowish-green and blueish-green tints
0.3 0.6 0.2 (green)0.3Wide variation; some instances appear yellow, brown, or almost gray

For a grass asset with Color 0.3 0.6 0.2 and Color_Range 0.15, individual grass blade instances receive random tints between 0.15 0.45 0.05 and 0.45 0.75 0.35, creating a natural-looking mix of lighter and darker blades.

Color variation by biome

The cohort-recommended color ranges for common biomes are:

BiomeBase color (R G B)Color_Range
Temperate forest0.25 0.55 0.150.12
Desert0.5 0.5 0.20.08
Tundra0.4 0.5 0.30.06
Tropical0.15 0.5 0.10.15
Grassland0.3 0.6 0.20.1
Swamp0.2 0.4 0.150.08

The base color and range are asset properties that affect every instance of that foliage type across the entire map. To create biome-specific color zones, author separate foliage assets for each biome with matching color ranges, then restrict each asset to the appropriate terrain material layer weight range.

Erasing and removing foliage

Foliage erasing removes instances from the terrain surface. The erase operation is type-aware: it can remove all foliage types or only a specific type.

Erasing all foliage in an area

Step 1: In the foliage panel, toggle the mode to Erase. The mode button switches from Paint (highlighted) to Erase (highlighted).

Step 2: Set the Brush Size to match the area from which foliage should be removed. A size of 60-100 is appropriate for broad clearing operations.

Step 3: Paint the terrain surface. All foliage instances within the brush radius, regardless of type, are removed.

Step 4: Release the mouse button. The foliage instances in the painted area are gone.

On-screen appearance: As the erase brush is dragged, all foliage instances within the brush radius disappear immediately. The terrain surface returns to its bare state, showing only the terrain material texture. The removal is immediate and permanent; there is no undo for erase operations.

Erasing a specific foliage type

Step 1: In the foliage panel, select the specific foliage type to erase from the asset list.

Step 2: Toggle the mode to Erase.

Step 3: Paint the terrain surface. Only instances of the selected foliage type are removed. All other foliage types in the brush area remain intact.

This is useful for removing a single over-dense grass type while leaving other types untouched. For example, if the base grass layer is too dense but the bush and flower layers are correct, select the grass asset in the list and erase only the grass instances.

Editing placed foliage through erase and re-paint

Individual foliage instances cannot be selected and moved like objects. Foliage is a procedural density map, not a collection of discrete objects. The erase and re-paint workflow is the only method for modifying placed foliage:

  1. Erase the area using Erase mode with the specific foliage type selected.
  2. Re-paint the area using Paint mode with adjusted brush parameters (density, scale range).
  3. Add additional foliage types by painting other assets over the same area.

For a complete foliage replacement in a specific region (e.g., changing a grass type from short grass to tall grass), erase the area for the short grass type, then paint the tall grass type over the same region.

Failure mode: foliage LOD pop-in

Foliage instances that suddenly appear as the camera approaches create a distracting pop-in effect that breaks visual immersion.

What it looks like: While the camera moves across the terrain, grass or bush instances blink into existence at a visible distance threshold. The instances are absent beyond this threshold and appear abruptly when the threshold is crossed.

Root cause: The LOD (level of detail) transition distance for the foliage mesh is too short. The foliage system uses a fade-in distance calculated from the asset's Tile_Dither setting and the detail mesh LOD group distances configured in the Unity source asset.

Resolution: The LOD transition distance is configured through two mechanisms:

  1. Tile_Dither setting: In the foliage asset's .dat file, set Tile_Dither true to enable progressive dithering that fades instances in gradually near the tile border rather than cutting them off abruptly. This reduces the visual pop at tile boundaries but does not change the absolute render distance.

  2. Detail mesh LOD group: In the Unity source asset for the foliage mesh, increase the LOD group distances for the detail mesh. The detail mesh LOD group controls the distance at which the mesh switches from full detail to a lower-detail representation. Extending the LOD group range reduces pop-in by keeping the higher-detail mesh visible at longer distances.

For the full foliage LOD configuration workflow, see The Optimal Angle for Grass Blades in Foliage.

Failure mode: foliage not appearing in game

Foliage that is visible in the editor viewport but absent when the map is loaded in-game is a bundle accessibility issue.

What it looks like: The editor viewport shows grass, bushes, and trees correctly placed on the terrain. The in-game viewport shows bare terrain with no foliage at the same location.

Root cause: The foliage asset's master bundle is not accessible to the game client at runtime. The editor loads foliage data from the local foliage storage directory and renders the instances using the locally available bundle assets. The game client loads foliage data from the same storage but must find the bundle assets through the map's asset bundle resolution system.

Resolution steps:

Step 1: Verify that the foliage asset's master bundle .unity3d file is present in the map's Bundles/ folder. The bundle must be in the same directory as all other map bundles.

Step 2: If the foliage uses a custom prefab mesh (not a vanilla asset), confirm that the mesh is included in the master bundle and that the bundle has the correct file name as specified in the foliage .dat file's Mesh pointer.

Step 3: Verify the foliage .dat file's Master_Bundle_Override field, if present, points to the correct master bundle name. If the field is absent, the engine looks for the mesh in the core master bundle.

Step 4: Test by loading the map in single-player. If foliage appears in single-player but not on a dedicated server, the server's bundle copy is missing or the server's workshop manifest does not include the map's required bundles.

Failure mode: foliage density too high or too low

Foliage that appears either impenetrably dense or implausibly sparse after painting is a density mismatch between the brush slider and the asset's base density.

What it looks like: An area painted at density slider 0.5 produces either a solid wall of grass (if the asset's base density is very high) or a few scattered blades (if the base density is very low).

Root cause: The density slider is a multiplier applied to the asset's base Density field. An asset with Density 0.5 (very dense) painted at slider 0.5 still produces dense coverage because the effective density is the multiplication of the two values.

Resolution: Inspect the foliage asset's Density field in its .dat file. For InstancedMeshInfoAsset, the Density value represents the area in square meters per instance (lower = denser). For an asset with Density 1.0, each instance occupies approximately 1 square meter. At density slider 0.5, the effective density is 2 square meters per instance.

The cohort recommendation is to inspect the asset's base density before painting and to adjust the brush slider accordingly:

Asset base densitySlider value for moderate coverageSlider value for sparse coverage
0.5 (very dense)0.2-0.30.05-0.1
1.0 (dense)0.3-0.50.1-0.2
2.0 (moderate)0.5-0.70.2-0.3
4.0 (sparse)0.7-1.00.3-0.5
8.0 (very sparse)1.00.5-0.7

Failure mode: trees not placing on sloped terrain

Trees that refuse to appear on hilly terrain despite the brush passing over the area are being excluded by the asset's angle constraint.

What it looks like: The brush paints tree instances on flat terrain but produces no instances on hillsides or slopes. The flat areas of the brush stroke are populated; the sloped portions are empty.

Root cause: The tree asset's Max_Angle field is set too low for the terrain slope. Trees configured with Max_Angle 30 will not be placed on any terrain surface steeper than 30 degrees from horizontal.

Resolution: Inspect the tree asset's .dat file and increase the Max_Angle value if trees should be allowed on steeper slopes. A value of Max_Angle 45 allows trees on all but the steepest terrain. For trees that should appear on any terrain regardless of slope, set Max_Angle 90.

Alternatively, use the terrain Smooth brush to reduce the slope angle of the hillside below the tree's Max_Angle threshold, then re-paint the tree foliage.

Failure mode: foliage appears in wrong biome or terrain area

Foliage that appears on terrain material types where it should not be present is being placed outside its intended material weight range.

What it looks like: Grass configured for the grass material layer (weight range 0.3-0.8) appears abundantly on the rock material layer (weight 0.0-0.2) where it should be absent.

Root cause: The foliage asset's Min_Weight and Max_Weight fields are set too broadly, allowing placement on terrain materials outside the intended biome. An asset with Min_Weight 0.0 and Max_Weight 1.0 places on any terrain material without restriction.

Resolution: Edit the foliage asset's .dat file to narrow the Min_Weight and Max_Weight values to match the intended terrain material. For a foliage type that should only appear on the grass layer (material layer index 0 with weight 0.5-1.0), set Min_Weight 0.5 and Max_Weight 1.0. After editing the asset fields, re-paint the foliage on the terrain to apply the new constraints.

FAQs

Can I undo a foliage erase operation?

Foliage erase operations are not undoable through the Level Editor's undo system (Ctrl+Z). Once instances are erased, they are removed from the foliage data. The only recovery method is to close the editor without saving (if the map was not saved after the erase) or to restore the Level/Foliage/ directory from a backup.

Why does my grass stop appearing at a certain distance from the camera?

The grass LOD distance is controlled by the Tile_Dither setting and the detail mesh LOD group in Unity. Grass that disappears at a specific distance threshold is reaching the limit of its LOD group range. Increase the LOD group distances in the source Unity asset or enable Tile_Dither for a softer fade-out.

How do I make foliage that only appears on certain terrain material layers?

Edit the foliage asset's .dat file and set the Min_Weight and Max_Weight fields to the material weight range of the target terrain layer. An asset with Min_Weight 0.5 and Max_Weight 0.9 only appears on terrain areas where the blend weight of the corresponding material layer falls within this range. The weight values correspond to the blend weight of the terrain material painted in the Level Editor.

What is the maximum number of foliage types I can paint on one map?

There is no hard limit enforced by the engine, but practical limits are imposed by GPU performance. The cohort recommendation is to keep foliage type counts under 20 per biome area and under 40 total for the entire map. Each foliage type requires a separate draw call batch for its GPU instanced meshes.

How do I create a forest with mixed tree types?

Paint each tree type separately. Select the first tree asset (e.g., Pine) and paint the forest area at density 0.08. Select the second tree asset (e.g., Oak) and paint the same area at density 0.05. The two tree types layer in the same area, producing a mixed forest. Ensure both tree assets have compatible Obstruction_Radius values so they do not exclude each other.

Can I paint foliage on vertical cliff faces?

Foliage placement is constrained by the foliage asset's Max_Angle field. By default, most foliage assets have Max_Angle set to 45-90 degrees. An asset with Max_Angle 90 can be painted on vertical surfaces. However, the foliage mesh is placed at the terrain surface angle, so grass on a vertical cliff face will be rendered sideways. For cliff vegetation, use foliage assets specifically authored for vertical placement with appropriate mesh geometry.

How do I remove the V1 backup foliage files after upgrading to V2?

Navigate to the map's Foliage/ directory and delete the V1 backup files. The V2 single-file format is active and the V1 files are no longer needed. Verify the map loads and foliage appears correctly after deletion. The cohort recommendation is to keep the V1 files until the map has been tested and confirmed stable on V2.

What happens to existing foliage when I repaint the terrain material?

Existing foliage placement is baked into the foliage data based on the terrain material configuration at the time of painting. Repainting terrain materials does not automatically remove or re-evaluate existing foliage. Foliage instances placed on a previously grass-covered area remain even if the area is repainted to rock. The map author must erase and re-paint the foliage to apply new material constraints.

Why is my tree foliage not growing near buildings?

The tree asset's Obstruction_Radius prevents placement within a certain distance of any obstruction, including buildings. Check the tree asset's Obstruction_Radius value. A radius of 4 meters prevents trees from appearing within 4 meters of a building wall. Reduce the value if trees should grow closer to structures, or paint trees manually at lower density in building-adjacent areas.

How do I make seasonal foliage variations?

Season-specific foliage is achieved through separate foliage assets for different seasons. Create multiple InstancedMeshInfoAsset configurations with the same mesh and material but different color ranges. When the in-game season changes, the active foliage configuration must be updated. This requires server-side scripting or map-level configuration updates and is not achievable through the foliage panel alone.

Best practices

  • Paint foliage systems in order from base layer to top layer: ground cover grass, then flowers and scatter, then bushes, then trees. Each layer is visible on top of the previous layer and the ordering reduces the need to erase and re-paint.
  • Use the minimum foliage density that achieves the intended visual coverage. Higher density is the leading cause of performance issues on custom maps.
  • Layer multiple foliage types with overlapping but different material weight ranges to create natural-looking vegetation transitions at biome boundaries.
  • Configure the scale range for each foliage type to produce natural size variation. Uniformly sized foliage looks artificial at any density.
  • Test foliage density at the maximum view distance to ensure the intended coverage level reads correctly from a distance.
  • Save the map before any erase operation. Erase operations are not undoable.
  • Erase and re-paint foliage after terrain material repainting to apply the new material constraints.
  • Keep V1 backup foliage files until V2 conversion is verified stable.
  • Use foliage assets with Uniform_Scale true for grass and pebbles to maximize GPU instancing performance.

Advanced considerations

Biome-specific foliage configuration using material weight constraints

Foliage types can be restricted to specific biome zones by pairing terrain material painting with foliage material weight constraints. Paint distinct terrain material layers for each biome zone (grass for temperate, sand for desert, rock for mountain). Configure each foliage asset's Min_Weight and Max_Weight fields to match the material weight range of its target biome. A desert cactus foliage asset with Min_Weight 0.0 and Max_Weight 0.3 only appears on terrain with predominantly sand or rock material, which corresponds to the desert biome's material layer.

Performance tuning for dense foliage areas

Areas with very dense foliage (forest interiors, overgrown ruins) benefit from targeted performance tuning. The cohort recommendation for dense foliage areas is:

  • Use at most three grass types in the dense area.
  • Set the density slider to 0.3-0.4 for each grass type.
  • Use trees with Obstruction_Radius values that produce natural spacing (3-5 meters for standard trees).
  • Avoid using non-uniform scale (Uniform_Scale false) on any foliage in the dense area.
  • Enable Tile_Dither on all foliage types in the dense area to distribute the rendering cost across frames.

Foliage LOD group configuration in Unity

The foliage mesh's LOD group is configured in the Unity source prefab. For instanced mesh foliage, the LOD group consists of two levels: the full-detail mesh at close range and a lower-detail mesh (or culled) at far range. The transition distance between these levels is set in the LOD group component. The cohort recommendation for foliage LOD groups is to set the first LOD transition at 30-40 meters and the cull distance at 60-80 meters, with Tile_Dither enabled for soft fade-out.

Appendix A: Foliage brush parameters quick-reference card

Foliage typeBrush SizeDensity sliderMin ScaleMax Scale
Short grass (base layer)100-1500.4-0.60.61.2
Tall grass (accent layer)80-1200.2-0.30.81.8
Flowers60-1000.15-0.251.01.4
Pebbles / scatter60-1000.1-0.20.51.5
Small bushes40-800.15-0.30.51.3
Large bushes30-600.1-0.20.71.6
Trees (forest)30-600.08-0.150.71.3
Trees (open terrain)20-400.03-0.080.81.2

Appendix B: Foliage failure mode diagnostic table

SymptomMost likely causeResolution
Foliage visible in editor but absent in-gameMaster bundle not accessible at runtimeVerify bundle path and Master_Bundle_Override field
Grass instances appear suddenly as camera approachesLOD transition distance too shortIncrease Tile_Dither or adjust LOD group in source mesh
Foliage density is too high after paintingDensity slider too high for the asset's base densityReduce the density slider or erase and re-paint at lower setting
Foliage density is too low after paintingDensity slider too low for the asset's base densityIncrease the density slider or paint additional passes
Trees not placed on hillsidesMax_Angle constraint in tree asset is too lowIncrease Max_Angle in tree asset's .dat file
Foliage appears on wrong terrain materialMin_Weight / Max_Weight range too broadNarrow the weight range in the foliage asset's .dat file
Trees growing inside buildingsObstruction_Radius too small for building coverageIncrease Obstruction_Radius in tree asset's .dat file
Foliage instances all the same sizeScale range too narrow (Min Scale and Max Scale too close)Widen the scale range to 0.6-1.4 or greater
Foliage instances stretched or squashedNon-uniform scale with incompatible meshEnable Uniform_Scale true in the asset's .dat file
Erase brush removes all types instead of oneSpecific foliage type not selected before switching to EraseSelect the type in the foliage list before toggling Erase
Foliage has no color variationColor_Range is 0 in the asset's .dat fileIncrease Color_Range to 0.1-0.15
Map loads slowly with V1 foliageFoliage storage is in V1 fragmented formatSave the map to trigger automatic V2 conversion

Appendix C: Foliage biome configuration reference

The table below provides cohort-validated foliage type combinations for common biomes.

BiomeGrass typeGround coverBushesTrees
Temperate forestShort green grassFerns, moss, flowersSmall deciduous bushesPine and oak mix
DesertSparse tan grassPebbles, small rocksDry brushCacti, acacia
TundraShort pale grassMoss, lichenLow alpine shrubsSpruce, bare pines
TropicalDense green grassFerns, vinesDense tropical bushesPalm, hardwood
GrasslandMedium green grassWildflowersScattered bushesFew trees, widely spaced
SwampDark green grassReeds, cattailsDense wetland shrubsCypress, mangrove

Appendix D: Biome foliage terrain weight ranges

BiomeGrass weight rangeGround cover weight rangeBush weight rangeTree weight range
Temperate forest0.2-0.90.3-0.80.4-0.80.5-0.8
Desert0.0-0.30.0-0.50.0-0.20.0-0.2
Tundra0.2-0.70.2-0.60.2-0.50.3-0.6
Tropical0.3-1.00.4-0.90.4-0.90.5-1.0
Grassland0.2-0.80.2-0.60.2-0.50.3-0.6
Swamp0.6-1.00.5-1.00.5-0.90.6-1.0

Authoring checklist

Before publishing a map with painted foliage, confirm the following:

  • [ ] Base grass layer painted at appropriate density across all vegetated terrain
  • [ ] Bush and tree layers painted with correct density for each biome zone
  • [ ] Scale range configured for natural-looking size variation
  • [ ] Foliage LOD pop-in tested at maximum view distance
  • [ ] Foliage visible in-game on both single-player and dedicated server
  • [ ] V2 foliage format active (V1 backup files deleted after verification)
  • [ ] Foliage density does not cause frame rate drops in dense areas
  • [ ] Color variation produces natural-looking tint distribution
  • [ ] Terrain material repainting does not leave orphaned foliage in wrong zones
  • [ ] Erase operations verified and backed up before destructive editing

Cross-references

Document history

VersionDateAuthorNotes
1.02026-07-2657 StudiosInitial publication. Foliage painting workflow, brush parameters, color variation, erase workflow, failure mode documentation.