Recreating Johanna from Heroes of the Storm

Recreating Johanna from Heroes of the Storm

Patrick Jahr talked about the way he recreated marvelous Johanna from Heroes of the Storm using ZBrush, Substance Painter, 3ds Max, and Toolbag.

Patrick Jahr talked about the way he recreated marvelous Johanna from Heroes of the Storm using ZBrush, Substance Painter, 3ds Max, and Toolbag.


Hey! My name is Patrick Jahr and I am a German student currently looking for an internship to finish my studies at Howest Digital Arts and Entertainment. I hope you will enjoy my breakdown of Johanna.

Starting the Project

After first seeing Johanna I immediately knew that I wanted to create a fanart of her. Since she is part of the Heroes of the Storm, her model of course already exists in 3D. That’s why when I started creating my version of her it was important to me to make the project my own and give her a bit of a new look while keeping the same feeling to the character.

1 of 2

Gathering Reference 

My first step was to gather references. I was lucky that there were quite a few breakdowns of the different armor parts of the original model. They helped me a lot when I was creating my version.

Since Johanna is a Blizzard character, I looked at some of their other games for reference. Overwatch caught my eye since it has such an amazing art style. I examined how the artists stylized different characters, – especially the face and the hair, –  and tried to apply that to my model.  

At the end I threw all of my references into one PureRef file, so I could easily access them while working.


To Create Johanna’s model I used ZBrush and 3ds Max. I started by creating a basic version of her body in ZBrush in which I mostly paid attention to proportions and the general shape. After that, I extruded the armor parts from the body and exported them into 3ds Max to create blockout pieces of her armor. With the blockout I could see if my general proportions and shapes were correct before I spent more time on details.

After that, I started modeling all the high poly details like the ornaments and cloth. The armor was almost completely modeled in 3ds Max.

For the cloth I modeled a high poly base in Max, however, the folds were made in ZBrush. It took me several iterations to get the right design of the folds. I tried to look at the Overwatch characters as they have very nicely stylized folds. I think in stylized art, less is often more, so I went with not too many details at the end and I tried to stick to the most important ones. Moreover, an important factor is to keep the model nice and clean and avoid bumpy surfaces since that will make the model look messy and unfinished.


After that, I started gathering real-life references for the face. I looked for people that had a feeling similar to the one I wanted in Johanna’s face and I ended up gathering many pictures of Margot Robbie and Cara Delevingne. I thought that they both fit the feeling I wanted to recreate in Johanna since they both are very beautiful but can also be badass.

Of course, my goal wasn’t to create a likeness of either one of them. I just used their faces as a starting point and inspiration for my own design and went back and forth checking if the feeling I had in my sculpt matched Margot’s and Cara’s.

I think one thing that many people overlook is expressions, although they can really define a character and help to tell the viewers who the character is.

I created the expressions at the very end after I finished texturing the character and right before I started rigging it.

To create the expressions, I simply imported my retopologized face into ZBrush and used the project function to project my high poly onto low poly. After that I simply moved around parts of the face and added some extra wrinkles. Lastly, I exported my new high and low poly into my Substance Painter file where I rebaked the face and exported the new face texture.


For texturing and baking I used Substance Painter. I think it’s an amazing tool to work with and it is super easy to change things later on since it’s fully non-destructive.

I started my baking with color ID maps for all the different parts of my model since most of the ornaments are baked into the low poly models. With the color ID maps, I could easily generate masks for the different parts. I also took the baked out ambient occlusion and multiplied it one more time on top of my layer stack to get a stronger ambient occlusion on the model.

Since I had multiple texture sets, another cool feature is the instancing between UV sets. This allowed me to make a couple of master layers that controlled all the different texture sets.

I tried to give the textures generally a lot of color and roughness variation to make the materials more believable while still maintaining the stylized look.

For the armor, I started with just a base colour and some curvature. I like to use the Metal Edge Wear Generator in Substance. It has a lot of nice settings that give me a lot of control and is easy to tweak. I usually add the second layer in which I paint some more localized areas. The smaller scratches were added by using the scratches grunge map from Substance itself. I masked out the cavities by multiplying an inverted dirt generator on the grunge map.

After that, I started layering many different grunge maps with color and roughness variation on top. I usually just see what grunge map fits best with the material I’m trying to create. I have a couple of self-made grunge maps for stylized stuff that I sometimes use.

At the end, I added a bit of red colour accents on top. It is important to keep the color variation just subtle enough. Overdoing it might make the model look weird, but underdoing it will have no effect and will make it look as if the model had only flat colors.

For the cloth I used a similar approach. I again started with my base color and started layering different grunge maps over it. I used much more color variation than I used for the armor since I wanted to get this nice dirty and worn feeling. After a while, I noticed that the cloth was missing some contrast, so I used the Baked Lighting material to make the contrast stronger.

The face was one of the most challenging areas for me. I started by adding the Skin Face smart material. I removed the Base Skin and Skin Detail layers and added a new base colour that fitted my character better. The smart material gave me a nice foundation and roughness variation to start from. After that, I painted the different colour zones of the face and the lips by using fill layers and masks. The color zones are very important to make sure that the character feels alive and believable. At the beginning, I would exaggerate all of them and then tweak them one by one. The last step was to add skin imperfections and details like freckles, scars and red blemishes. I think this is the point at which the character really comes together. At the end, I just added some make up around her eyes and the stubble at the side of her head.

Final Images

After I was done texturing I started to think about how I should present my character. I wanted to try out some different poses, so I created a rig using a CATrig in 3ds Max. I modified the rig and added bones for the cloth by inserting tails at the pelvis of my CATrig and I also added extra bones for all of the armor parts so that I could easily reposition them while posing.

After that, I created a couple of poses and started working on a light setup in Marmoset Toolbag. I knew that I wanted something epic for the final shot, so I played around with some different lighting angles. I mostly start with a pretty standard 3-point lighting. While setting up my lights I always keep my final shot in mind. For this pose, I added a few extra lights. I added one light from the top to make sure that her face and the upper armorparts are nicely light up. I also added a small light that points at the hand, in order to make it read better in the final render.

The final shot of Johanna is actually a mix of two different light setups that I overlayed in Photoshop. That way I had much more control over where I wanted and I could just adjust things with masks. Moreover, I overlaid the render one more time on linear dodge (add) with a mask to lighten up certain areas like the face and to make them pop out more. I overlaid a gradient over my character to make the top part lighter and the bottom part darker. Although I already did this in the textures it helped to push it a bit more in Photoshop to get that extra pop. I think in general it is good to check the render in black and white once in a while and make sure that the most important parts of the character visible and easy to read.

People tend to look at the areas of high contrast first which is something that we should always keep in mind when creating a render. That’s why the background is very important and can make the character pop out way more. Since my character was lighter on the top, I used a reversed gradient on the background in order to create an area of high contrast around the face because that is the part I want people to look at.


Thanks for reading my breakdown. I hope you enjoyed it! It was a super challenging project for me and I learned a ton of new things while working on it. I hope that some of my thoughts will help you guys out.

Patrick Jahr, Character Artist

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

    Recreating Johanna from Heroes of the Storm