unity shader 入门精要(冯乐乐著) 读书笔记(二)

学习Shader的数学基础

笛卡尔坐标系

openGL使用的系:
y
^




—————————> x

directX使用的系:
—————————> x




🔽
y

unity使用的坐标系:
在模型空间中使用的是左手系
而在摄像机(观察 )空间中使用的是右手系
相机的正向对应的是z轴的负方向

右手系的旋转方向用右手螺旋定则判断而左手系的旋转方向用左手螺旋定则判断(问的是科大讯飞的星火模型 不对了举报他)

然后是基础概念:矢量、点、模、零矢量、归一化、单位矢量、点积(内积)、叉积(外积)
点积常用性质:

  1. 可结合标量乘法
  2. 可结合矢量加法减法
  3. 本身点积的结果就是模的平方

矩阵

矩阵:一般使用4*4矩阵进行运算
概念:方阵、单位矩阵、转置矩阵、逆矩阵、正交矩阵(转置和逆是同一个矩阵)、正交积、标准正交积(满秩)
(这一部分可以参考我的线形代数笔记)
线性变化:缩放、旋转、错切、镜像、正交投影
平移变化:非线性变化
仿射变化:合并线性变化和平移变化 需要用4*4的矩阵代替
齐次坐标空间:四维空间

常见的变换类型和它们的特性: p63

变换矩阵:
|M3*3 t3*1
|01*3 1|
其中M是用于旋转、缩放
其中t是用于平移
0是零矩阵

列矩阵:末尾 1是点 0是向量

平移矩阵:在t上做手脚
缩放矩阵:在M的对角阵上做手脚 若缩放倍数一样则称为统一缩放
旋转矩阵:M中出现三角函数之类的,绕哪条轴则那条轴为对角1而另外的则为三角矩阵 参考图形学笔记(有固定的变化矩阵)p65
并且旋转矩阵是正交矩阵

通常情况下是先缩放 再旋转 最后平移

世界空间

坐标空间变换:渲染管线中有父空间和子空间,空间坐标的数值其实是相对于另一个空间而言的,因此在变换点的坐标时,需要用到过渡矩阵。
而截取变换矩阵的前三行前三列来对法线方向和光照方向来进行空间变换,因为仅仅平移坐标系的原点是不会对矢量造成任何影响的(感觉更多的是指平行光
判断坐标轴的按行放还是按列放时,可以参考 p71 的描述
其实也就是左乘矩阵或者是右乘矩阵的差别
左手系

模型空间

别称对象空间或者是局部空间
左手系(单击物体时出现的空间

观察空间

右手系(符合openGL的传统
区别于屏幕空间,观察空间是三维的,这就多了一步:投影

在屏幕空间获得成像的步骤:

  1. 获取观察空间下的物体的坐标我们可以让摄像机回到世界空间的原点,然后进行平移(注意左右手系的转换),由此可以获得观察变换矩阵。

    ​ Pview = Mview Pworld

  2. 获取顶点坐标(模型各个顶点的坐标)之后
    我们可以使用裁剪矩阵进行缩放,接着在屏幕空间上成像(这一部分在games101中有详细解释

  3. 有两种裁剪方法:正交投影、透视投影(利用视锥,不详细解释了,原理为相似三角形的应用)最终是将其变为一个1*1*1的立方体
    (1. 透视投影:
    关键概念:近裁剪平面(nearClipPlane),远裁剪平面(farClipPlane),摄像机的横纵比(Aspect),视野角度(Field of View)
    通过games101中的推导,我们可以得到投影矩阵:Mfrustump81
    不在目标锥体中的其他图元将会被裁剪,裁剪矩阵会改变空间的旋向性
    (2. 正交投影:
    比较简单,原理与透视投影一样,因此不过多详述。

注:正交投影与透视投影有一大不同 透视投影变换矩阵的最后一行为[0 0 -1 0] 正交矩阵中点最后一行为[0 0 0 1]

  1. 归一化(屏幕映射)
    我们需要将得到的所有图元坐标转化到屏幕空间,接着进行标准齐次除法、透视除法,也就是将点的各个坐标去除以w([x y z w]T),将w转化为1,最后通过缩放得到点在屏幕上的位置

法线变换

有时候使用变换矩阵,我们并不能保证点的法线信息会保持垂直或保留下来法线的原信息。(或者切线、切矢量)
由变化前后法线与切线保持垂直,我们可以得到
变化前法线与切线保持垂直 ➡️ 变化后的法线与切线保持垂直
切线可以用过渡矩阵来相互表示,而此时即求另一个矩阵G使得变化后的切线法线垂直。
p87
G=(MTA->B-1

当然unity为我们提供了许多内置的变换矩阵(p87
UNITY_MATRIX_T_MV矩阵:当模型变换只包括旋转和统一缩放时,那它就几乎是一个正交矩阵了
UNITY_MATRIX_IT_MV矩阵:是UNITY_MATRIX_MV矩阵的逆矩阵的转置

unity也提供了我们正在渲染的摄像机的参数信息(p88

一些代码方面的困惑或者矩阵和矢量方面的困惑:4.9

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值