logo80lv
Articlesclick_arrow
Talentsclick_arrow
Events
Workshops
Aboutclick_arrow
profile_login
Log in
0
Save
Copy Link
Share

How to Model and Texture a Dark Fantasy Real-Time Character ZBrush, Maya and Substance 3D

Jules Joris shared the workflow behind the Sweet Ophelia project, discussing how he modeled the character's body and the armor, focusing on the chainmail details, and explaining his steps to texture the metallic elements.

Introduction

My name is Jules Joris, and I'm a 3D Character Artist from Belgium. I discovered my passion for 3D about 4 years ago, after trying my hand at Fine Arts. I enrolled at Howest University of Applied Sciences in the Digital Arts & Entertainment Bachelor's program, and found that a blend of technicality and art was what I wanted to pursue a career in.

After graduating in June last year, I realized I needed to elevate my portfolio to reach studios' expectations and decided to join Think Tank Training Centre's online program, a highly regarded institution in the field. Sweet Ophelia was my final project for my Intermediate term, under the supervision of Sean Ferreira.

I'm passionate about knights, the Middle Ages, and dark‑fantasy aesthetics. I draw a lot of inspiration from studios like FromSoftware, CDPR, Larian, and Grinding Gear Games, as well as artists such as Mike Franchina and Andres Rios, whose work has had a strong influence on my artistic direction.

Sweet Ophelia

My approach was all about diving deep into the original concept and making sure I captured the spirit of the character. The design was created by Bodybag Planty and belongs to a universe created by a collective of artists called "Stare Joberknoll".

I started with paint-overs, isolating and color-coding each asset to get familiar with the concept. I then searched for references and filled in any concept gaps, like adding a gambeson under the armor or leather straps to support certain pieces.

After gathering references on Pinterest, I built a large PureRef board. They are a blend of real-life matching, surface detailing for sculpt and texturing, and CG refs from games, movies, and other artists. When using the latter, I made sure to understand the functional design behind the shapes rather than simply replicating forms. Over time, I've built PureRef banks that I reuse across projects and expand with project‑specific references, which is why I tend to work with a large number of images.

At this stage, I try to reverse-engineer the concept artists' process. It's always satisfying when I find a reference that matches the concept perfectly, like this gothic thermometer serving as a reliquary.

Modeling

For modeling, I use ZBrush and Maya. I began with a DynaMesh block‑out in ZBrush to establish the main shapes and proportions. For this project, I created a temporary pose early on to see how the different assets interacted when matched to the concept, then adjusted the proportions back in the T‑pose accordingly.

The first challenge I faced was deciding if I was going to stick with the heavily stylized features of the character. I initially experimented with longer limbs and a smaller head, but ultimately chose to tone it down and push the character towards a more realistic look.

The face was the first element I focused on. I refined it until it captured the essence of the original design, then conformed it to a MetaHuman topology and tested it early in Unreal Engine. That early look‑dev step helped me notice structural issues before moving forward. I then projected a scan data to it and only after started introducing subtle asymmetry, scars, and such.

For the armor pieces, I used a mix of ZBrush and Maya to maintain clean topology, which saves a lot of time later when creating the game‑ready mesh. I started with the dynameshed parts and used Quad Draw in Maya to clean up the shapes. With ZBrush's tools in mind, I kept all armor plates one‑sided and focused on smooth edge flow and easy polygroup selection.

ZBrush can feel less efficient for early shape edits, so I went back and forth between Maya and ZBrush. Once the base shapes were clean, I used ZBrush's Dynamic Subdivision to add thickness and continued refining with ZModeler. After that, I creased my polygroups and subdivided until I had enough resolution to sculpt.

For more organic areas like the tassets and pauldrons, I used a mix of Standard, ClayBuildup/ClayTubes, Pinch, and DamStandard brushes. During the damage pass, I tried to keep the armor clean and elegant, adding subtle scratches and wear. Trim Dynamic and the Orbs brush set came in pretty handy here.

For the rivets, I used the Standard brush to push the metal around them as if they were hammered in. This helps the bake and ensures dirt and rust naturally settle into those cavities during texturing.

For the chainmail, I used Dynamic Subdivision and MicroPoly. Even in AAA titles, chainmail damage is sometimes done with lasso tools or painting the Opacity maps, which can leave visible artifacts on the edges. Taking a bit of extra time to edit proper link behavior made a big difference. I ensured the damaged areas followed gravity and added subtle movement to the links with the Move Topology brush for a more authentic feel.

