冯乐乐之二 shader的数学

冯乐乐目录

第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矩阵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.youkuaiyun.com/y90o08u28/article/details/88027031

 

以上

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值