Creating a Tornado in Unity

Maxime Catel talked about the structure of his exciting Tornado project created for VFX Sketch challenge.

Maxime Catel talked about the structure of his exciting Tornado project created for VFX Sketch challenge.

Introduction

Hello! My name’s Maxime Catel, I’m 22 and I’m from France. I’m currently a 4-year student graduating next year, and I’m actually exploring the huge world of real-time VFX.

A few years ago, I began my Game Art studies with the ambition to make my own games. I always loved creating things, and particularly custom levels and cinematics in map editors like in Age of Empires. I wasn’t aware of all the jobs and specialties that one can find in the video game universe, and I was telling myself: Hey, that would be so cool if I was able to make maps and terrains! So I dove into Game Art.

Discovering Passion for VFX

One and a half year ago, we had to make our first game with the basic stuff in Unity, and while I was searching how to make some cool stuff, I discovered the Shuriken particle system, and boom, it was too late, I never stopped doing particle work since then! I mean, I found it really intuitive, and I could make so many things with it. It was a revelation.

I always liked cooperation between people and complementary skills, and being able to bring some VFX skills to a game project is what I naturally wanted to do after discovering this field.

Tornado Project

Tornado time! This whole VFX scene was made for a monthly VFX Sketch challenge, and the theme was Tornado. It was fantastic because two months ago I worked on an FPS game project that includes this kind of cyclone, so I already had ideas and tricks for making a good one. This time though I wanted to make a more stylized one because I felt like it could be awesome.

My goal here was to make a really impressive thing, a gigantic monster so that when you watch it, you feel like it is going to destroy everything in its path. So, I decided to make a turnaround scene with a light low-angle camera to accentuate the powerful feeling of the tornado. It could be like the number one threat in a game level!

Tornado Workflow

I first decided to use simple meshes. Those are modified cylinders with average tornado shapes and good mesh density to make good distortions and vertex offset. The hard work was mainly in the shaders because motion, distortion, colors and even shapes are controlled by textures and shader work.

After doing a research on tornados behavior, I opened Shader Forge and started to make my shader. First, I created the distortion of my meshes with a really blurred panning noise that modifies vertex offset. It’s quite simple: the whiter my texture is, the more the vertex of my meshes are bumped. This step brings an important chaotic feeling to the whole motion of the tornado.

After that, I had to make my main texture. I tried a few things, and realized something: this tornado was huge, therefore I needed to add details as I didn’t want it to look like a baby twister or something like that. Therefore, I used another cloud noise as a base for my texture and gave it density by adding dithering and adjusting levels. With this method, my texture started to look like dust, sand, or other volatile particles, particularly at the bottom of the mesh. It also created the feeling that a lot of tiny elements were getting vacuumed by this world eater.

The Core

I wanted to make a kind of core for my tornado and to make that, I first had to see it. This is why I made a dissolve mask to absolutely all my meshes, except the core. I then added bigger meshes like layers to add volume to the whole tornado.

The core in itself is composed of two cylinder meshes: the inner part which is not affected by my dissolve shader and has a completely flat emissive and bright blue color, and the other part is the same cylinder, but a little bit bigger with dissolve and practically pure white. Its role is to strengthen the blue core by adding some sort of electric and magical power to it because it’s not a simple tornado, but a mystic one!

I chose this bright cyan because the whole scene is tinted in some darkish and more realistic blue, so I had to make the contrast and catch attention. The glowy parts are made by using post-process on my camera, which affected the entire scene. It’s really important in my scene because it amplifies the stylized and magic feeling.

Clouds

The clouds which form the outer part of the tornado are made of a different mesh. It has a more exaggerated tornado shape with a huge part on the top and a thinner base. I used the dissolve shader to create transparency and painted the vertex alpha in black at the end of my meshes in order to make the textures fade avoiding weird borders.

For preventing tiling repetition in my dissolve, I blended two different high-density noises with one moving faster than the other. This is a really nice method to make a lot of effects not only on custom meshes but on trails or fire, for example. This way, the clouds shapes are never the same.

1 of 2

The rotation is achieved with simple UV magic. My texture is panning over time in a direction and as the meshes are natively twisted, the texture will follow the edge flow.

Tornado Structure

Like I said before, the tornado is composed of different layers. They are tweaked with different values. For example, the panning speed of their textures is different: the outer meshes have a slower panning speed and the inner meshes are going faster. It makes the whole piece being dynamic avoiding monotonousness and this is the primary synergy between all the layer movements.

Another example that we cannot see at first glance is the tint texture in the shader. I used another cloud noise with less density and blurred, multiplied by a color to make different color areas on the texture. It’s mainly done to make some really light purple shades, and that helps to blend the different textures and meshes.

We can compare all those mesh layers to a gradient with the glowing core at the start and the dark fading clouds at the end.

Honestly, I had to play with panning values several times with every layer to find a good global motion. If the tornado was rotating too fast, I would lose the feeling of a huge tornado, and if it was rotating too slowly, it would lose its dangerousness.

The last element that contributed to the scene was the skybox. It’s made of a simple cloud cubemap with a mask on certain clouds. The intensity of this mask is animated to look like lightning.

Assembly 

Finally, my tornado was complete! The integration in Unity was made step by step, so it wasn’t hard to think about each new step and see where I’m going.

Now I needed to make a beautiful shot. Obviously, the scene was built exclusively for the project but I could use this asset in a game if I wanted. Globally, it’s quite optimized. Textures are okay, and even if the meshes have a big density, the object is huge, so the budget for this asset would be large enough. The only problem is that the post-process was designed for this tornado only, and it wouldn’t fit well in an entire game. Some tweaks on the tornado colors and shaders would then be necessary.

Conclusion

That was a really fun project to work on, and I’m extremely pleased that the VFX community appreciated it. I’ve received very cool feedback about this project. I hope you enjoyed the breakdown and it will help you better understand how I made this cute whirlwind!

Maxime Catel, Real-time VFX Student

Interview conducted by Kirill Tokarev

Join discussion

Comments 0

    You might also like

    We need your consent

    We use cookies on this website to make your browsing experience better. By using the site you agree to our use of cookies.Learn more