Level Art and Lighting Study: Abandoned Factory

A story premise that I wrote in order to help get the creative juices pumping prior to planning this level art scene.

A story premise that I wrote in order to help get the creative juices pumping prior to planning this level art scene.

Some tools that I had initially considered using. I ended up just using Polygonflow Dash for initial scattering that I went back to clean up later. I also used crazy ivy very sparingly.

Some tools that I had initially considered using. I ended up just using Polygonflow Dash for initial scattering that I went back to clean up later. I also used crazy ivy very sparingly.

Some asset packs that I had sourced during the initial planning phase. Not all packs were used and not all packs used are listed in this image.

Some asset packs that I had sourced during the initial planning phase. Not all packs were used and not all packs used are listed in this image.

Some smaller goals that I wanted to aim for on this project. (I cut the size down a lot from my initial plan but I can always expand upon it later)

Some smaller goals that I wanted to aim for on this project. (I cut the size down a lot from my initial plan but I can always expand upon it later)

Some research on what types of rooms and objects are typically found in industrial factories.

Some research on what types of rooms and objects are typically found in industrial factories.

Photos that I took of an abandoned sugarcane planation in Hawaii that were a huge inspiration for me on this project.

Photos that I took of an abandoned sugarcane planation in Hawaii that were a huge inspiration for me on this project.

Full Miro board (with exception to some notes and questions I asked myself off to the side)

Full Miro board (with exception to some notes and questions I asked myself off to the side)

First Miro board planning pass.

First Miro board planning pass.

Floor Break Down planning showing how different areas would overlap. (rough idea)

Floor Break Down planning showing how different areas would overlap. (rough idea)

Some large asset planning to get me started. (Quite a bit changed later on after I got out of the 2D planning stage but this saved me a TON of time in the long run)

Some large asset planning to get me started. (Quite a bit changed later on after I got out of the 2D planning stage but this saved me a TON of time in the long run)

More planning with reference images for each individual area in the initial plan.

More planning with reference images for each individual area in the initial plan.

Reference Breakdown for each individual area in the initial planning stage.

Reference Breakdown for each individual area in the initial planning stage.

Some additional reference images. I used the bottom left one as inspiration pretty heavily at the start of the steam room area in my level.

Some additional reference images. I used the bottom left one as inspiration pretty heavily at the start of the steam room area in my level.

Custom Foley Art for the gate in game.

Custom .wav file being used on interactable gate.

Interactable Gate BP (Special thanks to Doug Adair for helping me figure this one out!)

Interactable Gate BP (Special thanks to Doug Adair for helping me figure this one out!)

Foot trace Physical Material BP

Foot trace Physical Material BP

One Shot Sound BP

One Shot Sound BP

Camera Fade in on Start BP

Camera Fade in on Start BP

Controller Pitch & Yaw Interp BP

Controller Pitch & Yaw Interp BP

Level BP for intro and music changes when the player walks through triggers at different parts of the level.

Level BP for intro and music changes when the player walks through triggers at different parts of the level.

Balancing PBR values and base color brightness/brightness curve for every single asset in the scene in order to get them to sit well together in a believable range.

Balancing PBR values and base color brightness/brightness curve for every single asset in the scene in order to get them to sit well together in a believable range.

I check the roughness, metallic, etc. As well on any asset where the value looks off and do my best to fix it in engine. There are typically a lot of maps and materials that need to be fixed or edited.

I check the roughness, metallic, etc. As well on any asset where the value looks off and do my best to fix it in engine. There are typically a lot of maps and materials that need to be fixed or edited.

I had to add some nodes to every master material that was going to be exposed to the weather outside in order to create a new material instance that has a mask wetness parameter allowing me to adjust the amount of wetness or to turn it off or on.

I had to add some nodes to every master material that was going to be exposed to the weather outside in order to create a new material instance that has a mask wetness parameter allowing me to adjust the amount of wetness or to turn it off or on.

UDS Occlusion volumes were set up in the interiors in order to properly attenuate weather sounds when going from the outside to the interior areas on the map.

UDS Occlusion volumes were set up in the interiors in order to properly attenuate weather sounds when going from the outside to the interior areas on the map.

UDS drip splines were added by hand across the scene. The parameters for each of these were edited.

UDS drip splines were added by hand across the scene. The parameters for each of these were edited.

Puddle Meshes or decals were added across the scene in various places. I placed puddles under where the leaks in the ceiling were dripping down. An audio cue for dripping sounds is then placed with custom attenuation settings.

Puddle Meshes or decals were added across the scene in various places. I placed puddles under where the leaks in the ceiling were dripping down. An audio cue for dripping sounds is then placed with custom attenuation settings.

Simple planes are placed throughout the scene where decals were used. This was to allow for physical material sounds to be properly applied in those areas. This allowed for puddle decals to make a puddle sound. These actors are set to hidden in game.

Simple planes are placed throughout the scene where decals were used. This was to allow for physical material sounds to be properly applied in those areas. This allowed for puddle decals to make a puddle sound. These actors are set to hidden in game.

