Unity Shader入门精要 学习笔记一

前几章预计都是理论知识。涉及代码的也应该是很小一部分,在我想来。先把理论搞搞清楚。再去理解shader会好很多。所以祝福诸君程运昌荣!好了。开始记录学习笔记

1.渲染流水线是什么?和shader有什么关联?
“渲染流水线的最终目的是生成或者说是渲染一张二维纹理(2D图片),并显示在我们得屏幕上“
以上实在某本资料上看到的说明。以下是个人理解
渲染流水线:是从三维场景出发(生成/渲染)一张二维纹理(图形)这一功能而做的一系列动作,这一系列动作就是渲染流水线
而shader就是在这一系列动作(渲染流水线)中的一员。

2.渲染流水线示意图
从概念上来渲染流水线有三个步骤:
在这里借用《unity shader入门精要》中的截图

图1.1

Unity Shader入门精要 学习笔记一

从图中我们可以看出。渲染流水线的起点是应用阶段。
那么应用阶段主要做了哪些事情呢?
1.把(图形)数据加载到显存中(具体步骤参考图1.2)
2.设置渲染状态
3.调用DrawCall

图1.2:

Unity Shader入门精要 学习笔记一

渲染状态是什么呢?
简单来说就是定义了场景中的网格是怎样被渲染的,比如使用了那个着色器,光源属性,材质等.
将上述工作完成后。CPU就告诉GPU,可以根据我告诉你的设置开始进行渲染了,这个命令就是DrawCall

DrawCall
GPU收到DrawCall命令后。会根据渲染状态和所有输入顶点数据进行计算,最终输出生成屏幕上显示的那些像素。

CPU的工作介绍完成后,下面介绍GPU的工作——GPU渲染(流水线)
在GPU上将执行概念流水线(图1.1)中的后两个阶段,即几何阶段和光栅化阶段。直接上图

图1.3

Unity Shader入门精要 学习笔记一

从图中我们可以看到。GPU中的工作也是流水线形式的。由于几何阶段和光栅化阶段是在GPU中进行的工作。所以并非所有接口都向程序开发者们开放,可编程性或者说可配置性仅对应该流水线上的部分阶段

几何阶段:

顶点着色器:完全可配置/可编程,通常用于实现顶点的空间变换,顶点着色等功能
曲面细分着色器:可选着色器,用于细分图元
几何着色器:可选着色器,用于逐图元的着色操作,或者用于产生更多图元
剪裁:可配置,这个阶段主要用于将那些不在摄像机视野内的顶点剪裁掉,并剔除某些三角图元的面片。比 如在这个阶段我们可以通过指令控制剪裁三角图元的正面或者背面。
屏幕映射:不可配置和编程。用于将每个图元的坐标转换到屏幕坐标系中

光栅化阶段:

三角形设置和三角形遍历:都是由固定函数来完成的(Fixed-Function)
片元着色器:完全可编程。用于实现逐片元的着色操作
逐片元操作:不可编程,但是可配置,而且具有高度的可配置性,