unity shader——矩阵

最近学unity shader时接触到了矩阵,这也是第一次了解矩阵,就稍微记录一下

 

一、什么是矩阵

1、首先,它长这样子:

2、它有着行列之分,上图就是3×4的矩阵(3行4列)

3、个人观点:其实矩阵的出现是为了方便运算

 

二、矩阵和矢量

1、矢量其实就是一个数组,而矩阵也是数组,既然都是数组,那就能做点什么了!

2、矢量可以看成n×1的列矩阵或1×n的行矩阵,其中n对应了矢量的纬度。

举个栗子:矢量 v=(3,8,6)可以写成 行矩阵 [3  8  6],或列矩阵 

3、可能有人会说,为啥把这两者联系在一起?

这是为了可以让矢量像一个矩阵一样一起矩阵运算。也就是前面说的方便运算

 

三、矩阵的运算

矩阵的运算是很庞大且复杂的,但在写shader的过程中,我们只需要和简单的一部分打交道。

好了,大概的介绍就到这里,下面开始进入正文

1、矩阵和标量的乘法

它们 乘法很简单,就是矩阵的每个元素和该标量相乘。如下:

2、矩阵和矩阵的乘法

一个 r×n 的矩阵A和一个 n×c 的矩阵B相乘,它们的结果AB将会是一个 r×c 大小的矩阵。

注意:第一个矩阵的列数必须和第二个矩阵的行数相同,它们相乘得到的矩阵的行数是第一个矩阵的行数,而列数是第二个矩阵的列数。

如果两个矩阵的行列不满足上面的规定,那么这两个矩阵就不能相乘。

算法:A的行,B的列,相乘后相加。如下:

这样讲可能有点懵,下面直接举个栗子:

假设A的大小是4×2,B的大小是2×4。

因此C23=a21b13+a22b23,c11=a11b11+a12b12,c44=a41b14+a42b24

       

矩阵乘法满足一些性质:

性质一:矩阵乘法不满足交换律(AB≠BA)

性质二:矩阵乘法满足结合律 (AB)C=A(BC)

 

四、特殊的矩阵

矩阵的算法先告一段落,接下来讲一些在shader经常见到的特殊矩阵。

1、方块矩阵

简称方阵,是指那些行和列相等的矩阵,在三维渲染里,最常使用的是3×3和4×4的方阵。

方阵才有的对角元素:行号和列号相等的元素。

对角矩阵:除了对角元素外的所有元素都为0

举个栗子:下面就是一个4×4的对角矩阵

 

2、单位矩阵

一个特殊的对角矩阵是单位矩阵——任何矩阵和它相乘的结果还是原来的矩阵。

也就是说:MI=IM=M

 

3、转置矩阵

转置矩阵 实际上是对原本矩阵的一种运算,即转置运算。

运算方式就是:原矩阵的第 行变成了第 列,而第 列变成了 行。

举个栗子:

转置矩阵一些常用的性质:

性质一:矩阵转置的转置等于原矩阵。

性质二:矩阵串接的转置,等于反向串接各个矩阵的转置。

性质二不怎么懂,应该是相乘之前的转置等于每个转置后再相乘吧。

 

4、逆矩阵

 

逆矩阵比较复杂,不是所有的矩阵都有逆矩阵。第一个前提是该矩阵必须是一个方阵(行列相等正方形)。

方阵M,逆矩阵就用M^{-1}把它们相乘会得到一个单位矩阵,也就是说

MM^{-1}=M^{-1}M=I

(你可能到这里有个疑惑,到底要怎么算逆矩阵呢?如果你感兴趣可以自己去找有关的算法,因为像这样的算法unity是有自带或有第三方库可以用的,没必要过于深入)

注意:并非所有矩阵都有对应的逆矩阵,比如所有元素都为0的矩阵。

如果一个矩阵有对应的逆矩阵,我们就说这个矩阵是可逆的(非奇异的)。

关于逆矩阵的一些重要性质:

性质一:逆矩阵的逆矩阵就是原矩阵本身。(M^{-1})^{-1}=M

性质二:单位矩阵的逆矩阵是它本身。(AB)^{-1}=B^{-1}A^{-1}

 

5、正交矩阵

如果一个 方阵M 和它的 转置矩阵 的 乘积 是单位矩阵的话,那这个矩阵就是正交的。反过来也是成立的

MM^{T}=M^{T}M=I

可能你发现了这个和上面的逆矩阵很相似。把这两个公式结合起来,我们就可以得到一个重要的性质:

即如果一个矩阵是正交的,那么它的转置矩阵和逆矩阵是一样的。也就是说M^{T}=M^{-1}

 

五、行矩阵还是列矩阵

我们知道,矢量可以转成列矩阵或行矩阵,它们本身是没什么区别的。但在与其他矩阵相乘时,就会出现一些差异。

在unity中如无特殊情况,都将使用列矩阵。

 

 

 

 

 

 

 

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值