Gino Luka Kölling shared with us the modeling and texturing process of a scarred humanoid creature inspired by the manhwa Solo Leveling. The creature was modeled in ZBrush and textured using Substance 3D Painter. He also talked about the creation of hair using Geometry Nodes and his grooming methods.
Introduction
My name is Gino Kolling. I'm currently working as a Freelance Creature Artist for Entertainment. I've done work for companies like Larian Studios, Blizzard, Capcom, Bytedance, and others.
About the High Orc Project
I was recently looking for a quick project to work on to improve my grooming skills inside Blender. Originally, I wanted to do a human model, but I tend to get bored doing those in my personal time. So, I went for a humanoid creature instead and decided on doing an Orc based on the Korean manhwa Solo Leveling. I think the designs are pretty cool, and it is always fun to approach bringing them into a more realistic setting.
Blockout
Having decided on the subject, I decided to start the blockout. I focus on the bigger forms and the feeling of the character. Also, just having key features present. In this case, the teeth, eyes, and hair, in addition to the general face. I already knew I wanted him to be scarred, just not how much. Adding polypaint can help you visualize things early.
On the second blockout step, I just refined the shapes a bit more, focusing on anatomical features — basically turning the blockout into a high poly by adding wrinkles, adjusting proportions, and including more storytelling elements like the bigger scars and ear chips. Essentially, push the previous blockout further, following the same direction.
At this point, I would like to do a more detailed pass of polypaint to visualize the model even closer to the final. Also, refine the forms, push further, and focus on transitions between the forms — trying to show which areas are bone, soft tissue, lips, cartilage, scar tissue, and so on. If it reads in your high poly, you are headed in the right direction, and it can help you a lot during textures.
For the polypaint, I use the Paint default brush from ZBrush, disable the LazyMouse, set it to Color Spray mode, and grab Alpha 08. This gives me a natural spray that helps add some color variation to the skin. Picking my colors in line with classic skin painting principles like the Facial Color Zones and using the Polypaint Modes that allow you to paint using different modes like Multiply or Lighten really gets you quite far. To make certain details pop, you can use the masking by cavity and other settings, which can help isolate pores or wrinkles for you to paint.
Topology and UV Mapping
At this point, I'm happy with the model, so I will make sure I have a decent topology using a combination of ZRemesher and polygroups, then use those same polygroups to unwrap it using UV Master. Then, I export a Displacement Map from ZBrush with pretty basic settings. For personal projects, I tend to keep the tech parts of the pipeline as simple as possible unless I'm planning to animate or rig something, and I will go for the simplest solution. If it works, it's good enough.
I set up my UDIMs in Blender after unwrapping and then sent everything to Marmoset (in this case, I was beta testing v5) for the bake. I correctly name the meshes with their _low and _high suffixes, of course. In Marmoset, I use the Quick Loader option to quickly have it set up the folders for me. The maps I output are fairly standard. However, I output Convexity, Cavity, Vertex Color, and two Ambient Occlusion maps as extras.
The Convexity and Cavity are to help get simpler stacks of masking in Substance 3D Painter. I could use a Curvature Map and tweak it with Levels or just use a Cavity or Convexity if all I want are the pores or convex areas of the model. They have a few other use cases, but that's what I use them for the most. The Vertex Color grabs the polypaint we painted earlier and basically gives me a headstart in Painter. The two AOs are separated by a simple checkbox in the settings, Ignore Groups. It allows the map to capture objects outside of the Bake Group in the map or not. So, if you want to paint some additional wetness between the teeth and gums, this map would capture that. If you disable Ignore Groups, it creates Ambient Occlusion only on that group's mesh, which is generally good and has fewer collision artifacts. They both have different use cases, so I tend to use both while texturing.
Texturing
Having done proper bakes in Marmoset, I moved to Painter for my textures. I start with a mix of smart materials and my base polypaint layer. Then I start adding color layers mostly and only worry about roughness and details later on. Trying to keep things procedural in the beginning in case I run into any errors. I can quickly rebake and adjust things without losing much time repainting things.
I usually set up my material in my render software as soon as I have my first pass of textures. It's important to make sure everything is working correctly inside the final scene, whether Unreal, Arnold, Redshift, Cycles, et cetera. In this case, I'm using Cycles in Blender. I play around with HSV nodes, color ramps, and a few others to dial in how I want the textures to look in the render, then usually tweak the textures in Painter to match that look. I just want to keep my final material clean and not too messy with a ton of nodes. In this case, I'm using a mask to drive the factor of the mix shader so I can use a separate material for the face paint on top of the skin. This allows me to have more control over the final look of the paint.
Hair Creation
Once I was somewhat happy with the skin, it was time to add hair. I used the Geometry Nodes system for this, making use of the Asset Browser node groups. The workflow is surprisingly simple yet powerful. I began by creating scalp meshes of where I wanted the hair to go. So, I duplicated certain regions of my Orc's head.
Then, simply add an Empty Hair whilst having that mesh selected, and you'll get it as a child to that mesh. You can then go into sculpt mode and add your guide curve on the mesh using the grooming brushes. I mostly just used Adding and Combing, in this case, to define the direction and flow of my hair.
You won't see anything until you start dragging and dropping the GeoNode groups onto the curves. It will already come with a Surface Deform group applied to it by default. I then apply a Set Hair Curve Profile to define the thickness and shape, then Interpolate Hair Curves to really populate the area with hairs. Defining the surface where I want hairs through a Vertex group inside of the density mask slot. So, you basically "weight paint" where you want the hairs to grow.
As you can see, there are a ton of different groups, and they are, for the most part, quite self-explanatory. I suggest just playing around with them and seeing what fits your creature or character. I ended up using Curl, Frizz, and Clump a lot throughout the project.
The hair shading was quite simple using the Principled Hair BSDF. This shader allows you to drive hair color by using melanin concentration. The more melanin, the darker the hair. I knew I wanted the Orc to have a few white hairs mixed in with his dark black hairs. So, I used a Mix Shader driven by a Curves Info node with a Color Ramp to drive the mask. This allowed me to mix white and black hair by grabbing random curves (hairs).
I could've spent more time grooming, but as a test project to get comfortable with the tools, this was good enough. I will definitely be playing around more with these tools and trying to push my limits further. I have a few more creatures and characters on my list who have plenty of hair.
As final words go, hair shouldn't be something holding you back from your characters. There are a lot of tools now to make good hair for real-time and pre-rendered characters. There are plugins to help you out, too. Look at references and study hair, and you'll be able to get some great results. Have fun grooming!