Launch Discount: 25% off for the first 50 customers — use code LAUNCH25

StraySparkStraySpark
ProductsDocsBlogGamesAbout
Back to Blog
devlog
StraySparkMay 5, 20265 min read
Building a Horror Game Environment in One Day with AI + Procedural Placement 
Unreal EngineMcpProcedural GenerationEnvironment DesignHorror

We gave ourselves a challenge: build a shippable horror game environment in one day. Not a greybox prototype. Not a mood board. A complete, lit, atmospherically dense environment that could ship as a playable level.

The result was a derelict psychiatric hospital surrounded by dense, overgrown forest — the kind of location that's become a horror staple for good reason. Peeling walls, collapsed corridors, equipment left behind decades ago, and a forest that's slowly reclaiming the building.

This post is the full breakdown of how we did it, using the Unreal MCP Server for AI-assisted blockout and scene building, and the Procedural Placement Tool for environment scatter. Every step, every decision, every mistake.

The Challenge

One artist. One day. One complete horror environment.

The constraints were real:

  • 8 working hours — no overnight marathon sessions
  • Marketplace assets only — no custom modeling (we used Quixel Megascans and a few horror-themed asset packs)
  • Must be atmospheric — horror lives and dies on atmosphere, not just geometry
  • Must be playable — a player needs to walk through it, with proper collision, lighting that guides them, and pacing that builds tension

These constraints forced us to be efficient with our time. Every hour spent on blockout was an hour not spent on lighting. Every hour spent on scatter was an hour not spent on polish. The AI-assisted workflow needed to compress the mechanical parts so we could spend more time on the parts that make horror environments actually scary.

Planning the Environment (30 minutes)

Before touching the editor, we spent half an hour on planning. Horror environments need deliberate pacing — you can't just scatter creepy props and hope for the best.

The Layout Concept

The level follows a linear path with optional side rooms:

  1. Approach — a forest path leading to the hospital. Dense trees. Fog. Establishing the mood before the player sees anything scary.
  2. Exterior — the hospital facade, overgrown with vegetation. Broken windows. A collapsed section revealing the interior.
  3. Lobby — the first interior space. Grand but decayed. High ceiling. The player's eyes adjust to the darkness.
  4. East wing corridor — long, narrow, damaged. Ceiling partially collapsed. This is where claustrophobia starts.
  5. Patient rooms — small rooms off the corridor. Each tells a micro-story through environmental detail.
  6. Basement access — a stairwell leading down. The lighting shifts from natural to artificial.
  7. Basement — the climax space. Low ceilings, pipes, industrial decay. This is where the level's tension peaks.

Mood Reference

We collected reference images: abandoned hospitals, overgrown buildings, horror film stills. The key mood elements were:

  • Desaturated color palette, predominantly greens and greys
  • Strong light-dark contrast — pools of light in surrounding darkness
  • Organic intrusion — nature growing through man-made structures
  • Visual clutter — not clean abandonment, but messy, chaotic decay

Blocking Out with MCP (1.5 hours)

This is where the Unreal MCP Server earned its keep. Blockout is the most mechanical part of level construction — placing geometry, sizing it, positioning it, aligning walls and floors. Important work, but repetitive.

The Hospital Shell

We started with the building footprint:

"Create a BSP box 40m x 30m x 8m for the main hospital building. Position it at 0,0,0. Create a second box 25m x 12m x 8m for the east wing, connected to the main building on its east side. Add a box 15m x 20m x 4m below the main building for the basement level."

Three prompts gave us the basic building volume. The AI handled the positioning math to connect the east wing to the main building at the correct location.

Interior Partitioning

"Inside the main building, create a lobby space 15m x 20m x 8m centered on the south face. Add a corridor running east-west across the north side, 3m wide. Partition the remaining space into 6 rooms of roughly equal size, arranged in two rows of three."

Then for the east wing:

"Create a corridor running the length of the east wing, 2.5m wide, along the north wall. Add 5 patient rooms off the south side of the corridor, each 4m x 5m. Add doorway openings 1.2m wide between the corridor and each room."

The AI calculated the room positions and sizes to fill the available space. Not perfectly — some rooms were slightly different sizes — but for blockout, that imperfection actually helps. Real buildings aren't perfectly symmetrical.

The Basement

"In the basement volume, create a grid of support columns — 1m x 1m pillars, spaced 5m apart in both directions. Add a stairwell in the northeast corner, 3m x 4m, connecting the main floor to the basement. Create a utility room 8m x 6m in the southwest corner, separated by walls."

