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:视差高光法线贴图,增加了视差法线贴图和镜面高光计算。