Professional Services
Order outsourcing

Sacrifice: Complete Workflow for Stylized Characters

Frédéric Arsenault prepared a detailed breakdown of his workflow going through all the steps that might be especially helpful for beginner and intermediate level artists.


Hi everyone!

I wanted to put together a little workflow breakdown showcasing all the steps I go through to create a stylized character such as my Sacrifice project. I know that there are probably a ton of different ways to achieve these results but these are the ones I use on a regular basis.

I will be going through all my steps starting with block-out all the way to the final render. Hopefully, you’ll pick up a few tricks along the way. 

P.S. This breakdown is more for beginners and intermediates as some of the techniques used are pretty standard to industry novices.



First, I start with a very rough blockout of the overall shapes. This step is key for nailing the overall proportions of your character. Everything you model from this point on will be driven by your big shapes, so if those are not accurate then your model will never look right, no matter how many details you add.

I always do my blockouts in Maya as I am much faster and more efficient there than in ZBrush.

Next, we do another pass on the large shapes and slowly start adding some more medium detailed elements. Again, this has to be kept rough so that big changes can still be made if need be. At this point, I will bring the model into ZBrush while all of the blockout “heavy lifting” has been done in Maya.

Once the blockouts are done, we can move forward to the first step of preparing for sculpting details. I will take all my subtools and use Zmodeler in ZBrush to give everything the appropriate thickness and crease all the edges I need to achieve the desired level of smoothness for my model. 

The method I use to get nice bevels and edge smoothness can be broken down into a few key steps:

  1. We have a basic subtool with one polygroup and no subdivisions.
  2. In the Brush menu, hit B>Z>M. This will bring up the Zmodeler brush. Hover your cursor over a face and hold spacebar. Select the Polygroup>Polyloop options. Tap on a face and it will polygroup the loop for you. These polygroups will be used to crease the edges in the next step.
  3. Once all polygroups are laid out, go to the Geometry tab and find Crease>Crease PG. This will use all the edges of the polygroups and crease them accordingly. The edges will look razor-sharp and this is not the look we want. The default creasing level is way too high and will have to be adjusted.
  4. Go to the Geometry tab, find Dynamic Subdivisions>SmoothSubdiv and set it to something like 5. This value represents the number of times the model will be dynamically subdivided. Keep in mind, these are not real subdivisions and are just a preview. Next, go to the Crease menu once more, find the crease level and set it to 2. The crease level always needs to be lower than the set SmoothSubdiv number to be able to see the edge smoothness. The bigger the difference between the first value and the crease level, the smoother the edge will be. We now have a clean mesh with proper creasing and edge smoothness.

I will apply this method to as many components as I can. This method is key for maintaining cleanliness and allows you to preview the subtools at a higher subdivision without actually committing to them just yet.

Once you’re happy with the way your subtools look, you can go ahead and apply those dynamic subdivisions as actual divisions. In the Geometry tab,  go to Dynamic Subdivions>Apply. You will now be ready to start sculpting some details.

I tend to go back and forth between Maya and ZBrush to execute some more complex shapes such as the engraving on the arm gauntlets. For this portion, I use the Quad Draw function in Maya and draw out the basic shape I need. I inflate it a little, then export and bring it to ZBrush, and apply the same Dynamic Subdivision method as before.

Now we can move onto finalizing the sculpt and locking in the high poly. This is where we will be adding all the little bells and whistles to make this thing look as interesting as possible. Big bevels and clean edges are going to be very important to be able to hit that very stylized sculpt and find a nice balance between details and the big shapes.

1 of 2


Note: It’s important to mention that retopology can be done by using the detailed mesh directly from ZBrush once the sculpt is finished or before adding all the detail - you can do all of the retopology with the clean mesh. Either option works fine as long as you are using the detailed mesh for baking to the low mesh.

Once the high poly is done and everything is where it needs to be we can move onto exporting all our high rez meshes into a clean folder structure and prepare it for retopology.

These are the steps I use to export my high poly from ZBrush:

(It would be ideal to decimate your subtools before going through this step, otherwise, you will be exporting some very dense meshes.)

  1. Make sure to organize your subtools in folders to keep everything clean. Create a matching set of folders in your project folder to export your high poly meshes to. You can export one folder at a time by hiding all the other folders except the one you need.
  2. Under Zplugin, go to SubTool Master and hit Export.
  3. Make sure you have the settings shown and then hit OK. It will ask you to point to the desired folder. Pick one of those you made before and do this for all groups of subtools.

