Unity Shader入门精要读书笔记系列
第1章 欢迎来到Shader的世界
第2章 渲染流水线
第3章 Unity Shader基础
第4章 学习Shader所需的数学基础
文章目录
前言
这一章作为编写Unity Shader代码的预备篇,讲解了学习Shader所需要的一些基础数学知识。
本书中的一些矩阵变换并没有给出推导过程。
这里推荐去看《3D数学基础:图形与游戏开发》一书,看过入门精要再去看这本书,会给你的数学打下一个良好的基础。
一、坐标系
1.判断左、右手坐标系
右手大拇指指向X轴,食指指向Y轴,若中指与Z轴方向相同,则为右手坐标系。反之为左手坐标系。
2.判断旋转正方向
哪个坐标系用哪只手,大拇指指向旋转轴方向,四指弯曲方向为旋转正方向。
3.Unity中使用的坐标系
模型空间和世界空间使用左手坐标系,观察空间使用右手坐标系。
二、向量
点乘(dot product)
公式:a*b = axbx + ayby + azbz = |a||b|cosθ
1)可以求一个向量在另一个向量上的投影值。
2)可以用来求向量的模。
3)可以进行向量分解。已知向量a,b,可以将a向量分解成垂直于b和平行于b的两部分。
4)可以点乘结果判断两个向量是否同向。
叉乘(cross product)
公式 :aXb = (aybz - azby, azbx - axbz, axby - aybx) = |a||b|Sinθ
两个向量叉乘的结果是一个垂直于它们的新向量,方向根据左(右)手坐标系判断,使用左(右)手法则判断。aXb四指从a方向朝着b方向弯曲,大拇指指向为叉乘结果向量方向。
叉乘不满足交换律,aXb 不等于 bXa(所得向量模相等,方向相反)。
1)用来计算垂直于一个平面、三角形的矢量。
2)判断三角面片的朝向。
3)构建坐标系,根据法线和切线计算副切线。
4)用来判断点是否在多边形内部。
三、矩阵
1.矩阵的一些定义
重点了解矩阵的转置、矩阵的逆以及正交矩阵和他们的性质。
2.矩阵的几何意义:变换
由于矩阵变换,《Unity 入门精要》中并没有给出详细推导。本章就先到这了,以后在补上《3D数学基础:图形与游戏开发》
一书中的各种矩阵变换推导过程。
四、坐标空间
一个顶点最开始从模型空间最后到屏幕空间,得到真正的屏幕像素坐标。其中经历了哪些变换?
从建模工具得到的是物体的局部坐标(Local Coordinate),
局部坐标通过模型矩阵Model变换到世界坐标(World Coordinate),
世界坐标通过观察矩阵View变换到观察坐标(View Coordinate),
观察坐标 经过投影矩阵Projection变换到裁剪坐标(Clip Coordinate),
裁剪坐标经过透射除法 (Perspective Division)得到标准设备空间(Normalized Device Coordinates,NDC),
NDC坐标通过视口变换(Viewport Transformation)变换到窗口坐标(Window Coordinates)
进行显示。
基础篇总结
至此,《Unity 入门精要》中基础篇结束。为初学者普及基本的理论知识以及最重要的是帮助我们疏通了渲染流水线。接下来初级篇将带我们学习几种基础的光照模型。