Pillars are exactly the kind of repetitive placement that AI handles perfectly. Manually placing a grid of columns means dragging, positioning, and spacing each one. The AI just needs the spacing specification.

Total Blockout Time

The entire interior blockout took about 45 minutes of prompting and reviewing. The AI handled approximately 80 individual actor placements across the three building sections. Doing this manually — with careful alignment, consistent wall thicknesses, and proper doorway placement — would have taken 2-3 hours minimum.

We spent the remaining 45 minutes of this phase on manual refinement: adjusting room proportions that didn't feel right, adding a collapsed section where the east wing meets the main building, creating uneven floor surfaces in the basement, and punching holes in walls and ceilings for visual interest.

This is the ideal AI workflow split: AI handles the grid-like, measured work. Human handles the intentional imperfections that make the space feel real.

Populating with Procedural Scatter (2 hours)

With the structure in place, we needed to fill it. The Procedural Placement Tool handled two distinct tasks: the exterior forest and the interior debris.

The Surrounding Forest

Horror forests need density. The trees should feel oppressive — close together, blocking sight lines, creating the sense that something could be hiding behind any trunk.

We configured three biome layers:

Dense forest canopy:

  • Tall conifer meshes and dead trees, mixed 70/30
  • Spacing: 4-8m (tighter than a typical forest for that oppressive feel)
  • Scale variation: 0.8-1.3
  • Slope constraint: below 40 degrees
  • Random rotation on all axes with 5-degree tilt for organic lean

Undergrowth:

  • Ferns, dead bushes, fallen branches
  • High density — 1 instance per 2m squared
  • Clustering enabled with cluster radius of 3m
  • Density reduced within 2m of tree trunks (exclusion zones)

Ground cover:

  • Dead leaves, moss patches, mushroom clusters
  • Very high density using HISM for performance
  • Slope constraint: below 30 degrees
  • Full ground coverage with density variation maps

The key decision was the dead tree ratio. At 30% dead trees, the forest reads as unhealthy and unsettling without looking post-apocalyptic. We tested ratios from 10% to 50% and landed on 30% as the sweet spot for "something is wrong here" without "this forest is dead."

The Path to the Hospital

We used a spline exclusion zone to cut a path through the forest. The path needed to be narrow enough to feel confined but wide enough for the player to navigate.

The spline path curved through the forest with a 2.5m width exclusion zone on each side. Inside the exclusion zone: no trees, reduced undergrowth, ground cover only. This created a natural-looking dirt path through dense forest.

We added a secondary spline for a barely-visible branching path that leads nowhere — the kind of environmental detail that makes players nervous. "Should I go that way? What's down there?" Even if the answer is nothing, the question builds tension.

Interior Debris and Decay

Interior scatter required a different approach. We couldn't use terrain-based rules because the surfaces were flat BSP geometry. Instead, we used the tool's surface scatter mode with actor-based exclusion.

Corridor debris layer:

  • Fallen ceiling tiles, broken glass, scattered papers, overturned furniture
  • Density varied by area — heavier near the collapsed sections, lighter in the lobby
  • Exclusion zones around doorways to maintain navigability
  • Clustering enabled so debris forms natural-looking piles

Patient room scatter:

  • Medical equipment, bed frames, mattresses, personal items
  • Lower density than corridors — these rooms were emptied, not destroyed
  • One or two "storytelling" items per room placed manually after scatter

Basement industrial scatter:

  • Pipes, valves, grating, puddles, rust stains (decals)
  • Dense along walls, sparse in walkways
  • Exclusion zones around the support columns

Performance Consideration

The interior scatter used individual static meshes rather than HISM because many of the props needed unique collision for interaction. The exterior forest used HISM exclusively — over 15,000 tree and undergrowth instances rendered efficiently.

Total scatter across exterior and interior: approximately 25,000 instances. Frame time impact at target hardware (RTX 3060): approximately 3ms, well within budget.

Scatter Iteration

The first scatter pass was too uniform. The corridors had evenly distributed debris, which looked artificial. We adjusted the density maps to create concentration points — heavy debris near structural damage, lighter debris in intact sections — and re-generated. The tool regenerated all 25,000 instances in under 3 seconds.

This iteration speed is the real advantage of procedural scatter for horror environments. Horror atmosphere requires careful density control, and being able to regenerate instantly lets you experiment with what "feels right" without committing to manual placement.

Lighting and Atmosphere (2.5 hours)

This is where the environment stops being a collection of geometry and starts being a horror level. We spent more time on lighting than any other phase because in horror, lighting is gameplay.

