agentleFS
edhahnedhahn/agent-skills/ue5-level-design/SKILL.md

ue5-level-design

Skill2 starsChanged 8 months agoMITView on GitHub

Unreal Engine 5 level design: world building, landscape, lighting, environment art, gameplay spaces, and level streaming. Use when tasks involve creating or modifying levels, placing actors, configuring lighting, building landscapes, setting up level streaming, or designing gameplay spaces. Covers both manual editor workflows and automated placement via Remote Control API, Python bridge, and MCP tools.

The file

Show its rules and text

We split this skill into the rules it gives an agent

20 rules. About 0 are common, 17 are distinctive, and 3 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈17

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 3

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Use Level Streaming Volumes for automatic loading

    line 51
  2. Very specific:

    Use ULevelStreamingDynamic for code-driven streaming

    line 52
  3. Distinctive:

    Keep persistent level minimal (only always-loaded actors)

    line 53
  4. Distinctive:

    Create actors by type (cube, sphere, light, camera, custom Blueprint)

    line 103
  5. Very specific:

    Scale: Default 100x100x256 (X/Y/Z).

    line 115
  6. Distinctive:

    Material: Use landscape-specific material with layer blending

    line 116
  7. Distinctive:

    Use Procedural Foliage Volume for large-area automatic placement

    line 134
  8. Distinctive:

    Use Foliage Painting for manual detail placement

    line 135
  9. Distinctive:

    Use Nanite for high-poly foliage (UE5.1+): enable Nanite on foliage static meshes

    line 136
  10. Distinctive:

    Grass types: Use Landscape Grass Type for lightweight ground cover (rendered per-component)

    line 137
  11. Distinctive:

    Draw calls: Keep under 2000 for 60fps.

    line 220
  12. Distinctive:

    Occlusion: Use precomputed visibility volumes in indoor areas.

    line 223
  13. Distinctive:

    Texture streaming: Use virtual textures for large landscapes.

    line 225
  14. Very specific:

    Profiling: Use stat unit, stat gpu, stat scenerendering console commands.

    line 226
  15. Distinctive:

    Collision: Use simple collision (boxes, spheres, capsules) over complex collision where possible

    line 230
  16. Distinctive:

    NavMesh: Place a NavMeshBoundsVolume to enable AI pathfinding.

    line 231
  17. Distinctive:

    Navigation modifiers: Use NavModifierVolume to mark areas (avoid, prefer, custom)

    line 232
  18. Distinctive:

    RecastNavMesh: Default navmesh system. Configure cell size, agent parameters.

    line 233
  19. Distinctive:

    Block out: Place BSP brushes or simple meshes to define spaces

    line 256
  20. Distinctive:

    Gameplay test: Verify scale, sightlines, flow with placeholder actors

    line 257

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

UE5 Level Design

World building, environment art, lighting, landscape, gameplay spaces, and level streaming in Unreal Engine 5.

Infrastructure

See the ue5-gamedev skill for full infrastructure details.

ChannelEndpointUse for level design
Remote Control APIlocalhost:8080Actor placement, property tweaking, lighting adjustments
Python bridgelocalhost:30010Batch operations, procedural placement, asset management
MCP (ChiR24/Unreal_mcp)Local pluginActor creation, level management, lighting control

Level structure

Level organization

/Game/Maps/
  MainLevel.umap              -- Persistent level
  MainLevel_Gameplay.umap     -- Gameplay actors (streaming)
  MainLevel_Lighting.umap     -- Lights and post-process (streaming)
  MainLevel_Audio.umap        -- Ambient audio (streaming)
  MainLevel_Foliage.umap      -- Foliage and vegetation (streaming)

World Partition (UE5 preferred)

For open worlds, use World Partition instead of manual level streaming:

  • Data Layers: Organize actors into logical layers (Gameplay, Environment, Audio)
  • Runtime Grid: Controls streaming granularity (cell size, loading range)
  • One File Per Actor (OFPA): Each actor is its own file -- enables parallel work
  • HLODs: Hierarchical LODs for distant rendering
  • Minimap: World Partition generates a grid-based minimap for the editor

