A Method For Making 2D Images Into 3D Models

This is a workflow I discovered for making 2D images into 3D models by creating normal maps for the 2D images and then converting the normal map into a height map.

Create or Find a 2D Image.

If you are making your own sprites or images make sure to create the final image on a transparent background. It must have some transparent space around it and the outline must be cleaned up to work well with the auto generation methods. Vector art is very useful for creating suitable graphics for this, but you can use pixel art, digital painting or even traditional methods as long as the image is cleaned up and on a transparent background eventually. Export it as a PNG file.

If you don’t want to or are unable to make your own images, you could find a royalty free image to use instead. There are images available for this on the internet if you are looking for 2D sprites, characters and icon type of images.

Top 6 Sites To Download Free Game Art, Sprites & Assets

Create a Normal Map for your 2D Image

I wrote about the process I used for making this normal map in this article.

I still think Sprite Dlight with its ability to export the light direction views and Sprite Lamp’s method of combining custom light directions (top, bottom, front, left and right) to generate the normal map have their merits if you want to create a more customised normal map for your image but still have the program work out the normal map stuff for you. I made the normal map for Jane the Elf in this article using Sprite Dlight and Sprite Lamp. I wrote about the process of how I did that in the article referenced at the start if you are interested.

janetheelflightingschemesThe process of creating all the light views did take a lot of time but I was happy with the resulting normal map generated with Sprite Lamp.

If you don’t have time, or your image is a simple one software that auto generates the normal map for you will probably be sufficient. Laigter is ideal if you want a free Open Source solution. The developer Azagaya is also working on the ability to generate the height map as well for future versions which would be very useful for the method I’m describing in this article.

If you are interested in the auto generation method I wrote more about that in this article, and listed a few alternate software’s as well:

You could also create your normal map manually with software such as Photoshop and Krita. It might be a useful method to know for refining things on auto generated normal maps. Laigter also has a normal map brush plug-in for further tweaking the generated normal map, and Krita has a normal map brush engine.

However you decide to create your normal map, make sure to export the normal map as an image file for the next stage.

Height Maps

You need a height map in order to generate a 3D mesh from the 2D image.

Creating the height map from the normal map

If the normal map is not in a square aspect ratio add some space around the canvas in a graphics editing application making it square.

I used a program called Awesome Bump to recalculate the height map from the normal map. There are alternatives if you have a dig around though:

See this video for a process of this:

https://youtu.be/VsI4jDx9yc8

Cleaning up the height map or alpha image

The height map that was generated in Awesome Bump needed some cleaning up.

heightmapawesomebump
generated height map from a normal map in Awesome Bump

I wanted it to have a black background around the sprite. Perhaps there are ways to do this in the Awesome Bump program or similar ones, but I’m not sure how to do that, so I cleaned up the height map that was calculated from the inputted normal map in Affinity Photo (any graphics editing software would do). See the video below for the process:

If you didn’t do so in the previous stage make sure the final height map image has a square aspect ratio. I also faded the white levels down for the edited height map, this was because the next stage works better if you do that, but it is useful to have a faded version and the original version for alternate methods.

Export the original level version and the faded level version as TGA image files.

Making a 3D mesh with the height map

Method 1: Make a displacement mesh from the height map in Blender: Full disclosure, I used method 2, but this method may be useful as well for more customisable results. I found this tutorial in a Google Search.

Make Mountains in Blender from Heightmaps

This method is usually used for creating things like mountains and landscapes quickly from height maps.

As a side note and if you are interested in CNC routing, you can use height maps to cut out 3D shapes. I found this article interesting, and it led me to wondering about how to create height maps from 2D images in the first place, so I’ll link to it here:

Sculpting images with your CNC

Method 2: Export the height map as a TGA image file and load it into a program called TGA2STL. This program is a free TGA depth map image to STL 3D mesh generator. I made this video showing the process:

In the video my height map was 600px by 600px. I haven’t tried bigger resolutions as of yet with the next stage, but you might get more detail in the resulting 3D mesh by doing so. Perhaps I will try it at some point if I find a need to do so.

This will create a STL 3D mesh file in the same folder the image is in. You can now import this file into any 3D software application.

Method 3: 3D Coat

In the previous video I made I also showed the methods I am about to describe so be sure to check that out.

Import image as mesh

You can load your height map into the top bump texture slot for the options. I found that the non-faded height map worked best for this method in 3D Coat, which is why having different versions is useful for different software.

3dcoatheightmapto3dYou can also load a stencil texture into the stencil texture slot. This is a silhouette image of your shape which tells the program to cut around it for the resulting mesh. You will end up with a 3D mesh which resembles a biscuit.

3dcoatheightmapto3d2Might be useful for making custom jewellery or something.

Repair scanned mesh

If you have 3D Coat you can also use the repair mesh option. Import as voxels removes the bits you don’t need and closes the mesh into a solid shape with a flat back. The resulting mesh can be exported as a 3D object.

For the video below I exported the resulting mesh from this method as an object file from 3D Coat and then used auto-retopology to optimise the mesh for UV mapping.

Edit June 2020: After more experimenting I found that Instant Meshes works really well for auto retopology of meshes if you fix any non-manifold mesh errors in Blender first either manually or by using an add on. A free one that does the job well with few clicks comes with Blender- 3D Print Toolbox. you just have to activate it in the settings. Export your fixed mesh and then use Instant Meshes for retopology.

janetexturesblender
Screenshot of Blender node setup

Here are some renders of the model with original textures and the normal map added. I also used a Subdivision Surface Modifier to smooth things out a bit:

jane3dmeshrender
3D Mesh from a 2d image

If you want to see the node setup here is a picture:

janetexturenodessetupMethod 4: ZBrush

If you own ZBrush you are probably aware of this method, but basically you can make 3D meshes from alphas with the make 3D function. I don’t own ZBrush but it is an interesting method.

Make 3D

Why would you want to do this?

The 3D meshes can be used in Illustration or as parts of other 3D scenes or used in the creation of props and characters. Perhaps your character needs an intricate moulded necklace design that may be easier to create with a picture than sculpting or modelling it.

One advantage I found over just having a flat image with lighting applied is that the 3D object version can have rim lighting with light source coming from behind, whereas this does not work with the image imported as a flat plane in Blender method which I tried before.

janelightingrenders
images imported into Blender and assigned normal maps for dynamic lighting
janelightingrenders2
2D image to 3D mesh with multiple light sources

You could also use the height maps made from this method as alpha brush textures in 3D software without needing to convert them into 3D meshes.

Further Reading

3D print a photo: How to convert photos into a 3D model? (2020 Update)

Similar Posts