A beginner’s primer on texturing 3d models
One of my primary jobs at Project BC is texturing. Texturing is what changes a 3D model from something that looks like a statue into something the player can believe is a person or an object within the world of the game.
When I started texturing, I was absolutely clueless about what the different “maps” actually did, so I’m gonna explain here in simple terms what they do and hopefully it’ll help!
Okay so here’s a fancy render of a model:
And here are the clothes I textured for it in Unity Editor (so this is closer to how they’d look in game):
These were pretty much the last textures I did before we moved to working in Physical Based Rendering, which uses different textures. I will talk about PBR and how to work with it in another post and just explain the standard texture maps this time. These are set up with Marmoset Occlusion shaders and Skyshop, so use Image Based Lighting (IBL) hence those gorgeous reflections.
The Diffuse Map:
This is the map that will always be there, even if the others are not. Diffuse is how much light the object scatters when light hits it. In layman’s terms, that roughly boils down to “what colour is it?”
Some engines only allow for a diff map, and that’s what gives old games that distinctive kind of flat, cartoonish look.
There’s a reason Vaan’s abs look painted on…
…It’s because Vaan’s abs are painted on:
(Thanks to Ultimecia for ripping all these texture files and making them accessible! These are, of course, from Final Fantasy XII, one of the best looking games on the PS2. The textures are absolutely fantastic.)
As you can see, if all you have is a diff map, you have to paint fine shadows and detail onto the model (I guess unless you had a phenomenal polycount which just isn’t feasible for games) and also you had to paint on shine to the metal to give the illusion of shinyness. This method can look quite nice if you’re aiming for a distinctive painterly or cartoon look like WoW or FFXII, though limits you to certain light intensities, colours and directions to look right!
The Diff map for our jeans here looks like:
IMPORTANT NOTE: While it appears I’ve painted on shadows like the FF12 characters here, in actuality I’ve simply used the AO shadows as a guide to make the denim appear faded on the creases. You can see what I mean about a diff being just colour if I show you the shirt:
…yeah that sure is some plaid pattern, huh?
If we take out everything but the Diff on our clothes here we get:
PS2tastic! (I had to turn up the light a bit because they reflect so much less light now!) these still look a bit more detailed than PS2 graphics because the textures are about 2x or more the resolution a PS2 game would use, but they still have that flat “the details have been painted onto the fabric” look.
So next comes, all together now…
The Normal map:
Normal maps allow us to make the computer’s simulated light behave as though there are details on the model that are not on the poly mesh. We use them to add things like seams and winkles to garments, or even weave texture, pores and creases to skin, to smooth out polygon edges etc. Usually a normal map is made by making the original model very high poly using something like zbrush, lowering the polycount to something a game can handle, but applying the data for how light interacted with the high poly version to the low poly version giving the illusion of extra detail.
Normal maps look like this:
This one was created through a combined effort. Bishop took the jeans model and exported the fabric wrinkles from the high poly version to apply to the low poly version, then I took my diff map and used the denim texture, seams and zips I’d put into place and ran them through a fantastic program called nDo, which plugs into photoshop, to export these small texture details, and then to mix it together with the existing map.
Adding the normals, we get some nice detail:
…but those metal things still look kind of dull, don’t they? If we want to really feel PS3/360 era, we want the metals to shine as we move through an environment! How do we do that?
The Specular (and Gloss!) map:
Specularity is something I had trouble understanding because it’s “Shinyness”, but then you’re told that Gloss is ALSO Shinyness and it’s like “Dammit, I’m an artist, not a physicist!” So let me try to explain this as best I can. If Diffuse is how much light and what wavelengths your modelscatters around all over the place, specularity is how much light and what wavelengths it reflectsback the way they came. So the most specular a thing could get would be a very clear mirror and…about the least specular thing I can think of off the top of my head would be…a piece of felt. It is perfectly plausible to have a thing have a dark diffuse texture but still be shiny, like say, a piece of coal! So what’s gloss? Gloss is how smooth the surface the light is reflecting off is. A glossy surface will reflect light back more sharply, resulting in crisper reflections. Surfaces that are wet will be more glossy looking because the liquid gets into all the little cracks and fills them in making the surface smoother for light to reflect off. Rough surfaces, even if they’re shiny and reflect a lot of light, distort the light so that the reflections aren’t mirror crisp.
A spec map looks like this:
The lighter it is, the more shiny, or, to be more accurate, the more reflective that part is. So our metal bits, like the zips and studs are considerably brighter than the fabric here. I also made the studs a nice gold colour so they’d reflect with a brassy sheen. I made this spec using nDo, which can generate it from a normal map, but then brightened the metal bits and coloured the studs manually because nDo is automated and wouldn’t know on its own that those bits I want to be metallic.
Applied to our models…
So what can I do to go better than that!? I mean, they’re looking pretty good now, right? Well, there’s one last subtle thing we can do to just make them a bit nicer and it’s called…
The Ambient Occlusion (AO) map:
Okay so the AO is a map that at first I really didn’t get, but now I love them. Let me explain. When your computer simulates light, particularly light in a game, the simulation is really limited compared to real life light. You will simply not be able to have that number of photons bouncing around in real time, it’s not feasible. This means that your graphics will lack the kind of subtle shadows we’re used to seeing every day in our environment, So to make our models look more realistic we… cheat. We make a map that tells the computer, “even if your lights don’t put a shadow here, I want you to put a shadow here, ok?”
And so we get the AO map. They’re often quite subtle looking:
This one is relatively dark and detailed to get the rough fabric of the jeans looking nice, but also makes sure that we get a nice defined shadow under Auria’s bum to get the shape to define well. I’ve used this technique before on a face to make sure a shadow would fall under the character’s hair too.
Ooooh. Let’s turn that light down a touch…
Not too shabby!
BUT WAIT! WE MISSED A MAP! A really cool map! One that isn’t on here, but…
Remember how in FFXIII, Lightning had a shoulderpad with glowing bits on?
Look at all this glowing stuff! We have Lightning’s shoulderpad, but we also have the eyes and details on those Psicom guys glowing too. How do we do that!? Well, it may sound surprising, but if you want something to glow, you use…
The Glow (and Emissive!) Map:
The great thing about glow maps is that they’re actually super-easy to make. They look so cool that I’d assumed they’d be really difficult, but no, they’re not. Just make a map that’s all black except for what’s glowing. The brighter the colour you put down, the brighter it’ll glow. Wow, yeah, it’s seriously that simple. Just consider making sure your diff map isn’t too bright already under the glow, or whenever light shines on the glowing area, it’ll go extra bright, which isn’t very realistic. So what’s the emission map? It’s an additional map that tells the computer if it should treat that glowing part of the texture as a light source when you’re baking in lightmaps (which I’m not gonna go into here because they’re more a level building thing) for characters and standalone models, they’re not really essential.
So here’s a lightmap of some things that glow in a furniture pack, ie. TV, monitor, clock, phone, lamp, ceiling light:
So in the scene…
These things are “self-Illuminated” and will always glow, even if no light shines on them (note, there’s a little bloom effect added here too in post, that’s not a consequence of just the glow map, but glow combined with a touch of bloom looks really nice!)
So I hope that was educational! There are more maps, like heightmaps etc. but I’m not gonna go into them. You can make pretty good looking models just with these!
I hope to do a further tutorial on PBR, showing how it can bring your model work up to current gen, so stay tuned!