US Soldier Vietnam
Introduction
Hi, my name is Cameron Masters-King and I’m a self-taught 3D Artist from the UK.
Goals
My main two goals during this project were focusing on an accurate creation of the M1 helmet and learning realtime hair creation using Xgen and Arnold to generate haircards.
Software
Software used during this project:
- ZBrush – Creating high poly sculpt.
- Marvelous Designer – T-shirt and helmet cloth cover.
- Maya – Subd modelling, retopology and UVs.
- Xgen/Arnold – Haircard creation
- Substance Painter – Texturing.
- Photoshop – Texturing, colour grading, general use.
- Marmoset Toolbag – Baking.
- Unreal Engine – Rendering for final presentation.
Inspiration
My main inspiration for this project came from an interest in the Vietnam War and the iconic look it has, which is seen in classic war films such as Apocalypse Now and Full Metal Jacket plus bits of documentary footage and photos you find online.
References
I gathered images ranging from close-ups of the M1 army helmet and the different components to other artists’ work, hair card examples, lighting, colour grading and more.
Blockout
I started blocking out the head for my character using a basemesh which I adjusted and sculpted over, slowly refining proportions and primary forms. Once happy with the sculpt I begin to break symmetry on the face and give the eyes a relaxed look so everything feels a bit more natural.
I used Maya to SUBD model the M1 helmet. I started by modelling the base shape of the helmet using a low poly quad sphere to create the outer shell constantly checking references to make sure the shape was right.
After this, I subdivide once or twice to give myself more polys to work with and add thickness. The next steps show the inner sweatband and straps which follow the same process.
From here I work through modelling all the different clips and brackets you see on the helmet
Marvelous Designer
I used Marvelous Designer to create the cloth cover you see wrapped around the helmet. I started by tracing over an image to get the pattern.
With the pattern drawn out, I simulate this over the outer shell, then push the inner helmet liner upwards to clamp the cloth between both helmet pieces.
A useful tip you can try is the shrinkage weft and warp values which can either tighten or expand your garment without needing to scale your pattern up or down which can come in useful.
Creating the T-Shirt was straightforward, I just followed a rough template and adjusted if areas were too tight or baggy.
Once happy lower the particle distance between 1-5mm, simulate and export without thickness as an FBX.
Exported cloth cover over M1 helmet.
ZBrush
Using Zbrush I import the raw Marvelous Designer garments and polygroup by UV, next I zremesh with groups and reproject the high poly details back onto this zremeshed version.
From here I clean up artifacts and polish/sculpt folds. Once everything Is cleaned up you can begin detailing and adding seams to our mesh using layers to work non-destructively.
XYZ/Zwrap – Details
For the high-frequency skin details, I used Texturing XYZ VFace and then R3DS Wrap to transfer the topology onto my highpoly sculpt.
With this, I can apply a displacement map in Zbrush or use the normal map supplied.
Low poly
For my low poly mesh I manually retopologised the T-shirt and helmet cover using Maya’s Quad Draw tool making sure I add extra geo to maintain silhouette if needed. For any hard surface pieces I usually just remove edge-loops from my SUBD model and weld vertices in areas to get my low poly.
Creating the UVs is straightforward just make sure if you have any hard edges you always add a cut and try to reduce distortion the best you can. With the UVs complete I set everything to have a texel density of 40.96px so details remain crisp on close-ups and arrange everything into texture sets.
Hair Cards
This was my first time creating real-time hair for a character so I’d definitely make some changes next time but felt it went pretty well overall. I followed Adam Skutt’s tutorial on real-time hair creation.
Using Xgen to generate the hair and Arnold to render out the different passes.
I began by sketching out different hair strands ranging from thicker facial hair to long and thin eyelashes using Photoshop.
Once happy with the initial sketch, I create a plane and assign this as my albedo texture so I can trace over it later on.
I then duplicate this plane and cut out each strand/clump and rotate each one by around 15 degrees roughly, so it mimics the human head/face. From here I work through creating all the different strands/clumps using my sketch as a guide.
Next, I set up a top-down camera and set my output resolution to 2k.
With the camera setup, I hide everything other than the hair and lock the camera position to prevent any accidental movement.
This step requires setting up custom AOV’s for different passes such as AO, normal, ID, roots/tips and depth.
Once this is set up, I go through and render each pass out.
Because my character had quite short facial hair I created a beard cap so I could reduce the number of hair cards required. I create this by extracting a region of the face I want to grow the beard from and start placing guides, making sure to capture a good sense of direction and length.
A video I found really beneficial to me when first learning XGen is by Hadi Karimi.
The next step was creating a density map. You can create this either in Zbrush using polypaint, Photoshop, or Maya by clicking on the paint Icon.
This just breaks up the hair so there’s a bit of irregularity.
After applying a density map you can apply different modifiers like clumping, noise, and coil depending on the hair type/style you’re going for.
Once I was happy with the groom, I convert these guides to geo and combine this with our low poly beard cap and bake using Marmoset Toolbag.
Application
Applying hair cards are straightforward just a bit time-consuming especially if you have a crazy long hairstyle.
First I start with the larger more opaque clumps and gradually work down towards single strands to achieve a natural-looking hairstyle/beard. I also made sure to use the beard cap as a reference point when applying hair cards so everything blends seamlessly together.
Texturing
The first task to tackle when I began texturing my character was the Mitchell camo. I managed to find an image of the camo online, but it was pretty low res and not tileable. To create a usable texture, I used an AI upscaler to increase the resolution. Now that I have a larger image I used the offset tool in Photoshop and started cutting out different leaves which I could paste over the seamlines to create a fully tileable version.
With the Mitchell camo made I created a few color variations, masking out different leaves and adjusting color values to get a completely different style.
When texturing I like to focus on my base colour. Starting with the camo as the base then gradually working up adding secondary colour information then the smaller details.
Anchor points are a really useful tool to use, for example, I used height information from a wrinkle/creases map to add colour, so it looks worn out and faded.
For the chipped paint seen on the metal clips and brackets I used custom alphas/stencils to add wear, I always try to stay away from procedural generators or smart masks most of the time. Manually applying this wear gives more of a graphical feel with better readability in my opinion.
To create the inner helmet liner texture, I used a photo I found online which I de-lit and manipulated into the shape of my UV shells using Photoshops “liquify” tool. With the helmet liner base colour in place, I created an anchor point so I could reference this and create a quick roughness map.
The insecticide label took the same approach as the helmet liner. I used an image I found online which I manipulated using Photoshop to remove most of the warping using the “Adaptive wide angle” filter plus the warp tool to reduce any minor distortion left over.
Unreal Engine
For this project, I used UE4 with ray tracing enabled. I did migrate to UE5 but I don’t have an RTX card, so raytracing is unavailable to me.
Hair
For the hair shader, I created a really simple material that just uses the base maps we rendered from Arnold. You can create a more complex shader that utilizes ID, depth, AO and root map to control random color variation, roughness and spec, etc.
A video I found useful was Trigon’s hair for UE5 Rendering Hair For Games In Unreal Engine 5 he creates a hair shader with these specific functions but for my character, there wasn’t really a need to have all this control in the end.
Helmet
For any cloth pieces like the T-shirt and helmet cover, I created a cloth material with Fresnel/sheen parameters and material functions to adjust albedo tint, saturation and contrast.
There’s also the option to enable detail normal maps and a second UV set.
The insecticide bottle is using a simple translucent material with parameters to control refraction, opacity and roughness.
Skin Shader
The skin shader is by Saurabh Jethani he has a really good article here explaining how to use it and the download link for anyone interested.
Lighting
Lighting my character was kept simple using key, fill and rim lights with additional to highlight interesting areas.
I also add another area light which just affects the eye mesh so I capture a nice reflection in the eyes.
Final rendered images in Studio lighting.
Creative Lighting
For these renders, I explored a more cinematic approach with the use of color and strong shadows/highlights to add a bit more character to the scene.
For the final scene, I decided to go for a jungle environment. I used a tropical rainforest HDRI from HDRI Haven as my backdrop and skylight.
For the sunlight, I used the environment light mixer so I could control the sun’s position and time of day so it resembled similar lighting conditions as the background.
Conclusion
Overall I was really happy with the end result. It took just under two months to create with most of this time spent researching and understanding real-time hair workflows.
Thanks to Game Artist for reaching out and allowing me to walk through my process, hopefully it helps.