ue5-level-design
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.
| Channel | Endpoint | Use for level design |
|---|---|---|
| Remote Control API | localhost:8080 | Actor placement, property tweaking, lighting adjustments |
| Python bridge | localhost:30010 | Batch operations, procedural placement, asset management |
| MCP (ChiR24/Unreal_mcp) | Local plugin | Actor 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
ULevelStreamingDynamicfor 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
| Light | Use case | Cost |
|---|---|---|
| Directional Light | Sun/moon, outdoor scenes | Low (one per level) |
| Sky Light | Ambient fill, sky color | Low (one per level) |
| Point Light | Lamps, torches, small areas | Medium |
| Spot Light | Flashlights, focused beams | Medium |
| Rect Light | Windows, screens, area sources | High |
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 scenerenderingconsole 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
- Block out: Place BSP brushes or simple meshes to define spaces
- Gameplay test: Verify scale, sightlines, flow with placeholder actors
- Art pass: Replace blockout with final meshes and materials
- Lighting pass: Set up lights, sky, post-processing
- Polish: Foliage, decals, particles, audio
- Optimize: Profile, add LODs, configure streaming, set culling distances
More from edhahn/agent-skills
software-architecture
>
8ue5-gamedev
>
6game-designer
>
5ue5-cinematics
>
5multi-agent-chat
Coordination protocol for AI agents sharing a group chat channel (Discord, Slack, Teams, or any multi-user channel). Prevents infinite agent-to-agent loops, reduces noise, eliminates redundant responses, and establishes clear routing rules for who responds to what. Use this skill when you are an AI agent in a channel with other AI agents and human participants, when you see duplicate responses or echo loops between agents, when a human asks agents to coordinate better, when you need rules for when to speak vs. stay silent in a multi-agent channel, or when you want to reduce token waste from unnecessary agent chatter. Also applies to any shared workspace where multiple agents receive the same messages.
5ue5-character
>
5