Sub-levels (classic approach)

For linear or contained levels:

  • Use Level Streaming Volumes for automatic loading
  • Use ULevelStreamingDynamic for code-driven streaming
  • Keep persistent level minimal (only always-loaded actors)

Actor placement

Via Remote Control API

# Spawn an actor at a location
PUT http://localhost:8080/remote/object/call
{
  "objectPath": "/Script/Engine.Default__GameplayStatics",
  "functionName": "BeginDeferredActorSpawnFromClass",
  "parameters": {
    "WorldContextObject": "/Game/Maps/MainLevel.MainLevel",
    "ActorClass": "/Game/Blueprints/BP_Torch.BP_Torch_C",
    "SpawnTransform": {
      "Translation": { "X": 1000, "Y": 500, "Z": 0 },
      "Rotation": { "X": 0, "Y": 0, "Z": 45, "W": 1 },
      "Scale3D": { "X": 1, "Y": 1, "Z": 1 }
    }
  }
}

Via Python bridge

import unreal

editor = unreal.EditorLevelLibrary()

# Spawn from Blueprint class
bp_class = unreal.EditorAssetLibrary.load_blueprint_class("/Game/Blueprints/BP_Torch")
location = unreal.Vector(1000, 500, 0)
rotation = unreal.Rotator(0, 45, 0)
actor = editor.spawn_actor_from_class(bp_class, location, rotation)

# Batch place actors along a path
import math
for i in range(20):
    angle = (i / 20) * 2 * math.pi
    x = math.cos(angle) * 2000
    y = math.sin(angle) * 2000
    loc = unreal.Vector(x, y, 0)
    editor.spawn_actor_from_class(bp_class, loc, unreal.Rotator(0, 0, 0))

Via MCP (ChiR24/Unreal_mcp)

The MCP server provides higher-level actor management:

  • Create actors by type (cube, sphere, light, camera, custom Blueprint)
  • Set transforms (position, rotation, scale)
  • Query and find actors by name or class
  • Delete actors
  • Manage actor hierarchies

Landscape

Landscape setup

  • Component size: 63x63 or 127x127 quads (63 for smaller levels, 127 for large)
  • Sections per component: 1x1 (small) or 2x2 (large worlds)
  • Scale: Default 100x100x256 (X/Y/Z). For realistic terrain, Z scale of 51200 = ~500m height range
  • Material: Use landscape-specific material with layer blending

Landscape layers

import unreal

# Create landscape material layers via Python
landscape = unreal.EditorLevelLibrary.get_all_level_actors_of_class(unreal.Landscape)[0]

# Sculpt operations use the Landscape Editor mode
# For automation, modify heightmap data directly:
# Export: Right-click landscape > Export to file (.r16 or .png)
# Import: Landscape > Import heightmap

Foliage

  • Use Procedural Foliage Volume for large-area automatic placement
  • Use Foliage Painting for manual detail placement
  • Use Nanite for high-poly foliage (UE5.1+): enable Nanite on foliage static meshes
  • Grass types: Use Landscape Grass Type for lightweight ground cover (rendered per-component)

Lighting

Light types and when to use them

LightUse caseCost
Directional LightSun/moon, outdoor scenesLow (one per level)
Sky LightAmbient fill, sky colorLow (one per level)
Point LightLamps, torches, small areasMedium
Spot LightFlashlights, focused beamsMedium
Rect LightWindows, screens, area sourcesHigh

Lumen (UE5 default GI)

  • Lumen Global Illumination: Real-time indirect lighting. No lightmap baking needed.
  • Lumen Reflections: Real-time reflections replacing SSR + planar reflections.
  • Hardware Ray Tracing: Enable for higher quality (requires RTX GPU).
  • Software Ray Tracing: Fallback that works without RTX. Lower quality but no hardware requirement.

Lighting via Remote Control

