[WIP] Sci-Fi Helmet

(Paulchambers3d) #1

Hi there. Following all the great work on the Sketchfab forums has inspired me to share my current project here. I'm going to post periodic model updates to my Sketchfab account as well as here in the forum. i also post regular updates to Twitter but I can go into more detail here.


I'm working on a real-time Sci-Fi helmet inspired by the superb "Modeling a Sci-Fi Helmet" tutorial by Kent Trammell over at CG Cookie. Kent shares a modeling workflow that starts with sculpting the main forms in Blender before re-topologizing to more traditional polygonal meshes to get a really accurate hard-surface look.

In Kent's example, he keeps his model high-resolution and renders Static renders in Blender Cycles. In my case I'm going a step further and moving on to a lower-poly mesh to be able to share it in real-time here on Sketchfab.

While Kent encourages letting the sculpting dictate the form, I wanted some form of basic planning so I went ahead and made a couple of basic sketches:

I made this one in about 30 minutes using "MyPaint" which has an "Infinite Canvas" mode which allows you to just keep drawing without worrying about the edge of the document. It's freely available on Mac, PC, and Linux, but I find the Linux version to be the most robust.

Early in this sketch I established the idea of a sort of Sniper helmet with having different lenses that could spin in on the one eye allowing the wearer to view different distances when looking through a scope.

From here I dived into Kent's tutorial. Blender has some terrific sculpting tools. And while it can't handle as many polygons as something like ZBrush I like that you remain in a modeling environment in which you can switch between polygonal (box) modeling and sculpting easily without – for example – moving back and forth between meshing in Maya and then sculpting in ZBrush. Of course some folks have done some amazing hard surface modeling in ZBrush which no doubt inspired Kent's tutorial.

Kent uses a grease pencil add-on which allows you to sculpt forms then cut into them to define the key shapes of the helmet. Here's where I ended up after about 2 sessions of sculpting. Maybe 8-10 hours?

The idea at this point is to have a pretty smooth model, but knowing that you are going to later re-topologize the mesh to get it "industrial smooth" - an analogy would be like making a clay sculpt of a car as part of vehicle design to get the main forms down before getting it millimeter perfect.

I guess I should point out that a few years ago I invested in a Wacom Cintiq which - though expensive - has paid for itself many times over. That said, digital sketching and sculpting is very achievable with a tablet, and is something I did myself for years before "upgrading."

(Paulchambers3d) #2

