I spent two semesters learning and developing this character. At the start of the course, our teacher had us play a claw machine game to randomly select a franchise, which I found to be a realistic exercise—since in a studio setting, you often don’t get to choose the characters you model. I ended up selecting Sons of Anarchy and chose Chibs Telford, who appealed to me the most from the franchise. The learning process was intense, covering everything from human anatomy to creating a high-poly model in ZBrush, and clothing in Marvelous Designer.
From what I understand, in the industry, character artists are usually provided with a base mesh to start sculpting. However, as students, we were each assigned a unique character, so no base mesh was provided. We were required to create our own. The process started by visiting 3d.sk to find reference images of a person with a similar height to the character we were assigned. Using front and side images as reference, we blocked out the base mesh with ZSpheres in ZBrush and then refined it through sculpting
Even though ZBrush has an excellent remesher, my instructor recommended retopologizing the base mesh before adding further details. We used Maya for retopology, and to be honest, I haven’t seen anything better than Quad Draw for this process. It’s crucial to follow the natural muscle flow during retopology to ensure the geometry deforms properly during animation.
Outfit created in Marverlous Designer
The clothing for this character was created in Marvelous Designer to achieve realistic fabric wrinkles and deformation. This software makes clothing design much easier, provided your computer has enough power to handle the simulation. A clean UV layout is also a bonus. Retopology of the clothing was done in 3DS Max, using the retopology modifier, which was extremely helpful. Afterward, the original clothing model was projected onto the retopologized version for refinement, with extra details added as needed.
Outer jacket (kutte) pattern
Jeans pattern
Inner jacket pattern
Normal map of cotton material
Ambient Occlusion/Roughness/Mask of cotton material
In large-scale projects, such as open-world games with numerous assets, it’s optimal to use tiling materials as much as possible. This approach helps keep the game’s file size manageable and ensures good performance at runtime. For each textile texture, we used two 256x256 maps. Tiling textures also provide sharp detail in close-up views, whereas specific textures can become limited by their resolution, leading to blurry or pixelated visuals when the camera zooms in. Typically, materials in the game engine are prepared ahead of time, and the artist’s role is to fill in the required texture maps. For the character's face, the material was provided by our professor and had to be used in the game engine. This material included different masks to control roughness in specific areas and settings for subsurface scattering, which gives skin its reddish appearance under strong lighting.
There are several ways to create hair in video games. For a stylized approach, hair is often modeled with geometry. For a more realistic look, hair cards are commonly used. However, Xgen hair has emerged as another technique, especially since it can be integrated into Unreal Engine. For this project, the character's hair was created in Maya using Xgen. When working with Xgen, it's crucial to properly set the project and name the hair descriptions, as this ensures all maps are correctly located. Xgen can be prone to malfunctions, and several classmates lost their work unexpectedly due to these issues.
Since this was primarily a 3D modeling class, rigging and weight painting were additional tasks we did to better understand how everything functions. We were introduced to two fantastic Maya plugins: Advanced Skeleton and ngSkinTools. Advanced Skeleton allows you to create a humanoid rig quickly, and exporting the skeleton to Unreal Engine was relatively straightforward, as long as the fit skeleton was properly aligned. Naturally, there can be issues the first time you use the plugin, so it's a good idea to test the skeleton export to Unreal Engine before starting weight painting to ensure everything works correctly.
While Maya has built-in tools for skinning and weight painting, they don’t always behave as expected. For example, trying to scale weight on one bone can sometimes inadvertently affect other bones. Additionally, importing weight painting to an object can lack precision, making tools like ngSkinTools invaluable for more accurate control.
Rig created from Advanced Skeleton