冯乐乐之二 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.csdn.net/y90o08u28/article/details/88027031

 

以上

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
乐乐是著名的计算机图形学专家,他的研究领域主要是实时渲染和着色器编程。对于想要学习shader入门的人来说,以下是一些乐乐推荐的书籍资源: 1.《GPU Gems》系列 这是一系列由乐乐等人共同编写的图形编程经典书籍之一,涵盖了很多与shader相关的主题,例如高级光照、阴影算法等。这些书籍从实践的角度深入讲解了如何优化和实现各种shader效果。 2.《Real-Time Rendering》 这是一本权威的实时渲染书籍,由Tomas Akenine-Möller、Eric Haines和乐乐等人合著。书中包括了许多关于shader编程的内容,如基本着色原理、渲染技术和最新的图形硬件特性等。 3.《Unity Shader 全方位深入解析》 这是一本讲解Unity引擎着色器编程的书籍,由乐乐亲自编写。书中通过实例和案例详细介绍了Unity Shader的基础知识和高级技巧,适合对Unity引擎感兴趣的开发者入门学习。 4.《OpenGL着色器语言概念与实践》 这是一本介绍OpenGL着色器语言(GLSL)的书籍,由Randi J. Rost、Bill Licea-Kane和乐乐等人合著。书中详细讲解了GLSL的语法和应用,以及如何使用GLSL实现各种shader效果。 除了以上推荐的书籍资源,乐乐还经常在学术会议和论坛上发布最新的研究成果。如果想要深入了解他的工作,可以关注他的论文和演讲录像。同时,还可以通过参加相关的培训课程和在线教育平台上的课程来学习shader编程,不断加强自己的实践能力。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值