# Adjust directional light intensity
PUT http://localhost:8080/remote/object/property
{
  "objectPath": "/Game/Maps/MainLevel.MainLevel:PersistentLevel.DirectionalLight_0.LightComponent0",
  "propertyName": "Intensity",
  "propertyValue": { "Intensity": 8.0 }
}

# Change light color
PUT http://localhost:8080/remote/object/property
{
  "objectPath": "/Game/Maps/MainLevel.MainLevel:PersistentLevel.PointLight_0.LightComponent0",
  "propertyName": "LightColor",
  "propertyValue": { "LightColor": { "R": 255, "G": 180, "B": 100, "A": 255 } }
}

Lighting via Python

import unreal

editor = unreal.EditorLevelLibrary()

# Spawn a point light
light = editor.spawn_actor_from_class(
    unreal.PointLight,
    unreal.Vector(500, 0, 300),
    unreal.Rotator(0, 0, 0)
)
light_comp = light.get_component_by_class(unreal.PointLightComponent)
light_comp.set_intensity(5000)
light_comp.set_light_color(unreal.LinearColor(1.0, 0.7, 0.4, 1.0))
light_comp.set_attenuation_radius(1000)

Post-processing

Post Process Volume settings

Key properties to control via Remote Control or Python:

  • Exposure: Min/Max EV100, metering mode, exposure compensation
  • Bloom: Intensity, threshold, size
  • Color grading: Temperature, tint, saturation, contrast, gamma, gain (per shadows/midtones/highlights)
  • Ambient occlusion: Intensity, radius, bias
  • Depth of field: Focal distance, aperture (f-stop), near/far transition
  • Motion blur: Amount, max velocity
  • Tone mapping: Film slope, toe, shoulder

Environment

  • Sky Atmosphere: Realistic atmospheric scattering. One per level.
  • Volumetric Clouds: GPU-driven cloud rendering. Configure coverage, density, shape.
  • Exponential Height Fog: Distance fog with directional inscattering.
  • Ultra Dynamic Sky (marketplace): Popular all-in-one sky/weather solution.

Performance guidelines

  • Draw calls: Keep under 2000 for 60fps. Use instanced static meshes for repeated geometry.
  • Nanite: Enable for complex static meshes. Automatic LOD with virtualized geometry.
  • Virtual Shadow Maps: UE5 default. Handles large worlds well but costs VRAM.
  • Occlusion: Use precomputed visibility volumes in indoor areas.
  • LODs: Auto-generate via mesh editor for non-Nanite meshes.
  • Texture streaming: Use virtual textures for large landscapes.
  • Profiling: Use stat unit, stat gpu, stat scenerendering console commands. ProfileGPU (Ctrl+Shift+,) for per-pass timings.

Collision and navigation

  • Collision: Use simple collision (boxes, spheres, capsules) over complex collision where possible
  • NavMesh: Place a NavMeshBoundsVolume to enable AI pathfinding. Configure agent radius/height.
  • Navigation modifiers: Use NavModifierVolume to mark areas (avoid, prefer, custom)
  • RecastNavMesh: Default navmesh system. Configure cell size, agent parameters.

File and asset conventions

/Game/
  Maps/              -- Level files
  Blueprints/        -- Blueprint actors
  Environment/
    Meshes/          -- Static meshes
    Materials/       -- Material instances
    Textures/        -- Texture assets
  Lighting/
    LightProfiles/   -- IES profiles
    HDRIs/           -- Sky/environment maps
  FX/                -- Niagara particle systems
  Audio/
    Ambient/         -- Environmental audio
    SFX/             -- Sound effects

Workflow

  1. Block out: Place BSP brushes or simple meshes to define spaces
  2. Gameplay test: Verify scale, sightlines, flow with placeholder actors
  3. Art pass: Replace blockout with final meshes and materials
  4. Lighting pass: Set up lights, sky, post-processing
  5. Polish: Foliage, decals, particles, audio
  6. Optimize: Profile, add LODs, configure streaming, set culling distances

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.