My goal with this project is to create a likeness portrait of the Jacob Batalon as Doctor Strange. Ultimately I want this piece to be more artistic rather than technical, I tried to keep the workflow as simple as possible and not too overly complicated with many different software and technique. Mostly I intended to have fun as a project which I do on the side between work.
My main sculpting tool in ZBrush. For texturing, I use Substance 3D Painter and I render the model using Vray for Maya.
References & Inspiration
My inspiration came from watching Spider-Man: No Way Home. Seeing Ned with the cape and with his abilities to use magic made me think what if he was Doctor Strange in some other universe. After seeing the movie my goal was to do his portrait and finish it by the time Doctor Strange in the Multiverse of Madness was released.
All of the clothing wear is done using Zbrush. I use mainly the sculpting brushes like the standard brush and clay buildup brush to create main folds with additional various cloth brushes such as cloth nudge and cloth move.
The cape is the most complex part of the outfit. To break it down into something more manageable I separated it into different pieces according to the reference. This way I can mimic the way the cape is made of multiple layers of clothing and with separated pieces, it will be easier to secure higher texture resolution.
Almost all the cloth pieces were done using the same technique. By masking and using the extract option in Zbrush. With this technique, I can create meshes with 3 surfaces ( outside, edges and inside) with each surface being different polygroups which will make the UV process easier (as shown in the image below – the polygroups of the clothes).
Face modeling and skin details
I gathered many references for the actor. Modeling a likeness is a very tricky process. I tried to collect different angles and lighting to make sure my sculpt looked as close as possible to the images. For this project, I’m referencing Jacob Batalon playing Ned in Spiderman Homecoming. I started off with a clean base mesh that already has UV and begin sculpting using mainly the clay brushes, move brush and dam standard.
When I have the primary and secondary shapes in place I will start breaking the symmetry to make the sculpture looks more believable and more natural. (It is important to keep the face from being 100% symmetrical)
As for the skin details, I use the multi-channel faces from TexturingXYZ following the “Killer Workflow” method. This workflow provides good results which can be used as a displacement map and diffuse channel. After the process, I can touch up the model with some sculpting for some specific areas such as the eyes or the lips with brushes like dam standard brush and clay brushes.
Killer workflow: https://texturing.xyz/pages/killer-workflow-using-xyz-and-zwrap
UVing and Baking
By modeling the objects using polygroups I can easily isolate each surface of the model into clean UV islands by selecting the edges around each group (given the example of the belts).
(Red and blue are separated into different islands)
To maintain high resolution for texturing I use up to 3-4 tiles for each object ( the cape, shirt, belts). I double-checked texel density for all the islands to have similar values since using the Layout UVs option could result in big differences in the texel density.
(Example amount of tiles and islands of the cape part).
Some parts of the cape have a pattern that goes along in a straight line. To make this workflow more effective for the texturing process I use the straighten UVs option to make the tileable texture projected perfectly in Substance 3D Painter.
(As seen in the image below – The highlighted area was unwrapped and then straightened which will result in cleaner UV islands).
I use Substance 3D Painter to handle the baking for the clothes. Since there are many parts that are close to each other, I use the baking by mesh name ( low and high) option to get cleaner bakes for each object.
An example of the cape pieces. The left one is the low mesh with UVs and the right one is the high poly mesh from Zbrush.
By having the correct naming conventions and match by mesh name turned on, should result in a much cleaner bake.
For the face textures, I use the albedo from TexturingXYZ multichannel as a base. Once I have the texture projected onto the model I imported both the head model and texture into Substance 3D Painter and made further adjustments such as adding more color variations and using the baked curvature map to create details for skin pores and wrinkles colors.
As for the clothing textures, everything has been manually created. The idea is that I want the clothing to feel used and worn out. Many layers of damage and imperfections were used to bring life into them. I usually start with a simple base color and then add a grunge layer on the top of it to create color contrast.
Some baked maps can be used to create imperfections such as the curvature maps for edge damages or the AO map to create darker crevices. As for the cloth details I use multiple maps from the micro fabrics of TexturingXYZ.
(Below is an example process of texturing the shirt).
Mask layer of edge damages driven by the baked curvature map and grunge map.
For grooming, I use Xgen core for the hair and Xgen IGS for the fur on the cape. Before started grooming I blocked out the hair in ZBrush and bring it into Maya for references. Before placing down guides I usually make a backup part of the scalp and use that as the mesh which is bound to XGen.
I started the first process by placing guides and moving them as close as possible to the sculpted geo hair. By having enough guides I’ll have enough control over how the hair will look.
Once I have placed down enough guides I use modifiers for XGen to create variation and imperfections to the hair strands. I like to start off by using clumping by guides so I can have the hair shaped a little bit more similar to what my guide’s placement looks like.
I will further add 1 or 2 more clumping modifiers on top of the main clump to create a more natural effect and randomness of the hair. For this piece, I have 2 noise layers, one with the default settings which control the overall intensity of the noise for the hair and the other one control the fly-away hair.
The cape fur requires a bit of playing around in Xgen IGS. My goal was to create a very short layer of fur that is very subtle and mainly will be visible in the shadows. First off, I select all the pieces of the cape and create interactive groom splines from those parts.
The settings I played around with the most are the scale which controls the length and the noise modifier. To control the direction of the hair I use the sculpt brush which I can use to groom the hair in real-time and to control the density of the hair and I use the density brush with low settings to add or remove hair.
Lighting and Rendering
I experimented with different angles of light and found that the one that looks the most interesting is having the light coming from the side and having a clear contrast of light and shadows.
For this project, I use Vray as the renderer. I have 3 main materials which I use for everything. Vray Mtl for clothes and metal objects, Vray Al Surface for skin and VrayHairNext for hair and fur.
Starting off, I export all the maps from Substance 3D Painter using the Vray template. This will give me a total of 4 maps (Diffuse, Roughness, Metalness and Normal map) which I will be applying to the Vray materials.
Ideally, I want to keep the polycount somewhat manageable. I apply a single Vray displacement map node to most of the outfits and accessories. I can then use Vray Opensubdiv to subdivide the mesh which will only be visible in the render view. I found this technique to be super helpful and does not slow down my scene too much.
(Below: Vray displacement node : openSubdiv)
As for the displacement map of the face, I exported the map directly from the high poly mesh in Zbrush. In Maya, I applied another Vray displacement node only for the face and manually tweak the values there to get something that I like. Turning on “allow negative colors” in the Vray displacement node should fix any weird high and low-value issues similar to adjusting min and max values.
This image shows the process of lighting the scene. I use a three-point lighting method. Starting off with the main light which has a strong intensity, at this state my goal was to create contrast on the side which will be filled out using fill light later.
The rim light has the strongest intensity which is used to separate the character from the background. Lastly, I have a light that only affects the eyes, this is for creating a highlight in the eyes which will give more life to the character.
Creating a realistic character is always difficult and challenging. With this project, I feel like I was satisfied with the results and I can see rooms for improvement which I will make on the next project. As stated in the introduction that this project is meant to be a fun project without overwhelming me with technical details and super complex workflow as I feel like it is important to have relaxing projects to do on the side.
I hope that this breakdown has been helpful and thanks to Games Artist for the opportunity to publish this article.
For more of my work you can find me on: