Unity Shader 入门精要 | 第四章 学习 Shader 所需的数学基础

欢迎前往个人博客 驽马点滴 和视频空间 哔哩哔哩-《挨踢日志》

这一章节的目的:让读者了解模型中的一个点,是如何映射到屏幕上的一个点。这个过程当中涉及的各个空间及其坐标变换。

4.1 农场游戏

这里主要引出例子:农场里有一只叫妞妞的牛,要讲述它的眼睛是如何映射到屏幕上的某个位置。

4.2 笛卡尔坐标系

介绍了笛卡尔坐标的由来:笛卡尔生病,在床上观察如何描述苍蝇的位置。而引出了被称为笛卡尔坐标系(Cartesian Coordinate System)的东西。

几个基本概念:
基矢量:多维空间中,可以作为基的坐标轴。
标准正交基:基矢量相互垂直,且长度为1。
正交基:基矢量相互垂直,长度不全为1。

讲述了左手系和右手系的概念。Unity 基本使用左手系,除了观察空间(View Space,或者说 Camera Space)使用的右手系(和 OpenGL 保持一致)。

4.3 点和矢量

讲述点和矢量的概念,以及二者的区别。
介绍了矢量相关的运算。

4.4 矩阵

矩阵的定义、运算。
单位矩阵(identity matrix)、转置矩阵(transported matrix)、逆矩阵(inverse matrix)、正交矩阵(orthogonal matrix)等定义。
其中,正交矩阵最重要的特性是其逆矩阵等于其转置矩阵。这个特性能够非常方便的求解逆矩阵,带来运算效率的极大提升。

4.5 矩阵的几何意义:变换(transform)

什么是变换?变换一般包含缩放、旋转和平移。
什么是齐次坐标?教程中的齐次坐标是一个四维矢量。在三维坐标上增加第四维坐标,并设置对应的值而成(点的话,设置为 1,矢量设置为 0)。

齐次坐标表示的平移变换、旋转变换、缩放变换的矩阵形式。
同时给出这些变换矩阵的逆矩阵。

4.6 坐标空间

引入坐标空间,和定点坐标空间的变换过程。
在父空间 P 中,有一个子空间 C,C 的原点为 Co,基矢量 为 Cx Cy Cz,
那么在 C 中的任意一点 Pc(a, b, c) 变换到父空间 P 的变换矩阵为:
M(c->p) 是一个 4X4 矩阵,矩阵左上角 3X3 矩阵恰好为 (Cx, Cy, Cz);
右上角3X1矩阵对应 Co;矩阵左下方 1X3 对应 (0, 0, 0) ;矩阵右下方为 (1);

为了解释 Unity 中需要用到的多个坐标空间:
模型空间(Model Space)(Local Space)(Object Space)
世界空间(World Space)
观察空间(View Space)(Camera Space)
裁剪空间(Clip Space)
屏幕空间(Screen Space)

其中,模型空间变换到世界空间,需要用到模型变换,对应矩阵 M
世界空间到观察空间,需要用到观察变换,对应矩阵 V
观察空间到裁剪空间,需要用到投影变换,对应矩阵 P
裁剪空间到屏幕空间,需要用到屏幕映射。

其中只有观察空间是右手系,其余都是左手系。(Unity 当中是如此)

4.7 法线变换

有些模型中会附带法线数据,如果从 A 空间变换到 B 空间时,其变换 M(A->B)可能不是一个正交变换,那么很可能会改变法线和表面的垂直特性。因此需要计算法线对应的变换。

4.8 Unity Shader 的内置变量(数学篇)

介绍了 Unity 中的一些内置的变换矩阵:
UNITY_MATRIX_MVP
UNITY_MATRIX_MV
UNITY_MATRIX_V
UNITY_MATRIX_P
UNITY_MATRIX_VP
UNITY_MATRIX_T_MV
UNITY_MATRIX_IT_MV
_Object2World
_World2Object

摄像机和屏幕参数(后续学习过程中再了解)

欢迎前往个人博客 驽马点滴 和视频空间 哔哩哔哩-《挨踢日志》

你可能感兴趣的:(Unity Shader 入门精要 | 第四章 学习 Shader 所需的数学基础)