Shader知识点

前言

补:这是好久前的笔记了!发上去记录一下,后面整理一下shader的知识再放出来。 当我们对电脑进行任何操作,我们都会给电脑下达一组指令,而这一组指令我们称之为program。而且用于在屏幕上画阴影、图像之类东西的program,称之为着色器。所以着色器也是是组指令,但其并不是在cpu上运行,而是在GPU上运行的。

GPU

我们可以简单地看作是主算机用于进行图形操作或图像处理的一个处理单元或专门电路

CPU和GPU的差别

  1. CPU的核心数一般就是我们所说的几核几核,而GPU却是由成千上万的GPU unit处理核心组成的
  2. CPU的核心中串行操作的,而GPU和核心是并行操作的或同时操作的

Shader的类型

根据shader的功能,我们大致可以归为以下几个类型

  1. Vertex shader(顶点着色器)
  2. Pixed shader/Fragment shader(像素着色器)
  3. Geometry shader(几何着色器)
  4. Compute shader(计算着色器)
  5. Tessellation shader/hull shader(细分曲面着色器)

    tessellation这里就不再区别 Tess control 和 tess evalution了

shader相关知识

当我们需要显示或绘制一个对象的时候,比如我们需要绘制一个人物,需要有人的geometry,如果是一张图片,则需要一张texture,等,这些我们都统称为mesh,而mesh都是由primitive组成的

primitive一般刚有以下几种

  1. 三角形triangle
  2. 线段line
  3. 点`point

假设需要绘制一个三角形到屏幕上,大致流程如下

  1. 绘制一个组成该三角形的所有顶点

    用于给制顶点的,通常都称之为vertex shader

  2. 在所有的顶点区域内填充上像素

    用天执行填充这种操作的指令,称之为pixed shader

Tessellation shader

这种类型只能在opengl 4.0以上或DirectX 3d 11 以上才有 简单点可以看作是基本操作单元是一次性多个顶点的集合,可以在集合里加入一些算定义的属性

Vertex==>Geometry==>Fragment

compute shader并不直接操作以上这些,而是直接对GPU的芯片的操作