Shader----概述

30 阅读3分钟

1.概述

shader:着色器,较为短小的程序片段,用于控制图形硬件计算和输出图像。即可编程图形管线的算法片段。分为Vertex shader和fragment shader。

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

shader、材质与贴图的关系 shader是一小段程序,负责将输入的顶点数据以指定方式和贴图、颜色组合起来,之后输出。绘制单元根据该输出将图像绘制到屏幕上。Texture+Color+Shader参数设置,之后打包存储,就可以得到Material材质。 材质是引擎最终使用的商品,shader是生产材质的方法。贴图、颜色等是原材料。

总结: shader是图形可编程的程序片段。 渲染管线是一种从计算机从数据到最终图形成像的形象描述。

2.三大主流高级编程语言

shaderlanguage作为一种高级编程语言,使得程序员可以采用灵活方便的编程方式控制渲染过程,同时利用图形硬件的并行性,提高算法效率。

HLSL:基于DirextX(适用于Unity)

GLSL:基于OpenGL

CG:基于NVIDIA的C for Graphic

3.图形硬件监史与可编程管线

GPU的优越性:其高并行结构,使得GPU在处理图形数据和复杂算法方面效率更高。CPU大部分面积为控制器和寄存器,GPU拥有更多的逻辑处理单元ALU,可以并行处理密集型数据。

GPU采用流式并行计算模式,可对每个数据进行独立并行计算,即同时计算多个数据,多数据并行计算和单数据单独执行时间一样。所以在顶点数据处理时,可以同时处理N个顶点数据。

4.Unity Shader的组织形式

4.1 UnityShader的形态 Fixed function shader Surface shader Vertex and fragment shader

4.2 Shaderlab基本结构

shader “name”
{
    [Properties]
    SubShaders 有且至少有一个
    [FallBack] 硬件不支持所有的subshader,则会回滚至内置shader
}

4.3 内置shader(build-in Shader) Unlit:不发光,只是一个纹理,不被任何光照影响。

VertexLit:顶点光照

Diffuse:漫反射(片段shader)

Normal mapped:法线贴图,比漫反射昂贵,增加了一个或更多(法线贴图)和几个着色器结构

Specular:镜面高光,增加了特殊的高光计算(金属、玻璃)

Normal Mapped Specular:高光法线贴图,比高光昂贵。

Parallax Normal mapped:视差法线贴图,增加了视差法线贴图计算

Parallax Normal Mapped Specular:视差高光法线贴图,增加了视差法线贴图和镜面高光计算。