Porcelain Demon

Character Breakdown

Tuomas Paul

0_Closeup
209

Tuomas Paul

Graduate 3D Artist

Introduction

Hi, I’m Tuomas Paul, a third-and-final-year student studying Game Graphics Production at Howest Digital Arts and Entertainment in Belgium. I kind of love character art and specifically the stylized side of it, and I’m aiming to enter the field in this autumn after an end-of-study internship and graduation.

Goals

The Porcelain Demon was created primarily for the contest ‘Searching for a Star’ by Grads in Games, a games industry initiative meant to help graduates make a leap from student to professional.

I had three goals in mind with this project – first, to practice my modeling inside zBrush; second, to explore a semi-hand-painted look that still makes use of PBR; and third, to do well in the contest (keeping my fingers crossed).

And just as always with personal work, I just wanted to have a bunch of fun.

To me, there’s nothing as intoxicating as making something you’ve personally designed come to life from a small sketch into a wobbly character in-engine.

That’s such a cool thing I never tire to see.

Tools

  • References – PureRef
  • Concepts + Postprocessing – Photoshop
  • Modeling – zBrush Retopology & UV – Maya
  • Baking – Marmoset
  • Texturing – Substance Painter, 3DCoat
  • Rigging – Maya (HumanIK)
  • Rendering – Unreal Engine 5, Marmoset

References & Inspiration

The original concept for the Porcelain Demon was done by me a bit more than a year ago for a school assignment.

At the time, I thought it was a bit rushed, and it left me content but not satisfied.

However, I still liked the concept and decided to pick it up as the base for this project, determined to redesign some of the character along the way.

1_References-scaled

I roughly sketched out a body for the character based on the original concept and organized a selection of references to use.

When working straight from a concept I find that it helps me to keep the reference board relatively contained to avoid getting lost in all the pictures.

If there was a specific part that I struggled with, I added some references to the board to use and so on. I also like to keep a separate, general anatomy board I can reuse in different projects.

Blockout and Modelling

As with any project, I started it by blocking things out in a very rough manner in zBrush. I used simple primitives with both polygroups and different subtools to firstly get the proportions of the character right, and afterward started to approach modeling the different segments that the character is composed of.

Since most of the character was very ‘organic’ hard-surface in shapes and separate from each other, I approached them with the technique pictured below.

4_Blockout_Technique-scaled

By creating a quick and rough 3D sketch of the piece of the body (through judicious use of dynameshing), I could use that as a base for a paint layer to derive polygroups from. I used a plugin for zBrush called EazyRemesh for this.

With polygrouping the different segments, it becomes easy to separate and control them. Afterward, it was simple enough to extrude and bevel the different segments of the body. Most of the modeling work went into modeling the different segments of the character in a suitably beveled-yet-sleek way.

It was important to have decent topology in this phase for me to use them later on as starting points for my low-poly. The hair, on the other hand, was done in three steps.

  1. A base mesh to draw on was created.This can be roughly done as it’ll be removed in the end, as long as it acts as a good guide for the geometry about to be drawn on it.
  2. The geometry was drawn on it! I used the IMM brush ‘DE_HairTubes’ by Dylan Ekren to create nice, flowy-looking hair on the base mesh.There were two layers to the hair here – one where there were no large gaps in the surface of the hair that might cause trouble with retopology.
  3. And another where the strands were separated from the main mass of the hair to add a bit of extra depth to it.
5_Blockout_Hair

The accessories – wraps, metallic hair caps, and the coins were simple enough to be modeled outright.

Sculpting – Character, Hair & Accessories

Most of the sculpting went into the faces to emphasize their respective emotions, where I used a combination of the brushes ‘Dam Standard’ and Shane Olsen’s different brushes.

I tried to keep the detailing low to make it match with the rest of the body.

6_Sculpting_face-scaled

The character didn’t have much sculpting to do, in the end.

I wanted to keep the body relatively clean on the sculpting pass and let the underlying subdivisions provide the visual appeal alongside good texturing.

7_Sculpting_Overall

Retopology & Unwrapping

I did the retopology in Maya. Thankfully due to thinking ahead during modeling, I could use the lowest subdivision level of my meshes from zBrush as a base for my low-poly and only had to adjust them a little bit.

For the hair, I used the Quad Draw tool in Maya on top of the high-poly hair mesh, except the stray strands which had their own, separate geometry.

Knowing that:

A) My character’s parts were going to have a visible thickness, seen from both sides.

B) The character had four faces and I was okay with having a higher polycount – before starting the process, I was thinking about 70 to 90 thousand triangles.

The character ended up being 96k triangles. In retrospect, this is the only part of the character that I’m unhappy with, as I could’ve been somewhat more economical with my topology.

Something to work on next time!

8_Retopology-scaled

With the UV’s, I separated it into six different maps, of which one was for the eyes.

While I could’ve gone for fewer maps, I felt that to fully involve my second goal for the project (making super cool textures) I could afford to splurge on the texel density.

Along with having a bit more UV space to work with, I also duplicated and mirrored a lot of the parts of the mesh.