Hair

For the hair, I sculpted a block‑out from a sphere to establish the flow and volume. I highly recommend Veronika Neklyueva's video on this approach:

I then created the hair cards in Maya with XGen and placed them with GSCurveTools. Hazel Brown's tutorial was especially helpful for this step:

Even though the hairstyle color was fairly light, I made sure to add enough complexity and color variation in the Diffuse map to keep it visually interesting.

Retopology

For the retopology, I followed a AAA character‑pipeline approach with enough quads and loops to ensure clean unwrapping and proper deformation for rigging. I conformed the face to a MetaHuman topology and did the same for body parts like the gambeson sleeves and pants. For those areas, I also kept a backup UV channel with the original MetaHuman layout to facilitate posing through attribute transfers.

Using MetaHuman topology did increase the polycount, but with the industry shifting toward higher‑density meshes, I felt comfortable landing around 150–200k for the final character. The mesh uses six different 4K texture sets, split according to texel density and shared materials.

I grouped the cape and chainmail UVs since they required opacity information, allowing me to skip that channel on the rest of the armor. For the eyes, eyelashes, and brows, I used MetaHuman assets and only exported the base textures to make final adjustments in Photoshop. 

For the armor, the retopo phase went quickly as I had already established clean topology earlier in the process. I started from the lowest subdivision meshes and optimized them, leaving enough room for bevels on the armor plates' edges so they would bake properly. I made sure the pieces unfolded and straightened cleanly to avoid aliasing in the textures.

For the UV layout, I began with Maya's automatic layout tools and then did a manual pass, which saved around 10% of texture space overall. Since this was a stand‑alone portfolio piece that wasn't going to use LODs, I was able to keep the padding between islands very small. I also mirrored the UVs for the legs and arms, freeing up a significant amount of space. Since the cape partially covered them, the mirroring was even less noticeable.

To reach a certain quality level, I used Geometry for smaller details that could have just been baked onto planes. Although they do not have backsides, I gave each of the coins thickness to catch light properly on the edges.

For the chain, I made a Persian-style pattern that I slightly inflated to close any gaps, then baked it onto a cylinder. This avoided baking artifacts from rays casting through it and resulted in a cleaner final render. I built the cape using three layers of matching geometry combined with cards for the damaged fabric pieces. Below, I am showing the lowest cape layer:

When unwrapping this layer, I accepted a bit of UV deformation in exchange for keeping the UVs straight, since I wanted clean axes to project custom alphas.

Texturing

For texturing, I used Substance 3D Painter, but baked my maps in Marmoset Toolbag as it allows for more control with tools like skew and offset painting. In ZBrush, I assigned a single color per material or per ornate element, then baked that Vertex Color map and plugged it into the ID channel in Substance 3D.

I kept the model as an FBX with separate parts and a clean naming convention, which allowed me to combine ID selection, geometry selection, and masking paint for smooth isolation and handling of each component.

When texturing, I kept AO disabled most of the time, used Studio Tomoco for neutral lighting, and constantly switched between Roughness, Material, and Base‑color views to stay in control. A challenge here was the very dark metal from the concept. It's an unusual value to achieve in PBR, since metals require a high base‑color lightness.

The armor could look this dark if it were very rough and weathered like cast iron, or reflective but set in a dark environment, which is what I went for. I also thought that for a hero character, having higher Roughness values would help her stand out.

For the metallic parts, it was all about layering and gradually nudging the colors. I iterated throughout the process, adjusting layer opacity and screening modes to find combinations that brought out the most interesting surface variation. This was the routine I followed for metals (and most materials):

Base

  • I started by setting accurate PBR values and mixing in subtle grunge variations. Since this was game art rather than strict VFX realism, I allowed myself to push those boundaries as long as the result felt believable.
  • I also used smart materials at the bottom of the stack for a quick head start. I made sure to check each parameter, tweak masks, and remove anything that didn’t fit the direction I wanted.

– Grunge

  • This was where I added complexity and looked for "happy accidents." I layered and rotated grunge maps, adjusted tiling, and relied on references. Using AO and curvature‑based masks, I refined the contrast and pushed the shapes.

– Colors

  • I layered multiple hues using color‑mode blending and tweaked layer opacity to build richness. Each layer had its own color, and I used grunge masks to gradually introduce variation.

