How we use visual effects to build atmosphere in our CRPG, Glasshouse

ANDREA MARINELLI / FLAT28Lead Technical Artist
Sep 29, 2025|6:30 Min
Logo for Glasshouse by FLAT28, Made with Unity. People's faces are reflected in a shattering pane of green glass. Clockwise, we see a masked figure with an admiral hat, a bearded man, a bearded man with dark glasses (whose mouth is being pulled by the bearded man), a woman with a white eyepatch, another bearded man, and an obscured figure who could be a nun. Everyone looks angry.

Today’s guest blog dives into the feudalpunk world of Glasshouse, the upcoming CRPG from game development collective FLAT28. Announced at gamescom, this in-development title – penned by award-winning writer Giacomo Montagnoli – promises to deliver a narrative-rich experience with high-fidelity graphics. Join FLAT28’s lead technical artist Andrea Marinelli to learn how he uses features like volumetric lighting, light cookies, and cloth simulation to build Glasshouse’s atmospheric environments.

Introduction: Establishing design goals

I’m Andrea Marinelli, lead technical artist at FLAT28, with over 12 years of experience in the videogame industry. I started my career in 2013 working on VR projects; over time I transitioned to PC and console development, expanding my expertise across multiple platforms and technologies.

Since joining FLAT28 in 2022, I’ve been part of the team developing Glasshouse. This narrative-driven CRPG is inspired by games like Disco Elysium and Pathologic 2. Our goal is to build upon those foundations while bringing our own unique twist to the genre.

Visually, we wanted to establish a unique style that would be immediately recognizable. From the very beginning, we also aimed for high visual quality, which is why we chose Unity HDRP, allowing us to push the visuals further and achieve a striking appearance. This workflow was one of the key factors in reaching that goal.

And in this blog, we will explore what to pay attention to, which tools to use, and how to give narrative cues to the player, not only through static and dynamic lights, but also by leveraging cloth simulation and beyond.

Identify the key elements of your scene and make them shine

I have always believed that lighting is not only something that enhances the visuals of a game but also a key storytelling tool. The right lighting can create mood, atmosphere and even give players subtle hints about what is happening in a particular scene.

Something as simple as a warm lamp glow, a swaying spotlight or the flicker of a TV can communicate a lot to the player about the story of a room.

In Glasshouse, it is crucial that every room feels coherent but also unique. Each one should tell its own story and reveal something about the character who inhabits it.

There are many different ways to achieve similar results, some more efficient than others. In our case I used a combination of real-time, mixed and baked lights to get the look I wanted.

In-game screenshot from Glasshouse by FLAT28, made with Unity. Isometric view of a dimly-lit, old-fashioned Victorian-looking room. Shafts of light pour into the scene from the left through a boarded up window.
The main light hits and highlights the table, and additional lights lead the viewer’s eye to the TV, the restroom door, and the kitchen.

Real-time lighting

The scene above shows a room that has clearly seen some kind of struggle: papers scattered on the floor, broken glass, overturned chairs, and more.

The main light source here is a Spot Light used to simulate the sun. I chose a Spot Light instead of a Directional Light because it does not affect the entire scene, giving me much more control over what it lights and making it significantly more performant for this kind of use case. I used it to create an instant point of interest. The player’s eye is immediately drawn to the window, where they notice it is barricaded. This light is set to real-time because I wanted it to cast dynamic shadows of the player as they move through the space. It is also paired with real-time volumetrics to add a strong cinematic effect.

To enhance the effect, I combined real-time shadows with a light cookie. The cookie simulates the planks across the window and allows me to control the shape and softness of the shadows. This gave me the flexibility of real-time shadows while still achieving precise static details like the plank pattern and avoiding jagged shadow edges. Raising the shadow resolution of the Spot Light would have increased performance costs since it would apply to all shadows in the frame. Instead, by using a light cookie, I could get the resolution I wanted only for that specific shadow without affecting every other shadow in the scene.

Because this light is real-time, the volumetric rays also update dynamically. That means I could add extra touches like 2D sprite birds or clouds moving outside and the volumetric light reacts naturally, maintaining immersion.