Exterior Lighting

We used the MCP Server for the initial lighting pass:

"Set the directional light to an overcast angle — 35 degrees above horizon, slightly warm. Set intensity to 2.0 lux. Add exponential height fog with density 0.02, start distance 500, fog inscattering color slightly blue-grey. Set the sky to fully overcast."

Overcast lighting was essential. Direct sunlight kills horror atmosphere. The diffuse, flat light of a cloudy sky creates the grey, washed-out look that makes everything feel slightly wrong.

"Add a volumetric fog component to the level. Set the density to 0.003, albedo to a pale grey-green. Set the scattering distribution to 0.7."

Volumetric fog at low density creates depth without obscuring geometry. The pale green tint added a sickly quality to the air.

Interior Lighting Strategy

Horror interior lighting follows a principle: the player should always be able to see enough to navigate, but never enough to feel safe.

We used three light types:

Practical lights — light sources that exist in the game world. Flickering fluorescent tubes, emergency exit signs, light leaking through boarded windows. These are the "justified" lights that make the scene feel real.

"In the lobby, add 4 rectangle lights simulating overhead fluorescent panels. Two should be off (no emission). One should be at 50% intensity with a slight green tint. One should be at full intensity but narrow beam angle. Position them along the ceiling at 3m intervals."

Having some lights off and others at different intensities creates visual variety and suggests a failing electrical system.

Atmospheric lights — hidden lights that shape the mood without a visible source. Blue-tinted bounce light from windows. Warm pools from unseen sources around corners. These are "cheating" in physical terms but essential for mood.

"Add a subtle blue point light near each window in the east wing, intensity 800, radius 5m, color temperature 8000K. These simulate sky light bouncing through the windows."

Accent lights — small, focused lights that draw the player's eye to specific things. A spotlight on a wheelchair in the corridor. A warm glow under a door to suggest a room that's somehow still occupied.

We placed about 40 lights total — 15 practical, 15 atmospheric, 10 accent. The MCP Server handled the initial placement and parameter setup. We then spent an hour manually adjusting — tweaking intensities, repositioning to eliminate unflattering shadows, and fine-tuning the color balance between warm and cool sources.

The Darkness Problem

A common mistake in horror lighting: making everything uniformly dark. This doesn't create fear — it creates frustration. Players can't see, so they stop engaging with the environment.

The solution is contrast. Deep shadows next to visible areas. The darkness becomes threatening because the player can see the boundary between light and dark. They know something could be in the shadow. If everything is dark, there's no boundary, no tension.

We used the MCP Server to audit our lighting:

"List all areas in the level where the average light intensity is below 0.1 lux within a 5m radius."

This identified dead zones — areas too dark for the player to read. We added minimal fill lighting to these areas while keeping them dramatically dark.

Post-Processing

"Add a post-process volume covering the entire level. Set the color grading: saturation 0.7, contrast 1.15, shadows tinted slightly blue, highlights slightly yellow. Add a vignette at 0.4 intensity. Set auto-exposure minimum to 0.5, maximum to 2.0."

The desaturation, increased contrast, and split toning pushed the environment from "room with lights" to "horror atmosphere." The vignette darkened the screen edges, creating a subtle tunnel-vision effect.

Polish and Iteration (1.5 hours)

The final phase was polish — the details that separate "decent" from "atmospheric."

Sound Emitters

We used the MCP Server to batch-place ambient sound emitters:

"Place an ambient sound emitter in every room in the east wing. Set attenuation radius to 8m. Name them sequentially Room_Ambience_01 through Room_Ambience_05."

The actual sound cue assignment was done manually — each room needed a different ambient loop. But the AI handled the tedious part of creating and positioning the emitter actors.

Particle Effects

"Place a particle emitter at each location where the ceiling is damaged — near the collapsed section and in the basement. Add dust mote particle systems in the lobby near the windows where light enters."

Dust particles in light beams are a classic horror atmosphere trick. The light becomes visible, tangible. It makes the air feel thick and the space feel abandoned.

Decal Placement

"Along the east wing corridor, place water stain decals on the ceiling at irregular intervals. Add rust stain decals near every pipe junction in the basement. Place dirt and grime decals on the lower 1m of every wall."

Decals are the kind of environmental detail that sells the decay narrative. Clean walls in an abandoned building break immersion instantly. We used the MCP Server for broad decal placement, then manually adjusted position and scale to avoid obvious repetition.

Storytelling Props

