Shader

着色器简介我们了解了着色器的基本概念,Galacean 引擎基于着色器程序,将其他渲染相关的信息进行了统一封装,形成了 Shader 对象。Shader 对象和 材质 共同决定了被渲染物体最终的渲染结果。

Shader

Shader 对象包含以下内容:

  • name

Shader 实例对象名。Shader 对象创建后会被引擎缓存,后续复用可以通过 Shader.find()Shader.name 为索引进行查找,因此,引擎规定在单个引擎实例下,Shader 的 name 属性必须唯一。

  • SubShader

一个 Shader 对象包含至少一个 SubShader 对象。

SubShader

一个着色器程序可能会运行在不同的 GPU 硬件平台、不同的渲染管线中,因此 Shader 对象通过 tags 键值对的方式为不同的硬件平台、渲染管线指定不同的渲染逻辑,即 SubShader 对象。

SubShader 包含以下内容:

  • Tags

Tags 是用于被渲染管线消费的 key-value 键值对,通常用于指定 Shader 兼容的硬件平台、渲染管线等信息,当前引擎内置管线消费的 Tags 有

Keyvalue
pipelineStageForward
pipelineStageDepthOnly
pipelineStageShadowCaster
pipelineStageDepthOnly

此外还可以通过 Camera.setReplacementShader,指定渲染管线的replacementTag,实现对设置指定 TagSubShader 替换的目的。

Tags 可以通过 SubShader.setTagShaderPass.setTag进行指定,ShaderLab 指定 Tag 方式详见文档

  • Passes

一个 SubShader 包含至少一个 ShaderPass 对象。

  • RenderStates

SubShader 下所有 ShaderPass 共享的 RenderState 渲染状态

ShaderPass

ShaderPass 封装了具体的着色器程序,以及执行最终渲染时的渲染状态

同一 SubShader 下的 ShaderPass 按照数组顺序依次渲染,渲染效果逐步叠加,形成 Shader 在当前帧的最终渲染结果。

这篇文档对您有帮助吗?