[Edit] Seems the HLP fora don't like nested lists...
Hokay, I ended up editing this over the past few days in a text editor. Hopefully everything I wrote while in a sleep deprived stupor is coherent...
...
For the most part, I think people have been doing normal maps manually, painting each color on as they go. I just came up with a nifty way of doing this with out having to think about slope. As much.
It's probably easier to make bump maps, ja? After all, you just draw shades of grey to indicate about how high the stuff goes. Unfortunately, real time graphics can't usually handle bump maps, so to make all the pretty little details, we turn to normal maps. (Normal maps actually give you better latitude, not having to worry about height...)
But making normal maps is hard. However, there's a way to make something that's close as makes no odds using Photoshop. (Well, just one filter...)
(The following instructions will assume an okay level of acquaintance with Photoshop. I'm using CS2.)
First, if you can, switch Photoshop to 16 bits/channel. This will make things look less lumpy if/when you get to adjusting things later. Not necessary, but if you really up the contrast or severely level things off, this will save at least some of the image quality.
Now,
- take your bump/displacement map into PS, and jump it twice (CTRL-J on Win or CMD-J on Mac)
- On which ever one you want to take as your base horzontal channel, go to Filters > Stylize > Emboss.
- > Set the direction to 180° (Assuming that black is farther back on the bump map and that white is closer forward. If vice versa, then use 0° for the direction.)
- > Set Height to 1 or 2, preferably 1 as anything higher makes it blurry.
- > Set Amount to whatever looks good. Not too high, though. You want to avoid seeing straight up black and white on the resulting image.
- > If it looks too flat, which I'm betting most little fibbly bits won't, you can up the contrast a bit. (Note that most of the background is now grey. This is 50% gray, and must remain so for the plane to lay flat where it should.)
- Do this again with the layer you made for the vertical stuff.
- Direction as -90° (if black is farther back and white is farther forward. Use +90° if black is forward and white is back...).
- It's probably best to do the exact same adjustments you did to the last one, if any, to this one.
Now you have two grey layers. Whoopdey doo.
- Turn off visibility for the bump map layer. Or delete it, if you want.
- Place each of these new grey layers in their own groups (And set the layer-groups' pallet colors to Red for the horizontal one and Green, the vertical. Purely organizational here.)
- In each group, do this :
- > Make a new blank layer over the grey image and fill it with the color for that group, IE for the Red group, fill it with red.
- > Then set this color layer mode to Multiply. Finally, set the layer group's mode to Screen.
For the Z/Blue channel, things get a little fun. We have no way of generating something useable for the Z channel with straight filters, but we do know that in general, when there's non-0 X and Y values (IE Red and/or Blue != 50% grey), that Z is less than 100%. There are two methodes of doing this, both of which you can mess around with a lot. The easier/shorter way is to use curves. The longer way is to use levels. The problem with the latter is that you have to remember to do a bunch of steps, though it could be automated. Then again, so could the curves one.
For the curves way, you
- Copy Visible (Ctrl-Shift-C on win, Cmd-Shift-C on mac) (You may need to select a visible layer or group in versions previous to CS2 before you can Copy Visible)
- paste, Move to Top (Ctrl-Shift-] on Win, Cmd-Shift-] on mac. Do as many times as necessary, if you're in side some groups.)
- Curves (ctrl|cmd-M),
- > place a dot somewhere around the middle, and change the input to 128, and the output to 255,
- > Change the left most and right most dots' outputs to 128
- > Apply the change
- Go to the channels tab (By default it's next to the Layers tab in the Layers tool pallet),
- > (Mac) Cmd-Click the Red then Cmd-Opt-Shift-Click the Green
- > (Win) Ctrl-Crick the Red then Ctrl-Alt-Shift-Click the Green
- Hit Q to go into Quick Mask mode and copy all (Ctrl-A Ctrl-C | Cmd-A Cmd-C)
- Exit Quick Mask mode by hitting Q again and paste
- Put this new layer in it's own group ala Red and Green, with a color layer over it set to Multiply, and with the group itself set to Screen.
- Hide everything outside the three colored groups.
Et voila, you now have something that you can pass off as a normal map. The vectors prolly aren't unit vectors, but it's as close as makes no odds.
The way I've explained here is much easier, I think, than when I first did this. Originally, I used quick mask work to paste the color channels in solid colors with varying opacity (Essentially, take gray layer, copy, new layer, paste into quick mask, fill layer with color, set layer to screen.) This required an additional black background layer, and made editing the grays substantially harder.
...
As to why the Z values have to be greater than 128/50%: The RGB values made here are taken with very little translation as XYZ values for the normal. Essentially, every point now has a normal detirmined by its color.
RGB values are on the domain [0.0, 1.0] (or [0, 255] for 8 bit channels. Basically, any RG or B values can be between 0 and 255.), while the normals' coords are on [-1.0, 1.0]. (This might vary with implementation. Normally, though, they oughta be [-1.0, 1.0]. ... Normally. Hah. I R SO FUN E) The point is that 50% in RGB becomes 0 for the normal's coordinates. Having Z values less than 0, IE Blue less than 50%, means the normal is facing
in to the mesh. And that would look silly. I guess you could have a light inside the mesh and...
Also, the levels thing... Whooo, that was fuuuun. If you really wanna know how that went, (Starting at where I mentioned the Levels aproach in the instructions.)
- Go to the channels tab and make a new blank channel. Fill it with white. (If you hit D at this point, that's Ctrl-backspace on win and Cmd-delete on mac)
- > Ctrl|Cmd-click (Load selection) the Red channel,
- > hit Q to enter Quick Mask mode
- > The second time through for each channel, invert the image here, as well as before leaving Quick Mask mode.
- > Change the 255 in the Input Levels boxes (Right most) to 128,
- > Change the 0 in the Output Levels boxes (Left most) to 128
- > Apply
- > Invert the contents of the quick mask (Ctrl|Cmd-I)
- > Exit Quick Mask mode by hitting Q again,
- > Go to the blank white (Or formerly blank white) Alpha layer (Hey, it's Alpha 1...) and Alt-Backspace on win, Opt-Delete on mac to fill it with blackness. Well, in this case, greyness.
- > Repeat this again with the Red layer, but inverting it right after entering Quick Mask mode. (As stated at the second step.)
- Do the above for the Green channel, too.
- Select and copy the contents of this new channel, and paste it into a new layer in the regular layers thinger, then give it its own group and a blue color layer and all that.
And that's why the curves method is better.

This levels technique also makes harsher edges by default, where the curves method makes somewhat softer ones. The curves one is easier to adjust if you want to change how 'round' the Z values are.
And yes, I know I used both grey and gray in there. I bet I used both color and colour, too. These things are random...
...
So, any other thoughts, ideas? Besides baking in ${FavouriteModelerHere}? Been doing normal maps a different though easier/easy-as way? You've read this and concluded that I am a horrible teacher|writer?