2025/11
Unreal Engine, 3Ds Max, Liquigen, Substance Designer
◆ I did not use generative AI.
What I did I made the vfx, shaders, and camera work. I heavily altered the environment to fit the scene. I also adjusted the character animations.
Assets used The stone statue model, environment, character, and character animations are assets created by other artists:
For this project, I created game-ready VFX for a cinematic sequence. It includes:
I challenged myself to create a water shader without using Unreal Engine's Single Layer Water Shading Model. Instead, I made it “from scratch”, starting from the Translucent Shading Model.
The real-time water interaction works like this:
1.Capturing the movement of the player (or other actors). I do that via blueprint components which send
information to the Niagara Grid 2D system. Then, in Niagara, I translate that information into a “Locations”
texture using HLSL.
2.Using the “Locations” texture, I use a convolution kernel to simulate ripples on the surface of the water.
I also use the texture to create a foam mask. I write all of this information into a “Simulation” texture.
3.I can now use the “Simulation” texture inside the water shader to change normals, refraction, opacity, color, etc.
The water falling effect is made up of a few different layers:
1.Panning normals on the statue material
2.Water falling shader on a mesh that wraps around the statue
3.Flipbooks and single droplets placed strategically
4.Water splashes on the water surface
The activity of the emitters and the opacity of the effect changes based on the distance to the water
surface. This way it is only visible where the statue just emerged.
For the blooming flower effect, I focused on simplicity for an optimized effect that can be used on hundreds of flowers. That is why the animation is driven by a single RotateAboutAxis node, with some math magic to make the movement look rounded and believable. I hand-painted the flower texture to get the right magical feeling. I assembled the flower asset in 3DS Max.
To get simple buoyancy working for the flowers, I simply used the normals derived from the “Simulation” Texture, as they have the directional information needed to push the flowers.
Portfolio