New favorite “hack” – Normal maps!

Hello people,

this time it took me shorter to write my next post (now that’s progress), even though I was on mini holidays in Crete. Go if you have the time and resources, you won’t regret it!

My next topic of study after learning how to create complex models is…
how to simplify the complex models to have simpler models that resemble the complex models!

But, but… okay this can be a headache because I, too, will not make any sense of it in the next 5 minutes. So, let’s break it down a bit to see what’s going on.

3D model simplification

If you have read my previous post, you have seen the detailed helicopter model that I created for my Subsurface division study. The helicopter consists of 178136 triangles which is not that high for high quality productions, such as movies or commercials, where the render time limit is not so strict. I don’t mean that this helicopter can be used in a movie as is but with proper texturing and geometry optimisations, it can reach an acceptable level for a low budget project.

I’ve heard and read about render times of 30 whole days for a single image. Now this is a scene where you don’t mind having  1 million triangles on your model, you just want it to look perfect. Although, there are scenes where you mind the triangles and sometimes it is the driving force of your model. The perfect example for this type of scenes are games. Games need to be rendered in real time, your game engine needs to eliminate all the lag and delays that can drive the user away. No one wants to play a game which responds after 5 or even 2 seconds of a key press. You can say that this might be a hardware issue and the user has a wooden PC.

We always think about lowest PC requirements and onwards; companies are not expected to create games that still run great on a machine from 2000. Still, they need to cover a wide range of hardware in order to have customers and to achieve that, they have to optimise their games for the “weaker” machines. The optimisation we are talking about in this post is the normal maps. What are the normal maps Ilias?? You have been going on for about a book page here and still nothing about the title of the post!

What are the normal maps???

Normal maps are textures that every pixel color represents a vector. The color is split into three numbers R,G and B.. okay okay sometimes four with A as the alpha channel. In normal maps, we don’t use the alpha channel; we only need three numbers because our modelling directions are three, with axes X,Y and Z. For some of you modellers: do you notice anything? Any similiarity between the ordering of the colors and the axes?

The red color is used for the X axis, the green for the Y and the blue for the Z.

The vector that every color represents is where the normal of the surface, that the normal map will be assigned to, will point. This way, we can alter the way a surface is reflecting light by assigning an image that contains this information. No more standard triangles with average normals! We want different normals and shading everywhere! As you have imagined, we can fake details on a flat surface just by altering how that surface reflects the light that receives. Literally a hack!

I will not go on anymore about the normal maps because I am just a guy that just learnt it and wants to share the enthusiasm of this new knowledge. I cannot teach yet..! There are plenty of legit resources if you want to actually learn how they work.

Yes it is a “hack” and you can fake details blah blah. Why are you so excited about this?

The reason I am excited about this techique will be demostrated just below. While I was studying about it, I thought it was time to put the knowledge to test.

Tip: Always, always and always put the theory you read on test. Try to practice what you read on a model of yours. This will be the actual learning, not just the reading. Reading and practice come together in a successful learning process.

I had prepared a car tire from a modelling course that was very detailed and my mind just brought it as a perfect candidate. I give you two renders, one with the detailed model and one with the normal maps. Can you say which is the high poly tire from a first look? Answers given after the images.



The high polygon tire has 82080 triangles and the low polygon tire has 1486 triangles. The difference is huge and by the numbers the low poly tire has the 1.81% of the high poly one. Considering the change in quality, the decrease of triangles is more than significant. Still haven’t found it? The second one is the low poly tire. And here is the second tire without the normal map enabled.

Crazy isn’t it?

But there are drawbacks. Every time you gain something, you trade it for something else. This time we lose in quality on close shots. The further the camera is from the object, the less apparent it is for the user that the object has low poly count. The closer the camera gets, the user can more easily identify the clunkiness and sharpness at the edges of the object, but it still requires attention.

This technique is widely used for objects that are not close to the user but you still need detail on them, like houses in a road that a user will not cross but might view from an angle while riding their flappy unicorn to destroy the enemy’s spaceships!

This concludes my post about normal maps. I could come back to it with a part 2 covering more techical details, but I want to get familiar enough to be in a position to “teach” it.

Thank you for staying until now with me!

Until next time, be well and stay active!