Unity Shader学习一:矩阵

        观前提示:本文章是个人笔记,只是给自己看的,我自己看得懂就行。

目录

矩阵基础

矩阵定义​编辑

矩阵转置

矩阵乘法

矩阵的数乘

矩阵和矩阵相乘的定义

注意事项

基本性质

特殊矩阵

对角矩阵

数量矩阵

三角矩阵

上三角矩阵

下三角矩阵

单位矩阵

逆矩阵

定义

可逆矩阵的特点

伴随矩阵

伴随矩阵发求逆矩阵

矩阵在Shader中的应用

矩阵变换

变换类型

线性变换

非线性变换

仿射变换

平移矩阵

缩放矩阵

旋转矩阵

复合变换

Unity坐标空间

Unity着色器中常见矩阵


矩阵基础

矩阵定义

        这m×n 个数称为矩阵A的元素,简称为元,数aij位于矩阵A的第i行第j列,称为矩阵A的(i,j)元,以数 aij为(i,j)元的矩阵可记为(aij)或(aij)m × n,m×n矩阵A也记作Amn

矩阵转置

        设A为m×n阶矩阵(即m行n列),第i 行j 列的元素是a(i,j),即:

         把m×n矩阵A的行换成同序数的列得到一个n×m矩阵,此矩阵叫做A的转置矩阵:

        对一个矩阵进行转置的转置,结果是原矩阵:

        矩阵加法的转置,等于矩阵转置的加法:

        矩阵乘积的转置,等于逆序的矩阵转置的乘积:

        可以扩展到2个以上的矩阵:

矩阵乘法

矩阵的数乘

        用一个数k乘矩阵A=(aij)m×n的所有元素得到的矩阵(kaij)m×n称为矩阵的数乘,记为kA或者Ak,即kA=Ak=(kaij)m×n。

矩阵和矩阵相乘的定义

        设A为m*p的矩阵,B为p*n的矩阵,那么称m*n的矩阵C为矩阵A与B的乘积,记作C=AB,其中矩阵C中的第i行第j列元素可以表示为:

        示例:

注意事项

1、当矩阵A的列数(column)等于矩阵B的行数(row)时,A与B可以相乘。

2、矩阵C的行数等于矩阵A的行数,C的列数等于B的列数。

3、乘积C的第m行第n列的元素等于矩阵A的第m行的元素与矩阵B的第n列对应元素乘积之和。

基本性质

1、乘法结合律: (AB)C=A(BC)

2、乘法左分配律:(A+B)C=AC+BC

3、乘法右分配律:C(A+B)=CA+CB

3、对数乘的结合性k(AB)=(kA)B=A(kB)

4、对数乘的结合性k(AB)=(kA)B=A(kB)

5、转置 (AB)T=BTAT

6、矩阵乘法在以下情况下满足交换律:

        AA*=A*A,A和伴随矩阵相乘满足交换律

        AE=EA,A和单位矩阵数量矩阵满足交换律

特殊矩阵

对角矩阵

        非对角线元素的值为0,对角线元素是任意值的方阵。

        例:

数量矩阵

        主对角线元素全都相等,其余元素全都为零的矩阵。

        例:

        数量矩阵将主对角线元素提到外面后,矩阵将变成一个单位阵。

三角矩阵

上三角矩阵

        主对角线以下元素全为零的矩阵。

        例:

        

下三角矩阵

        主对角线以上元素全为零的矩阵。

        例:

单位矩阵

        在矩阵的乘法中,有一种矩阵起着特殊的作用,如同数的乘法中的1,这种矩阵被称为单位矩阵。它是个方阵,从左上角到右下角的对角线(称为主对角线)上的元素均为1。除此以外全都为0。单位矩阵右一个重要的特性,任何矩阵与单位矩阵相乘都等于本身。

        例:

逆矩阵

定义

        设A是一个n阶方阵,若存在另一个n阶方阵B,使得:AB=BA=E,则称A方阵可逆,并称方阵B是A的逆矩阵。

        若矩阵A是可逆的,则A的逆矩阵是唯一的,并记作A的逆矩阵为

可逆矩阵的特点

1、可逆矩阵是行列式不为0的方阵

2、行列式不等于0的方阵一定可逆

伴随矩阵

        由A的代数余子式构成的方阵再转置:

伴随矩阵发求逆矩阵

        计算公式:逆矩阵 = 标准伴随矩阵 / 行列式

        