– Dirt Overlays

  • Here I deepened cavities with darker, more saturated tones and higher roughness values. I used dirt overlays and generators like Dripping Rust, combined with post‑effect masks, gradients, and HSL filters to control contrast and levels.

– Edge Pops

  • Using cavity or Curvature maps, I brightened the edges with lighter tones and slightly higher Roughness. I broke up these effects with additional grunge masks so they would not look uniform.

– AO/Gradients

  • At that stage, I did not mind keeping the AO shader on as I approached the final in‑game look. I added gradients that were darker and rougher toward the bottom and lighter and shinier toward the top to guide the eye toward the face. I also did quick checks with shadows enabled and tried different environment lightings to make sure everything held up.

The cape follows essentially the same texturing philosophy: pushing contrast, layering grunge for natural complexity, and emphasizing edges and cavities with value shifts. For the high-poly, I kept the sculpt simple with just enough soft folds and directional flow to establish the silhouette, knowing most of the tearing and frayed edges would be handled through the Opacity map. For the final mesh, I created five variations of fabric cards and tucked them underneath each layer of the cape to hide their ends and make the damage feel natural and integrated.

For the skin, I started with a MetaHuman texture and tweaked it to match the concept. I shifted the complexion toward a slightly sicker tone and added very subtle hue zones. After layering grunge, curvature, and AO maps, I added wetness around the eyes, a touch of makeup, and some color grading to desaturate the overall look.

Lighting and Rendering

I used Unreal Engine for all lighting and rendering, with final presentation adjustments done in Photoshop. I started by adding a post-process volume with infinite extent, turned off game settings, and controlled exposure through it. For each render and pose, I kept a separate scene and level sequence and used a 35 mm focal length camera, as I felt it matched the concept's apparent distortion best.

To establish the mood, I started with an HDRI and rotated it until I found an interesting angle. Its purpose was mainly atmospheric, so I kept the intensity very low. My go‑to HDRI is Belfast Sunset Pure Sky, which has a beautiful range of blues, oranges, pinks, and purples.

I used a directional light as my main source, aiming for a god ray effect from above to give the character that ethereal and almost holy presence. This angle also helped me keep a bit of darkness around the eyes, which really added to the mood.

I used rim lights with spotlights to frame the silhouette and bring out the details of the armor and sword. I added another spotlight from above to highlight the face and make it the focal point of the render.

To fill areas that were too dark, I placed rect lights: one for the body, one for the sword blade, and a couple of subtle ones for the neck and top of the pauldron. I adjusted the source size to avoid harsh shadows and tweaked the attenuation radius so each light affected only the intended area.

With the post‑process volume, I added a subtle bloom, increased the contrast, and made some color tweaks. After rendering, I brought the images into Photoshop for the final touches. I prefer working nondestructively from clean renders when adding fog and dust, since it's much easier to get interesting shapes this way than relying on volumetric fog or fog cards, which can break under different camera angles. I also added a subtle vignette and some additional color grading to achieve a crisp final look.

To present the metals properly, I made sure they were lit enough to avoid black spots and experimented with light angles to showcase the Roughness variations across their surfaces.

Conclusion

It took me about two months overall. I started blocking it out midway through November and wrapped it up by the end of January, with a three‑week art test and other work squeezed in between. The main challenge was definitely getting comfortable with XGen and hair cards for the first time. That was a steep learning curve.

The cape also proved interesting to handle, as it covered the character but still needed to remain practical for real‑time use.  I had to find the right balance between layering effects and keeping the topology under control. Seeing the textures come together is always one of the most satisfying moments.

Final passes really make the character feel alive. But the aspect I enjoyed working on the most was crafting the armor and sword, taking them through every stage from block‑out to final polish. It's the kind of work I could happily keep doing for a very long time. My ArtStation.

To start with making Knights in ZBrush, I highly recommend this video from PankArts' channel. He covers hard‑surface modeling very clearly, and it was one of the first tutorials I watched when I started learning ZBrush. I still revisit it from time to time:

Vitaly Bulgarov's "Hardern" piece from Mortal Shell is always my benchmark when I make knights. It's constantly somewhere on my PureRef board. And also, MarcoPlouffe's Streams to understand the whole ZBrush pipeline, but I don't think he needs an introduction!

Jules Joris, 3D Character & Props Artist

Interview conducted by Amber Rutherford

Built for Creators. Read by the Best
Partner with 80 Level

Comments

0

arrow
Type your comment here
Leave Comment
Built for Creators. Read by the Best
Partner with 80 Level

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