Now you have all your high poly meshes in organized folders, ready for baking and using for quad draw retopology.

All we need to do is create a blank scene in Maya, import our pieces one at a time and create low poly using the Quad Draw function in Maya's modeling toolkit.

For this character, I didn’t have a specific budget in mind - all I knew is that I wanted to make sure it is optimized whilst trying to maintain all of the main shapes and details. This is my approach for most stylized characters.

I decided that for this character I’d place all of the UVs onto one single 4K texture sheet. Every object that is mirrored is sharing the UVs with the original, which allows for more texture resolution.

I then proceed to export all my OBJs into the same folder structure as mentioned before in the high poly export, but this time, we place them in folders named Low_Poly instead.


Now that we have all our high and low poly objects exported and in their respective folders, we can continue by preparing our baking scene in Marmoset Toolbag.

These are the steps I usually follow for prepping my baking scene:

  1. Typically, I will be baking all components separately to make sure that there are no weird occlusion artifacts bleeding onto each other. The strategy here is to place all separate objects in a baking group. These objects need to be organized in a way where they aren’t close to other objects - that way they won’t be occluding onto each other.
  2. Set your output folder and name for the baked maps. Change the samples to something higher than the default 4x. I usually go with 16x or 64x. Change your padding to “Extreme” and then change your soften setting to 0.1
  3. Chose the resolution you want to export your textures at.
  4. I will always bake my normal map first as this will basically drive all of the other baked maps. If your normal map is clean, you can pretty much guarantee that your ambient occlusion map will be, too. Use the “Offset” and “Skew” painting settings to clean up your normal map as there will most likely always be some small errors.

Marmoset Toolbag offers some great documentation for getting very clean baking results - check it out here.


Now that we have all our baked maps in order we can go ahead and set up our mesh in Substance Painter and start the process of texturing this character.

Generally, I will export my mesh from Maya as an FBX. If you have multiple texture sheets for your character, make sure to assign a different material to each separate object that shares the same texture sheet. Once you import this into Substance Painter, it will recognize the materials you assigned before and split them up into separate texture sets. This will allow you to work on each texture sheet individually and also export them separately.

These are my steps for setting up my scene:

  1. Create a new project and choose which template you want to work in. I usually stick with PBR - Metallic Roughness.
  2. Select the FBX that you exported.
  3. Set the desired document resolution for your project.
  4. Set the normal map format to “Open GL”.
  5. Import the maps that we baked in Marmoset. If you have more maps than just normal and ambient occlusion, then import those as well. Then hit “OK”.
  6. Now, we will be baking the rest of the mesh maps for the project such as Curvature, World Space Normal, Position, and Thickness. In the common settings, set the desired resolution size. I typically do not change any of the baking settings and will leave everything to default.
  7. Hit “Bake Mesh Maps.”

Since this is a stylized project, I want to have a bit more of a mix between hand-painted and PBR. This means I will usually start in Photoshop and build a base for my…um… base color.

These are the steps I use to get that solid foundation:

  1. The first layer will be the AO map that we baked out from Marmoset Toolbag.
  2. The second layer is either a custom created gradient map or you can take the position map you baked in Substance Painter and open it in Photoshop. You then go to the “Channels” tab and copy the green channel only. On a new layer, paste it over the AO and set the blending mode to “Multiply” at an opacity of around 50%.
  3. Now on another new layer, add the Curvature map baked in Substance Painter and set the blending mode to “Hard Light” at an opacity of around 25% (this depends on how strong you want your edges to read).
  4. Next, we make a new layer, fill it with 50% grey (808080), and set the blending mode to “Multiply”.
  5. Export your UVs from Maya, then place them on a new layer on top of everything, invert, and set the blending mode to “Multiply”. This will allow us to easily select UV shells for blocking in our gradients.
  6. Once you have everything stacked, we can start blocking in the colors. Lasso select UV islands and start filling them with a “Gradient Map” layer. This will create a gradient layer where you can control the lowlights, mid-tones, and highlights for your base color. Once all shells have been filled in with the appropriate colors, we can then export this as our Base_Color.

