Hi there! I know some of already know me. If you don’t, well I’m Bill Kladis. I’ve worked for over 5 years at Epic Games and I used to run a site called imbueFX. On my site I authored tutorial content aimed strictly at Realtime VFX mainly focused in Unreal Engine. I also had help from a few other artists such as Fred Hooper making tutorial content with me.
My life both personally and professionally has been shaken around like a snow globe during the past 2 years. But as the dust settles, the absence of being more involved in the community in terms of answering questions or showing content is weighing on me. My last official reel is from 2013 . . .
So I have this folder on my desktop. It’s called GIFs (pronounced gif, silly). It’s just tons of random little animated gifs from Fortnite or other special projects I’ve worked on, and I want to start sharing some of them with little notes about what they are relevant. Some might shown because I feel they look cool, others might show a small test I made that may help inspire someone like you down the road. Other times I feel like it’s worth sharing something that’s great visually, but ends up not getting used. I feel this is an important lesson because it happens, it sucks, and few people prepare you for it.
While this site is obviously focuses on FX, most of my work will be more tech heavy. I’ve become a huge blueprint mole the past few years. If you were at my GDC talk in 2018, you’ll know exactly what I mean
Nice to see you here I kinda miss ImbueFX, this site was my inspiration to get into realtime VFX. When there was no learning material available about Real-time VFX, imbueFX was there. <3
I feel one of the biggest complaints that still reverberates about UE4 was the loss of the lens flare editor. Here’s a tip if you want to create your own flares that obey occlusion like you’d expect from a real light source:
You can create a simple translucent streak as shown (I know, the rotation show here is wrong), and do any form of depth comparison from the streak’s center point. In UE4 you can sample scene depth, which only gives you opaque geo. If your streak’s depth is larger than the depth at the same point in screen space, that just means the light is now occluded and you can hide the streak by collapsing it to a point in space (in World Position Offset, subtract object position from world position).
If you want it to be more accurate and avoid flickering, you just need to perform additional samples and just use the max of all your results. In this case I only do 1 for performance.
Consider this eye candy. I’ve been mostly focused on Creative Mode inside of Fortnite for the past year. One of our cooler feature is that we have post process effects for users to apply to their islands. I got carte blanche from our AD to make a 80s synthwave inspired filter. I was testing a bug with the new water system and fell in love with how the water ripples accentuated the tessellation of the water. Credit to (I believe) Ryan Brucks who did most of the water ripples.
Here’s a tip for perf savings: Typically any form of bone driven animation is much more expensive that static geo. I’ve seen past projects where things like doors are driven through animations. Others get more clever and simply animate movable static meshes through native code or a timeline. But why not get even smarter?! Consider changing over to a strictly material based approach, where you can push verticies through world position offset. You can use a masked material and create an analytical boundary to then mask the edges off so they don’t clip through door frames.
The doors open automatically when any player intersects a volume.
A bit of a blast from the past! Back in 2017, before there were different modes it was just called Fortnite. This is from the intro cinematic for what is now called “Fortnite: Save The World”. I was responsible for the growing cloud material, aurora, atmospheric changes, and the growing tendril that attacks the satellite.
I feel every VFX artist has encountered the issue of trying to use a fresnel output to draw an outline on an object, but it ends up breaking really bad on anything that isn’t a sphere.
This material function I had help with from Daniel Wright calculates derivatives (basically the differences) of neighboring pixels to drive the exponent input of a fresnel node. This gives you mostly consistent edging. In this case shown, we simply round the result for a hard edge.
Edit: I found another gif that demonstrates this used in a better example
From the archives, this was meant as an opening piece for a cinematic (the intro moment being called The Birth Of Light). The direction was changed a bit so the piece wasn’t used, but I was proud of the fidelity we pushed out of a realtime piece.
Another tip for anyone trying to create gradients following a path - Try using Adobe Illustrator and the pen tool! Useful for sweeps and other materials that follow a 0-1 range.
For the release of Fortnite, we created an in-house cinematic to build excitement around the brand and introduce the franchise. One of the ways we pushed the limits technically was with Ryan Brucks’ realtime fluid dynamics simulation blueprint. With even a 1080 card, we were running at film quality resolution and frame rates.
This scene is from the climax of the piece, where the Smasher is crushed by the Durr Burger sign held from the roof. The smoke emits from an invisible mesh shaped like a toilet seat and scales/translates over a few frames.
If you haven’t watched the whole piece, see it here!
One of the more powerful rendering features from the past few years inside of UE4 is Volumetric Fog. I made this fog material using curl noise and sampling distance fields to nearest surface to be able to get fog to “stick” and get thicker near surfaces.
One limitation is that volumetric fog doesn’t shade accurately, so I believe I did a trick to lerp between 2 color based on the fog’s opacity.
One thing I really keep telling FX artists is to have a solid understanding of vector math in their toolkit. In this example, the particle is being pushed away from it’s position only on X & Y. The Z component is discarded. As long as is this is transformed, this conforms the particles to a circle around the character.
Welcome back Bill!
I’ve been scouring everywhere for your stuff since I got started, so this thread is a pleasant surprise. You’ve taught me so so much and I am very grateful for all the resources you’ve released. I wouldn’t be in the position I am in life right now without them.
Looking forward to having you around!
We often want to add subtle details to glows (such as auras or streaks), but we have to be cognizant of their cost on the gpu. One set of tricks I can share is from the color changing tiles. To get the transitions to stand out more, a set of planes are used with the “spline thicken” material function inside of UE4. This takes a strip of polys and makes then camera face (much like a beam would). In addition, they are using the same math for the transitional sweep from the base, but as the value reaches a threshold of 0.001, it shrinks the polys to a point to avoid any rendering cost.
This is more evident when watching the effect in shader complexity mode.
Here’s a gif showing the light rays working in concert with the material transition on the cube.
One thing I really keep telling FX artists is to have a solid understanding of vector math in their toolkit. In this example, the particle is being pushed away from it’s position only on X & Y. The Z component is discarded. As long as is this is transformed, this conforms the particles to a circle around the character.
Do you have any resource suggestions for understanding vector math to achieve things like this?
CGBuzz has a bunch of math tutorials for free download (RIP) including Trig and Vector focused courses. Great for anyone like me who’s been wanted to brush back up on their math but aren’t sure where to start, or need a bit more focus on what to brush up on.