Marcos Garcia Geymonat shared some techniques, which can help you to build detailed game characters.
Introduction
Greetings everyone! My name is Marcos Garcia Geymonat and I’m a Character Artist for games. I grew up In the small country of Uruguay in south America playing video games and drawing characters pretty much since I can remember. I started dabbling in 3ds Max and ZBrush at 17 but I considered it as a career option for the first time after I started a game development course at a school called A+. That course actually got me a job at Batovi Games — one of the oldest studios in Uruguay — where I worked as a level designer for 3 years until 2016 when I finally made the jump, moved to Canada and started a character art mentorship at Think Tank training centre.
Dain Ironfoot
Before starting to work on Dain I already knew I wanted to make a character that would help me showcase not only art but technical skills, I wanted a project that would push me to learn and try those cool features I kept seeing in GDC talks, like layered materials, the latest skin, hair and eye shaders in unreal, using in-engine simulation to avoid having to animate simple things like armor pieces or hair and in the end I ended throwing some simple facial blendshapes for good measure. So when I came across the original concept art by Nick Keller for Dain Ironfoot in the last Hobbit movie, I not only saw the most badass dwarf on the hobbit movies but also a perfect chance to try everything I wanted.
Sculpting
I Started the modeling by blocking out the character in ZBrush by using an old basemesh I had, I used the zModeler brush extensively to edit the topology of my basemesh and armor while using the move tool to get the base proportions down.
For the armor I extracted the pieces by polygrouping the parts then duplicating the subtool and deleting the unused parts, I did it that way in order to keep the plate pieces as planes, with very simple topology in order to be able to quickly move it around without having to clean if afterwards.
For the straps I had an old IMM brush I made for an old character (you can get it for free here).
The most important thing I learned about this part of the process was that silhouette is the key during the blockout phase and in order to achieve it the two main thing were having simple topology in order to be able to easily move vertices and also to always look for complementing angles in it.
For the boar I basically did the same, but spent some more time trying different proportions, and I had to account for the difference hair would make in the final silhouette of the character.
After the base blockout, I started adding finer details like armor trims, these were achieved with the zModeler brush by insetting the armor pieces and then extruding the border polygroups.
During this I also created some tileable meshes to use as IMM chains to add detail to the golden parts of the armor, unfortunately I had to scrap most of those (saving the helmet ones) since I couldn’t get the to conform to the underlying meshes properly.
Once all that was done I decided to try hard edging the armor pieces in Maya in order to have more control over the beveling.
Although it gave me good results, beveling also gave me a few troubles when I hard to start sculpting details, since subdividing beveled edges creates a large disparity in mesh resolution, in order to fix this I ended up subdividing my beveled mesh up to level 4-5 then freezing subdivisions, zremeshing my mesh to have even topology and then unfreezing the subs to go back to my original shape.
When it came to sculpting detail I knew most of my micro and small detail would come from my layered shader so I focused on the larger scale, I started by separating my layers into blunt and slash damage, and then I created 1-3 layers to separate between large “hero slashes” then medium slashes (thinking glancing blows) and little scratches (think either small daggers or Warg claws!). I made sure my scratches made sense in the armor and also that the helped with the visual design by having them cross the lines of the armor at odd angles, another key thing about sculpting detail was to not overdo it.
For the intricate details on the gold plates I used an alpha brush created by importing my original mesh from maya and using grabdoc in ZBrush to get a nice alpha, which I then went and hand placed all around the armor.
I followed my slash damage guides for the leather parts while using the standard brush to “beat” straps perpendicularly in order to simulate the effect of bending the leather back and forth over the years.
I used Marvelous Designer for the pants and the shirt, the only worthy thing here being that I used an animated version of my armor that would scale down on top of the shirt in order to get proper folds.
Sculpting the face was one of the best and worst parts of the process, It’s very easy to start exaggerating the nose and brow and end up with a bearded troll instead of a dwarf.
I wanted to avoid the heavy stylization that you usually in dwarf characters while at the same time having just enough exaggeration on the features for it to be memorable, so I ended up having a lot of back and forth iterating and exploring different proportions.
I also tweaked my beard blockout during this time to better fit the final face.
Once I had the final proportions I started working on the details, I started by creating a rough base of micro detail using a simple brush with spots in it and just taping it around the face to create pores, one key thing is I used the roll distance modifier of my brush (Stroke>Modifiers>Roll) to change the stretching of my alpha that way I could slowly increase the stretchiness of my pores depending on what part of the face i was working on.
After the first pass of micro detail I added another layer with pimples, and just overall larger and more defined pores in specific areas, I also added a first pass of wrinkles done with a simple dam standard brush with alpha 58 and spray.
I added another layer of very intense pores around the beard area, I ended up multiplying this layer by -1 to fake a stubble.
Finally I created the scars by using the dam standard to create the tears and the I used the standard brush around those tears to accentuate and fake some swelling.
The boar was lots of fun to sculpt though it basically came down to just following boar anatomy references and exaggerating them to achieve the silhouette I had set during my blockout.
For the boar armor I skipped the beveling and simply creased the edges in ZBrush, subdivided up to level 4-5 and then uncreased everything and kept subdividing, though you do end up with less control over the look of the bevel, the time I gained ended up making up for it.
I also followed the same rules for treating the leather and metals of the barding.
The main highlight of this part was the engravings. I achieved those by doing a quick unwrap of my highrez geometry in ZBrush with uv master, I exported a snapshot of the UV’s to Photoshop and there I used alpha patterns to create a “mask” of the engravings in 2D.
After exporting that mask I brought it back as a texture into zbrush and applied it to my highres sculpt, I then used “mask by intensity” from the masking menu to create an actual mask of the pattern,after that i simply hid the texture, inverted the mask, inflated the engraving inwards and applied some wrinkling to make it seem weathered.
Materials
I’d say compared to Paragon’s my implementation must seem like a toddler painting next to a renaissance masterwork, but I certainly tried to emulate their handling of material functions and layer blending.
The layer-based shader I built for my reel works by having a lot of “standalone” tileable ”material layers” or material functions as they are called in UE4, material functions works as self contained boxes that take parameters and spit materials, and you get a bunch of those and mash them into a big master shader that then blends them onto your mesh using a color ID mask to decide where each material shows through.
I actually have a long breakdown/tutorial of how my shader works here but I’ll try to do a quick explanation of how I built it here.
It might seem overly complicated but layered materials have many benefits like material consistency across models, greater detail thanks to tiling, insane customization since the material is built inside the engine and also reusability across multiple projects.
I started by breaking down my model into its basic materials, then with those in mind I went into painter and did a quick “sketch” during this sketch I set up 3 texture channels for my color ID, grime, scratch and blood, is used those to breakup the layers later and and get some cool customizable effects.
After that I went into unreal and created my “master material” which is basically the bag in which you throw all your material functions (steel, gold leather ,etc). The main takeway is the way in which I blended the layers using a custom function (ID_colorPicker) that subtracts a give color from a texture map and spits out a mask for that color, allowing me to theoretically have as many material layers as colors.
After that I iterated on and created new material layers (keeping shader complexity in mind) until I was satisfied with how the character looked.
The main thing that helped me wrap my brain around the making of the self contained material layers was to think of them as smart materials in substance painter, I even ended up using many of substances noise masks to generate my final layers in unreal.
Painting
Substance Painter was my main texturing tool during the whole process, as I mentioned before I used it to paint the colorID and detail masks (scratch,grime and blood) used in pretty much every armor piece, I also used it to create all the tileable detail and normal maps I used to build my material layers.
I also used it more conventionally to hand paint Dain’s face, I specifically followed Magdalena Dadela’s amazing workflow for skin painting explained here to paint my diffuse and then I mostly hand-painted roughness and specular level using Epic’s realistic character example’s maps as reference for the values.
I used Painter to paint the boar’s face and mouth and also to paint fur maps for Ornatrix, I used it to drive the boar’s fur color, length, distribution, and thickness.
The only time I used Photoshop specifically was to hand paint the boar’s fur alphas since the fur actually used the boars original texture (with Ornatrix fur projected onto it) for the haircards instead of using a separate one like Dain.
Hair
I think hair was the most dreaded part of the whole process, even before starting on this project I spent a month trying different hair making techniques for an older character and it still didn’t look good. Thankfully one of our mentors at Think Tank, Shifally Rattan, came to the rescue and really helped me come to terms with hair.
I started by creating a separate scene to render out my hair cards I then broke down the character’s hair into hair types(ex beard, braids, hair) after, I planned how many strips I’d use for each type, taking into account what the most important part of my character’s hair was (the beard). at this time I was still trying other softwares to cut corners so I used XGen interactive grooming to generate the first batch of hair cards for my beard.
In the end I dropped xgen entirely because I spent too much time trying to work around its limitations. I ended up hand placing all my hair cards in order to have more control over my polycount and distribution, my tip here is to just keep everything ordered in folders depending on the part of the hair, the layer of hair on that part and the specific hair card on that layer.
A large part of the final hair look comes from the shader, thankfully Epic released a great hair shader with their realistic character project, the downside to it is that it uses some very specific maps. One of the most important ones being the depth map which basically defines how your hair textures will react when overlapping (almost like height blending).
In order to get the right depth texture I moved some small detail strands closer to the camera so they would blend on top of other thicker hair in unreal, I also played a bit with the vray depth black/white to get the right range of depth.
I don’t know if it’s the same for everyone but for me the two big problems I always had with hair were, not knowing where to start, and trying to find a the fastest way to do something and ending up wasting more time troubleshooting than actually working on hair.
In the end my takeaway is, HAIR TAKES TIME, the only way to get good results it to iterate and look at reference until you get something you like.
Rigging
I used Jeremy Ernst Unreal Rigging Toolkit, to rig Dain and his boar, it’s a great plugin for maya that I’ve been using to rig my characters for over 2 years now and It’s been a real life saver, mainly because It allows me to go back and forth between the different stages of rigging easily so I can make pretty big changes, like adding a chain of beard beads on the last day.
After that most of the fun happened in Unreal specifically on its animation blueprints, I wanted to explore unreal’s in-engine rigging capabilities to save time on animation and to achieve more dynamic motion.
For example, I used two bone ik nodes to keep the stirrups on Dain’s feet when he was mounted.
I also used bone driver nodes to drive the tasset bones on Dain’s armor so they would move depending on the rotation of the thigh bones.
One of the key things I want to bring up was the use of Immediate physics to simulate secondary motion on a few things like Dain’s beard, tassets and shoulderplates.
They basically consisted of rigidbodies (usually with no collision only rotation constraints) that move based on their parents velocity, that means I only needed animation on the basic humanoid bones of my rig for the beard or tassets to flap around!
One very powerful example was the reins which I started by making two simple chains of rigid bodies with the ends constrained to an Ik bone at the middle which I then parented to Dain’s hand. this ensured the reins would animate consistently without actually having to animate them at all.
For the animations I should start by disclaiming that I am not a real animator, luckily I had the help of a think tank friend Rahil Pai who did the cool walk animation and the Battle idle (the one holding the axe) for Dain, after that I took his idle animation and retargeted it as an additive animation on top of another set of Idle poses I had made before. This quickly gave me most of the idles Dain uses.
For the boar I found a great pack of boar animations by Malbers and used a mix of the rigging toolkit and unreal’s own retargeting to transfer the motion into my boar.
Adapting the character for use in the real-time engine
I was lucky it started as engine based character, from the layer based materials to the in-engine secondary motion rig, my idea was to build a character that would showcase my knowledge of unreal as much if not more than my artistic abilities.
I’d say the main challenge throughout the project was to staying within the scope and not getting distracted by the fact I was using a game engine to showcase a character artist reel , I had several instances where I lost time specially when working with blueprints and animation because I was focusing on building a game character state machine that would behave properly while doing things that I never planned to do show in my reel.
One big example being I spent a week trying to create a mount system that would let Dain’s blueprint actually mount the boars blueprint, this was all for the mounted part of the reel (12 seconds) in the end I just built a third blueprint with dain and the boar in it and that took me only a few hours.
In the end I focused on making simple character blueprints that worked with sequencer instead of a perfect character controller for a game and although as an ex game developer I’m not super proud it helped me get things working much faster!
If possible I’d like to end this with a big shout out to everyone at Think Tank especially the guys and gals at the character art room for their support and the knowledge shared!