Justin Cherry Realtime VFX Reels 2021 - Back 4 Blood

Hey everyone, it has been a long time! I’ve finally compiled my reels from Back 4 Blood, and I’m posting them here. It was an exceptional amount of work over 2.5 years, so thank you for watching!

39 Likes

22 Likes

35 Likes

wow! great stuff! :slight_smile:
Thanks for sharing this with us!

3 Likes

I would love to see some breakdowns (or any other info ;)). Your timing ant textures are absolutely mindbending (as yours illustrations). I’m still rewatching your reel from 2016. Amazing. Thanks for sharing.

1 Like

Thanks so much! I can provide breakdowns of something in particular if you want, otherwise I can just give some high level info on what I did for the majority of the effects (sorry for the long read!)
Technical notes:
I use A LOT of meshes in effects, even if they’re just quads - For 3d objects like tentacles, worms, and webs it provides a lot more depth and direction info than just a sprite, but most importantly it allows for them to take advantage of per object motion blur, which I felt was really useful for the overall look.
Every flipbook had an associated motion vector texture created (using Slate), this allowed for me to have very few “hero” assets that could be used in a variety of ways.
About 90% of fire flipbooks were created using Embergen, with the remaining 10% coming from footage packs purchased on Video Copilot or ActionFX (I think, it’s been a while!).
100% of the smoke flipbooks were generated in Embergen, otherwise the textures were hand painted by myself. I would render out emissive and albedo channels separately and control those colors/intensities independently in the materials using Particle Color and dynamic parameters.
Speaking of dynamic parameters, I think almost every material used them - primarily to control UV deformation or alpha contrast, but sometimes for things like vertex offset amounts or emissive intensities on explosions, etc.
As a personal preference I tend to rarely use additive blend modes as it becomes really hard to control the value of components. Most of the effects use translucent or masked blend modes. You can still have “additive” looking effects by cranking up the emissive and lowering the alpha value, while still having access to normal maps, etc.
I use particle lights fairly liberally - UE added “hardness” functionality to them which allowed for a lot of interesting variety. We also had a rendering programmer decouple the light brightness from its specular brightness so we could do weird things like have specular only particle lights, etc.
I also use UV distortion almost all of the time, I just feel like it adds a nice level of variation for relatively little expense (especially if you’re using a channel of the existing texture).

For blood/liquid:
The decals I hand painted, and their normal maps were generated from hand painted height maps that I ran through the Photoshop 3D filter.
About 70% of the splatters are camera facing quads with a flipbook. The texture source for the flipbooks were from the Blood Hits collection on ActionFX. I edited the base footage in AE and then created normal maps for them using Photoshop, also creating motion vectors for them using Slate. The other 30% are either hand painted splatters on quads or hand painted scrolling sinew/viscera textures on spheres/cones with vertex deformation/uv deformation. Some of the conical sprays have tessellation applied so they have 3D depth up close but in hindsight that could have probably been removed as it is really never seen in-game, lol!

All of the organic materials (for blood, worms, water, alien goo, etc) all use the “subsurface” surface type. This was really helpful in unifying their look under a variety of circumstances, but also allowed for them to be BACKLIT, which was huge in making them feel more gross. The SS color was controllable in the materials so very wacky combinations were available.

All of the tentacles/worms use some vertex sine/cosines that are offset to have them writhe in circular patterns, with additional vertex offsets based off some noise textures. Those meshes are also rotating on their forward axis.

The worms are mostly distorted torus knots with a material applied that shrinks the vertex width based off a chosen alpha mask (I use the red channel a lot for that). So in practice they’re using a sort of gradient ramp that’s just scrolling along the torus knot to create the look of the worm, if that makes sense.

I think that’s the bulk of it, let me know if that was helpful!

28 Likes

Hot diggity dang! All of this is amazing! :star_struck: Wonderful work!

1 Like

Whoa, excellent breakdown, thank you so much for the info! a masked torus knot for worms is a galaxy brain move :star2: :brain: :star2:

