冯乐乐目录
第2章渲染流水线介绍
第三章 Unity shader基础
基础shaderLab语言,shader结构,属性properties,主角SubShader,备胎Fallback。
shader三大类型:
Unity宠儿表面着色器,聪明boy顶点片元着色器,弃子固定函数着色器。
第四章 数学
笛卡尔坐标系=直角坐标系
点和矢量,点乘叉乘。
矩阵
矩阵乘法:r*n矩阵A 乘以n*c矩阵B,得到r*c矩阵AB,
满足结合律不满足交换律AB != BA, (AB)C = A(BC)
特殊矩阵:
方块矩阵
方阵(行列相等)
单位矩阵I
(行列相等且对角线为1)MI = IM = M
转置矩阵
r*c矩阵M c*r矩阵Mt,Mtt = M,(AB)t = BtAt
对称矩阵
对称矩阵的转置等于本身 M = Mt
逆矩阵:最复杂的矩阵操作
M-1,MM-1 = M-1M = I
只有方阵有逆矩阵,不是所有方阵都有逆矩阵,如果一个矩阵的行列式不为0,则此矩阵是可逆的。
性质1:M-1-1 = M;性质2:I-1 = I;性质3:Mt-1 = M-1t;性质4:AB-1 = B-1A-1
逆矩阵的几何性质,逆矩阵可以表示逆变换。
正交矩阵
如果一个方阵M和他的转置矩阵Mt的乘积为单位矩阵的话,则说此方阵是正交的。
MMt = MtM = I
看到上面很容易联想到MM-1 = M-1M = I
所以正交矩阵最大特点M-1 = Mt,性质:M是正交矩阵,则Mt也是正交矩阵。
正交的应用:由于求解逆矩阵的运算量巨大,使用正交矩阵的转置来代替逆矩阵可以大幅减少运算量。
如何快速判断正交矩阵,而不使用MtM = I判断。
结论:就是3*3矩阵的三行或者三列是一组,标准正交向量基c1c2c3,即三个相互垂直的向量且长度为1。
[c1c2c3]or[c1c2c3]t,单位矩阵一定是正交矩阵。
向量转换成行矩阵还是列矩阵?
矩阵的几何意义
向量的线性变换满足2个条件:1.f(x) + f(y) = f(x+y) 2.kf(x) = f(kx)
缩放f(v) = 2v和旋转(难以函数表示)是线性变换,可以用3*3矩阵表示所有的线性变换。
但是非常遗憾,最常见的平移变换居然不是线性变换, 如f(v) = v + (1,1,1);
于是发明仿射变换(affine transform),4*4矩阵表示,相当于合并一个线性变换和一个平移变换。
为了乘4*4矩阵,向量也要拓展到四维,此四维称齐次坐标空间(homogeneous space)。
齐次坐标
向量升四维,添加w分量,如果是坐标向量w = 1,如果是方向向量则w = 0。
这样做的目的是,方向向量的平移效果会被忽略(向量平移是无意义的)。
4*4矩阵表示为
[M3*3, t3*1]
[01*3, 1 ]
M3*3为旋转缩放变换,t3*1为平移变换,01*3为零向量,1为标量。
平移矩阵
平移矩阵*坐标向量的列向量。方向向量不能平移,相乘是没有效果的。
显然上述逆矩阵为
因为M-1 != Mt,所以平移矩阵不是正交矩阵。
缩放矩阵
缩放坐标向量和方向向量都是ok的
逆矩阵
不是正交矩阵
旋转矩阵
绕x,y,z旋转的矩阵如下
全部是正交矩阵,多个旋转矩阵串联也是正交矩阵
复合变换
将缩放,旋转,平移三合一,注意顺序不能变化,这是本书约定。
五大坐标空间
如何实现变换(重点内容暂时跳过)
模型空间 modelSpace= 对象空间object = 局部空间local,建模软件中确定的。
世界空间,worldSPace代理绝对位置,Scene中transform的position。Unity决定。
顶点坐标从模型空间,变换到世界空间,这一步叫做模型变换ModelTransform。
观察空间 viewSpace= 摄像机空间CameraSpace,unity中摄像机的模型空间,e.g.正前方是-z轴,也是唯一一个右手坐标系空间。
观察空间是三维的,而屏幕空间是二维的。
世界空间变换到观察空间称观察变换ViewTransform,观察空间转屏幕空间称Projection。
裁剪空间clipSpace = 齐次裁剪空间(齐次就是四维),观察空间转屏幕空间称Projection,观察空间转屏幕空间称投影矩阵。
此空间是有边界的,由远近裁剪平面决定,投影方式:正交投影,透视投影。
投影矩阵并不是真正的投影工作,而是为裁剪判断做准备,齐次坐标左乘裁剪矩阵之后,得到裁剪空间坐标(x,y,z,w),其中的w分量不再是0或1,而是用于裁剪判断的值,如果x,y,z的绝对值小于w的绝对值,则该点不会被裁剪。
屏幕空间
唯一一个二维空间,现在将裁剪空间下的顶点坐标投影到屏幕空间。
投影矩阵变换之后,可以进行裁剪,完成裁剪之后可以进行正在的投影。上文中裁剪空间也叫投影但是只是投影之前的准备。
使用标准齐次除法(homogeneous division)也称透视除法(perspective division),即w分离除以x,y,z分量,除法之后得到的三维坐标称归一化设备坐标(Normalized Device Coordinates,NDC)。是一个范围[-1,1]的立方体空间。
特殊的变换:法线变换
问题,在变换顶点的同时,需要变换顶点法线N,但是使用相同的矩阵变化,并不能保证法线的垂直。
与法线对应的切矢量T由顶点位置插值得到,所以使用同样的矩阵变化也不影响与面在同一平面的特性。
我们可以使用切线来约束法线,因为切线和法线总是垂直。
结论:经过推导,如果顶点的变换矩阵为M,则使用原矩阵的逆转置矩阵可以完成上述目标(M-1)t,
值得注意,当原矩阵为正交矩阵时,法线变换矩阵和顶点变换矩阵相同。
Unity内置变量
Unity内置变换矩阵,相机与屏幕参数
英文页:https://docs.unity3d.com/Manual/SL-UnityShaderVariables.html
中文页:https://docs.unity.cn/cn/current/Manual/SL-UnityShaderVariables.html
隔壁大哥对所有可能用到的函数和变量的总结:
https://blog.csdn.net/y90o08u28/article/details/88027031
以上