top of page

RAINY CITY

.SUMMARY

Inspired by a construction site I walked past in Stockholm City during the fall of 2025, I wanted to try and replicate the atmosphere of that environment. I procedurally modelled the scaffolding in Houdini, used custom-made Scratchpad modules in Niagara for particle effects, created procedural materials in Substance Designer, made vellum simulations in Houdini, designed ripple-shaders in Unreal Engine's Shader Graph for the decals and made post process materials.

I had about 2 weeks during the spring of 2026 to make this piece. 

.Raindrops 

Linetrace, calculations & custom parameters drives the raindrops through Niagara Scratchpad Modules.

The water dripping through the scaffolding is made almost entirely in Niagara Scratchpad modules. The particle system uses line traces in combination with gravity-and-speed-calculations to drive the lifetime and fall movement of the particles. In other words, the system doesn’t use any velocity, collision or lifetime modules but instead makes calculations based on user input variables.

I also use a custom bool-based event, received by a separate emitter, for spawning a tiny burst of smaller particles at the place of impact, inheriting the velocity and angle of the parent particle. By excluding the particle ID from the inheritance list I could drive these emitters entirely on the CPU. 

Scratchpad module

.puddles

The ripples are timed using two different textures with rgb-variations and are combined through separate frac-functions. The finished ripple shapes are then converted to normals and passed into the material normal output. By creating a Material Function I can reuse the same logic on several materials with minimal extra computation cost

RGB-mask for ripples
Material Function for ripples

The decals are made in Adobe Substance Designer to quickly generate a wide variety of shapes. The textures are then used in the Unreal Shader Graph as opacity masks, where I add the ripple function to finalize the puddle decals

Materials
Master material

.materials

All textures in the scene is made almost entirely in Adobe Substance Designer. Through an iterative process, updating only one master material in Unreal Engine’s Shader Graph, I could slowly add functionality to the instanced materials.

 

In the end, nearly every material in the final scene reads from the same master material.  

Procedural scaffolding

.PROCEDURAL SCAFFOLDING

The scaffolding is entirely modeled Houdini, using a procedural workflow. I use input shapes to determine the base shape of the structure, while exposed user parameters controls things like the height of each floor, the thickness of the planks and the spread of the metal standards. 

 

To polish the model further, I brought it into Blender where I also made a more custom made UV-mapping.

HDA parameters for the procedural scaffolding
Scaffolding node tree in Houdini

.SIMULATIONS

To create the cables under and around the scaffolding, I generated splines in Houdini along the finished mesh, adjusted some of the point data (such as pscale and pnum), placed the anchors in line with the scaffolding and simulated the cables using the vellum solver. The same logic was used to simulate the flowing of the banner, exporting it as an alembic geometry cache

.post process material

When making the full screen water drops material, I first made the normal texture in Adobe Substance Designer. I then, as with the ripples, use the frac-function to create an animated subtraction from that normal texture. The result is passed into the screen texture UV:s which creates the refraction effect seen on the screen. 

Post process material

first and last iteration of the project

.back to top

© 2026 by Tova Wesström.

bottom of page