A tangent space normal map is one of the most popular types of normal maps used in 3D. The easiest way to create such a normal map for any object in Blender is by applying the appropriate matcap from Blender’s built-in set of matcaps. We can also create such a normal map shader using nodes if needed.
Add any primitive to the scene, for example, a sphere (shift + a – Mesh – UV Sphere). Add a shader to it.
Currently, our shader has only two nodes: Principled BSDF and Material Output. We don’t need the Principled BSDF node for this project, so delete it.
Add a Texture Coordinate node (shift + a – Input – Texture Coordinate). We’ll use it to obtain normal information (Normal output) from the object’s surface.
To enter tangent space, add a Vector Transform node (shift + a – Utilities – Vector – Vector Transform). Switch it to “Vector” mode to work with vectors. The coordinate space we currently have, in which we obtain normal vectors, is object space. To obtain tangent space, we need to switch to view or camera space. Therefore, we’ll set the source space to “Object” and the destination space to “Camera.”
Feed the object’s normal data from the Normal output of the Texture Coordinates node to the Vector input of the Vector Transform node.
To calculate the vectors correctly, we need to shift the initial origin from the lower left corner to the center of the view. We also need to rotate the view direction vector 180 degrees to “look at the object.”
To achieve this, add a Vector Math node (shift + a – Utilities – Vector – Vector Math) and switch it to “Multiply Add” mode. Enter the values (0.5, 0.5, -0.5) in the Multiplier input, and (0.5, 0.5, 0.5) in the Addend parameter.
From the Vector Transform node, feed the data to the Vector input.
That’s all for the transformations. We now have a map of the tangent normals on the object. If we now feed the Vector output of the Multiply Add node to the Surface input of the Material Output node in the 3D viewport, we’ll see the desired image.
However, we also need to consider gamma correction. To do this, we need to raise the vector output values to the power of 2.2.
After the Multiply Add node, add another Vector Math node (shift + a – Utilities – Vector – Vector Math) and switch it to Power mode. Feed our normal data from the Multiply Add node into the upper Vector inputs, and set all vector elements in the lower input to 2.2.
For comparison, we can apply the shader we created to one object and the system matcap to another, identical object, and visually compare them in render and matcap display modes.
As we can see, the vector distribution (we see it as colors) is completely identical, meaning our shader is working correctly.

.blend file on Patreon