Unity Shader (3)
1、左手右手坐标系
2、Unity 的模型空间与世界空间使用的是左手坐标系,Camera使用的是右手坐标系
3、一定要理解的两个矢量运算,他们是图形算法的必备良药,这里的理解不仅仅计算公式,是几何意义上的理解
1)点积(内积):从数学上想来,很容易联想到它能够计算余玄(cos),结果是一个标量,那么更进一步的几何意义是后者在前者方向上的投影,大部分数学库提供的函数名为dot
2)叉积(外积):在数值上它的运算结果任然是一个矢量,在方向上会垂直于原来两个矢量所在的平面,它不满足交换律但是下式成立 aXb = -(bXa),一个有意思的是它的模长满足 |aXb| = |a||b|sinα,从几何上理解可以解释为以两个矢量为相邻边的平行四边形的面积(底乘以高);垂直一个平面有两个方向,当使用右手坐标系时,就使用右手掌心朝向a,四指掌面向b握紧,此时大拇指的方向就是新矢量的方向(说的很抽象,下图),左手坐标系类比
它常用于计算法线、切线空间等信息
4、矩阵
1)逆矩阵
2)正交矩阵:逆矩阵是自己的转置矩阵,可以简化求逆的计算
5、矩阵的乘法不满足交换律,所以在执行复合变换时,需要注意矩阵运算顺序 translation*rotation*scale*vertex
6、Unity提供了大量的内置参数,能够在安装目录下的UnityShaderVariables.cginc中查看
7、UNITY_MATRIX_T_MV 是MV的转置矩阵,在只进行了缩放旋转时,应该好好利用它简单地计算出逆矩阵来减轻运算量。
UNITY_MATRIX_IT_MV 是MV的逆转置矩阵,常用于与法线相关的变换,如把模型空间变换到观察空间
8、Unity的内置矩阵变量都是按列存储,因此一般都是用右乘,但有时使用左乘是因为可以节省转置