So if we pick a single vert in normal orientation we will get x, y, z values for the transform. We do have access to Z from bpy API that will be a vert normal but how are x and y calculated ? Is there a simple way to check the math behind it?

enter image description here

  • $\begingroup$ It looks like it considers a line from object origin to the location of the vertex. So the normal is the vector Normalized((0, 0, 0) -> (x, y, z)) $\endgroup$
    – Gorgious
    Commented Jan 4, 2023 at 12:09
  • $\begingroup$ @Gorgious it looks like you are right for the normal, normal is in the API though so vert.normal is quite easy to get, bitangent will be cross product of normal and tangent (x and z). But what is tangent for a single vert not connected to face $\endgroup$
    – niewinny
    Commented Jan 4, 2023 at 13:23
  • $\begingroup$ Hehe it beats my algebraic knowledge I'm afraid. It looks like the Red arrow always stays in the (X,Y) plane though, that might help narrow down the calculation. Or you might find it by digging in the source code if you're into that sort of kink ;) $\endgroup$
    – Gorgious
    Commented Jan 4, 2023 at 13:38

1 Answer 1


Posting it just in case anyone needs it, it was quite simple actually

normal of vert is given and we can get tangent(x-axis) by calculating cross product of normal and Vector((0, 0, 1)) then co-tangent (y-axis) by calculating the cross product of tangent and normal


You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .