Pass "PassName" {
Tag {PipelineStage = "ShadowCaster"}
...
// 全局变量区:公共变量声明,结构体声明,函数声明
...
// 渲染管线和渲染状态设置
// 指定顶点着色器和片元着色器 强调glsl语言
VertexShader = vert;
// 指定渲染队列
RenderQueueType = Transparent;
}
Pass
是 Shader
对象的基本元素。简单的着色器对象可能只包含一个 Pass
,但更复杂的着色器可以包含多个 Pass
。 它定义了渲染管线特定阶段执行的操作,例如在 GPU 上运行的着色器程序,渲染状态,以及渲染管线相关设置。
可以通过以下两种方式指定
BlendState = blendState;
BlendState {
渲染状态属性 = 属性值;
}
直接声明成全局变量
mediump vec4 u_color;
float material_AlphaCutoff;
mat4 renderer_ModelMat;
vec3 u_lightDir;
通过定义顶点着色器出参结构体和片元着色器入参结构体指定
struct v2f {
vec3 color;
};
v2f vert(a2v o) {
...
}
void frag(v2f i) {
...
}
通过VertexShader
和FragmentShader
指定显示指定着色器入口函数
VertexShader = vert;
FragmentShader = frag;
通过RenderQueueType
指令指定,RenderQueueType
等同与引擎 API。
RenderQueueType = Transparent;
除了可以在 ShaderLab 中对渲染状态和渲染队列进行设置,开发者同样可以通过材质的API进行设置,如
// 渲染队列设置
material.renderQueueType = RenderQueueType.Opaque;
// 渲染状态设置 const renderState = material.renderState.depthState; depthState.writeEnabled = false;
当 ShaderLab 中声明了渲染状态和渲染队列,材质相应的设置会被忽略。