《Unity Shader入门精要》学习笔记
第二章、渲染流水线
MainIdea: 简化后的渲染流水线工作流程。工作任务是有一个三维场景出发、生成(渲染)一张二维图像。即计算机从一系列的顶点数据、纹理等信息出发,把这些信息最终转换成一张人眼可以看到的图像。(由GPU、CPU共同完成。)
《Render- Time Rendering, Third Editon》中渲染流程的三个阶段:
应用阶段(Applicaiton Stage)——几何阶段(Geometry Stage)——光栅化阶段(Rasterizer Stage)
-
应用阶段: 输出渲染图元(rendering primitives),包括:
准备场景数据:相机、场景模型、光源;
粗粒度剔除(culling):把不可见的物体剔除;
渲染状态:材质、纹理,使用的shader等。 -
几何阶段: 把顶点坐标变换到屏幕空间中,包括:
顶点着色器(Vertex Shader)用于实现顶点的空间变换、顶点着色等功能;
曲面细分着色器(Tessellation Shader):逐图元的着色操作or产生更多图元;
裁剪: 去掉不在相机视角内的顶点,并剔除某些三角图元的面片;
屏幕映射(Screen Mapping):把图元的坐标转换到屏幕坐标中; -
光栅化阶段: 每个渲染图元的哪些像素应该被绘制在屏幕上,包括:
三角形设置- 三角形遍历- 片元着色器- 逐片元操作
第三章、 Unity Shader基础
Shader:渲染流水线中的某些特定阶段。
ShaderLab: 编写Unity Shader的一种说明性语言
Unity Shader不等同于Shader,Unity Shader实际上指的就是一个ShaderLab文件——硬盘上以.shader作为后缀的一种文件。
第四章、数学基础
矩阵变换——线性代数领域
在笛卡尔坐标系下讨论:
三维下的左手坐标系和右手坐标系
单位矢量(unit vector):归一化的矢量(normalized vector)
关于叉积的图形学意义可以参考B站教程《线性代数的本质》
地址:https://www.bilibili.com/video/BV1ys411472E?p=11
强烈建议学习该系列视频,直观表达线代在计算机图形学中的意义。
一、 矩阵:定义详见维基百科
满足的性质:不满足交换律,满足结合律
方块矩阵:行列数相等的矩阵,三维渲染最常用的33/44
对角元素(Diagonal elements):一个矩阵除了对角元素外的所有元素都为0
转置矩阵(transposed matricx): 矩阵的行列翻转,即i行变成i列,j列变成j行。
逆矩阵(inverse matrix),矩阵必须为方阵才有逆矩阵;矩阵与逆矩阵相乘得到单位矩阵
正交矩阵(orthogonal matrix):一个方阵M和它的逆转矩阵的乘积是单位矩阵,这两个矩阵正交。
Q:如何判断一个矩阵是否为正交矩阵,只要满足AAT = E,即可。即矩阵与其逆转矩阵的乘机为单位矩阵。
二、矩阵的几何意义
变换(transform):把一些数据如点、方向矢量或者颜色等,通过某种方式进行转换的过程。
其中,线性变换(Linear transform)的满足条件:
f(x)+f(y) = f(x+y)
kf(x) = f(kx)
齐次坐标(文中默认为四阶其次坐标)
平移矩阵,进行平移变换,非正交矩阵。
缩放矩阵
问题:旋转矩阵是否旋转坐标系的影响??
顶点变换步骤:第二步,将顶点坐标从世界空间变换到观察空间,成为观察变换。
第三步,从观察空间转换到裁剪空间,变换矩阵叫裁剪矩阵,也叫投影矩阵。
视锥体类型:正交投影,透视投影