shader前言

在磕磕绊绊的学习中留下一点方便后续复习的资料,如果有出错的地方,烦请指正.先行谢过.
unity shader组件

什么是shader?

        shader本质上来说就是运行在GPU上的一组指令,用来处理图像最终怎么显示在计算机的输出设备上.

GPU与CPU

        GPU的核心就是图像处理单元,这个图像处理单元为了方便对图像进行操作和处理而专门设计的电路,相对于CPU来说GPU在图像处理上拥有更快的处理速度,在图像处理上更高效.这一特性是由于GPU的CPU不同的设计方式决定了,在设计之初CPU的计算核心是采用串行操作的方式,有点流水线的方式,而GPU的图像处理单元采用的是并行操作方式.

shader类型

        shander根据工作方式,可以分为以下类

  • 顶点着色器(vertex shader)
            完成顶点相关的操作(如顶点变换,修改顶点位置或UV信息等),操作是面像顶点的(接受的输入是顶点数据)
  • 像素(片元)着色器(pixel/fragment shader)
            完成像素填充的相关操作(如根据片元信息,填充像素颜色,颜色混合等,决定了像素的最终颜色)操作是面像片元或者像素的(接受的输入是片元数据)
  • 多边形着色器(Geometry shader)
            完成对多边形的操作(在整个渲染流水管线中,多边形着色器(Geometry shader)一般出现在顶点着色器(vertex shader)和像素(片元)着色器(pixel/fragment shader)之间),操作是面像多边形的(接受的输入是多边形数据)
  • 图像(计算)处理着色器(Compute shader)
            计算着色器是一个通用着色器,是在渲染流水管线只外使用的,也就说该类着色器并不会参与图像的绘制,是一种基于像素的着色器(主要是依赖GPU的并行处理方式,对像素进行一些通用的处理)
  • 细分曲面着色器(Tessellation/hull shader)
            是一种较新的着色器,是在OpenGL4.0和Directx3D 11版本之后才添加的,主要是用来图曲面增加细分,(在苹果的最新渲染管线中,细分曲面着色器属于固定渲染管线着色器,固定渲染管线着色器是烧录在硬件中的,是不支持编程的)

顶点(vertex)片元(fragment)着色器工作原理简述

1. 顶点输入
        为了完成对于网格的绘制,需要收集网格的所有顶点信息(包括但不限于位置信息,uv,法线,顶点颜色等),然后逐一传递给顶点着色器.顶点信息可以没有uv,法线,顶点颜色等信息,但至少应该有顶点的位置信息,这样才能让顶点着色器在屏幕上完成顶点的绘制
2. 顶点处理
        顶点着色器接收到输入的顶点信息后,根据需求对顶点完成相应的处理,然后将处理的结果(包括可能出现的新的位置,新的uv等信息)打包输出(顶点输出)
3. 光栅化处理
        顶点着色器输出数据会进入到光栅化器(光栅化器是一种计算机硬件,可以根据一些规则,计算出屏幕中哪些像素将被几何形状覆盖),光栅器的首要任务就是查找出存在于几何体中的像素,其次是根据顶点着色器输出的信息,计算数据,然后传递给像素(片元)着色器
4.像素处理
        像素着色器接收到光栅化器的处理结果后,根据需求对像素完成相应的处理,然后输出处理的结果(包括像素的颜色和透明度信息).以便完成在屏幕上像素的最终绘制

你可能感兴趣的:(shader前言)