1 Like

No problem! I just needed a shape that could continually move how I wanted. For the worms that collide with the ground the torus is just flat!

Thanks for the breakdown. The fire & smoke fx are also looking good. can you tell me about them? :slight_smile:

1 Like

All of it absolutely amazing stuff, really well done!

Regarding the explosions, I know you mentioned using Embergen and I’m just curious to know what channels you are rendering out for your Fire and Explosions flipbooks? and if possible, how you set it up in the shader? Especially liked the Molotovs, looked really good!

1 Like

Thanks!
Aside from what I mentioned in the long reply there isn’t much more to add, they’re relatively simple in construction. I used Embergen to generate the flipbooks - for explosions and smoke with fire in it I separated out the emissive, alpha, and sometime diffuse textures into different channels so I could control them independently using dynamic parameters. Every flipbook had motion vectors generated for them using Slate. With the fire textures I often put the alpha in the red channel and used the green channel for masking the UV distortion - this allowed for the ends of the flames to behave more wildly than the base and also kept the texture from going out of bounds.
The materials for the fire are translucent unlit with a parameterized normal map that I used for UV distortion and all of the color/alpha behavior was controlled in the particle system itself (sometimes with the particle color multiplied on itself for the emissive to have nicer color ramps and avoid the greying that can sometimes happen with translucent materials where the emissive isn’t bright). I used the default cascade quads for those as translucent mats won’t receive per object motion blur anyway.
There were a few fire materials that used vertex animation on camera-facing meshes but had velocity based direction - in particular for the molotov and the lingering flames from the barrel explosions. I wanted something to differentiate those from the rest of the fires and also give them a bit more depth (as the mesh was kind of a soft L shape so I could have it look like it was scrolling from the ground first before going into the air).
The materials for the smoke were translucent with subsurface shading model and surface translucency volume, or for cheaper smoke per vertex directional shading. I used Embergen to create the base normal map then I would often add/paint additional normal map details in Photoshop.
As far as colors/intensities go I just eyeballed it to my liking! :slight_smile:

4 Likes

Thank you!
I just typed a reply to gud22, but for your specific question -
I often had to pick different “elements” to render or combine in order to get the look I wanted. A lot of the time the alpha channel wasn’t sufficient from Embergen, so I would use the albedo/depth channel and do a bit of post processing in AE (for each channel I needed) to have more control over the values.
For the molotovs, the initial explosion is made up of about 3 different explosion textures, and another 2 or 3 fire textures (excluding the embers and decal).
The shaders were really simple - most of the fire ones are just plain unlit translucent. I just plugged in the appropriate channel (I used red for alpha, green for emissive, blue for UV distortion[sometimes] or additional texture support and the alpha channel for another texture slot as needed). I went over the explosion shader rundown in the other reply.
For the ground decal, one of our tech artists helped me with setting up some world space math that could be driven/called by gameplay to always have the rolling liquid flames emanate from the center of the impact. This was important because the molotov spawned irregular shaped pools that could flow down hills or walls/etc. The decal itself had a world space tiled normal/spec map that wasn’t tiled radially, but the emissive was. Off the top of my head I don’t remember how I did the UV distortion for it, but I think I plugged it in with two separate values - one set derived from the radial coordinates and one set derived from the world space normal map.
I think that’s it? The only other thing I remember having to do for the explosions and smoke normal maps was either making them EXTREME in Photoshop or adding a normal map multiplier in the shader. The ones that came out of Embergen I remember being fairly faint.

4 Likes

Really appreciate the explanations, they are super helpful, thanks a lot!

I will most likely start looking into Fire & Explosions again very soon and will definitely keep coming back to your posts for help :grinning:

1 Like

so smoke shader isn’t raymarching? cool.

1 Like

Awesome work! congratulations! :wink:

1 Like

I’m reading this breakdown again and it’s still excellent information. Thanks for sharing again.

1 Like