David Dessantis did a breakdown of his new effect, created with the use of Houdini and Unreal Engine 4.
Hello, I’m David Dessantis, also known as Derai on most platforms. I’m a VFX Artist, studying at FutureGames Stockholm, Sweden, currently establishing my portfolio by exploring art styles and methods. My VFX endeavors began little over a year ago, which was precluded by 3 years of studying game development at university. At FutureGames I’ve been able to contribute to a lot of different game projects and evolve as a VFX artist.
The Ice VFX
The Ice effect first began while considering what kind of VFX I could add to my portfolio. Ice is a common theme in fantasy and something I was interested in as an introduction to parallax occlusion mapping. This interest was mainly spurred when I first saw an awesome Ice VFX by Fujihara on Twitter. I fell in love with his effect, the timing, and punch it had was something I wanted to recreate.
At first, I didn’t have a clear idea of how I wanted my ice shader to look like, so I spent a weekend creating 3 different ones, from various breakdowns I found online. For the first shader, I began by researching what type of ice I wanted to create. I’m a fan of the Daniel’s Game Art youtube channel, as he stresses the importance of research and demonstrates his process. I had a look at his ice video, where he introduced me to Stefani Bulte’s stylized ice breakdown on ArtStation. I liked the result and thought it could work well with the effect I had in mind.
The second shader involved the breakdown here on 80.lv by Taizyd Korambayil (A.K.A. DeepSpaceBanana), who uses an interesting mask system to layer and color visuals that can be found in Ice. I decided to make my own textures instead of using the ones provided in the breakdown, using Substance Designer.
I did this because I wanted to make the effect my own, as well as better understand the purpose of each texture, and what liberties I could take.
The third and last shader followed a breakdown by Jordan Hey, who sets up an ice shader based on the ice used in the game Paragon. I reuse the big normals map, which was originally created for the aforementioned stylized shader to add a second layer of normals. Jordan introduces this in his breakdown, as well as the anisotropic noise map, as a specular lerp. I add this noise to the final shader to create more prominent highlights.
While I merged these three materials, I melded components that stood out to me and tried blending them in various ways before moving forward. The main ice shader I created combines most parts introduced by Korambayil, with some slight additions from the material by Jordan.
For the core spike mesh, I started off by sculpting modular parts in Zbrush, until I got a shape I like. I used a placeholder floor to get a better idea of what parts of the cascade will be visible and adjusted the sculpted parts, accordingly. Then I created two-floor meshes to better blend the transition between the floor and the Spikes. Before I exported these pieces, I consider, how I want to animate them in Maya. Using polygroups eases the animation process later and helps me visualize the timing for the effect. I then decimated the groups and exported them to Maya, where I apply a simple UV map. Before moving onto animation, I want to stress the importance of testing the mesh in-engine, since you will quickly realize, what things you would like to change when seeing it in the game world.
I began by adding the major movement, first, then broke it down by adding offsets to each spike group. My main idea, when I first sculpted the spikes, was to give a wave-like look while also retaining the punch I was inspired to create. I later use this animation to simulate the floor destruction in Houdini.
The floor destruction was made with a Houdini simulation, which uses the baked animation of the spikes I made in Maya. Then by importing the main floor pieces of the effect I move onto creating different simulations, using the aforementioned animation. Applying a fracture to the floor allows us to modify the number of pieces our floor will explode into. Then, by adding a “rigid body, glued objects” to the floor we can simulate the floor with a ground plane. I then add a static object to the animation to make it collide with our floor. The simulation is thereafter tweaked inside the AutoDopNetwork by mainly looking at the packed object, glue constraint, and gravity nodes. Disabling some of the spikes allows for more controlled destruction and allows us to leave some of the floor pieces unaffected.
After exporting everything from Houdini and clean-up in Maya, I set up the start of what will be the master blueprint for the effect in Unreal.
I use a key input to trigger the spawn of both skeletal meshes. Note: Even though I use delays for both, the animated floor and the spikes, I also add a second delay for the floor animation. So we can manually animate the floor position with a simple “move component” node. Thus, it appears on the surface first before playing the main animation. Doing this requires us to adjust both floor delays to add up to the delay of the actual spikes. Thus, syncing both components timing.
The decal blueprint setup uses a rotator and location transform for offsets. For the movement, I again borrow from one of Korambayil’s tutorials and use a sphere mask to create a more interesting spawn for the decal. It uses a blueprint setup from a previous game project and creates the growing effect of the decal. I’m not the greatest at blueprints, and I’m sure, there are some things that could be optimized/changed.
The chill fog material is created with two perlin noise maps, which distort the mask. Then, the distortion amount is determined by a dynamic parameter, which we can adjust in the emitter. The advantage of this is that we can distort each sprite individually, giving it a unique look. You could expand on this setup more by giving the dynamic parameter more control but this did just enough already.
Context and timing
Lastly, it’s all about adding context and timing to everything. I tweak the timing of the resulting effects to create a core sequence until I’m happy. Everything else will revolve around this sequence and complement its timing and movement. Giving each animated mesh a camera shake helps to sell the idea, that our VFX is affecting the world. I also add a secondary decal spawn that’s bigger and matches the timing of our main explosion/spike animation. This emphasizes the main explosions punch and gives it more presence in the scene.
I add small snow particles to the consistent chill fog that persists throughout the effect. Seeing as the main explosion pieces are all similar pieces, we add smaller ice shards into the core explosion. To sell the effect of the animated floors pushing through the ground, we create small fog and snow bursts that sync together with the floor. We add a big chill fog burst to the main explosion and also leave an emitter to hang around to emulate the spikes temperature. Then, I finish the effect off by adding a tiny snow burst to intro the whole effect. This helps tie it all together and contributes to the consistency of the effect.
I believe that the modularity of this effect helped produce a better result in the long run. Unsure of what my end goal was initially, this workflow allowed me to change and control elements, which might have otherwise held me back. I can’t stress, how valuable it has been to consider timing and context throughout this project, how much of an asset it has been having the right references when creating something from nothing. There wasn’t just references from other sources online but mainly the references, which you can find from your own work as a VFX artist.
I’d like to finish things off by thanking Erik Forsström for his feedback throughout this project. Erik Öhman and Tobias Ahlgren from Dice for giving us, VFX artists at FutureGames, valuable feedback and time. As well as Andreas Glad for his inspiring tutorials and streams.
David Dessantis, VFX artist
Interview conducted by Arti Sergeev