Igor Silva shared the process of rigging and animating Fabio Di Castro's character Death Knight as well as FX, shader, and character setup in UE4.
Hello, my name is Igor Silva and I’m a Technical Artist from Recife, Brazil. I am currently specializing as a Technical Animator. I have 6 years of experience in the game industry, my last company was Kokku Games, and before that, I worked at some indie companies in Brazil. Nowadays, I’m working as freelancers for different clients around the world such as Mogi Group and UpSurge Studios. During this time, I had the opportunity to contribute to several projects such as Pavlov VR, Surviving Mars: Project Laika, and Sniper: Ghost Warriors Contracts and others that are yet to be released.
I started studying programming in a technical course at my high school. There, I had my first experience with game development with Unity and XNA as well as 3D art – I loved that and decided to study more. When I graduated, I started to work as a 3D Generalist doing a little bit in every area. I became interested in animation and I thought about focusing on that, so I took some courses. But I saw that it was not for me as the technical part always caught my attention. When at the company I worked for, Kokku, there was a need for a Technical Artist, I volunteered to migrate to this area. I went back to studying programming in Python, started studying more about engines and the technical part behind them, and today in my work, I am bringing together the best of each area.
Death Knight: About the Project
My friend Fabio Di Castro showed me the character he was working on, the Death Knight based on Eugene Rudakov's concept, and asked if I would like to do the rigging. I found the character awesome and saw an opportunity to do a new type of project for my portfolio. Instead of just posting the rigging with controllers in Maya, I would follow the complete pipeline up to the engine and learn more about FX in Unreal which I didn't have much knowledge of at that time.
The intention of this project was to go deeper into Unreal Engine so, in Maya, I made a setup that was fast, functional, and worked for retargeting within Unreal and within Maya. I used the bone nomenclature of the Unreal mannequin to be able to easily retarget and reuse some animations inside Unreal, such as the jump. I used my scripts to create the IKFK and Ribbon Spine controllers, including FK Controls that I made available for free on Gumroad.
For the animations, as a retarget study, I used HumanIK from Maya to get a Mixamo Run Cycle mocap as a base, applied it to the rigging, and edited it in Maya to fit the character. The idle is a keyframe animation that I made following the concept pose as a reference – I gave him a slow and heavy breathing animation to make him look like a big boss. To complete the setup, I used the jumping animations of the Unreal mannequin to be able to play with him inside the engine.
For a good collision for cloth and armor simulations, it’s necessary to set up a great Physics Asset, so I made sure I have added all the capsules I needed in each bone to avoid mesh intersection. For cloth simulation, I used Unreal's cloth system, created a separate material for the cloth to make it easier to apply it inside the engine. For the armor and rings simulations, I created a bone for each part and used the AnimDynamics node in Animation Blueprint to apply the simulation.
In the shaders, my focus was on the emissive part, so I created a Master material to use on the whole model with some exposed parameters. In the emissive, I could tweak Hue, Intensity, and Contrast for each material. Fabio did a great job with the textures so I left roughness and metallic without any changes – I just put a node to multiply with the base color to edit the intensity in some materials. With the nodes exposed, I could tweak the values in the scene in real-time with the lighting and post-process. This made it easier to achieve the result I wanted.
I used two effects in this project: the sword flames and the head fire. I made them in different ways as a study: for the head fire, I used Cascade (at that time I still didn't know Niagara) and the sword flames were done via material using flipbook.
I made the sword flames based on the tutorial on the Youtube channel Underscore (see below). The video demonstrates EffectTextureMaker, an open-source website that generates textures for different types of effects. For those who do not have much proficiency in 2D just like me, that's a great resource. There, I generated the flipbook for my sword flames.
The head fire was the most challenging for me, I worked only with basic FX before that, nothing at this level. It took hours of testing, making mistakes, and redoing until I reached the final result. I want to thank my friends who work with FX – they helped me a lot with feedback and tips.
My first attempt started to look ok but the result was still bothering me and it wasn't exactly what I was looking for. So I took a step back and, analyzing the concept, I decided to try to make an effect only with smoke and a few flames. Once again, I didn't like it.
My effect has 4 layers in Cascade:
The flames – I checked the Use Local Space option in Cascade for the flames to always follow the character's head, made the flame dense and constant, applied a high speed for the flipbook animation and movement, and added a vibrant glow and color to give a feeling of danger and fear.
The secondary flame – I added a layer of detail to the flame, it consists of small flames that spawn, one at a time, in different directions and with random rotation. For the secondary flame, I did not check Use Local Space to create a trail along the way when character walks. I set Size by Life and Alpha to decrease until it disappears which gave the animation a nice detail.
The smoke – in this layer I used the smoke texture that I created in Photoshop, it is static, different from the previous ones that were a flipbook. Just like the main flame, I made the smoke dense and with a lot of speed, it is slightly bigger than the main flame so that it appears sporadically behind the flames giving an interesting effect.
The last layer is the distortion layer that I used from Unreal's Fire Particle Starter Content. It is a material with transparency and a wave NormalMap texture that generates small illusions of distortions on the objects in the scene.
Bringing Everything Together in UE4
To build the full character, I used a Character Blueprint, set the mesh to Death Knight, positioned the Head flames particle parented to the Head joint, and added a green Point Light parented to the Chest joint to color the inside of the chest armor and make it bright.
For the sword mesh, I parented it to the Hand socket I created on the Hand joint, added a plane as a child of the sword, and put the sword flame material on it for the FX. To finish, I added a purple Point Light to create some contrast with the chest light.
The biggest challenge to me was making the effects – as mentioned, I had only worked with basic effects so far, so there were many hours of research, studying, and listening to feedback from my friends. I had to remake the head fire effect 3 times until reaching the desired result. It was a good experience to reinforce the importance of feedback – as I was not very knowledgeable in FX, I was 100% open to the opinions of my friends who work in this area and it helped me a lot to reach my final result.