Bat NPCs were added which required a nav mesh to be added to this area in order for them to function properly.

Bat NPCs were added which required a nav mesh to be added to this area in order for them to function properly.

Texture Source Reduce size for base color and other maps. It is important to note that this is a DESTRUCTIVE action and that this reduces the texture down permanently across the entire project. I wanted to reduce the size of the textures on disc but at a

Bulk Edit Via Property Matrix. I typically will set my LOD bias when doing this but in this case I went ahead and tried out the max texture size option. Both of these workflows are non-destructive and just reduce the size at runtime.

I used Ultra Volumetrics to place volumetric fog volumes around the scene where I felt particle effects were not quite cutting it. I then edited the opacity and color of the fog to match the lighting in the room.

I used Ultra Volumetrics to place volumetric fog volumes around the scene where I felt particle effects were not quite cutting it. I then edited the opacity and color of the fog to match the lighting in the room.

I tried to calculate a realistic color for the volumetric fog in areas where the yellow-orange light mixed with the natural light from the sky.

I tried to calculate a realistic color for the volumetric fog in areas where the yellow-orange light mixed with the natural light from the sky.

I had a large amount of debris in this scene so I set up culling to ensure that too much was never loaded in at once. I had to find the right distance to avoid them popping in and out in game.

Custom draw and fade distance settings were done for each light and all of the particle effects in a similar fashion to the foliage in order to improve performance.

Custom draw and fade distance settings were done for each light and all of the particle effects in a similar fashion to the foliage in order to improve performance.

Although my scene was not very ivy heavy I did use crazy ivy in a few areas with some tweaked parameters. I had to do base color auditing on the ivy after it was generated as well.

Although my scene was not very ivy heavy I did use crazy ivy in a few areas with some tweaked parameters. I had to do base color auditing on the ivy after it was generated as well.

90% of the exterior foliage was made using an edited PCG pack made by EasyBiomes on FAB. I just placed the splines on a quickly sculpted landscape and tweaked it for my vista art areas. https://www.fab.com/listings/61f2b0fc-5656-46b7-86ef-3c2100cebcb4

90% of the exterior foliage was made using an edited PCG pack made by EasyBiomes on FAB. I just placed the splines on a quickly sculpted landscape and tweaked it for my vista art areas. https://www.fab.com/listings/61f2b0fc-5656-46b7-86ef-3c2100cebcb4

A lot of the asset packs that I used were created from scan data and had a lot of repetitive areas in the modular parts. This led to me having to split those parts off with the modeling tools in areas where I did not want mounting brackets.

A lot of the asset packs that I used were created from scan data and had a lot of repetitive areas in the modular parts. This led to me having to split those parts off with the modeling tools in areas where I did not want mounting brackets.

Using Scan Factory assets led to me having a very large number of materials on many of my assets in my scene. As a result I opted to use nanite and virtual texture workflows to improve performance. I still have some optimizing to do in this area.

Using Scan Factory assets led to me having a very large number of materials on many of my assets in my scene. As a result I opted to use nanite and virtual texture workflows to improve performance. I still have some optimizing to do in this area.

Many of the parts such as these floor pieces did not tile appropriately which led to me having to come up with creative ways to hide the seams. I tried to reduce overdraw in other parts of the map since the floor was going to be pretty dense.

I made sure to remove player collision on objects that the player could not reach and on smaller objects on the floor that might cause awkward walking across surfaces (such as small bricks, etc.) Mainly objects below knee height or way out of reach.

I made sure to remove player collision on objects that the player could not reach and on smaller objects on the floor that might cause awkward walking across surfaces (such as small bricks, etc.) Mainly objects below knee height or way out of reach.

I added a few non shadow casting lights in some areas to make it look a bit sexier in the video playthrough but the light complexity with those turned off isn't too bad overall.

I added a few non shadow casting lights in some areas to make it look a bit sexier in the video playthrough but the light complexity with those turned off isn't too bad overall.

Various audio cues were placed around the scene with a custom attenuation radius to create more realistic fall off. Other sounds were triggered by the one shot trigger bp I shared earlier.

Various audio cues were placed around the scene with a custom attenuation radius to create more realistic fall off. Other sounds were triggered by the one shot trigger bp I shared earlier.

The chains were all hand placed/edited via a spline tool that came from the warehouse pack.

The chains were all hand placed/edited via a spline tool that came from the warehouse pack.

I did a quick foliage painting pass on the metal walls to apply paint chip static meshes across the surface to help them feel less flat. I would like to come back and spend more time making the paint chips look nicer in the future.

I did a quick foliage painting pass on the metal walls to apply paint chip static meshes across the surface to help them feel less flat. I would like to come back and spend more time making the paint chips look nicer in the future.

This mesh in the steam room was made by splitting other meshes apart and kit bashing the pieces together using the Unreal Engine 5 Modeling Tools.

This mesh in the steam room was made by splitting other meshes apart and kit bashing the pieces together using the Unreal Engine 5 Modeling Tools.

