20 May 2021

Nick Fury in UE4 – Character Breakdown – Ludovico Totire

ludovico-totire-highresscreenshot00047

Introduction

Hi! I’m Ludovico Totire, 3d Generalist at StudioEvil, an indi gamedev company based in Italy. Recently I registered for the likeness course at ArtHeroes with Marlon Nunez and gave me a 12-week timeframe to go from Sphere to Nick Fury, to be rendered in UE4.

The full course goes really in-depth with facial anatomy and has plenty of tips and useful resources, so if you like to check it out here – http://artheroes.co/likeness-program

Also, if you want to start dealing with facial anatomy, a fundamental read is Anatomy of Facial Expression – https://anatomy4sculptors.com/collections/books/products/anatomy-of-facial-expression-paperback

Reference

I really love Samuel L Jackson, but going for Nick Fury was really not just a matter of loving the character. Choosing your subject is like choosing the difficulty level in a game. Bald, iconic, serious, little or no makeup, and with strong distinctive facial features, Fury was the perfect match for a personal project where I could spend just a few hours a week, meet the deadline and stay positive for the time going.

image-000

Having chosen my subject, I built a ref table for the base actor. There is so much to say about this step but to keep it short, I followed these general guidelines.

⦁ be aware of camera lens deformation/compression of the photo
⦁ get them at the highest resolution possible
⦁ build consistent, small set, deleting all the photos that negate some feature or information one can find as recurrent in the rest of the set.

For this project I built two ref tables: one is the real Samuel L Jackson + a “Mace Windu consistency set” as a separate table; the main reason for that is that Windu has really the same flat-angry-expression in all shots, which is important for consistency purposes.

image-001-scaled

STARTING FROM A SPHERE
For this course, the approach was to start just with a sphere in Zbrush. Usually, I started my likeness by box modeling a base mesh, tracing features and proportion from front/side planes as the first step. I actually found out that relying on tracing can quickly become a false friend. That implies focusing on specific facial features too early and leaving less room for anatomical observation and study.

So in the first week, I started with a sphere, placed it in the middle of the scene, set the focal length somewhere between 85 and 120 mm, and started aiming for the main structure of the skull and primary shapes, just by eyeballing and relying on observation. I also had ‘Anatomy of Facial Expression’ always open on my desk.

image-002-scaled

RETOPOLOGY

Following the weekly assignments, in the next couple of weeks, I opened the eyes and addressed some secondary shapes, and then when I felt kind of confident about the progression, I built a proper topology for the base mesh, with mouth and eyebags and UV. The polycount at this stage for me was around 13k.

image-003

For the UV, I tried to cover as much room as possible, to achieve the best resolution; Marlon reminded us to unwrap the mesh with the eye closed, and then open them up. That’s something I kept forgetting a lot of time, and trying to fix this later is really a time-consuming job.

Breaking The Symmetry

When to start to break the symmetry? always a tricky question for me. There’s really no perfect moment to move on. Doing likeness is an iterative process, and I ended up doing a ton of tweaking on a non-symmetrical model. There is something useful you can do, as long as the subdivision of the mesh isn’t changed, when you feel it’s time to break the symmetry, the symmetrical version can be exported as obj. Later it can always be reimported as a layer and that brings your symmetry back. One can then sculpt on additional layers and these tweaks will affect the original mesh accordingly when the “symmetry layer” is deleted.

So, after I put myself in this safe position and saved the symmetrical version I was kind of happy with, the next step is (finally) to trace the photo reference against the model, using the spotlight tool in ZBrush (again, a lot of the tips for using this tool in a proficient way you can find in the full ArtHeroes course).

image-004

Porosity with ZWrap

So here’s a nice trick Nunez shared in his free likeness workshop on ArtHeroes (a sneak peek of what you can find in the full learning path), using zWrap and XYZ texturing.

You can find a similar solution here – https://www.youtube.com/watch?v=3E44LAFKGGQ

The main difference here is that this method uses the full R3ds Wrap and not just the wrap plug-in. First of all, I subdivided the mesh. I went for 7 mln points, but you can easily hit like 40 mln, depending on your machine. After that, I created a layer and closed the character’s eyes.

image-005