In-game screenshot from Glasshouse by FLAT28, made with Unity. Close-up view of a dimly-lit, old-fashioned Victorian-looking room. There are books scattered across a rug on a wooden floor. Shafts of light pour into the scene from the left through a boarded up window.
Close up look at the same scene from a different angle

Mixed lights

Mixed lights came into play mostly to preserve specular highlights. Our game has a lot of metallic and reflective surfaces, and I did not want to lose that depth and realism.

However, we could not afford too many real-time lights, so mixed lights were a good compromise. We used them with cached shadows on Awake to reduce performance costs while keeping necessary shadow detail. For fill lights, we disabled shadows entirely to save performance while still maintaining the highlights we needed.

You can see how enabling the mixed light brings out the specular highlights on the pipes.

Baked lights

While real-time and mixed lights are powerful, you cannot rely on them everywhere. For performance reasons and sometimes for better overall quality, baked lights were essential.

I used several area lights and point lights to boost bounce lighting where I wanted it. Even though Unity’s GPU Lightmapper already calculates GI and light bounces, adding a few carefully placed baked lights helped ensure the look matched the mood I wanted.

For example, I added a rim light around a wooden table on the floor. It sits almost directly under the sunlight, but without a boost it looked flat and underexposed. The rim light made it pop just enough to draw attention without breaking the mood.

However, to keep the scene from feeling too static, I added a real-time point light for the TV and used Unity’s Animation system to create a subtle flicker. This small detail immediately adds life and hints at the room’s story: maybe someone was watching, maybe something unsettling happened.

A subtle flickering light to add some dynamic elements

Reflection probes

Reflection probes are essential for believable visuals. I usually start with one probe at the center of the room, covering the entire space, so that most objects get some cubemap reflections. From there, I place additional probes close to specific reflective objects. The shinier the material, the more it benefits from a dedicated probe nearby.

Even with just one reflection probe enabled, the yellow from the wallpaper becomes visible in the reflections on the pipes at the top of the screen.

Adaptive Probe Volumes (APVs)

We do not have a real-time day and night cycle in Glasshouse, so APVs were not needed for time-of-day transitions. But they proved invaluable compared to traditional light probes for dynamic characters and NPCs.

Before, light probes gave results that were good enough but not optimal. APVs automatically placed probes with smoother interpolation, which greatly improved how characters look when moving between bright and dark areas. This was especially important in rooms with strong light contrasts.

In-game screenshot from Glasshouse, made with Unity. Isometric view of a dimly lit room with a few key light sources. On the left, light pours in through an orange stained glass panel. Two small purple lamps flank a blank easel.
Example of a room with strong light contrasts

Cloth simulation

To add more dynamism beyond characters, animated lights, and VFX, we relied on Unity’s built-in cloth simulation. It was quick to set up and customize.

We used it mostly for curtains and tents. For performance reasons, we did not apply it everywhere, but whenever the player physically interacts with cloth (like pushing through a curtain) it adds a lot of realism.

I set constraints so the curtains behaved naturally and added the player’s collider into the cloth component so they would properly react to movement.

In-Editor screenshot from FLAT28's Glasshouse, made with Unity. Colliders being added to curtain assets placed in a room with ornate red wallpaper. The scene is dimly lit by a purple lamp and a window in the background (seen through a curtain partially covering the door).
I set constraints on the top and right side of the curtain to keep it attached to the wall and prevent it from falling.

One trick I really liked was setting the HDRP Lit material of the curtain to Double-Sided. This way, shadows and light on the front of the cloth also show through the back, faking a kind of subsurface scattering effect. It makes the curtain feel thinner and more realistic, as if light were passing through the fabric.

Shadows and light are rendered on both sides of the curtain, mimicking a subsurface scattering effect.

Final thoughts

Dynamic shadows, animated lights, and cloth simulation add movement and mood to an otherwise static environment. With the right balance of real-time, mixed, and baked lighting, plus careful use of cookies, you can guide the player’s attention, hint at narrative details and shape the emotional tone of a space. The result can be eerie, tense, or calm, depending on the choices you make.

Wishlist Glasshouse and stay up to date with the game’s development on FLAT28’s YouTube channel. Explore more Made With Unity games on our Steam Curator page and read insights from game developers on our Resources page.