Leti M. Vila did a breakdown of her project Yasha Nydoorin based on the character from one of Critical Role's D&D sessions.
Hi! I’m Leti M.Vila, a 3D character artist based in Barcelona, Spain. I studied Fine Arts, a Master’s Degree in Video Games, and a ZBrush course at FX Animation School.
Since 2013, I’ve worked as a Character Artist, Environment 3D Artist, and Mocap Technician (Mocap Bcn, The Breach Studios) so my background is pretty eclectic. Also, I taught 3D art at the Polytechnic University of Catalonia, and recently I’m very excited to say that I started to work as a Character Artist at Smilegate!
I always had the urge of creating characters and stories. When I was a child, I loved to read, watch anime, Disney movies, and play video games with my brother. All these things had the same meaning for me, new worlds to discover. I also used to spend hours writing stories and drawing characters.
I've always had in mind to get to work as an artist, so I decided to study Fine Arts, however, I realized that this career was focused mostly on contemporary art.
I felt lost and discouraged when I finished my studies. Due to the global economic crisis, it was difficult to find a job. I remembered how happy I was in my childhood, with all those stories and distant worlds, so I decided to focus on a career as a video game artist. I found my first job just a few months after I finished my master’s degree.
Since then, I enjoy experimenting with different styles, techniques, and workflows, learning as much as I can, building those stories, those distant worlds.
Yasha Nydoorin: Inspiration
I've always loved working on characters from a very young age, I wrote stories and drew them. I also enjoyed their history, emotions, discovering what makes them unique. In my free time, I always look for ways to improve and keep pushing my skills. After finishing the Demon Girl bust, I thought that I was ready to take the next step: a whole character, different from the ones I had done before. By then, I had just started listening to D&D streams from Critical Role (I love role games even though I’ve never been able to play them, I’ve always been more of RPGs) and I had seen a few fan arts, especially I loved Gavin Goulden's Jester, and Becca Hallstedt’s Nott.
As a result, I decided to make Yasha: on the one hand, I had seen a few Yasha fan art pieces and I like strong female characters (I love how games like Overwatch decided to go for a diversity of body shapes even in women) and on the other hand, I thought this style was perfect for her so I wanted to make her stylized similar to Overwatch or Darksburg, but at the same time as close as possible to Ornerine’s original concept.
A good thing about working with Pureref is that you can have the board set up the way you want and add images on the fly. I started with a few reference images only of Ornerine's original concepts and then was just adding more references as I needed them.
Modeling in ZBrush
For the body, I started with a base mesh from Rodesqa. The most important thing for me was to establish the general forms first, focusing only on silhouette and making everything consistent, seeing how the layers of clothing work between each other (pants, vest, belts, cape, fur, hair). It helped me a lot to read how Agelos Apostolopoulos worked on Ciri and Ladislas Gueros – on Aloy, they both had the style I wanted to achieve. Yasha is almost the tallest of all Mighty Nein (1.81 m) and although the concept presents her rather thin-legged, she is the strongest character in the whole company, so I decided to do her with a stronger complexion. That's why one of my references was the Qunari from Dragon Age Inquisition for body shape, with strong legs and arms, wide back but with a balanced silhouette.
Once the general proportions are done, I usually work on the face first, it gives the character more personality. In this case, it was not easy to find the proportions as I had only three official concepts and each was slightly different, but the job of a good Character Artist is to unify all the concepts and extract the best parts from each.
To achieve the likeness between the model and the concept, it helps to often take screenshots and overlay them with the reference to see where it fails. In this case, it also helped me to move Yasha's gaze in the same direction as in the concept.
Often, as you move forward in high poly and look at the model with fresh eyes, you can see that the proportions have to change as you work. There is no need to be afraid to touch them and adjust them until you reach the goal you have in mind. For example, as the arms were the most visible part of the anatomy, I kept modifying them for days because I could not find their right shape – anatomically correct but stylized, like Zarya from Overwatch.
The hair was quite a challenge at first. I had previously sculpted hair but it had taken too long, and the first approach I took to it was not at all satisfactory: I tried to sculpt it all from the same mass, in a more traditional way, but then I realized that it would take too long and would not give me the result I wanted.
Instead, I looked for references for both long hair and a hairstyle close to Yasha’s (in this case, Lagertha from Vikings). From the references, I saw that the waves were large and with the front hair tied, the flakes were like a cascade on the back, giving it volume and interest to the form. The hair in the concept is also full of braids, beads, and details, which I reduced enough to keep the most visible elements of the concept but not overload the image.
As for the sculpt, the first step was making all the flakes separately with curve tubes, focusing only on big shapes and good flow, following the form of the concept but without going into little details.
After that, the fun part started – sculpting my hair!
The important thing about stylized hair is to think about weight and form, try to have nice waves from all angles, and not over-detail it. Yasha’s hair is big and long, and if I over-detailed it would be a mess with too much noise. It seems like a tedious job but once you got it, it is relaxing. I explained the whole process in more detail in another tutorial for Yennefer's hair:
As I discovered in this project and in the following ones, I love working on hair. I enjoy sculpting strands and I find it relaxing. I love planning it, creating a flow for every strand to end up having a hairstyle with personality, movement, and grace.
Clothes and Accessories
With the general forms done and the face more or less in place, I began working on the clothes and accessories. The process for each tool was the same: extract, zremesh, subdivide, and start working on it. I wanted to keep the model as simple as possible and fit the concept.
The most used brushes weren't fancy: I used standard, dam_standard, move, trim dynamic and inflate, claybuildup, etc. The most tricky part was the vest, I needed to model the ornaments quickly and easily, so in the end, I did two custom brushes: one imm for the top embroidery and an alpha brush for the details that run from top to bottom.
In more detail, I also used:
- The standard brush with alpha 35 and lazy mouse active for the wrinkles. The strokes you get are soft but with a little pinch.
- Orb insert stitch for the little stitches in the vest and insert stitches for pants and arm guard
- Fur brushes by J. Roscinas
- IMM braid brush by Tetsuo Oshima
- Curvetube and curvestrap snap for straps and laces
- Two custom brushes for the vest details
- Chain mail by XMD (Michael Dunnam)
For hard surface objects such as the sword, the belt, or the detail that hangs from the waist, box modeling software like 3ds Max or similar offer better tools and a faster workflow than in ZBrush. I used 3ds Max to model the low polys of these elements.
By being clever and planning accurately, you can model the game-ready version and the high poly in the same object: that's where the modifier stack is very useful. Whenever I’m not sure about the changes I’m doing, or I need to go back to the previous edit poly, I add another edit poly modifier on top and work there. That way, I can do the game-ready version and the high poly in the same object, adding support loops for nice hard surface bevels and removing them in just one click for the in-game version.
Once I had the high polys of the hard-surface elements, I added a few details with Orb and default ZBrush brushes.
Retopo and Baking
My intention with this project was to have polycount similar to Overwatch and games alike, but the truth is, I came across areas where I found it quite difficult to follow it. Now as I've seen this project in perspective, I would have worked on it differently. The fur on the boots has a high polycount, the vest is too detailed, and they’re so many chains. There should be fewer and larger links (which I solved in the final version), they would fit the style better.
The baking process was done in Marmoset. Of all the tools I have used, Marmoset is the most visual; it allows you to see the cage, paint the offset, fix the skew if needed… In order to avoid intersection problems in the normal map, it is necessary to correctly separate the meshes individually, matching the high and the low, so that you could get nice normals and a good ambient occlusion. Remember to have “include groups” on to cast AO between different bake groups. Check out the official page, they have great tutorials!
Texturing in Substance Painter
After baking the textures I made small adjustments in Photoshop. Once everything was clean, I exported the low poly and the baked textures to Substance. There is only one missing step now – painting the texture! Substance is a great tool but like everything in this field, you have to be methodical or things can get out of hand very quickly. Losing focus and adding a thousand layers, you might end up not knowing which layer does what or why your model looks so noisy. That is why it was very useful to group the layers by materials and keep everything organized.
In the case of this character, I wanted to get a hand-painted look, but with all the benefits of working in Substance Painter. I previously painted by hand in 3D Coat, but with all the latest Substance updates you can take advantage of the PBR pipeline, with masks and procedural workflow, and with all the Photoshop brushes that can give you a touch of the hand-painted look.
In this kind of look, albedo is the most important of the maps. It has light-baked information (although more subtle than pure hand paint) and the rest of the maps such as roughness, normal, etc. provide support to it. Gradients and the hand-painted details on the second level give it variety and richness. It was a little bit difficult to get the rich color palette as the base colors of the concept are fairly neutral: light gray, dark blue, and a pale skin tone. But giving them a little more saturation than the original, with strains of rich color, I think I got it.
The workflow was similar for each material. Here are the layers for leather:
- Leather bag base layer, where I only use the roughness
- A base color
- A fill layer with a mask using the Y channel of the normal map object space to have vertical light information
- A fill layer with AO mask
- A fill layer of darker color for glove details
- A gradient
- Two layers of hand-painted strains to give variety and interest to the piece
- A layer of roughness, simple grunge
- Hand-painted edge wear
The most interesting part was painting the strains and edge wear by hand, I mostly used Dirt 1 and 2 brushes, they have a watercolor feeling. Substance already had plenty of brushes but now with all the Photoshop ones and the ability to easily import your custom brushes, the possibilities are huge!
In the concept, Yasha's hair has a black to white gradient. The process was more or less the same as before. I did the gradient in Substance Painter both in albedo and in roughness with 3D Linear Gradient, added a fill layer with AO, painted some strands to make the gradient more irregular, and added another layer with secondary details and strokes painted by hand.
The tricky part was the shiny look with the zig-zag effect. In his article about Aloy, Ladislas Gueros mentions a tutorial by Jonfer Maia that explains how to set up the anisotropy. I did a little research about other tutorials but the clearest and easiest was the one by Jonfer. As a resume, to create the correct flow map, you need to make it based on the normal map of a cone and paint the direction of every lock of hair. Then, paint small strands in Photoshop to add them in the normal map and get the zig-zag effect.
Rendering in Marmoset
Time to render in Marmoset! As an artist, I really appreciate being able to see how the asset looks in real-time. Marmoset is simple and intuitive, and in a matter of minutes, you can know how the result will look in real-time, similar to Unreal or Unity.
Before rendering, I did a quick rigging and skinning in Mixamo. It does a good job if your model is humanoid, you only have to upload your model and point where the chin, wrists, elbows, groin, and knees are and the software does the rest. It’s not perfect but does most of the job. After Mixamo I adjusted the skinning, added a bone jab in Blender to be able to do a couple of poses: one action pose and two more relaxed ones. Also, I did a couple of blend shapes to add an expression to the poses.
The scene setup was pretty straight-forward. I had 7 materials: body top, bottom, the hair, the cape and the sword, two eyes (Yasha has heterochromia), and the reflection for the eyes. All the materials have PBR metalness/roughness except for the hair, which also has anisotropy.
I used a 3-point lighting setup with a few more lights to enhance certain areas of interest. First, I chose an image for HDRI (this one, in particular, is Mountain Sunset, perfect for the dark vibes I wanted to transmit – Yasha is a follower of the storm god).
Then, I created a shadow catcher to ground the character and have nice shadows that blended with the dark ambient. The first 3 lights were classic, the main light, a fill light, and a rim light. I added another rim light on the right of the color blue, two fill lights to illuminate the model better and remove areas of darkness, and finally a few more lights to fill some specific areas.
Anisotropy setup was pretty easy, I started following Jonfer Maia's tutorial and adjusted the values according to my preference to have silky, shiny hair with nice zigzags.
I did this project in my spare time and it took me quite a while as my free time is short. In perspective, there are things I could have done better or in another way to have a better result, but overall I am quite happy with the result, although I am sure the next one will be better. Still, I learned a lot and I love working on personal projects. I think it is necessary for anyone who wants to work in this industry or already works here. I love working on characters and I hope I'll be able to do it for a long time and keep getting better every day.