Then I bought an XYZ multichannel scan texture set, choosing a matching skin tone (https://texturing.xyz/collections/multichannel-faces). I created a plane matching the image ratio in dimension and subdivision; in my case, I created a plane of 81.92 x 50.21 cm, with subdivision 400×200. I assigned the color texture from XYZ to this plane and exported it as FBX.

image-006

Back in ZBrush, I appended the plane subtool, and placed it in front of the head, making the point of the nose touch the plane. I made sure the head subtool is just below the plane in the subtool palette (the first one will be wrapped on the second one).

image-007

ZWrap needs some tracking points to work with, so I started to add a bunch of matching points; then waited for the wrap operation to complete.

image-008

This is what I ended up with (after some tweaking around the ear).

image-009

So the cool stuff here is that now the plane has warped to match the shape of the head. I used xNormal to transfer all other XYZ texture info (porosity and color) into the UV of the retopologized mesh; then used it as displacement/color on the highest subdivision level.

image-010

At this point, I needed to do additional detailing for the areas not covered by this particular texture. I bought some tileable skin porosity alphas on XYZ and using them as stamps. Another cool way to go would have been by using this ZWrap method with an HD scanned head. Once again, covered in the ArtHeroes program.

Color Info

The same applies to the color information. I converted my color map to vertex color. Then used the standard brush with the colorspray mode to fill the empty areas, sampling the base color from the projected texture with a little random variation.

image-011

Again, another method is to transfer the color from an HD scan, but even in that case there will be areas that are going to need some polishing, and the color spray brush comes in handy in that case too.

Preparation to Lookdev

Since one can easily spend months improving the likeness of a model, it’s a good idea to jump on the look dev stage at some point. Putting the likeness in different software and looking at it from a different perspective can help to spot issues. Then possibly go back in Zbrush and edit the geometry again. Also, it really depends on how much time do you have, obviously. My main goal was to render a real-time Nick Fury. I was kind of afraid though because I had little time left and a 7 mln polys floating head. So, enough for Samuel L Jackson, it was time to tackle some Nick Fury specific features: beard, scar, and eyepatch.

 

 

image-012-scaled

At this stage, for the facial hair, I used fibermesh, in order to be able to see right in ZBrush how the character should look with and without the beard. Then I exported the preview guides as curves to try to use them in Xgen or with blender because I wanted to try the alembic groom importer in unreal

image-013

Even though I ended up redoing all the facial hair from scratch, the time spent shaping the beard with fibermesh helped me a lot, as I imported the preview curve in other softwares as cross-reference and guidelines.

image-014

Before leaving Zbrush and jumping in Unreal for good, I made a beauty shot of my character, as it was one of the requested steps at this point of the course.

Baking

I exported a 100k mesh to Unreal (subdivision 3 of the original 13k basement). I baked some maps directly in Zbrush, ending with an 8k set (albedo, normal map, occlusion, and displacement). Then I baked the thickness map in substance. For the roughness, I started with the XYZ data, then I painted/tweaked a custom map, in photoshop, using other maps as the source and then subtracting some value on the parts of the face that are usually more oily (forehead, bridge of the nose, lower eye bag, folding areas). Finally, I created a specular map.

image-015

To complete the set, I also imported some porosity detail maps (normal+occlusion+roughness), to add a second layer of specularity breakup in the shader.  The maps and the basic material behavior comes directly from the ue4 documentation – https://docs.unrealengine.com/en-US/RenderingAndGraphics/Materials/HowTo/Human_Skin/index.html

 UE4 Lookdev Kickstart: Black and White UE4

For the Camera setting, a FOV value around 40 is good for a mug shot, something wider for a portrait. Then I imported the mesh without the eye and take a little time just to set up some basic shading for the skin. Usually, when starting on this task I place a post-process volume in the scene and drag the global saturation to zero, and start working just looking at values.

image-016-scaled

The material is just a basic subsurface profile model, mainly derived from the human skin from the documentation( https://docs.unrealengine.com/en-US/RenderingAndGraphics/Materials/HowTo/Human_Skin/index.html).
I just added the specularity map, a lot of min/max parameters to tweak things on the fly, and a parallax occlusion node for the height. Something I noticed while working with photogrammetry data: really high-resolution albedo maps can easily be washed out in Unreal, because of the mipmapping + temporalAA. There are two ways of controlling this behavior, and tweaking this setting can really improve how maps are working together. The first way is to set the sampled texture with a mipmap bias value. Then
the mipmap level can be manually offset to get sharper or more blurred results. The second method is to directly modify the mipmap algorithm from the texture asset options.

image-017

I find this setting super useful, in order to get sharper results when working with temporal antialiasing or motion blur. Usually, I tend to give all maps a sharper look apart from the heightmap which I blur to be used for the parallax mapping, which in turn feeds the UV coordinates to all the other maps. On top of that, if I want to get a really crisp image, I increased the screen percentage value in the post-process setting (but this has a heavy impact on performance).

For the eye, i started with the material provided in the “digital humans” project (https://docs.unrealengine.com/enUS/Resources/Showcases/DigitalHumans/index.html). Still working in black and white, I tried to match values, scale, and position. Sounds like an easy task, but make the eyes work at this stage was really a challenge to me: even subtle changes can make the guy just look off.

image-018-scaled

Lookdev Pass 2: Color + Fury Look

After placing the eye I set the saturation back on and imported the eyepatch; I quickly tuned the eye’s color and skin tone by
tweaking parameters on the shaders. For the facial hair, I went for the new alembic grooming pipeline. So here’s how my first Nick Fury pass in unreal looked like –

image-019

Beard and eyebrows were made by using the guidelines generated from fiber mesh. Kind of cool for the first try, but there were two problems. The eyebrows were wrong because the Fury’s brows are more trimmed. As for the beard, I liked the shading but there was too little transition. So here I decided to redo the grooming in Blender. Then I imported a series of three alembic hair passes, to be tweaked in the engine. A first pass for the shorter-uncut hair growing on the cheeks, a transition pass, and then the more defined beard shape.

image-020-scaled

Dressing and Lighting

At this stage, the scar was missing, but the main problem for me was to see a head just floating around. I always wanted to give Marvellous Designer a deeper look, and this was really the perfect occasion to give it a try. I blocked out the basic form of the jacket and shirt in ZBrush. Then I followed the steps of this short tutorial from Laura Gallagher (https://www.youtube.com/watch?v=vaGvsk51vUI) to bring the mesh into Marvellous as a garment. Eventually, I ended up with something to be brought back in Zbrush; I made it double-sided, added some additional detail and use ZRemesher and ZModeler to get something clean to work with as low poly.

image-021
image-022

Quick run in Substance Painter and then back to UE4.

image-023-scaled

At this stage, I had already added a dome with a screenspace grading for the background, and set up a basic three-point light stage, with main, filler, and rim light, plus a very subtle skylight. I gave all lights neutral or cool values, except for the rim one, which has a warm yellow tune. That should create a nice soft contrast with the warm color of the background.

More on Eyes

I then dealt with the damaged eye of Fury. I just did some additional tweaking to the digital human material and created a custom dead-eye texture for it.

image-024

Then a more subtle touch, to better blend the eye bulb with the head. It’s a mix of three effects that uses a non-opaque shader on three meshes overlaying the eye sphere.

image-025

The first two effects, the eye occlusion mesh, and the TearLine mesh are explained in detail in this article by Sungwoo Lee – https://80.lv/articles/efficient-character-rendering-in-ue4/
The last one is similar to the Occlusion Mesh effect, but the mesh runs horizontally and tends to blend the inner part of the eyeball with the caruncular, adding a semireflective red shade, mimicking the presence of some thin fluid layer in that area, scattering some reddish color through it.

image-026
image-027

Final Shooting

I definitely felt that there was so much room for improvement, but the clock was ticking and my main goal was to do this on time. I took an insane amount of high-resolution screenshots, and finally, I ended up with a couple of choices to be my main entry…

image-028
image-029

…. and a cover for the Artstation project.

image-030

As a final step, I did a couple of cinematics using Unreal Sequencer. A quick turntable presentation with a strong close-up, to better showcase the real-time look and feel of the final model. I then made a bunch of camera animations in Blender and imported them as a series of shots, and edited a longer presentation.

image-031-scaled

Conclusion

I wouldn’t be able to properly bring this project to an end without the help of a bunch of really cool guys and teachers I met at ArtHeroes. I’ve learned so much from everyone there, and I hope one day I may be able to share know-how and vision at the same level as these amazing artists. As the last bit of advice for this breakdown, consider registering for the free workshops that pop up every now and then, just to break the ice with and connect with the people in the ArtHeroes Community on Facebook.

If you like this likeness, you can find both video and hi-resolution images on my Artstation at the following link
https://www.artstation.com/artwork/mD9KEv

Thanks to Ludovico for allowing us to have such an in-depth look at his process. If you liked this character breakdown and want to see more like it from other inspiring artist’s make sure to follow us on :

https://www.artstation.com/gamesartist

https://www.instagram.com/gamesartistuk/

https://www.facebook.com/GamesArtist/