Introduction
Hello, my name is Adrian Castillo Marin. I have worked for about 3 years in the video game industry, in companies such as Sticky Lock and Ophion Studios.
I studied Game Art at ESAT Valencia, where I wanted to specialize in realism, but in recent years, I’ve become very interested in stylized art.
This led me to enroll in CGMA to take the stylized character course with Weston Reid, where I was able to create the torso of the character I will discuss in this article.
Project Goals
This project was created in Weston Reid’s course at CGMA, where I chose the incredible concept by Tooth Wu, “Zaculeu, The Master Architect,” to create a hand-painted 3D representation.
I had never worked with such a distinctive style before, so the main goal of this project was to introduce myself to the world of stylized art and put my modeling and texturing skills to the test.
Therefore, I was interested in creating a 3D character that would trick the eye into looking like a 2D drawing, painting everything by hand.
With the result of the project, I’ve achieved something close to what I aspired to, but I still feel that I need to dive much deeper to create something more polished.
Software
-
References – PureRef
-
Corrections & other stuff – Photoshop
-
Modeling – ZBrush
-
Retopology & UV – ZBrush, 3ds Max & Maya
-
Baking – Marmoset
-
Texturing – 3DCoat & Substance Painter
-
Rigging & Animation – Maya (MGear)
-
Rendering – Marmoset
References
References are quite important for starting a project and knowing what path you want to follow and what you’re going to borrow from different artists, to then build upon and create your own style, especially if it’s something you’ve never done before.
I also recommend, when starting a project like this, finding someone who already has a model for the concept you’re trying to create, as it can save you a lot of headaches when designing or troubleshooting parts that aren’t fully understood in the reference image.
In my case, I got all the information I could from Riot Games’ character lead, Kevin Nash. He had already achieved an incredible result that I could use to guide and learn from during the process.
Here’s a simplified version of my PureRef board:
Blockout
After having a well-structured reference base, I start with the blocking of the model.
In this phase, the most important thing is to have all the volumes that we want to represent in the model.
It’s important that at the beginning we focus only on very simple volumes, so with several of them, we can make more complex shapes together.
Also, it’s a good idea to reuse parts of other previous models to speed up this part of the process, since they are elements that both artistically and technically are correct and working on them is much easier.
Modelling Tools
A very powerful tool to advance very fast when modifying and creating parts of the model with a clean topology is ZModeler, by activating the Dynamic function on the meshes.
Dynamesh is also great for quick sketches and for more organic elements, but for hard surface parts like the shoulder pads, it’s very interesting to use ZModeler to have individual parts and modify each one separately to adjust the volumes without affecting the rest of the model.
When using ZModeler with the Dynamic function activated, we can do things like this:
Dynamic generates a simulated volume so we can deform it without having to be aware of all the vertices of the geometry.
Once we have decided the thickness and shape of the part, we need to be more specific in some areas, we can apply Dynamic so that the simulated volume becomes real.
At this point, we can add the necessary loops for the volume or extrude areas to find the shape we want.
During this process, it’s a good idea to apply Dynamic again as this can simulate both volume and subdivisions, which will help us so that the performance is not affected if we want to see how a more polished piece would look.
Using the Crease and Smooth Subdiv function, you can set the number of subdivisions you want to simulate, and with Crease, you can mark the edges you want as if you were doing it with a subdivided mesh.
Modelling – Body
Once the blocking is finished, I start to polish the body parts, where I always focus on the face because in my opinion, it’s the part that will always draw attention and the one that gives more personality to the character.
I wanted to make something stylized but with very marked features.
I wasn’t looking for something very soft; my way of working was to follow the lines of the musculature to generate volumes using basic ZBrush brushes.
I usually use ClayBuildup to generate volumes because the harder stroke helps to generate something faster and more marked.
I also use HPolish to generate the planes of the head and different angles, and finally DamStandard to mark the most sunken areas as well as the sharp areas, using “ALT” and going over the edges in a subtle way to outline the angles.
Even though we are making a stylized character, that doesn’t mean that the muscles and proportions aren’t important.
That’s why I always work taking into account what I know about anatomy and with references of head shots, in case I need extra information that the concept doesn’t give me or I want to modify some part to add more interest.
Armour
For the armour, I continued working with the method that I explained in the blocking.
I try to get as close as possible to the final result with Dynamic to maintain a low topology, to move the least amount of vertices when I make modifications in the shapes.
Once I’m happy with the result, I apply the Dynamic with the subdivisions and start modelling with the brushes.
As with the body, I use the same brushes to sharpen angles or generate depth, but there is another brush that works very well to generate details in hard surface — Trim Dynamic.
On hard surface, it’s very important to work with polygroups to have good control over each piece, and because of this process, from the beginning it is very easy to specify each polygroup where we need it.
I always try to model all the details that I can in areas that I’m sure I don’t intend to modify later in the texture.
With this, we get a lot of information with which we can work later thanks to the bake, even if it’s hand-painted, as it will serve as a guide to know where to paint.
Final result of modeling
Even if it is stylized, we must not fall short in terms of modeled details because all this information will always be useful when we generate the bake maps.
Decimation
Before starting the retopology, it’s necessary to make a decimation of all the parts.
I recommend that to make it less tedious, you put together groups of subtools in the same one to make only a couple of heavy decimations, and don’t waste time doing it with each of the pieces.
Even so, be careful because if you put too many heavy pieces together, it is very possible that ZBrush crashes or doesn’t allow you to do it due to lack of memory.
One thing I do when working to save time is to make 2 types of decimation at the same time: one for the retopology that is lighter, with fewer polygons and just the right details so I can place the polygons with the necessary volume, and another heavier one that keeps all the detail of the original mesh to bake in the cleanest way I can.
Retopology
Once I have the decimation for the retopology ready, I start working on the low model.
Lately, I’ve been doing this process in ZBrush, since I’ve gotten used to working with ZModeler, and at this point, it’s more natural and generates fewer problems than exporting and importing files from one program to another.
In my case, I try to keep the whole process in ZBrush so I don’t have to jump between programs.
Besides that, in this process, working with high meshes in other programs like 3ds Max is more annoying because it doesn’t move with the same ease with high polygon quantities as ZBrush.
UVs
For the UVs, I also tried to use ZBrush to generate the cuts in a faster way using the Unwrap by Polygroups function.
It’s an interesting process considering that I try to do everything in ZBrush, but here the support of other programs is needed since handling UVs in ZBrush is very uncomfortable.
My process is to generate polygroups as islands of UVs. It is a fast process considering that during the whole project I have been separating the different angles in polygroups to isolate them when necessary.
Once I have the UVs deployed with all the cuts done, I import the model into 3ds Max to be able to relax each UV island and correct some weird cuts generated by ZBrush.
When everything is correct, I simply try to pack the islands automatically in 3ds Max and Maya to see which gives me better results.
Then I simply rotate by hand to adjust areas where I want to have more texel density, as in the head, for example, as it is usually the center of attention in any character.
The maps are 4K, except the part of feathers and discs that is at 2K to match the texel density.
Bake
I always bake the maps in Marmoset.
In my opinion, it’s the most user-friendly program for this part of the process. It allows you to modify the cage in real-time and you can see how the baked maps look in the same program that you are going to use to make the renders.
To do this style of texturing, we have to bake some different maps than what would be baked to do PBR texturing. In this process, these same maps will be the ones that generate the illusion of illumination on the model before starting to paint it by hand.
In this process, I have used Marmoset Toolbag 4.
Texturing
In this texturing process, we are only going to use the Base Color map, and if necessary, also the Opacity map for elements like feathers.
This type of texturing does not use PBR, therefore everything is rendered in Unlit, since we are not going to use lights and everything you see will be painted by hand.
Substance Painter Maps
To begin to have a texture base in the Base Color, we will use the baked maps as color texture instead of utility.
The process consists of placing the maps in order to generate the illusion of volume with the World Normal maps, since the bake generates the light that the model would have with real illumination.
Once the maps are placed, we have to adjust the shades of gray so that each part of the model is different from the others and gives us the correct color base.
For example, the golden parts of the armor have a lighter tone to be somewhat brighter.
So we will apply a color closer to white to be more accurate when we start painting and not be overshadowed by the brightness that will be added in the green metallic parts of the armour.
It is important to take into account what things you may end up modifying in the texture, because if the information is baked, it can be more annoying to paint over those areas.
Even so, when using only one map, it is no problem to paint over them because we can cover it with layers of paint by not using, for example, a map of normals that is always predominant in a PBR texture.
An example of this would be the golden paints that the character has on the torso. As modelling that part was going to be a headache, I preferred to leave it for painting and, with a simple layer, create the drawings on the skin.
Once we have all this finished, we should have a result similar to this image.
Texture hand-painted black and white
During this process, it’s important to desaturate the reference image to be able to see all the colors and values of the image in black and white – to only take into account the brightness and shadows of the model and not be distracted by the different color values.
I used 3DCoat, which is a software where the way of painting is very similar to Photoshop, so it allows us to paint in the same layer different colors in a very comfortable way by picking colors from the reference image or from the palette of our choice.
Don’t be afraid to generate contrast. It usually happens that if you are learning to paint or you don’t have much experience, you end up mixing everything with the same tones, and in the end, nothing stands out and everything looks monotonous.
Texture hand-painted color
In this part of the process, we must return to Substance Painter to be able to give color to the gray palette that we have painted on the model using layers with filters.
To achieve this, we must create folders with masks of each element that will have a different color, then within this, a layer with a filter called Gradient, in which we can choose various types of colors and on what gray values they should act.
For example, for the skin, we should choose the lightest, darkest, and intermediate tone. In this way, this filter will interpret each shade of gray with the color that we have indicated to replace it with the chosen color.
(Obviously, this can have more colors in the filter if necessary.)
After having the colors as close as possible to the concept, we must return to 3DCoat to repaint everything we need.
Normally, in this process, we focus on the different values of the same color, since in the black and white phase we have only painted the highlights and shadows of the different parts of the model.
As for example, in the green areas of the armour, not all shades are of the same type of green, and adding this variety makes each independent color gain a lot of interest.
Last touches in Substance Painter
Once you have finished all the color by hand, it’s interesting to return one last time to Substance Painter, because when you are painting by hand and covering colors with the new painted values, you can lose the direction of the light that you have been working with.
Using the Light generators in a layer and choosing a color that serves as light and shadow, with a low opacity, the volume generated by the general light is enhanced over everything previously painted by hand.
It must be very subtle so as not to cover the work done previously.
Render Setup
Lastly, I’ll show you how I have adjusted everything in Marmoset to get this final result in the render.
- All the textures have to be in Unlit.
- There must not be any light (being in Unlit, the model will not be affected either).
- Use the camera settings to add some brightness or contrast.
- In my case, the camera is in Orthographic to simulate a drawing.
And that would be all.
The render part doesn’t need much work, since at the end, the important thing is that the model is well painted – no extra effect is needed to fix or make the textures look better.
Outline
If you are interested in knowing how to make the Outline effect on the character, just follow the steps in this video.
It is very simple and looks great.
Rigging
For the rigging, I have used a Maya plugin called “Mgear,” with which we can create a skeleton according to what we want in the character to have all the controllers we need to create the rig that we will use in the animation.
I recommend this channel where he explains the functionality of the plugin, which works with prefabs of body parts that we can integrate and join together to create a functional skeleton.
Skinning
First of all, I don’t have a lot of idea about this kind of process, and I know just what is necessary to make the characters have animation and be minimally functional for my portfolio.
A tip I have to give, and it is very important in this process, is that when you apply the weights to the vertices, don’t try to subtract weights – you always have to work adding weights to the vertices in reference to the bone that we want to affect.
If you subtract weights from vertices, Maya will automatically make random references to other bones, and it will be impossible to have control over what we want to do.
Animation
Animating – I recommend that if you’re new to this process, you watch tutorials to get started, as it’s somewhat complex. However, once you understand the basics, it’s easy to create a basic idle animation.
Creating an animation in Maya is very simple (taking into account what you’re trying to do, of course). You simply need to move the bones and select the frames where you’ll place keyframes to record the movement.
To get a clean animation loop, it’s important to copy the same keys from each bone to the last frame of the animation so that it’s the same as the first frame.
Then, move it so that it doesn’t read those frames at the end and the interpolation at the beginning and end remains smooth. Otherwise, when the frame is repeated, there will be a cut and it won’t look good.
Again, at this point, it’s easier to look for videos to see how to create a Maya animation, as I’ve summarized it very quickly, but it would be very complex to explain all the animation principles that should be taken into account.
For that, I can recommend a video that covers this topic.
Conclusion
This project was my first real step into stylized art.
I learned a lot, tried new techniques, and even though I know there’s still plenty to improve, I’m really happy with what I achieved. It’s been a key step in my growth as an artist.
I hope this article can be helpful to you all!