# How to convert object space normals to tangent space?

I'm trying to experiment a workflow where I can manually paint normals to create stylized shading for a model.

Painting on the model, I want to use object-space normal, as it's easier to work with, but it's a problem that I end up with tangent space normals. Ideally I would want to just convert it back to tangent space in the shader.

At the very least I have to know whether or not it's possible to do what I'm trying to do?

The simplest way to do such a conversion is to calculate the dot products between the Object_Space_Normal and the Tangent plane, and then 'normalize' the result to RGB.

$$\vec{Tg}_N = 0.5 + \begin{bmatrix} \vec{Tg} \cdot \vec{N}_{obj} \\ (\vec{N} \times \vec{Tg}) \cdot N_{obj} \\ \vec{N} \cdot \vec{N}_{obj} \end{bmatrix} / 2$$

And with nodes: This is the main process when working with vectors in World space.

In the case where your Normals are Object normals encoded into RGB, then you need to convert them first to world as in the following example:

• Hi, yoür formula was really hard to read. I tried to convert it with proper formatting, but did I possibly mess up? Could you correct it, please? Aug 11, 2020 at 9:31
• @Leander, it looks ok... I'll post the equivalent in nodes, for people less comfortable with math notation. Aug 11, 2020 at 9:34
• I'm especially confused because it says 0.5 * [...] / 2 which cancels each other out and results in [...]. Aug 11, 2020 at 9:38
• @Leander, it's supposed to be a sum.. my fail, but corrected. :) Aug 11, 2020 at 9:39
• @meatandmahjong, I see now what you're trying to do... I'll update my answer later today, but you need to use the NormalMap node with your Texture, before plugging it into this node setup. (or 2*Tex-1) Aug 11, 2020 at 14:57

You can simply bake the normals, just make sure you save the image and set it to non-color in the shader editor.

This isn't contained within the shader editor, but if you're hand painting it shouldn't matter.