声明:这里是个人学习《Unity Shader入门精要》这本书的学习笔记,图片文字都是书上抄下来的(文字精简了一下,图片都是书上照搬的)。并非个人原创作品,仅供学习交流使用。
-
2-1综述
- 2-1-1 什么是流水线
- 流水线出现之前,一个产品需要完成所有的生产步骤,才能开始新一个产品的生产。流水线出现后,所有步骤并行进行。
- 理想情况下,如果把一个非流水线系统分成n个流水线阶段,且每个阶段耗费时间相同,那么整个系统会得到n倍的提升。
- 2-1-2 什么是渲染流水线
- 三个阶段:应用阶段(Application Stage)、几何阶段(Geometry Stage)、光栅化阶段(Rasterizer Stage)
- 应用阶段
CPU主导阶段- 准备场景数据(摄像机位置,视锥体,模型,光源等)
- 粗粒度剔除(culling)
- 设置模型渲染状态(漫反射颜色,高光反射颜色,纹理,shader等)
- 几何阶段
用于处理和我们要绘制的几何相关的事,CPU进行- 将顶点坐标变换到屏幕空间中,再交给光栅器进行处理
- 本阶段会输出屏幕空间的二维坐标顶点,每个顶点的深度值,着色等相关信息,并传递给下一个阶段。
- 光栅化阶段
使用上一个阶段传递的数据来产生屏幕上的像素,并渲染出最终的图像,CPU进行 - 决定每个渲染图元中有哪些像素应该被绘制在屏幕上
- 对上个阶段得到的逐顶点数据(例如纹理坐标,顶点颜色)进行差值,然后再进行逐像素处理
- 三个阶段:应用阶段(Application Stage)、几何阶段(Geometry Stage)、光栅化阶段(Rasterizer Stage)
- 2-1-1 什么是流水线
-
2-2 CPU和GPU之间的通信
- 2-2-1 把数据加载到显存中
- 所有渲染所需的数据都要从硬盘中加载至系统内存,然后被加载至显存中
当数据加载道显存中,RAM中的数据就可以移除了
- 所有渲染所需的数据都要从硬盘中加载至系统内存,然后被加载至显存中
- 2-2-2 设置渲染状态
渲染状态定义了场景中的网格是怎样被渲染的- 例如,使用哪个顶点着色器(Vertex Shader)/片元着色器(Fragment Shader)、光源属性、材质等。
- 例如,使用哪个顶点着色器(Vertex Shader)/片元着色器(Fragment Shader)、光源属性、材质等。
- 2-2-3 调用Draw Call
Draw Call是一个命令,发起方为CPU,接收方为GPU- 当给定一个Draw Call时,GPU就会根据渲染状态(例如材质、纹理、着色器等)和所有的顶点数据来进行计算,最后输出成屏幕上显示的那些漂亮的像素。
- 当给定一个Draw Call时,GPU就会根据渲染状态(例如材质、纹理、着色器等)和所有的顶点数据来进行计算,最后输出成屏幕上显示的那些漂亮的像素。
- 2-2-1 把数据加载到显存中
-
2-3 GPU流水线
- 2-3-1 概述
- 几何阶段&光栅化阶段
- 几何阶段
- 顶点着色器(Vertex Shader):完全可编程,通常用于实现顶点的空间变换、顶点着色等功能
- 曲面细分着色器(Tessellation Shader):可选择的着色器,用于细分图元
- 几何着色器(Geometry Shader):可选择的着色器,用于执行逐图元的着色操作
- 剪裁(Clipping):剔除某些不在摄像机视野内的三角图元
- 屏幕映射(Screen Mapping):不可编程与配置,负责把图元坐标转换到屏幕坐标系中
- 光栅化阶段:
- 三角形设置(Triangle Setup):固定设置
- 三角形遍历(Triangle Mapping):固定设置
- 几何阶段&光栅化阶段
- 2-3-1 概述