# How do I make a normal/displacement map when all I have is a photo?

In order to make a rendering look more realistic some additional maps are useful.

The documentation lists: diffuse,specular displacement-maps .

I watched a video tutorial The Secrets of Realistic Texturing which uses a commercial tool.

Are there any alternatives to calculate normal and displacement maps from an image texture, or can this also be achieved by some build-in transformations?

NOTE: As requested, this is related to image-textures that have been downloaded from a site like cgtextures which are image-only and lack of normal- and displacement-maps.

• Can you be more specific? - Give some examples at least of other types. – ideasman42 May 27 '13 at 8:43
• @ideasman42 Thanks you, I added a note. Currently I don't have a specific problem, just want to know how to create those maps. – stacker May 27 '13 at 9:08
• eh define those maps ?, still not sure what your question is, but this sounds like it may be too vague stack-exchange. Or the question should be: How do I make a normal/displacement map when all I have is a photo. – ideasman42 May 27 '13 at 9:52

I've compiled a list of options when it comes to normal and bump map creation. All that remains is to try few of these out and see which results you like best.

To me, the most advanced of the free solutions is MaPZone 2.6, but I haven't tried any of these so I am not sure.

Or you can try the web based Smart Normal, for very basic normal maps generation.

Another tool is Knald which offers high quality, accurate height maps generated from a Normal/Derivative or photo-sourced texture.

I didn't include urls, since they can be easily googled.

• @Dwelle thank you, excellent way to answer this question. – stacker May 27 '13 at 12:14
• SSBumpGenerator claims to be OpenSource but on SourceForge you don't get any sources. – tgmath May 27 '13 at 16:38
• I believe it's on their SVN, sourceforge.net/p/ssbumpgenerator/svn/HEAD/tree – dwelle May 27 '13 at 16:50
• Great answer! I'd love if it was updated to reflect which solutions Mac and PC users (or both) have access to - maybe one color on the chart for Mac, one for PC one for both? – MicroMachine Jan 16 '18 at 23:39

Another possible answer might be the Gimp plugin called Insane bump.

To my knowledge it has a Normal, specular, AO, the same as Crazy bump and it's free and open source.

There is also another plugin called Normalmap, which can be installed as .deb gimp-normalmap in Ubuntu.

• Just to add, Insane Bump needs gimp normalmap to generate normal maps – Seph Feb 28 '14 at 6:24

Generally it is much better quality-wise to do custom images based on the desired properties of the surface, using software made specifically for this. For a quick and dirty bump map, blender supports using a colour image as a bump map directly, without conversion to a black and white format. If you want a way to generate a bump/normal map inside blender, you can use baking.

The steps are roughly:

1. Add a plane mesh, go to edit mode and unwrap it
2. While still in edit mode and with everything selected go to image editor and add an empty image from the menu Image->New. Enter the dimensions of the colour image you want to convert to normal/bump map. Name your image appropriately.
3. Add a texture to the material of the plane mesh, go to the Texture Properties tab, Change the tyoe to image, select the image texture that will be converted to bump/normal map, use UV coordinates and turn colour influence to 0 and normal influence to 1.
4. Go to the Render Properties tab, Bake panel. Now you can choose the format to bake to, either bump or normal (tangent space is usually the preferred space here) and press the big Bake button.
5. Watch your empty image that was added in step 2 get baked over by the renderer.
6. Go to image editor again and save the image to a file.

The method I use is not exactly "expert" and may yield different results. However, it is easy and free, and produces acceptable results for me. What I do, is make a black and white copy of my image texture, then with GIMP's built in filters, I apply the bump map filter.

You can find this under:

Map→Bump Map.

You can then apply other effects, such as increasing the contrast, to achieve better results. I have used this to generate displacement and normal maps for planets, for instance. It's not necessarily a "professional" method, but it's easy and works well for small scale projects.

## Example:

This texture I used to generate a normal map on this asteroid:

Please note that it is not as clear here because the asteroid has an "atmosphere" on top. I also used other (procedural) textures for displacement.

• @RolandXor Thanks, I tried it, a nice trick to add some fake structure. – stacker May 29 '13 at 6:50

If you have a situation where it's something you can photograph - Then you can go to structure from motion.

I take photos for every 15 degrees of a subject, use ppt-gui or vsfm to convert the photos into a point cloud, meshlab or cloudcompare to convert the point cloud to a high density mesh.

I then take the high density mesh into blender and create a low poly version either using the decimate modifier or by building it. I uv map the low poly version then I bake (using selected to active) normals, ao, vertex color and displacement.

This workflow can take more time, particularly computer time and will require a fairly fast machine. The most labour intensive bit is usually the uv mapping if you are mapping a complex object. It gives you a lot of maps that line up exactly and is quite physically accurate.

Just to add to the list, even though the question is old. I've used AwesomeBump (https://github.com/kmkolasinski/AwesomeBump) to generate Normal, Specular, Bump and Height (which I guess is Displacement). It can also generate PBR textures. It's open source under LGPL.

I found a standalone version of insane-bump 2.5 from 2013. There is no documentation but it works: https://sites.google.com/site/ccdsurgeon/download (not sure this is related to the gimp-plugin). At least my anti virus software says it is clean.