UnityShader入门精要_要点整理_数学篇

第四章介绍了诸多学习UnityShader需要的数学知识,这里总结一些个人认为比较重要的知识点,以便分享和后续查阅。

主要是回顾一下矩阵和然后记录坐标系转换方面的。

目录

左手坐标系,右手坐标系,左手法则右手法则?

矩阵基础概念

矩阵与矩阵的乘法

常见特殊矩阵概念

如何快速判断矩阵是正交的。

选择行矩阵还是列矩阵?

矩阵的几何性质

常见几何矩阵一览表

复合变换矩阵

给定一个复合旋转如何使用矩阵?

使用矩阵完成坐标空间(系)的变换

一个从模型到屏幕的完整标变换过程

为什要从观察空间(以相机为原点的空间)转换(投影)到裁剪空间?

观察空间到裁剪空间做了什么?

屏幕空间的变换是怎样的?什么是齐次除法?

从NDC在映射到真正的屏幕坐标。

法线变换


左手坐标系,右手坐标系,左手法则右手法则?

直接看图更清晰直观。

左手坐标系left_hand.png-40.5kB

右手坐标系right_hand.png-40kB

左右手法则分别对应,左手坐标系和右手坐标系中的旋转正方向。left_right_hand_rule.png-75.3kB

 

矩阵基础概念

矩阵与矩阵的乘法

书上概念:

 

演示计算步骤:

常见特殊矩阵概念

  • 矩阵的基础性质:
    • 矩阵乘法不满足交换律
    • 矩阵乘法满足结合律
  • 方块矩阵:行和列数量一样的就是方块矩阵,比如3*3,4*4的矩阵
  • 单位矩阵:一个任何矩阵和他相乘都是原来矩阵的矩阵。
  • 转置矩阵:将原有的行换为列,将原有的列换为行,即为转置矩阵,表示为M^T。图为示例。

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

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

  • 逆矩阵:

逆矩阵的性质一:逆矩阵的逆矩阵是原矩阵的本身

逆矩阵的性质二:单位矩阵的逆矩阵是它本身

逆矩阵的性质三:转置矩阵的逆矩阵是逆矩阵的转置

逆矩阵的性质四:矩阵串接相乘后的逆矩阵等于反向串接各个矩阵的逆矩阵。

  • 正交矩阵:如果一个方阵M和他的转置矩阵的乘积是单位矩阵的话,我们就说这个矩阵是正交的。反过来说也是成立的。另外如果一个矩阵是正交的,那么他的转置矩阵和逆矩阵是相等的

如何快速判断矩阵是正交的。

选择行矩阵还是列矩阵?

如无特殊情况,Unity中使用列矩阵,和右乘。

矩阵的几何性质

常见几何矩阵一览表

 

平移矩阵:平移坐标点
 平移方向向量
缩放矩阵:一般缩放
 方向向量的缩放
旋转矩阵:绕X轴旋转θ的矩阵
 绕Y轴旋转θ的矩阵
 绕X轴旋转θ的矩阵


复合变换矩阵

绝大多多数情况下我们约定的顺序就是先缩放,再旋转,最后平移。(如果顺序不一致,得到变换矩阵将会不一样,但是书上没有给出明确的关系)。下图是只考虑Y轴旋转的复合变换的例子。

给定一个复合旋转如何使用矩阵?

假设绕X轴,Y轴,Z轴分别旋转θ角度。要注意这个矩阵,对应的是每单次旋转后都更新旋转轴的情况,即下图。

使用矩阵完成坐标空间(系)的变换

假设我们要将坐标空间C转换到坐标空间P中,首先我们要知道坐标空间C在坐标空间P中的原点和坐标轴的矢量表示。然后把三个坐标轴依次放入矩阵的前三列。把原点放到最后一列。再用0和1填充最后一行即可。

如果我们只是变换方向矢量,可以只用一个3*3的矩阵,也就是前面的矩阵剔除掉平移的部分。

一个从模型到屏幕的完整标变换过程

首先是流程一览图。

vertex_conversion.png-100.9kBspace_handness.png-75.6kB

整个变换过程包含了比较多的的公式运算,这里节选比较重要的点做整理,(PS:主要整理透视投影)。

  • 为什要从观察空间(以相机为原点的空间)转换(投影)到裁剪空间?

    • 主要是常规的数学方法中,使用相机视锥体的6个面裁剪可视物体,比较麻烦,投影后可以使齐次坐标的w分量“有意义”,即,可以使用投影后生成齐次坐标的w分量,便捷的判断物体是否在视锥体范围内。更重要的是有了这个w分量,为了后续裁剪空间到屏幕空间的变换可以通过一个简单的“齐次除法”来完成。

  • 观察空间到裁剪空间做了什么?

首先是观察空间到裁剪空间的变换矩阵,该矩阵的推到过程可以看书上的流程,主要是使用相机的FOV和近裁剪面,远裁剪面进行一系列计算得出。

该矩阵表明了,整个投影过程实际上是对x,y,z分别作了不同程度的缩放,缩放的目的是为了方便裁剪。更重要的是,变换后的w分量,不再是1,而是原先z分量的取反结果。有了这个w分量后,我们可以通过如下不等式来判断,顶点是否在视锥体内

以下是裁剪过程示意图。另外要注意的是,裁剪矩阵会改变空间的旋向性,也就是空间从右手坐标系变换到了左手坐标系,这意味着离相机越远,z值越大。

projection_matrix0.png-135.1kB

 

  • 屏幕空间的变换是怎样的?什么是齐次除法?

    齐次除法,简单来说就是使用坐标的xyz分量分别除以w分量,以得到一个在(0,1)范围内的归一化设备坐标(NDC)。
  • 从NDC在映射到真正的屏幕坐标。

    • 在Unity中,屏幕空间左下角的像素坐标是(0,0),右上角是(pixelWith,pixelHeight),而我们前面得到的NDC坐标x,y都是在[0,1]的范围内,所以要缩放到[0,pixelWith],和[0,pixelHeight]范围,公式为另外,z轴坐标会直接除以w分量,然后把该值放到深度缓冲中去。

法线变换

法线变换的目标是,变换后仍然是跟切线垂直的一个方向向量。经过一堆推导得知,法线变换矩阵是原顶点变换矩阵的逆转置矩阵。

但是一般情况下,求解逆转置矩阵中的逆矩阵比较耗费运算量。我们可以通过两个特殊情况,避免解逆矩阵,获得法线变换矩阵。

  • 如果原变换矩阵只包含旋转,那么可以直接用原变换矩阵作为法线的变换矩阵。(PS:什么情况下只包含旋转呢)
  • 如果原变换矩阵只包含旋转和统一缩放,那么可以使用同一缩放系数来获得法线的变换矩阵,即
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值