Similarly, I straightened UV islands as much as I could without distorting as to avoid aliasing and make them easier to layout.

I kept the hair UV islands tangent to each other in the same direction so it would be easier to apply anisotropy.

9_UV-scaled

Baking

For baking, I did it in Marmoset. I use Marmoset instead of Painter for baking due to the really handy feature where you can paint the cage offset on the mesh and assign individual baking distance values to each baking group.

I baked the maps: Normals, Normals (Object), Position, Curvature, Ambient Occlusion, Thickness, and Material ID I then exported them into Substance Painter.

All these maps apart from AO and ID are required in generators used in Substance Painter or just are useful in general for masking out areas and such, and the ID map provides a handy way of isolating geometry in Painter.

10_Bake-scaled

Texturing

For texturing, I planned to get a good base color firstly by using generators inside Substance Painter and later take it into 3DCoat to start the hand-painting process.

The base color was done in three steps. Firstly, I created a color variation procedural texture in Substance Designer and sent it over to Painter to be applied to the mesh.

11_Texturing_Maps-scaled

This generator was based on a breakdown by Jimmy Malachier which I’d bought and analyzed a while back. It’s pretty subtle but did its job.

Secondly, I added gradients, edge highlights, and some color transitions on the base color. This was done mainly with the generators World Space Normals, Light, Curvature, and 3D Gradient.

With these, an illusion of light and shadow can be created by tweaking to parameters. Thirdly, I painted on top of the generated textures in 3DCoat.

I wasn’t going for an unlit scene, but I wanted the base color to be the driving force of the texturing. That’s why I made sure that there was some light information on the textures.

However, it was important that I wouldn’t push it too far and that I’d paint along the normals, referencing and taking them into account on the way.

12_Texturing_BC-scaled

For the paint over, the process was straightforward as straightforward as it looks. I wanted to do something like the texturing in Project Black, a very cool canceled project at Fishlabs and tried to make each of my brushstrokes have a distinct shape and clear purpose.

Most of the paint over is stylization of the existing information that was present in the generator phase.
I did this by emphasizing some parts (e.g. the top of the hips) to have more light information.

One thing to point out about painting monochromatic color patterns like this one is that subtle color variations go a long way in adding interest to the texture.

I sneaked in greenish blues, purples, cyans, and grays to get away from a single-hued approach, which I tend to find a bit dull.

The roughness also was derived almost completely from the paint over, so that they would follow the values of my brushstrokes.

13_Texturing_BC_and_R-scaled

What was also important was that I created the textures while also starting to create the lighting and rendering setup in Unreal Engine.

As it was the main rendering environment of my choice, it was important that the textures could be seen inside Unreal to make sure what they would end up like.

14_Texturing_InEngine-scaled

Rigging & Posing

For the rigging, I used the HumanIK’s auto-rig tool Quick-Rig available in Maya 2023. I’m not much of a rigger, so these kinds of tools are a great help especially when all you need is something to help present the character.

The Quick-Rig tool is somewhat limited – I couldn’t rig fingers or the hair without manually adding joints and skinning them – but it’s great for, well, quick rigs.

As I only wanted to create a short idle animation and be able to pose the character the tool was more than enough for me. An animation breathes life into the character.

I’ve always found that there’s a huge difference between images and videos, and seeing something move makes everything just a little’ bit better. There’s not much to the animation itself.

It’s looping and has some delay between the different segments of the mesh, causing the animation to look ‘floatier’ for the lack of a better word which I like.

I achieved that by keyframing not only the controls but also the joints. Very scuffed, but it got the job done.

15_Rigging

Material Setup, Lighting & Rendering

When adding textures to Unreal, I always like to add some customizability so it’s easier to iterate on, switch them out, and/or adjust them in-engine.

I do this by usually creating a master material to work on. This one isn’t too complicated, but it lets me keep up a faster workflow and easy modifiability.

16_MaterialMaster

I added two extra in-engine things to the materials of the character – a very subtle subsurface scattering on the porcelain parts of the character and anisotropy on the hair of the character.

The lighting and other supporting actors are simple.

An HDRI-powered skylight as a base. A key light with a strong light intensity, a fill light to lighten the shadows, and some rim lights to add interest in the silhouette.

The key and fill lights had a relatively large source size to lessen the sharpness of the shadows cast by them.

17_LightingSetup

I used the Movie Render Queue to get my renders of images and videos done and gave them very small adjustments in Photoshop.

One render I did in Marmoset to get as high of a resolution render as possible, as unfortunately, my laptop suffers when working with high resolutions in Unreal.

Marmoset seemed to be able to deal better with higher resolutions!

Conclusion

It took about a month’s worth of evenings to create the character. In conclusion, this was a fun project that I feel fulfilled all the goals I aimed to reach.

More importantly, seeing my painting come to life makes me feel really happy.

There are points of improvement – as always – but as a result, I’d say that the Porcelain Demon came out pretty great!

I learned a few things along the way, and I hope you got something out of this too. Thank you very much for reading! 😊

18_Lineup