Shader概述
- Shader是给GPU执行的程序,中文叫着色器
- Shader是运行在图形处理单元上,可以让开发人员直接操作图形硬件渲染功能
- Shader一般主要有:固定管线着色器(慢慢被淘汰)、顶点片元着色器,表面着色器
顶点Shader:干预模型形态的Shader
像素Shader:干预像素着色的Shader - 模型顶点运算的时候,可以加入顶点Shader来干预顶点的位置;顶点着色的时候,可以加如像素shader来干预像素的上色
Shader Lab语法基础
Unity使用ShaderLab来进行着色程序的编写,对不同平台进行编译,重点支持Cg语言
Shader "name" { //name为Shader名字
Properties { //定义的一些属性,可以unity的属性查看器里面显示
}
SubShader { //子着色器列表,一个Shader必须至少有一个子着色器
}
FallBack Off //如果子着色器显卡不支持,就会降级
}
Properties
具体解释往下看
定义
name("display name", type) = 值;
name 是属性的名字,Unity中一定要用下划线开始,比如_Name
display name 是在Unity属性检查器的名字
type 是属性的类型
值是这个属性的默认值
代码如图:(Range为一个取值范围,下面会写到)
Unity中的属性检查器如图:
类型
Float、Int、Color(num, num, num,num) (注:四个num分别表示rgba,且num属于0-1)、Vector(四维向量)、Range(start, end)
2D:2D纹理属性
Rect:矩形纹理属性
Cube:立方体纹理属性
3D:3D纹理属性
例如:
_Data ("Data Texture", 3D) = "" {options} //options为纹理属性选项
Options 纹理属性选项
TexGen:纹理生成模式,纹理自动生成纹理坐标的模式;顶点Shader将会忽略这个选项
ObjectLinear,EyeLinear,SphereMap,CubeReflect CubeNormal
LightmapMod:光照贴图模式,如果设置这个选项,纹理会被渲染器的光线贴图影响
SubShader
定义
SubShader { [Tags], [CommonState], Pass{} }
子着色器由标签(Tags)、通用状态(CommonState),通道列表(Pass)组成,定义了一个渲染通道列表,并可以选为所有通道初始化所定义的对象
Tags
Pass
SubShader包装了一个渲染方案,这些方案由一个个通道Pass来执行,SubShader可以包括很多通道块,每个Pass都能使几何体渲染一次
Pass基本语法
Pass{[Name and Tags][RenderSetup][Texture Setup]}
Fallback
- 降级:定义在所有的子着色器之后,如果没有任何子着色器能运行,则尝试降级
- 用法: Fallback “着色器名字”
- Fallback Off:不降级,并且不会打印任何警告