Creating 2D Illustration based normal maps

Audio of the text

I’ve touched upon this subject before on this blog. My earlier articles around this subject are as follows:

I recently wrote 2D to 3D Laigter to Curvy 3D Dragon as well which mentions normal maps and height maps using 2D images and goes further by using them to make 3D models.

I wanted to write an updated article on the workflow of customizing a 2D Illustrated normal map because there are a few new things to mention.

This is a more time consuming technique than just generating the normal and height maps automatically (unless you are happy with that, then you are done) but it might be worth it depending on the result needed and I did still use Laigter (*) in the workflow.

I use Krita to do the 2D artwork and I also used it in the process of creating what I needed for the customized normal map. The techniques I describe in Illuminate 2D Shape G’MIC are also relevant to this article so you will need to read that one.

As well as this you will need a method to combine the representations of the 4-5 light directions into a normal map. I used a software I’ve had for a while called Sprite Lamp (**) to do this which was made for this specific purpose and works fine with larger images. I also tried out SpriteDLight (***) for doing that part. I think there are manual ways to do this as well using color channels.

Create your artwork

First you will need a picture with clearly defined lines and flat colors.

I tried it out with a line art Illustration of a dragon I hand drew using Krita.


If you want to see a video for that process there is one below:

Create normal map(s)

After some experimentation I decided the best way to go about making the initial normal map was to separate the parts of the dragon such as the body, wing, leg, arm, eye and the head and layer them so that the resulting normal map sprites I needed could look more 3D when re-composited together. I thought this would make the process a bit more effective without having to manually correct too much.

I saved the layered parts of the dragon (with transparent backgrounds) out as .PNG files, I did not crop them, I kept them in the original document size so that they would open in the correct positions in Laigter for easier use.

stages dragon laigter gmic krita
line art to layering to normal map then the next stage…

I then exported the normal maps for all of the layers out of Laigter and imported these into Krita.

Create the starting light directions from the normal map

I merged the layered normal map’s of the dragon parts back into the complete dragon (transparency masks using the layered artwork you created help with this process).

Now with a normal map to work from you can use a filter in G’MIC which is included with the latest version of Krita called “Illuminate 2d Shape”. I wrote about this recently if you need a guide on it.

I used this filter to create five light directions for the dragon. I duplicated the normal map of the dragon for each time I ran the filter for one of the light directions and saved a copy of the normal map on a separate layer. The settings I used for each of the light directions can be found in these images:

After that I hand edited each light direction using a basic brush in Krita as you can see in this video below I recorded for one of the light directions.

My thought process for using the 16 colors for this was that it would be easier to edit things without having to worry about blending things at the same time.


You can get a really smooth result for the light map directions using the G’MIC filter as well if you want to start with that instead.

My way of doing it also meant I had to find a way to smooth out the graduations of tone afterward to create a smoother normal map for each of the light directions, so maybe it wasn’t a good idea. However I eventually did that using another G’MIC filter called artistic stylize with a custom wax crayon texture I made. I’ll put that on my Gumroad when I have time if anyone wants it.


You can use your own textures for that as well. Here is the process for using custom textures with the G’MIC Stylize filter:

Making the new normal map with the light directions

I used Sprite Lamp to import all the light directions and create a normal map from them.

Sprite Lamp dragon normal map
Normal map creation in Sprite Lamp

You can also do this using SpriteDLight

sprite DLight normal map from light directions
sprite DLight normal map from light directions

There is also a way to do this with shader node setup in Blender if you don’t have access to those software’s.

You can see how I did that toward the middle of this video from the Illuminate 2D Shape article, it is the same process I used for the dragon light directions I hand edited:

As for the height map (if you need it) from the normal map I actually thought Awesome Bump created a nicer height map from the normal’s exported from Sprite Lamp rather than the one from Sprite Lamp, especially for using as a 3D Bas-relief version. I changed the settings in Awesome Bump a little for that so I got more details. If you want a better height map than that try Substance Designer (I’m not sure if there is a function for converting normals to height map in this but there should be) or PixPlant 5.

Recalculating a height map from the normal map using Awesome Bump

Thank you for reading.


  • * SpriteDlight is one I mentioned in past articles but it hasn’t been updated recently and is not so great with larger images whereas Laigter handles them fine.
  • ** Sprite Lamp hasn’t been updated for a while as well, but it still works for me. I use the hobby version which is sufficient for this use.
  • *** SpriteDLight does have this functionality if you look in the options for the light direction maps of the normal map panel. It was much slower to use than Sprite Lamp to do this though and it uses 4 directions, whereas Sprite Lamp can use 5. However hopefully there will be an updated version one day.

Please help support my blog

Liberapay . Buy me a coffee . Kofi . Payhip . Gumroad . PayPal

Similar Posts