矩阵在Shader中的应用

矩阵变换

        

        变换(transform):指的是我们把一些数据,如点,方向向量甚至是颜色,通过矩阵运算,进行转换的过程。经过矩阵乘法后,我们可以理解为矩阵对数据进行了变换操作。

变换类型

线性变换

        保留矢量加和标量乘的计算,包含旋转、缩放、镜像和投影,可以使用3x3矩阵表示。

        例:f(x) + f(y) = f(x + y),kf(x) = f(kx)

非线性变换

        平移,可以使用4x4矩阵表示。

仿射变换

        仿射变换就是合并线性变换与平移变换的变换类型,仿射变换可以使用一个4x4的矩阵表示。所以需要将矢量扩展到四维空间下,这就是齐次坐标空间,变换矩阵称为齐次矩阵

        点的列矩阵w分量补1,因为点会受到平移变化的影响。方向矢量列矩阵的w分量补0,因为平移不会影响到方向向量的方向。

平移矩阵

缩放矩阵

旋转矩阵

        绕X轴,旋转θ角度:

        绕Y轴,旋转θ角度

        绕Z轴,旋转θ角度

复合变换

        一个点P(1,1,1),需要做绕Z轴旋转30度,平移(5,4,2),缩放(3,2,1)复合变换,是存在顺序的,因为矩阵乘运算,不满足乘法交换律。

        复合变换的顺序,决定了变换矩阵相乘的顺序,根据需求

        因为矩阵满足结合律,所以可以得出变换矩阵为

Unity坐标空间

        模型空间:模型内部点的位置都存储在模型文件内,所以点都是相对于模型空间的。

        世界空间:模型在游戏运行时,需要加载到场景中,所以点存储在世界空间中。

        观察(摄像机)空间:物体是否被投射到屏幕中,是由相机控制的,相机相对于物体的位置,决定了显示效果。

        裁剪空间:需要判定点,是否存在于摄相机裁剪视椎体下,如果存在于视椎体内,则点可以进行显示。

        屏幕空间:最终显示的设备为显示器,所以需要将点投影到显示器上,算出屏幕坐标点,由显示器显示。

Unity着色器中常见矩阵

        UNITY_MATRIX_MVP:将点从模型空间下,转换到裁剪空间下

        UNITY_MATRIX_M:将点从模型空间下,转换到世界空间下

        UNITY_MATRIX_V:将点从世界空间下,转换到观察空间下

        UNITY_MATRIX_P:将点从观察空间下,转换到裁剪空间下

        _Object2World:将点从模型到世界空间转换(互为逆矩阵)

        _World2Object:将点从世界空间到模型转换(互为逆矩阵)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
深入学习Unity Shader学习图形学知识和URP渲染管线,可以按照以下步骤进行: 1. 学习基础知识:首先,了解图形学的基本概念和原理,包括光照、阴影、纹理映射等。可以阅读相关的图形学教材或者在线资源,掌握相关的数学知识,如向量、矩阵等。 2. 学习Shader语言:Unity使用的是一种类似于C的着色器语言,称为ShaderLab。学习ShaderLab语言,并了解Unity Shader的基本语法和结构是非常重要的。可以参考Unity官方文档和教程,也可以寻找一些书籍或在线教程来学习。 3. 实践编写Shader:通过实践编写自己的Shader来加深对Shader语言的理解和应用。可以从简单的表面着色器开始,逐步探索更复杂的效果,如法线贴图、镜面反射等。可以参考Unity官方文档中的示例和教程,也可以寻找一些开源的Shader代码来学习。 4. 学习URP渲染管线:URP(Universal Render Pipeline)是Unity提供的高性能、可定制的渲染管线。学习URP渲染管线可以帮助你理解渲染过程和优化技术。可以阅读Unity官方文档中关于URP的介绍和教程,也可以参考一些社区资源和教程。 5. 参考资源:除了官方文档和教程外,还可以参考一些优秀的书籍、博客和视频教程来加深对Unity Shader和图形学知识的理解。一些推荐的资源包括《Unity Shader入门精要》、《Unity Shader之高级进阶》、CSDN博客等。 记住,学习Shader和图形学是一个需要不断实践和探索的过程,通过不断尝试和学习,你会逐渐掌握这些知识并且提升自己的技能。祝你学习顺利!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值