法线变换
法线(normal)也被称为法矢量(normal vector),上页描述的是如何用变换矩阵来变换一个顶点或者一个方向矢量。需要注意法线是需要特殊处理的一种方向矢量。
切线(tangent)也被称为切矢量(tangent vector),与法线垂直,都是模型顶点携带的信息。
切线可使用与顶点相同的变换矩阵,但是法线不可以,根据计算可以知道使用原变换矩阵的逆转置矩阵来变换法线就可以得到正确的结果。
如果原变换矩阵是正交矩阵(只包含旋转变换),那么可以直接用来变换法线。若还包含统一缩放,则再乘以统一缩放系数k的倒数1/k即可。
Unity Shader 的内置变量
在Cg中,采用float3x3、float4x4来表示矩阵,用mul进行矩阵的乘法,参数的位置决定按列矩阵还是行矩阵进行乘法。参数的位置直接影响结果。在Cg中,对float4x4的变量按行优先填充。unity在脚本中提供的Matrix4x4是采用按列优先填充的。