UnityShader 与平台Shader的关系
UnityShader 结构
ShaderLab层面
语言
- Unity提供
- 说明性语言
- 使用花括号作为语意(syntax)描述UnityShader文件结构
概略结构说明
-- 材质面板路径
Shader "ShaderName" {
Properties{
// 材质上使用到的属性
}
SubShader{
// 显卡A着色器
}
SubShader{
// 显卡B着色器
}
// 兜底着色器
Fallback "VertexLit"
}
- Properties
1. 参考代码
2. 属性类型列表:
3. 复杂参数:
* 2D && 3D && Cube 都是纹理参数,可以参照书中:3.3.2
4. 实际参数:
* 定义在CG代码中的变量。
* C#脚本可以直接传值给这些参数
* Property定义的变量名要和CG中定义的一致
* Property只是给面板用的工具
Properties{
Name("材质面板名",属性类型) = 属性默认值
}
Shader 层面
- 多SubShader解析
- 扫描所有SubShader,选择第一个能在目标平台上运行的。
- 高规格显卡使用高指令数SubShader,低规格显卡使用低指令数SubShader
- 当前硬件都不支持则使用Fallback
- 单SubShader结构
SubShader{
// 标签
[Tags]
// 状态 渲染初始化步骤
[RenderSetup]
// 渲染通道
Pass{
}
// 其他渲染通道
}
- SubShader 成员详解
-
标签
* 可以在SubShader 和Pass中声明,但是有一些特殊的标签,只作用于SubShader -
状态
* 可以在SubShader和Pass中声明。在SubShader中的状态是全局的,Pass中的状态是局部的。
* 常用状态:
-
通道
* 定义一次完整的渲染流程。
* 可以定义多个Pass
* Pass数量过多会影响渲染效率。
-