top of page

VFX - SONDER

 .SUMMARY

I worked as the sole VFX Artist on the game Sonder, developed in Unreal Engine in the fall of 2023. I created all the visual effects for the game, built real-time shaders as well as design and implement the lighting for all parts of the game. I worked primarily in Unreal Engine's Niagara Particle System and their Shader Graph. I also created all of the post-process effects and used Maya to model any necessary meshes for the effects. Finally, I wrote dynamic scripts, using Unreal Engine's Blueprints, for the real-time implementation of all of the above.

Sonder is available to play for free on Steam

ArtStation_Banner_Enemies.png

.DASHES

The game has two character - both with their own version of a dash ability. The effects were made completely in the Niagara Particle System, using the same base design with and minor tweaks in their behavior (like lifetime and noise movement). When the dash ability was used, I spawned slow-moving particles and generated location events for each one. This allowed me to draw ribbons between the particles, adding noises to control their movement. The particles spawn size were set according to the character's speed at spawn and were then scaled down over lifetime, resulting in the tapered effect of the ribbons. The two materials were completely made in the Unreal Engine's Shader Graph and customized in the Niagara System using the DynamicParameter Input-nodes. 

.HOOK SPARKS

The hook sparks were created to draw the player's attention to the interactable hooks in the levels, which easily went unnoticed by playtesters at first. Only one of the characters were able to interact with these hooks, hence the style of the effect corresponds to the character's effects. By sampling the location of the hook mesh in Niagara, the particles will always spawn around the hook object. I also added randomized WPO for more variation in the spawn locations. The particles themselves were rendered using spiral mesh renderers with an animated lightning shader applied.

The Niagara system could control the WPO of the mesh particles themselves, using a dynamic parameter that was multiplied by a noise texture in order to add an uneven 3D-shape to lighting bolts. This way, the lightnings would not lay flat onto the spiral mesh particles, but would be actually distorted in their own local positionsThe lightning shader were made by generating a band onto distorted texture coordinates, after which the data passes through randomised time and panning noise nodes in order to animate the band and giving it its lightning shape. 

HookSparks

.SPAWN

Played before the characters respawn after dying in the game, the effect used many different emitters, each with its own distorted version of the original mesh material, stacked on top of eachother. All emitters were timed exactily to fit together in a balanced way, as to not interupt the flow of the gameplay.

The materials offset the surfaces they were attached to, using heavy WPO to drag the pixels in different directions, using sampling a panning texture for the distortion directions. A third emitter, also using the same mesh and distortion material but set to wire frame mode, created a silhouette of the character for a smoother look overall. All off the mesh emitters had differently animated jagged base alphas, but these were all scaled up over their lifetime to, unevenly, fade in the mesh. Using light renderers, I added the swiping lights around the character. The Niagra System would randomly pick a color from a set array of options to set the color of each light at spawn. The final flare is a sprite with animated scale in the different axes. 

.DISSOLVE

The dissolving effect was made in Unreal's Shader Graph, using exposed parameter to animate the effect in real-time through a Dynamic Material Instance in the Blueprint. The eroding look was mainly achieved by sampling a panning noise texture that was fed into a power function with exposed parameters. By lerping the edge colors of the erosion, I could achieve more dimensions in the color detail. I subtracted an opacity mask from the erosion texture, controlling the bounds, bias and falloff through exposed parameters, so the level designer could spawn and de-spawn the enemies anywhere in the scene. 

.ABILITY UNLOCK

The effect consisted of two emitters, the main one spawning spiral mesh particles around the character. By sampling the skeleton mesh for the spawn location, the particles updated their position in real-time, following the characters as they walked around while the effect was playing. By panning a texture on the mesh particles, it created the illusion that the particles themselves were rotating. The small dust particles used a separate emitter with heavy noise applied to the movement at spawn, scaled in reverse over the paricles' lifetime to make them move slower with time

.PULSES

The AOE ability effect was primarily based on spherical mesh particles spawned in quick succession. Their material used heavy refraction, based on a slowly moving noise texture to create variation on each spawned particle. I also used a fresnel function for the colored edges of the spheres. The blue pulse was the original AOE effect and the yellow pulse was a charged up variation of the same ability, hence the addition of two different types of particles for more juice. Finally, one of the enemies would have the exact same ability wich resulted in the red version of the pulse. 

.SOUL ORB

In the final cutscene of the game we needed something to represent the soul of a specific character, and this effect was the result. The spawn point is constantly moved around along a small spherical shape, based on the age of the emitter itself. This was to create the organic movement of the centre of the effect. To create the movement of the particles I used heavy noise functions and velocities that was scaled down over the particles' lifetime. Additional drag modules finalized the look of the particles being hurled away from the centre and then slowing down the further away they got. 

.back to top

© 2026 by Tova Wesström.

bottom of page