These were placed entirely by hand. Horror environments tell stories through objects:

  • A child's drawing pinned to a wall in one of the patient rooms
  • A wheelchair positioned facing a window, as if someone was looking out
  • A row of shoes outside one of the rooms
  • A clock stopped at 3:47 AM
  • Medical files scattered near an overturned desk

These items can't be procedurally placed because their power comes from deliberate positioning. The wheelchair facing the window tells a different story than a wheelchair in the middle of the corridor. AI handles scatter. Humans handle storytelling.

Final Lighting Pass

We walked through the level as a player would and adjusted lighting in real time. A few changes:

  • The basement was too bright in one section — reduced a fill light
  • The corridor leading to the basement stairs needed a stronger pull light at the far end to draw the player forward
  • One of the patient rooms was too uniformly lit — killed one of the practical lights to create a darker corner
  • The lobby needed a stronger contrast between the entrance (bright) and the corridor leading deeper (dark)

This kind of experiential lighting adjustment can only be done by a human walking the space. The AI got us to 80%. The final 20% required being in the level and feeling the atmosphere.

Results and Timeline

Time Breakdown

PhaseTimeAI-AssistedManual
Planning0.5 hours0%100%
Blockout1.5 hours70%30%
Procedural Scatter2.0 hours80%20%
Lighting & Atmosphere2.5 hours40%60%
Polish & Iteration1.5 hours30%70%
Total8.0 hours~45%~55%

What We Got

A complete, atmospherically dense horror environment with:

  • 3 building sections (lobby, east wing, basement) with 12 distinct rooms
  • Over 25,000 placed instances (exterior forest + interior debris)
  • 40+ lights with deliberate mood-driven placement
  • Particle effects, decals, and sound emitter placement
  • Storytelling props in every patient room
  • Playable navigation with proper collision and pacing

Without AI and Procedural Tools

We estimate this environment would have taken 3-4 days with manual blockout and hand-placed scatter. The biggest time savings came from:

  • Blockout — 1.5 hours instead of 3-4 hours (AI-assisted structural placement)
  • Exterior forest — 30 minutes of configuration instead of 4-6 hours of manual tree placement
  • Interior debris scatter — 1 hour instead of 3-4 hours of manual prop placement
  • Batch operations — decals, sound emitters, and light placement saved roughly 2 hours total

What We'd Do Differently

The basement was underdeveloped compared to the upper floors. We ran short on time and it shows — the lighting is less refined and the scatter is more generic. Next time, we'd allocate more time to the climax space and less to the approach path.

The forest scatter could have used more variety. Three biome layers with two mesh variations each produced some visible repetition at close range. Adding 2-3 more mesh variations per layer would solve this.

We should have placed the storytelling props earlier. They ended up rushed because we saved them for last. In hindsight, they're the most important atmospheric element and should have had more time allocated.

The Toolkit

This project used two StraySpark tools together:

  • Unreal MCP Server — for AI-assisted blockout, lighting setup, batch placement of decals and sound emitters, and scene auditing
  • Procedural Placement Tool — for exterior forest scatter and interior debris placement

They complement each other well. The MCP Server handles one-off and small-batch operations through natural language. The Procedural Placement Tool handles high-volume scatter with rule-based control. Together, they cover the full spectrum from "place one actor here" to "scatter 15,000 instances across this landscape."

Both are included in the Complete Toolkit bundle along with the Cinematic Spline Tool, Blueprint Template Library, and Blender MCP Server.

Horror environments demand attention to detail at every scale — from the overall layout pacing down to the position of a single wheelchair. AI and procedural tools handle the scale. You handle the detail.

Tags

Unreal EngineMcpProcedural GenerationEnvironment DesignHorror

Continue Reading

devlog

From Prototype to Production: When Your Game Jam Project Deserves a Full Release

Read more
devlog

From Game Jam to Shipped Title: Building an RPG Prototype in a Single Weekend

Read more
devlog

How We Populated a 16 km² Open World in an Afternoon with UE5

Read more
All posts
StraySparkStraySpark

Game Studio & UE5 Tool Developers. Building professional-grade tools for the Unreal Engine community.

Products

  • Complete Toolkit (Bundle)
  • Procedural Placement Tool
  • Cinematic Spline Tool
  • Blueprint Template Library
  • Unreal MCP Server
  • Blender MCP Server

Resources

  • Documentation
  • Blog
  • Changelog
  • Roadmap
  • FAQ
  • Contact

Legal

  • Privacy Policy
  • Terms of Service

© 2026 StraySpark. All rights reserved.