Hi there, I want to convert a vertex coordinate from model space, into World * View space, and then back. I know that the first step is: Code (csharp): v.vertex = mul(UNITY_MATRIX_MV, v.vertex); But is the second step this? Code (csharp): v.vertex = mul(UNITY_MATRIX_IT_MV, v.vertex); So long as nothing happens in between these two steps the vertex should be exactly where it was in the beginning. That is, I'm assuming that UNITY_MATRIX_MV * UNITY_MATRIX_IT_MV = Identity. I know that a matrix multiplied by its "inverse" = an identity matrix. But... What's an "inverse transpose"? Is that the same thing as an inverse or something weird? Is any matrix multiplied by its inverse transpose = an identity matrix? ... The reason I need to know this is because, when writing surface shaders, some sneaky internal process transforms the vertex by World*View*Projection FOR you after applying your vertex shader. So if you perform the transformations yourself, (in order to modify the vertex in world, view or projection space perhaps) Unity will go right ahead and perform those same transformations again, doubling them up on you, leaving you with a mess of vertices and no indication as to what went wrong. Don't you love how this isn't documented anywhere? Furthermore, when writing fragment shaders, the vertex shader convention is completely different - you have to do the transformations yourself. This is less convenient, but it gives you more control and prevents you from having to perform redundant forward-and-back matrix transformations.