SHADERS & VFX

Shaders and VFX created in Unity URP and Unreal Engine, using HLSL

A series of shaders and particle systems built across a variety of game projects, combining node-based programming with hand-written HLSL. The VFX themselves are implemented across Niagara, the Shuriken Particle System, and the VFX Graph.

Unity URP / Unreal EngineEngines
HLSLShader Language
Niagara / Shuriken / VFX GraphTools
Project 1

Stylized shader for Custom Lighting Model

Unity URP Amplify Shader Editor HLSL

I built a fragment shader using Amplify Shader Editor and HLSL code to render objects in a graphic novel aesthetic.

The shader reads lighting data from the scene, from the main light and all additional lights. This data is combined with the object's normal map data to create a mask for the shadows. The threshold of the mask can be easily manipulated by the user via exposed properties. This mask is updated in real-time if the lights change or the object moves.

The mask is used to define how shadows should render in dark regions. In this case, I use a tiered system where the darkest regions are entirely black, mid shadows are cross-hatched, and lighter shadows are single-line hatched. This is achieved through exposed properties that allow texture inputs for the shadow patterns. The lightest regions of the object are overlayed with a halftone pattern (This is clear in the video). These shading effects are ultimately combined with an emission map and rim light to push the visual appeal.

IMAGE
Shader used to emulate comic aesthetic
VIDEO
How the shader reacts to dynamic lights

Showcasing shader versatility and a comparison with the default types

Project 2

Blood Splatter FX for Slaughterhouse

Unreal Engine Niagara HLSL Blueprints

I created this blood splatter effect in UE5 using a custom blood material, decal material and their combination in a Niagara system. The blood material uses a dissolve effect based on the light/dark values of the texture to fade out the blood over time, and the decal material is similarly used to project and dissolve the blood on surfaces. The Niagara system controls the spawning and behavior of the blood particles, including their velocity, rotation, and lifetime. There are two emitters that control the explosion of blood; the first emitter spawns a large number of particles in a condensed space, the second emitter spawns a smaller number of particles in a wider area to create a more dispersed, exaggerated effect. The third emitter is triggered when blood particles collide with a surface, spawning a decal to create the impression of blood splatter on the environment. The effect attached to the player actor, it triggers when the character dies.

VIDEO
Blood Splatter Effect
IMAGE
Niagara System
Project 3

Attack VFX for Pose Pose Execution

Unity URP VFX Graph Shader Graph
VIDEO
VFX Showcase

The VFX carried all of the visual feedback for player interaction.

For each of the 4 possible moves, I built two versions of each effect — one for a failed execution, one for a successful one. The VFX that play are pre-calculated in a script at the end of each turn and displayed during the execution phase. The failing effect matches the succeeding effect up to a certain point to maintain suspense as moves are executed against each other. Each of the 8 visual effects are made on Unity's node-based VFX graph. They include multiple particles and sub-emitters that are carefully timed and meticulously organized to make player action feel responsive and satisfying. The VFX for different moves is also timed alongside one another to create the illusion of genuine interaction.

VIDEO
Light Attack
VIDEO
Parry
VIDEO
Heavy Attack
Project 4

Shader graphs, particle systems, and sub-emitters for ANEURISM IV

Unity URP Shader Graph Shuriken Particle System

Fire

A custom shader that uses a layered noise texture to dissolve a fire image texture. The shader exposes properties for color and noise frequency/scale that the PS manipulates over a particle's lifetime. This effect is combined with a smoke particle system that uses a sprite sheet.

IMAGE / VIDEO
Natural Emission
IMAGE / VIDEO
Flamethrower

Water

A lightweight water simulation. This fragment shader uses a render texture and a particle system to generate normals for the water when an object moves on its surface. These normals create the impression of fluid motion. The shader itself uses refraction, the depth buffer, and edge detection (foam) for additional realism.

IMAGE / VIDEO
Ripples
IMAGE / VIDEO
Idle Movement

Rain

Layered particle systems for the falling rain, with some particles triggering ripple sub-emitters on collision.

IMAGE / VIDEO
Falling Rain
IMAGE / VIDEO
Ripple Collisions
← Back to work Next: Fullscreen FX & Post →