Shader 初识

Shader,中文翻译即着色器,是一种较为短小的程序片段,用于告诉图形硬件如何计算和输出图像。用一句话概括:Shader是可编程图形管线的算法片段。它主要分为两类,Vertex Shader和Frament Shader(顶点着色器,片段着色器)。

渲染管线也称为渲染流水线,是显示芯片内部处理图形信号相互独立的并行处理单元。一个流水线是一序列可以并行和按照固定顺序进行的阶段。每一个阶段都是从它的前一阶段接收输入,然后把输出发送给后随后的阶段。就像一个在同一时间内,不同阶段不同的汽车一起制造的装配线,传统的图形硬件流水线以流水的方式处理大量的顶点,几何图元和片段。

图形管线流程

                                      图形管线流程

 

Unity官方提供的Shader流程图

Unity官方Shader流程图

 

Transform,TexGen,Lighting:图形坐标的几何变化,纹理坐标的生成(在顶点当中去取得纹理坐标,纹理坐标转换为UV取值的范围),光照。当图形硬件可编程之后,这一部分就可以用VertexShader来计算。

Culling,Depth Test:裁剪(为了减少GPU的计算,把看不见的面直接剔除,加速图形处理),深度测试 (摄像机可视化的范围,即最近(近切面)最远),当超过最近最远的部分就需要剔除。

Texturing,Fog:纹理采样,雾化处理(光栅化处理的阶段),在纹理当中找到一个对应的一个点的颜色,(这个过程的片段shader可以处理的范围)。

Alpha Test: 绘制半透明或全透明的物体

Blending:混合图像