此系列为本人学习Unity Shader的随笔记录:
Shader和Material
Shader(着色器)实际上就是一小段程序,它负责将输入的Mesh(网格)以指定的方式和输入的贴图或颜色等组合输出。绘图单元依据这个输出将图像绘制到屏幕上。
Material(材质)输入的贴图或颜色等,加上对应的Shader和其参数设置,打包存储,得到的就是一个Material。之后便可以将材质给予合适的renderer(渲染器)来进行渲染(输出)了。
Shader按管线分类
固定渲染管线 - 这是标准的几何&光照(Transforming&Lighting)管线,功能是固定的,它控制着世界、视、投影变换及固定光照控 制和纹理混合。T&L管线可以被渲染状态控制,矩阵,光照和采制参数。功能比较有限。基本所有的显卡都能正常运行。
可编程渲染管线 - 对渲染管线中的顶点运算和像素运算分别进行编程处理,而无须象固定渲染管线那样套用一些固定函数,取代设置参数来控制管线。
Unity中Shader的程序结构
图1-1参照图1所示,首先是着色器名,其次属性定义,用来指定输入参数。接下来是一个或多个子着色器,在实际运行中,由运行的平台决定的使用哪个进行渲染。子着色器是代码的主体,每个子着色器中包含一个或者多个的Pass。在计算着色时,平台优先选择可以使用的着色器,然后依次运行其中的Pass,得到输出结果。最后指定一个回滚,用来处理所有SubShader都不能运行的情况(目标平台有SubShader不支持的特性)。在实际开发时,我们将直接在SubShader这个层次上写代码,系统会把我们的代码编译成若干个合适的Pass。
Unity支持的三种Shader
固定渲染管线着色器(Fixed function shader)- 基本用于在老显卡无法显示时的Fallback。使用的是ShaderLab语言,语法与微软的FX files或者NVIDIA的 CgFX类似。
片段着色器(Fragment Shader) - 最强大的Shader类型,属于可编程渲染管线,使用CG/HLSL语法。可以在比较低的层级上进行更复杂(或者针对目标设备更高效)的开发。
表面着色器(Surface Shader) - Unity3d推崇的Shader类型,为你做了大部分的工作,只需要简单的技巧即可实现很多不错的效果。使用Unity预制的光照模型来进行光照运算,使用CG/HLSL语法。
入门系列将主要集中在表面着色器上(Surface Shader)的介绍上。
网友评论