Shader 介绍:
1. shader语言
opengl: SGI公司研发,跨平台(Linux、Android)
GLSL: Opengl shader language
dx(DirectX):微软研发。非跨平台 性能非常好(Windows)
HLSL: hight level shader lauguage
cg:微软 和 英伟达 联合研发,跨平台,性能非常好,基于C语言(同时支持DirectX和opengl)
2. unity shader 语言:
opengl dx cg
CG 和 HLSL 包括在 CGPROGRAM ... ENDCG 语法块
GLSL 包括在 GLSLPROGRAM ... ENDGLSL 语法块
自己的语言 shader lab(Unity使用ShaderLab来进行着色程序的编写,对不同平台进行编译,重点支持Cg语言)
博主推荐直接使用cg就可以
3. unity shader 分类:
fixed shader:固定管线着色器, shader1.0 开关式 (shader已经开发完成,只需打开就可使用,不打开就不使用)
顶点片段着色器: shader2.0 (功能里面的公式 用户可以自定义,不仅可以使用开关式)(干预模型形态的shader)
surface shader: 表面着色器,Unity自带的(也是shader1.0和2.0的封装)非常强大(干预像素着色的shader)
4. shader 结构
//shader 的名字会显示在 Unity 的 Inspector 中选择 shader 的菜单里面
Shader "shader 的名字"
{
// 属性块 定义的一些属性,定义在这里的属性会在Unity的属性查看器里显示出来
[Properties]
// 可能存在多个 subshader。Unity 会在所有 subshader 列表中选择当前环境中运行没错误的第一个 subshader。
Subshader
{
//subshader 的标签
[tags]
//给多个pass 公用的设置
[Common State]
// 可能存在多个 pass,每个 pass 都会引起一次渲染过程。
Pass
{
// Pass 的标签
[Pass Tags]
// 渲染设置,如颜色混合
[Render Setup]
// 纹理设置,只有在 fixed function shader 中才可用
[Texture Setup]
}
// 可有多个 Pass
[其他的 Pass]
}
// 可以有多个 subshader
[其他的 subshader]
// 当所有的 subshader 失败时,就会降级,使用 Fallback 指定的 shader
[Fallback]
// 当有自定义 shader 的设置 UI 时候用
[CustomEditor]
}