材质包含 着色器(shader)、着色器数据(shaderData)、渲染状态(renderStates)。
着色器(Shader)是一段运行在GPU中的程序,通常由顶点着色器和片元着色器组成,我们可以借助 ShaderLab 语法 很方便地书写这部分代码。
跟别的编程语言一样,我们在写着色器过程中也会用到很多变量,我们可以参考 内置变量文档 查找想要的内置变量;也可以通过 使用着色器数据教程 手动上传着色器数据和宏开关:
Galacean 支持对混合状态(BlendState)、深度状态(DepthState)、模版状态(StencilState)、光栅状态(RasterState)进行配置。
我们拿一个透明物体的标准渲染流程来举例,我们希望开启透明混合,并且因为透明物体是叠加渲染的,所以我们还要关闭深度写入,并设置为透明队列;
material.renderQueueType = RenderQueueType.Transparent;
material.renderState.depthState.writeEnabled = false;
material.renderState.blendState.enabled = true;
我们推荐使用 ShaderLab 来设置:
Pass "Pass0" {
DepthState {
WriteEnabled = false;
}
BlendState {
Enabled = true;
SourceColorBlendFactor = BlendFactor.SourceAlpha;
DestinationColorBlendFactor = BlendFactor.OneMinusSourceAlpha;
SourceAlphaBlendFactor = BlendFactor.One;
DestinationAlphaBlendFactor = BlendFactor.OneMinusSourceAlpha;
}
RenderQueueType = Transparent;
}
渲染状态还可以设置为变量,然后通过着色器数据来控制,详情参考 ShaderLab 渲染状态的设置。