2D art Light Effects with Depth Maps

This article discusses some techniques to create height maps from 2D images which can be used to create sub surface scattering effects on 2D art. There is a bonus topic at the end.

I’ve written a few things about this subject over the years and you will find quite a lot of information around the internet on lighting sprites with normal maps and doing things like making 3D models and displacement from depth / height maps. I wanted to add a few things I’ve been playing with to the mix.

I recently revisited the normal map from 2D image technique with an experiment for a goldfish Illustration I’m working on and tried out a program called SpriteIlluminator. It is a great program for making normal maps for this very purpose as well as its intended use in 2D games with dynamic lighting. I’ll talk more about it later in the article.

Sub Surface Scattering

Because I’ve been trying out fake sub surface scattering effects in 3D Coat for some of my recent 3D models, I wondered if a similar trick could be done for 2D graphics by using depth maps as well. For some context here is the “trick” on one of my 3D models- a frog.

The effect needs 2 light map types to be baked: a translucency map and a thickness map. They look like this in 3D Coat:

Translucency and Thickness map in 3D Coat

To get them to look like a sub surface scattering effect (SSS) the order they appear in the layer stack and the layer modes have to be adjusted.

The layer mode for the thickness map is set to highlight emission and this map goes below the normal map but above the translucent map. The translucent map is set to add mode. Opacity of this layer can be adjusted depending on the strength of the effect desired.


Although there is no highlight emission layer mode in most 2D software, I was curious if a similar effect could be faked using depth maps to create the “translucent” and “thickness” effect.

2D Light effects

After some experimentation with depth maps, layer modes and gradient maps in Affinity Designer I created some nice effects that looked a bit like sub surface scattering.

I tried a program called Laigter and one called SpriteIlluminator to generate the normal maps needed for this experiment. laigter generates a normal map automatically, the settings can be tweaked to get different looks for your sprites. Nice and fast for simple sprites.

SpriteIlluminator can be used in a more custom way to make the normal map look exactly as you want it with editing tools and brushes. Although there are some extra plugins you can download for Laigter to help get a more custom look for your normal maps by adding textures and handpainting, I found SpriteIlluminator easier and nicer to use for that purpose, it also had an undo feature and selection tools which helped me.


I could build up the depth of different parts of the goldfish using selection poly lines and the bevel tool. After that I selected where I wanted some scale details and used the emboss tool. It also has a soften brush which was useful for blending where the edges of the selection lines were.

Anyway here are the resulting normal maps:

normal maps_compressed

I also used Awesome Bump to generate depth maps from the resulting normal maps.

depth maps_compressed

To create the effect in Affinity Photo (or any 2D image editing program with similar features), the depth map is inverted and masked. This is then duplicated so that there are 2 layers for a Linear Light layer mode and a Soft Light layer mode. The opacity of the Linear Light layer and the Soft Light layer can be adjusted to get the strength of the effect you want. I set them both to 46%.

A gradient map adjustment layer is then added to both layers, the gradient map for the Linear Light layer is set to Linear Burn layer mode. The gradient map for the Soft Light layer is set to Luminosity layer mode.

You can choose any colour you want for the gradients, for this example I went with a scale from bright orange to white.


Here are the results I made with Laigter and SpriteIlluminator:

sub surface scattering effect affinity photo

After that I decided to try a Phong Bump map adjustment filter layer with the normal maps using overlay layer mode in Krita. Gives it a bit more of a 3D look.


Here are the results of that:


I was able to get a more 3D looking effect using the normal map and depth map I created using SpriteIlluminator.

Update 2024: regarding how I go about creating more complex normal maps for 2D images, I prefer to cut out the layers or sprites I need in Krita using transparency masks and then use Laigter to generate the normal maps from transparent .png images. After I have all the images done I re-composite them in Krita and then generate a height map using PixPlant. The advantage of this is the layered and non-destructive approach. This is also useful if you want to create 3D models from the heightmap parts.

Sometimes I use that technique above and then refine the normal map by using the 4 direction handpainting technique. I used that workflow to make a sculpting base for a bas relief of a mouse I then worked more detail into in ZBrush.

You can also use AI generated depth maps to help in the workflow like I did in this mini-project.

3D from 2D tests

Update 2024: I have tested methods to do this in Curvy 3D 5, 3DCoat, Blender and ZBrush. All of them have different results, you will have to try for yourself.

Curvy 3D‘s inflate image tool is still a great way to make depth maps into 3D models. Although this is a little extra feature hidden in the program it is really good. The interface of Curvy 3D makes it easy to construct 3D base meshes from inflated heightmaps which I then export and import to ZBrush if I’m using this method.

I also found a free online tool to create 3D meshes from depth maps if you don’t have Curvy3D called IMAGEtoSTL. The results are not as nice as the Curvy 3D method, but it gets the job done.

I also played a bit with the new Bas Relief Project feature in ZBrush. I have created better ways to do this using Blender and other software, but it is very handy.


Thanks for reading this article, if you found it interesting.


In my travels for this experiment I looked at a few things concerning CNC because height-maps are an established way to create suitable Bas Relief results for wood carving machines.

Software for CNC

Vectric Aspire



Further Viewing / Reading

Please help support my blog

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

Similar Posts