This is a model that effectively has to be modeled twice (in Kent's tutorial) - sculpting - then using the sculpt as a guide for re-topologizing. In my case, because I want to move it into real-time I need to model it a THIRD time, creating a lower-poly mesh to bake the high-poly mesh down to. Sketchfab can handle the higher-poly mesh but I'm a big believer in efficient optimization and it'll help the model display on everything from a phone to a burly desktop, and even in VR.

Here's a glimpse into re-topologizing in Blender:

There's a couple of things going on in this image:

  • First, using a combination of the Shrink Wrap modifier and vertex snapping you build new meshes over the sculpted forms. In the process of course you're drastically reducing the poly-count and thinking about edge-flow. All in preparation for UVs.

  • Second, a liberal use of the sub-division surface modifier allows you to model at a reasonable resolution but then dial up to get a really nice smooth look. Happy to talk more about sub-division surfaces if anyone has questions, but assume most folks have familiarity with how they work.

  • Finally, I'm using Blender's "Matcap" view with one of the car-paint options. This way you can see how the light reflects on what you're building and can easily spot areas where you have a kink, or indent. It's very much like past modeling projects I've worked on where I've modeled cars and you're looking for that perfectly smooth form, that follows cool curves.

Each section of the helmet is modeled separately to give me more flexibility moving forward. I'm about 2/3rds of the way through "Retopo" in this image. In the past I've used Topogun to do my retopology because it's a great program that does one thing really well, but in the CG Cookie tutorial they show you how to get Blender to bend to your will, and I have to say that it re-topologizing in Blender was much more pleasurable than I remember it being in the past.

(Gmiezis) #3

Hey Paul! That's quite a head scratcher you have here. I mean that in a positive way - all of those surfaces curving and intersecting, makes for an interesting model! Gona look forward to you finishing it.
I've been wanting to try retopoing in blender myself. Topogun is my tool of choice as was yours, but not being able to change the material and overal rigidnes of the workspace there kinda makes me want to explore other options.

(Paulchambers3d) #4

Thanks Gmiezis. Well sculpting first definitely helps the forms come together more easily than it looks. But of course when you get into retopology a decent amount of thought needs to go into edge flow and I maintained Quads all the way until I hit normal mapping.

What I like about Topogun is that it very clearly keeps the new mesh visible on top of the high-res mesh. Using a "Shrink Wrap" modifier in Blender on your new mesh and offsetting it slightly from the base mesh can help make the new mesh much more visible which helps. Credit goes to Jonathan Williamson and Kent over at CG Cookie for walking though different retopo techniques.

(Paulchambers3d) #5

Here's an insight into the retopology process a little further along:

Using three different basic colored materials just to keep my head straight, so I can see where one piece ends and another begins. Note I'm using the excellent "Layer Manager" add-on for Blender. Don't know how I ever lived without it. Crazy that this isn't included in the default set up. I've set up separate layers for the original sculpt, the retopology, and kit-based items (in gray) that didn't really need to be retopologized because they were box-modeled alongside the sculpting process.

Keeping a specular on the materials and periodically diving into matcap view helps keep an eye on good edge flow and making sure there are no kinks in the surfaces.

At about 250K verts at this stage. The sculpt was just shy of 1 million - so this is already a 4-fold reduction in mesh size, and moves very smoothly in the viewport. That said, a little later I'll retopologize again down to a much lower poly mesh.

(Paulchambers3d) #6

Next up is detailing the model. Moving away from pure retopology and "kit bashing" in little details and doo-dads. Here I am about half-way through adding that detail:

You can see I'm referencing a camera lens while modeling the "eye lenses". I often use the image window and tuck it to the side to bring in reference material given I don't have a second monitor. I'm also using the viewport matcap and AO to help me pick out the details. Again, I'm constantly looking for kinks in the edge flow to make sure the plates of the helmet feel like flawless parts of a car body.

I'm also using the mirror modifier liberally to keep modeling simple. That said, I've deliberately introduced some asymmetry in the lenses and air filters in the mouth area to help keep the helmet interesting.

In the following image, I'm detail complete:

Deliberately taking a look at the back of the helmet to make sure that small details like bolts, screws, sensors, lights etc. exist all around the helmet.

Next up will be - wait - yet more re-topology (hey I find it kind of Zen like) as I move into extrapolating lower poly meshes from these to bake normals down to.

(Paulchambers3d) #7

Retopologizing down to a lower-poly mesh is now relatively easy compared to the last step. Rather than hand-making another set of meshes, it involves creating a duplicate of each piece of the mesh and then stripping down the Sub-Surface modifier. For the retopologized mesh the sub-surfs were usually at about 2-3 levels.

For the lower-poly version, I pulled this back to level 1 or completely removed the modifier entirely. This leaves me with a mesh that is already a factor of 2 or 3 less complex than my high-poly mesh.

I then set about removing edge loops wherever I can while retaining a decent spread and removing most if not all of the edge loops I placed near corners and edges which were used to tighten up some parts of the sub-surface-divided higher poly mesh:

You can see this is still a relatively dense mesh. But it's considerably smaller than before and I'm aiming for a real-time, but high-quality asset here. I've also applied a triangulate modifier to prep the mesh ready for normal map baking. Those familiar with Blender will recognize that the red lines indicate UV seams.

For each piece I stripped back the poly count, triangulated, added seams and then mapped the UVs. Working piece by piece around the helmet.

I also like to put a small displace modifier on each lower-poly mesh which "inflates" it slightly so that it slightly covers the higher poly mesh. This way I know I'll get a nice bake because any rays projected between the two meshes during the bake have some clearance rather than some low poly faces falling behind the high poly mesh, and some falling above. This displace modifier will come in hand again later when I get to "baking cages".

But at this point I'm just cutting up each individual piece. Next I'll need to consolidate the 20 or so pieces into one single UV map but for now here's the low(er) poly mesh. You can see it's still got a decent amount of topology to hold the silhouettes of all those curved pieces but hopefully it runs smoothly in your browser:

(Paulchambers3d) #8

Once each individual piece has been UV unwrapped with a combination of seams and the split-edge modifier to get a satisfactory unwrap without any kind of stretching, I use the Texture Atlas add-on (ships default with Blender but isn't turned on) to consolidate all the UVs into one 8K texture. 4K may be sufficient later down the road but by starting with 8K I can always go smaller. Much harder to go the other way.

You can let Blender automate most of the packing, but it tends to leave a lot of the texture unused which is inefficient. In the image above, after setting up a basic auto pack, I've gone ahead and placed, and rotated each individual UV island to make the absolute most of the space available to me. That means with some of the circular UV islands for example, nesting several smaller one inside.

There's something very satisfying about getting a nicely packed UV space. Spend time here. No amount of futzing with textures later can make up for poor UVs. I use the default Blender UV grid to double check to make sure grid density is even over the model and doesn't stretch.


Love the detailed WIPs, thanks for the break downs.

(Paulchambers3d) #10

Another update. With UVs in place it's time to bake the normal maps.

Blender can actually bake some decent normal maps between high-resolution and lower-resolution meshes, but I prefer to have the flexibility of using an additional third mesh called a "cage" which - in short - helps direct any ray casting done during the baking to ensure more accurate results. (This article helps explain this.) I therefore used xNormal to bake all my meshes.

In Blender I exported three versions of each component as an OBJ:

  • The original high-resolution mesh which was re-topologized over the sculpt
  • Each lower-poly equivalent per my posts above
  • A version of each lower-poly mesh with a slight "Displace" modifier for use as a Cage

The displace modifier is really helpful. I sometimes use it a little to ensure my lower-poly meshes slightly cover the high-poly mesh. And then as mentioned above use it again to fatten further to make the cage, ensuring it has the same topology as the lower poly mesh in the process (necessary for a cage).

I also used a Triangulate modifier to (non-destructively) convert my lower poly meshes and cages to tris before exporting to OBJ.

One nice thing about xNormal is that you can queue up all your meshes and then leave them to bake, but I spent the time to work slowly one bake at a time so I could double-check and make adjustments as necessary. Another cool thing with xNormal is that it has a 3D viewer so as soon as you've baked a map you can quickly double check the results when applied to your lower poly mesh.

A couple of times during the process I went back into the texture atlas, adjusted a couple of UV vertices or recut them slightly to get a better bake. Baking normal maps is a bit of a black art, but it's worth spending the time to get the best bakes possible because any issues that come up in normal mapping will likely re-appear in texturing, so if you can't get a decent bake now, no amount of trying to fix things later will really help.

After about a day's methodical work I had a set of 20 or so normal maps, one for each component. I then used Vincent Callebaut's indispensable Photoshop plugin to consolidate all the normal maps into one texture atlas. You would think that you just need to layer each normal map in Photoshop with an "overlay" or something, but it's actually not quite that simple, and that's where the plugin really helps.

Here's the resulting map:

And here I am testing it back in Blender on my low-poly mesh:

And, of course, how it looks on Sketchfab:

Next up I'll move onto baking Ambient Occlusion (AO) to help visually reenforce all the little details which will be the first stage of the texturing process

(Paulchambers3d) #11

Time for ambient occlusion which may end up getting buried under texturing but can be helpful for the texturing process even if it's used to mask and filter things like edge wear later in the process.

I baked out two types of AO and then combined them much like the normal process above.

The first type is again high-poly to low-poly baking in xNormal to catch all the fine details of things like screws, indents, machined lines.

The next is a sort of holistic AO - the AO created by all the neighboring low-poly pieces, e.g. what shadowing does say the air vent on the front of the mask cast again the nose area. This was done by performing a second bake in Blender that takes all the objects in the scene into account.

I then took all the xNormal piece by piece bakes and combined them into one in Photoshop, and then multiplied over the top of that the global bake of all low-poly items from Blender. I then played with opacity levels to get an AO effect that's not overly strong.

Here's a look at the resulting texture:

And once again, the result on Sketchfab:

So this model now has two 8K maps applied to it: A normal map and an AO map. I'll be following a PBR map structure in texturing: albedo / roughness / metallic so I won't end up using a separate AO map in the final model but it'll no doubt end up as a layer inside the texture layering.

I've used a slight metallic in the Sketchfab 3D settings to again keep an eye on making sure I have nice flawless topology flow on the individual pieces. I also spent a little time moving a few vertices around during the AO process to tighten any gaps between neighboring pieces so that I got a good AO cast, an no light shining through the model.

If I was really looking to make a low-poly helmet for a game asset, I'd probably have retopologized the entire mesh as one object, but for now this feels like a good middle ground to keep a nice smooth silhouette to the interlocking pieces.

I've noticed a normal map anomaly on the bottom of the helmet in the collar area that's accentuated by some of the AO baking. I'll clean this up in the future, but for now I'm confident I have a good set of UVs to move into texturing...

(Paulchambers3d) #12

Going to have to put this project down for a couple of weeks while I hop on another project, but here's where I am now:

I've now created high and low poly versions of the pack of smokes duct taped to the helmet and the cigarette and jerry-rigged cigarette holder bolted to the front of the helmet. And I've baked our normal and AO for these items to a separate 4K map.

But decided before I move into texturing to build a small base diorama to tell more of a story and give some context to the helmet so it's not just floating in space. The idea is this helmet has been quickly discarded to one side with a cigarette still burning and a couple of dead ones in the ashtray. Also a fun opportunity to add a couple of stray pipes.

Once these pieces are completed I'll be able to figure out if I need 1 or 2 more texture layouts.

That's it for now. Back on this as soon as I free up again...

(Stephomi) #13

Really nice! I like the way the material is set up on the AO view, very clean.

(Paulchambers3d) #14

Thank you. A couple of things I need to clean up but close.

(Paulchambers3d) #15

Hi everyone. Had to turn my attention to other projects for a couple of weeks but had a chance to complete modeling this past weekend:

Since my last update I've gone ahead and baked normals for the cigarette additions. The idea (hopefully brought even more to life in texturing) is to have them look like hasty additions to the helmet from it's owner.

I also filled out the scene with some further details suggesting he has a smoking habit. Had a lot of fun sculpting the cigarette butts:

In addition I finished all the normal and AO baking on the hoses and base set. I took a different approach for the low-poly version of the "base" - rather than simply use a lower poly version of the final high-resolution mesh with all the subdivisions removed, I decided to retopologize it so I could make a much more aggressively low-poly version. Fun to push how low you can move the geometry but still retain the "feel" through the normal map:

I've found using a different viewport color for the new mesh helps keep things straight in my head while retopologizing. The methodology was the same as when I first retopo'd the sculpted helmet.

Next steps will be rendering out some Sketchfab screenshots for some paint over tests in Photoshop to figure out my color scheme, and then creating some material ID maps I can use for masking for the texturing in Substance Painter.

(Paulchambers3d) #16

Back with a texturing update. Wasn't sure I was going to get a chance to get anything started but found some time. I used the screenshot feature in the Sketchfab labs to print out a couple of angles of my model with just the AO and normals as a base for some "paint overs" in Photoshop.

It took some time to mask out the different areas but once they were masked it was really easy to change the colors to try out some different color schemes. Easier to do this now than in Substance Painter which will be much slower:

(Click on the image twice for a zoomed-in closer look)

A couple are really standing out for me. I started more with gray/blue but I actually really like how the military green and (surprisingly) the blue/yellow combo look.

I should be able to try a couple of different versions in Substance later, but at least I've narrowed in on some looks.


Love the array of colors-- it definitely sets the tone of what kind of combat the wearer of the helmet is in and the genre of scifi.

(Paulchambers3d) #18

Back after a hiatus with the last couple of updates. Moved into Substance Painter to begin texturing. I approach Substance Painter using a mask-based workflow. Rather than painting materials onto the model, I flood fill the model and then mask out to just the area I need using the polygon and UV paint tools. This way if I ever want to change the material it's a simple matter of swapping out the substance but keeping the mask. This allowed me to tweak colors and materials several times during texturing.

Here's a shot part way through texturing, referencing one of my paint-overs above:

You can see that I'm down to just three textures in the top-right panel, the set, the cigarettes, and the helmet. This was very deliberate to optimize the scene as much as possible, but it did mean that isolating components to paint became a little tricky, because in Substance you can only isolate (make visible/invisible) material IDs rather than meshes.

At this point I was starting to feel that the green wasn't quite right and regardless of environmental lighting set up the scene felt dark, so I pulled in the bright contrasting lens caps from one of the other paint-overs. So ultimately the final color scheme became a mix of two of my paint-over tests. Always good to remain flexible. Again, making these changes and playing with color was easy due to a mask-based workflow.

Once I felt I'd gotten the main materials in place I moved into the detail work using a combination of Substance's edge-wear generators and hand painted edge wear and scratches to give the helmet more interest.

Once edge-wear was complete I moved into decals. I used a combination of Photoshop and Inkscape (an open-source alternative to Adobe Illustrator) to build the decals and turn them into alphas I could project onto the model or alternately with exported UV layouts from Blender, designed them right onto the UV maps and then imported these textures into Substance as fill layers that could then be "screened" or "multiplied" onto the texture.

In a couple of cases I also made some bump maps this way as well to add a little extra high-detail displacement to the ear sections of the helmet.

Here's a decal in progress in Inkscape using a UV layout export as a visual guide for placement within the texture:

(Paulchambers3d) #19

And here's the final model:

I added a little sharpness and contrast using the post-processing filters to pull out the details. I also made two last edits after Substance Painter. I created a simple interior mesh for the interior of the helmet to block and light-leaks from one side to the other through very small gaps between the sections of the helmet.

I also duplicated the section of the helmet just above the left-eye and "hovered" this just over the mesh by a tiny amount to allow me to introduce a new transparent material for the "Smoking Kills" paint. By hovering it slightly it gives the impression of all being one texture - the green metal paint and the decal on top.

This way I could use the same UV texture for both sides of the helmet (mirrored) but then make the left-side unique with these markings.

Hope you've enjoyed following along. I certainly had a lot of fun with this one. Comments and Criticism are welcomed.