冯乐乐之二 shader的数学

article/2025/11/10 16:58:08

冯乐乐目录

第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.csdn.net/y90o08u28/article/details/88027031

 

以上

 

 

 

 

 

 

 

 

 

 


http://chatgpt.dhexx.cn/article/EQCS7BQf.shtml

相关文章

各大浏览器清除缓存(cache)详细步骤

1. Firefox 1.1 选择“Options”: 1.2 选择“Advanced”->“Network”->“Cached Web Content”,点击“Clear Now”: 2. Chrome 2.1 选择“Settings”: 2.2 点击页面底部“Show advanced settings”: 2.3 选择…

浏览器如何清除缓存教程

打开浏览器—设置—隐私设置—清除浏览器数据

清除浏览器的缓存

第一种方法 在浏览器界面按F12之后,再选择Network,选中Disable cache, 然后刷新(这里有个玄学的问题就是即使你已经选中了Disable cache, 也需要打开network这个页面再刷新才有效, 亲测有效, 但是我也不知道为什么) 第二种方法 在浏览器界面直接Ctrl Shift R 比较方便,但…

Edge浏览器如何清除缓存

浏览器在使用过程中会产生大量的缓存,Edge浏览器如何清理缓存?下面是Edge浏览器清理缓存的操作步骤。 1.双击Edge图标打开Edge浏览器。 2.单击右Edge浏览器上角的“更多操作”。 3.弹出菜单,选择“设置”。 4.选择单击“选择要清除的内容”…

清除缓存?(浏览器)

清除缓存 清空浏览器历史记录 **浏览器缓存:**浏览器将用户请求过的静态资源,存储到电脑本地磁盘中,当浏览器再次访问时,就可以直接从本地加载,不需要再去服务端请求了。 好处:减少了服务器的负担&#x…

Chrome清理网页缓存

F12 打开开发者工具(或者直接右键→“检查”),此时右键点击“刷新”按钮: 点击“清空缓存并硬性重新加载即可”。

如何查看Chrome浏览器的页面缓存内容【详细教程】

如何查看浏览器页面缓存内容——代码&控制台 知识调用前言引入控制台输入代码查看在控制台application查看 知识调用 文章可能需要用到的知识🔥🔥🔥浏览器缓存有哪些(通用缓存有哪些) 前言引入 浏览器有多种缓存…

【浏览器】浏览器缓存

一 浏览器缓存机制 浏览器在每次发生请求时,先在在浏览器缓存中查找该请求的结果和缓存标识,并且每次收到请求结果均会把请求结果和缓存标识保存在浏览器缓存中。 总体脑图:文中脑图及流程图资源 浏览器缓存策略分类 缓存策略的分类&…

chrome浏览器清除缓存

场景 :更新页面后可在无痕浏览器中看到更新内容,无法直接打开浏览器看更新内容 方法1:使用无痕浏览器 浏览器右上角-打开新的无痕式窗口 方法2:右键打开控制台 - Application - 找到左侧store - clear site data 方法3&#xff1…

清除浏览器缓存(js、css等)

有时候写web项目,改了js或者css文件,但是浏览器就是不刷新,就很头疼o(╥﹏╥)o。那是因为浏览器还有缓存存在的原因,下面来看如何清除缓存。 1.找到目标网页,鼠标右击,点击检查;或者CtrlShifti&…

清除chrome浏览器缓存

之前有写过设置缓存,本文解决清除html缓存,如何才能清除缓存呢?一下是几个清除浏览器缓存的方法: 方法1.chrome浏览器地址:chrome://settings/clearBrowserData; 方法2.如果是开发者的话:重启服务,刷新页…

Chrome浏览器清除页面js文件缓存的方法

Chrome浏览器清除页面js文件缓存 Chrome浏览器清除js缓存方法虽然简单,但有些人还是不太会,有些人会去设置里面清除有时候没有用,这里写一下简单步骤,使用一次以后就会了,而且速度更快 1、打开需清缓存的页面(如&#…

【浅解】浏览器缓存

缓存 为什么有缓存? 缓存在活中其实很常见。往往初次打开一个新的软件或者网页的时候都会相对较慢, 但是再次打开就会快很多, 这就是缓存的功劳。大大提高了效率,也大大提高了用户体验。 什么数据可以缓存? 不能缓存的数据 实时更新替换的数据(例如: 弹幕,留言,评论,经常…

Google Chrome谷歌浏览器清理缓存的常用方法

Google Chrome谷歌浏览器清理缓存的常用方法 方式一:清除缓存快捷键 CtrlShiftDelete 方法二:按F12,按刷新按钮,会显示3个选项,选择清空缓存并硬性重新加载。 额外使用场景说明: 互联网在全球的普及率与日俱增。与此同时&…

浏览器清缓存清缓存

浏览器清缓存&清缓存 区别方法 区别 浏览器清缓存:清除浏览器里浏览或下载的缓存文件。 清理缓存:是系统里面的缓存文件。 方法 一、浏览器清缓存 浏览器设置里面点清除缓存,如chrome: 二、清理缓存 mac电脑的缓存清理 选…

如何清除谷歌浏览器缓存

方式一: 快捷键:CtrlShiftDelete 键盘上同时按下这三个键,会出现如下界面,然后,直接点清除数据即可! 方式二: 手动调出清除数据的界面 按图片方式,找到清除数据的界面

谷歌浏览器如何清理缓存

1.打开谷歌浏览器。点击右上方的设置图标,进入设置选项。 2.点击选择中的【设置】,进入到设置页面。 3.在最下方,点击【显示高级设置】 4.可以看到,在展开的高级设置里面,点击【清除浏览数据】 5.勾选要清理的…

不知道浏览器怎么清除缓存?各种浏览器清理缓存的方法

经常使用电脑的人都知道,在电脑上安全不同的浏览器,当使用这些浏览器浏览网页、看视频等,用了一段时间后感觉电脑反应速度越来越慢。这是因为使用浏览器浏览网页会存在一些缓存,日积月累电脑的反应速度就慢了。不知道如何清除浏览…

清除浏览器缓存的所有方法

1.清除浏览器缓存 1、Disable cache 打开开发者工具(F12),选择 Network——Disable cache 即可。需要清除某网站缓存时 F12 打开开发者工具就会自动清除这个网站的缓存,而不必清除所有网站的缓存了。 这个可以解决绝大多数jsp缓…

清除手机浏览器缓存

每次项目发布后,Android手机总存在几分至20几分钟的缓存,清除有以下方法: 用户行为清除缓存: 方法1.打开手机浏览器 -->我的-->设置-->清除浏览数据-->页面缓存右侧勾去掉,返回浏览器即可。 方法2.打开手…