I won’t go through the entire process of texturing as that would be too long but typically I have three folders, one for “BASE_COLOR”, one for “ROUGHNESS” and then another for “METALLIC”. This is the folder structure I use for stylized projects such as this and might not necessarily be the same for more realistic characters.

We then import that Base_Color map we made in Photoshop and place it at the very bottom of all our “BASE_COLOR” within each material type folder. These material type folders can be organized by baking out an ID map and using color selections or by just doing it manually and filling masks by objects or UV shells within Substance Painter.

I will also usually set a base value for Roughness and Metallic for each material and build on top of that.

These are the layers I typically go with:

  1. Edgewear using the curvature map.
  2. Higher roughness in the areas influenced by AO.
  3. Generator layers using my baked maps to guide things like roughness and dirt.
  4. I import a gradient, set the blending mode to “Overlay” and lower the opacity to something like 30-40%
  5. I add a layer with a dark brown color, make a stylized spots brush, and start stamping down some areas of dirt to really break up the base color. Then I’ll copy that exact mask I made and also add it to my “Roughness” folder.
  6. I’ll add a layer of procedural scratches and play with the parameters until I get the look I want. Since this is a stylized character, it would be best to avoid creating too many and focus on areas of interest and logic.
  7. I also add paint layers and hand-paint some areas specifically to get the exact look I want and fix some more problematic areas.

Presentation 1

I’ve found that the most efficient way to work is to set up your scene in Marmoset Toolbag first and then add all your lighting and shaders. That way all you need to do is plug in your textures once exported from Substance Painter. 

The benefit of doing this is that you can actually plug in your textures early on and keep iterating on them in Substance Painter. Every single time you export your textures and go back to Marmoset, they should automatically update. This makes for quick iterations and really helps you nail the specific look you’re going for.

Now we can go ahead and export our textures to start plugging in shaders in Marmoset for our presentation:

  1. As a good rule of thumb, as I mentioned before, it’s best to keep all your naming clean and organized as much as possible.
  2. Go to File>Export textures. Navigate to the folder where you want your textures to export. Select your export configuration. For this one, I chose Unreal Engine 4 (Packed). Set the file type to “Targa” and set the desired texture resolution. Then hit “Export”.


My lighting setup will change from character to character since I always try to evoke a very specific kind of mood. I want to use the lighting to help push the quality of the character as much as I can so I will spend a ton of time iterating until I get the look I want. I will begin with a basic 3 point lighting setup but then I will start adding and shifting lights around to get that desired look.

For this project, I wanted to get a stronger emphasis on the rim lights as well as push the lighting from the back a bit more to really evoke that the character is conflicted and in deep thought. I also chose to stick to a more cold color pallet to push that conflict even further.

This is how I set up my lights:

Presentation 2

This is the final step for this project and should absolutely not be overlooked. When presenting a character, you want to be able to highlight all the work you went through as cleanly as possible.

Recently, I’ve been using a certain technique to create a more cel-shaded look. The effect makes it look like there is a black line drawn around the model. It’s not always necessary but I thought it would be a good fit for this character.

These are the steps I use to create that effect:

  1. All we need is our original geo, as is.
  2. Combine all the objects, then invert the normals.
  3. With the object selected, go to Edit Mesh>Transform. In Local Translate Z, input a value of -0.3. This value will basically determine the thickness of this outline. The further into the negatives you go, the thicker the outline. Export your mesh as an OBJ.

Once you import your mesh into Marmoset, create a new shader for it. Basically, you want to have it completely black with zero reflections and full metalness. This will create an outline effect.

Now, it's time to start compiling our final renders and wrapping up our project. I will typically always start with the main Beauty shot, then take a few more shots from other interesting angles.

In Marmoset, I have a few camera settings I like to stick with most of the time, but it always depends on the specific look I’m going for.

I will then export this shot with transparency at a pretty high resolution. I’ll bring it into Photoshop and then add a few tweaks to get it just right.

This is the final result:


That wraps up this breakdown! Thank you for getting this far and hopefully, this was somewhat informative. Like I mentioned before, there are TONS of different workflows but this is the one I generally stick with for such characters as this one.

Thanks again and good luck with all your future projects!

Frédéric Arsenault, Character Artist at Improbable

Keep reading

You may find this article interesting

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