Setting global saturation to 0 on the post process volume to check the value range of my shots. I probably could have dialed these in a lot further with more time but I am happy with the result considering the scope of the project.

Setting global saturation to 0 on the post process volume to check the value range of my shots. I probably could have dialed these in a lot further with more time but I am happy with the result considering the scope of the project.

Adjusting the highlight contrast setting in the post processing volume inside UDS to get a bit more pop in windows and areas where you go from the interior to the exterior or vice versa.

 I turned off cast shadows and Affect Dynamic Indirect Lighting on all small foliage painted debris to help further improve performance. I turned this off on some foliage as well but I checked each foliage painted object on a per object basis.

I turned off cast shadows and Affect Dynamic Indirect Lighting on all small foliage painted debris to help further improve performance. I turned this off on some foliage as well but I checked each foliage painted object on a per object basis.

A comparison of the raw scene prior to the subtle lookup table that I made in Davinci Resolve being applied. The top image is without the LUT and the bottom is with the LUT applied.

A comparison of the raw scene prior to the subtle lookup table that I made in Davinci Resolve being applied. The top image is without the LUT and the bottom is with the LUT applied.

The distant mountains had both their textures and their triangle count reduced since I know the player will never be getting close to them in my game. This can help to lower memory usage and package size while also improving streaming performance.

The distant mountains had both their textures and their triangle count reduced since I know the player will never be getting close to them in my game. This can help to lower memory usage and package size while also improving streaming performance.

When I am starting I project I typically set bookmarks up as early as possible. Then I set up cameras when the project is a bit further along or when I run out of bookmarks. This is 2 comparison examples.

When I am starting I project I typically set bookmarks up as early as possible. Then I set up cameras when the project is a bit further along or when I run out of bookmarks. This is 2 comparison examples.

This project is a gameplay-oriented level art and lighting study created in Unreal Engine 5.4.4 during an alumni mentorship at CG Spectrum.
~
The goal was to develop a larger-scale environment while focusing on level art, world building, composition, lighting, and optimization within a real-time pipeline using Nanite and Lumen. The scene was built primarily using asset packs (Scan Factory, Dekogon, Quixel Megascans), with extensive material editing, kitbashing, and set dressing to create a cohesive and believable industrial space.
~
Key focuses included:
~
Gameplay-aware layout and player guidance through lighting, composition, and prop placement
~
Verticality and spatial readability within a dense, layered environment
~
Atmospheric lighting and mood development using volumetrics, fog, and color grading
~
Value range testing and contrast shaping to reinforce focal points and improve readability
~
Environmental storytelling through intentional set dressing and detail passes
~
Additional work included:
~
Material cohesion passes (base color / roughness balancing, wetness integration, decals)
~
Cinematic camera setup and shot composition, with post-processing and color grading (bloom, vignette, exposure control)
~
Audio implementation (ambient zones, attenuation tuning, foley integration)
~
Blueprint usage and system integration (interactive elements, AI navigation)
~
Procedural and manual set dressing workflows (Dash, PCG tools, spline systems, landscape painting)
~
Scene optimization and performance tuning, including texture memory reduction, distance culling, light and asset draw distance management, real-time lighting optimization, collision setup, selective shadow casting, and distant asset simplification
~
The project was iteratively developed through planning, playtesting, and refinement to ensure both visual quality and functional readability.
~
I was very fortunate to have Carl as a mentor and for his excellent feedback as I worked through this project. I want to also give a special thanks to my friend Doug Adair (Polygeddon) for helping me when I got stuck trying to figure out a couple of the blueprints (especially the gate). I am hoping to expand my knowledge in that area as well as in a few other areas in the near future. 
Dash was a huge help in terms of scattering on this project. It is much easier to do multiple passes procedurally scattering debris, etc. and going through to clean it up and edit it than it is to do it all by hand like I have in the past. I am looking forward into digging into their tools more! 
You can find a link to Dash here: 
https://www.polygonflow.io/
~

Although I really want to push this project further I am very happy with how far it has come since starting it. I am always amazed at how much I learn in my sessions with Carl Shedd. I find his art direction and game development proficiency to be invaluable. On top of that every session has been fun like working with a friend. Thanks again man! 
You can find my mentors work here: 
https://www.artstation.com/carlshedd
~
Check out the artstation of Doug Adair who helped me with Blueprints a bit when I got stuck: 
https://www.artstation.com/polygeddon
~
I would also like to extend a special thanks to Arondight Studios for allowing me to use his ambient music in my video. You can find a link to the specific video that I used a section of here: 
https://www.youtube.com/watch?v=HVxBMYZAgQg&t=6s 
You can purchase their music here: 
https://arondightstudios.bandcamp.com/ 
You can check out his tracks on spotify at the following link: 
https://open.spotify.com/playlist/0Tei7wv5VpHXngE0dA7lsb?si=323ad90cbd7a46c7&nd=1&dlsi=22614e4a1c934df6