Normal mapping, conforming detailed pieces to basic mesh

Hey guys,

I have a shoe modeled and I’d like to add normal-mapped stitching, but I’m having trouble with the workflow. In the attached picture you’ll see the shoe off to the left, and the stitching as a separate object for normal mapping to the right (I used a curve and an array). I understand normal mapping is usually done by detailing a duplicate of the entire object to be detailed, but in this case I’d like to limit the detail to the flap of leather going horizontally over the foot which connects the center piece to the rest of the shoe. I’ve unwrapped the flap and have attempted to create a normal map, and though it’s not shown in the image I’ve tried using a lattice to better conform the stitching (after the curve’s been applied in object mode), but I just can’t get it precise enough directly under the shape of the flap to make it work. I’ve also tried the mesh to curve script and that didn’t seem to work too much better. Any ideas?

Attachments


Could you elaborate on what you mean when you say it doesn’t work (or attach a blend or something)? Detail doesn’t have to be pin-point accurate to be baked onto a normal map, so if you place your stitches roughly over your flap, I see no reason why that would result in a bad bake.

Zwebbie,

Thanks for the reply. By “doesn’t work,” I mean very few of the stitches show up in the bake. Because the flap is so thin, it’s tough to get the stitches into it precisely, so very few of them show up precisely. I guess I’d just more of a computational way of getting the stitching object where I want it inside the shoe, and less trial and error. I tried a 3D bezier curve, but the corners didn’t work too well and it seems, from my experience, that things that require a certain orientation don’t work with 3D curves too well.

Attachments


That’s true for when you want a low poly model to look like a high-poly version, but for microdetails (like when you get down to scratches, and in this case, stitching) sculpting is going to reach its limit and you’re better off painting the texture directly onto the UV layout. To do this, paint a UV map in greyscale (like a bumpmap with the white parts coming out, the dark parts in and shades of grey for bends between) and then use something like the Nvidia UV map plugin (Photoshop) or the Normal Map Plugin for the Gimp to convert your greyscale maps into full working blue colour Normal Maps.

The trick to making really cool Normal Maps is to use both methods. Use duplicate models (hi and low resolution) for the initial bulk details, then make another Normal Map for the microdetails. You can have them separate if you like (as two textures) or just overlay the two maps into one.

EDIT: For blender compatibility, when you make the map in those programs, be sure to use the “Invert X” option, as Blender has that colour reversed.

Lancer,

Your last paragraph pretty much describes what I’ve been thinking in terms of process. As far as the Nvidia UV map plug-in, is there something equivalent for Mac that you’re aware of? I only see a Windows one through the link. Either way, I think you’re right, that’s probably the best way of going about it. At that scale, it’s doubtful it’d be noticed too much. But I’d know, goddamn it! No, not really. Thanks.

Well, you could try Gimp for Mac, and then the plugin should work (fingers crossed). Be interesting if it does… perhaps you could let us know?

I use Photoshop, though, so that’s not ideal. But, I did find a little stand-alone Mac application called “NMG” that does the job alright:

http://homepage.mac.com/nilomarabese/Menu13.html

Thanks for the help.

A high poly doesn’t have to be directly on top of the lowpoly. The texels from the lowpoly send out rays to look for the highpoly, so the sky’s the limit in this regard. What I think the problem in your case is, is that the distance they travel is 0, so only the intersecting parts are baked. Try setting your Dist value to about the maximum distance that a stitch is above the flap (give or take, just make sure it’s more) and set the same value for Bias.

Ahh, okay; I wasn’t aware there were settings for normal baking. I think it’s most reasonable at this level of detail to just create the details in Photoshop and convert them to normal maps, but thanks for the info.

Yes, I agree there - making them in Photoshop will probably look nicer. You can even make the flap a tiny bit thinner/dented in in where the stitches are that way.

I had another question, and it sounds like you might have the answer, Zwebbie (not that anybody else who’s posted in this thread wouldn’t, you’re a knowledgeable group):

What’s the most efficient process for normal mapping something like this, that isn’t sized for a game and can have tons of detail? Though the sky’s the limit, pretty much, in terms of how much detail I can use, I’d like to know I’m being as efficient as possible to balance rendering speed with image quality. So I know in a game there’s usually one 1024 X 1024 normal map, but at the resolution in which I’m working that seems way, way too small. So would several 1024 X 1024 maps be okay, maybe one per object? And then would it be considered prudent to merge all separate objects (clothing, the character’s body, etc) into one object for rigging?

Apologies in advance for the bump, I think people might have gotten the idea the entire topic was resolved.

To reduce aliasing I usually bake/create the normal maps sized at a multiple of 4. When I need 1024x1024 px, I bake and edit the maps (using grayscale/bump maps) at 4096x4096 px and scale them down in Gimp or Photoshop later (of course choosing the best scaling algorithm for the job). I keep the 4x versions, which are leading.

When creating a low poly model for a game I combine all the normal maps to 1 by putting the separate layers in overlay mode, merging and then rerunning the normal map plugin in normalize mode. (note: Depth resolution of the normal maps will decrease when using overlay mode)

When creating a high poly model it’s usually a matter of what is best for the job.